ROOT logo
/*
  macro to extract the OCDB entries

  input: CalibObjects.root
  ouput: TimeGain and TimeVdrift calibration objects for TPC and TRD

  Example:
  .L $ALICE_ROOT/PWGPP/CalibMacros/CPass1/makeOCDB.C
  makeOCDB("105160");

*/

//__________________________________________________________________

void makeOCDB(TString runNumberString, TString ocdbStorage = "")
{
  makeOCDB("CalibObjects.root", "ALL", runNumberString, ocdbStorage);
}

//___________________________________________________________________

void makeOCDB(const Char_t *filename, TString component, TString runNumberString, TString ocdbStorage = "")
{
  //
  // extract TPC OCDB entries
  //
  gROOT->Macro("$ALICE_ROOT/PWGPP/CalibMacros/CPass1/LoadLibraries.C");
  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/CalibMacros/CPass1/ConfigCalibTrain.C");

  // switch off log info
  AliLog::SetClassDebugLevel("AliESDEvent",0);

  // config GRP
  Int_t runNumber = runNumberString.Atoi();
  printf("runNumber from runCalibTrain = %d\n",runNumber);

  /* configCalibTrain only if needed */
  if (component == "TPC" || component == "TRD" || component == "ALL")
    ConfigCalibTrain(runNumber, "raw://");
  else
    AliCDBManager::Instance()->SetDefaultStorage("raw://");
  
  // Steering Tasks - set output storage
  // DefaultStorage set already before - in ConfigCalibTrain.C
//ocdbStorage+="?se=ALICE::CERN::SE";

  AliCDBManager::Instance()->SetSpecificStorage("*/*/*",ocdbStorage.Data());

  // set OCDB storage
  if (ocdbStorage.Length()==0) ocdbStorage+="local://"+gSystem->GetFromPipe("pwd")+"/OCDB";

  
  /* makeOCDB for selected component */
  if (component == "TPC" || component == "ALL")
    makeOCDB_TPC(filename, runNumber, ocdbStorage);
  if (component == "TOF" || component == "ALL")
    makeOCDB_TOF(filename, runNumber, ocdbStorage);
  if (component == "T0" || component == "ALL")
    makeOCDB_T0(filename, runNumber, ocdbStorage);
  if (component == "TRD" || component == "ALL")
    makeOCDB_TRD(filename, runNumber, ocdbStorage);
  if (component == "MeanVertex" || component == "ALL")
    makeOCDB_MeanVertex(filename, runNumber, ocdbStorage);
  
  gSystem->Exec(Form("touch %s_ocdb_done", component.Data()));
  return;
}

//___________________________________________________________________

void makeOCDB_TPC(const Char_t *filename, Int_t runNumber, TString ocdbStorage)
{

  // TPC part
  TFile fcalib(filename);
  AliTPCPreprocessorOffline proces;

  // switch on parameter validation
  proces.SetTimeGainRange(0.5,3.0);
  proces.SwitchOnValidation();

  // Make timegain calibration
  //proces.CalibTimeGain(filename, runNumber,AliCDBRunRange::Infinity(),ocdbStorage);
  proces.CalibTimeGain(filename, runNumber,runNumber,ocdbStorage);

  // Make vdrift calibration
  //proces.CalibTimeVdrift(filename,runNumber,AliCDBRunRange::Infinity(),ocdbStorage);
  proces.CalibTimeVdrift(filename,runNumber,runNumber,ocdbStorage);

}

//___________________________________________________________________

void makeOCDB_TOF(const Char_t *filename, Int_t runNumber, TString ocdbStorage)
{
  AliTOFAnalysisTaskCalibPass0 calibTask;
  Printf("Calibrating TOF");
  calibTask.ProcessOutput(filename, ocdbStorage);
}

//___________________________________________________________________

void makeOCDB_T0(const Char_t *filename, Int_t runNumber, TString ocdbStorage)
{
  // T0 part
  AliT0PreprocessorOffline procesT0;
  // Make  calibration of channels offset
  procesT0.Process(filename,runNumber, runNumber, ocdbStorage);
}

//___________________________________________________________________

void makeOCDB_TRD(const Char_t *filename, Int_t runNumber, TString ocdbStorage)
{
   //TRD part
   AliTRDPreprocessorOffline procestrd;
   procestrd.SetLinearFitForVdrift(kTRUE);
   procestrd.SetMinStatsVdriftT0PH(600*10);
   procestrd.SetMinStatsVdriftLinear(50);
   procestrd.SetMinStatsGain(600);
   procestrd.Init(filename);
   Int_t versionVdriftUsed = procestrd.GetVersionVdriftUsed();
   Int_t subversionVdriftUsed = procestrd.GetSubVersionVdriftUsed();
   Int_t versionGainUsed = procestrd.GetVersionGainUsed();
   Int_t subversionGainUsed = procestrd.GetSubVersionGainUsed();
   Int_t versionExBUsed = procestrd.GetVersionExBUsed();
   Int_t subversionExBUsed = procestrd.GetSubVersionExBUsed();
   printf("version and subversion vdrift %d and %d\n",versionVdriftUsed,subversionVdriftUsed);
   printf("version and subversion gain %d and %d\n",versionGainUsed,subversionGainUsed);
   printf("version and subversion exb %d and %d\n",versionExBUsed,subversionExBUsed);
   procestrd.Process(filename,runNumber,runNumber,ocdbStorage);
   Int_t trdstatus = procestrd.GetStatus();

}

//___________________________________________________________________

void makeOCDB_MeanVertex(const Char_t *filename, Int_t runNumber, TString ocdbStorage)
{
  //Mean Vertex
  AliMeanVertexPreprocessorOffline procesMeanVtx;
  procesMeanVtx.ProcessOutput(filename, ocdbStorage, runNumber);
}

//___________________________________________________________________

 makeOCDB.byComponent.C:1
 makeOCDB.byComponent.C:2
 makeOCDB.byComponent.C:3
 makeOCDB.byComponent.C:4
 makeOCDB.byComponent.C:5
 makeOCDB.byComponent.C:6
 makeOCDB.byComponent.C:7
 makeOCDB.byComponent.C:8
 makeOCDB.byComponent.C:9
 makeOCDB.byComponent.C:10
 makeOCDB.byComponent.C:11
 makeOCDB.byComponent.C:12
 makeOCDB.byComponent.C:13
 makeOCDB.byComponent.C:14
 makeOCDB.byComponent.C:15
 makeOCDB.byComponent.C:16
 makeOCDB.byComponent.C:17
 makeOCDB.byComponent.C:18
 makeOCDB.byComponent.C:19
 makeOCDB.byComponent.C:20
 makeOCDB.byComponent.C:21
 makeOCDB.byComponent.C:22
 makeOCDB.byComponent.C:23
 makeOCDB.byComponent.C:24
 makeOCDB.byComponent.C:25
 makeOCDB.byComponent.C:26
 makeOCDB.byComponent.C:27
 makeOCDB.byComponent.C:28
 makeOCDB.byComponent.C:29
 makeOCDB.byComponent.C:30
 makeOCDB.byComponent.C:31
 makeOCDB.byComponent.C:32
 makeOCDB.byComponent.C:33
 makeOCDB.byComponent.C:34
 makeOCDB.byComponent.C:35
 makeOCDB.byComponent.C:36
 makeOCDB.byComponent.C:37
 makeOCDB.byComponent.C:38
 makeOCDB.byComponent.C:39
 makeOCDB.byComponent.C:40
 makeOCDB.byComponent.C:41
 makeOCDB.byComponent.C:42
 makeOCDB.byComponent.C:43
 makeOCDB.byComponent.C:44
 makeOCDB.byComponent.C:45
 makeOCDB.byComponent.C:46
 makeOCDB.byComponent.C:47
 makeOCDB.byComponent.C:48
 makeOCDB.byComponent.C:49
 makeOCDB.byComponent.C:50
 makeOCDB.byComponent.C:51
 makeOCDB.byComponent.C:52
 makeOCDB.byComponent.C:53
 makeOCDB.byComponent.C:54
 makeOCDB.byComponent.C:55
 makeOCDB.byComponent.C:56
 makeOCDB.byComponent.C:57
 makeOCDB.byComponent.C:58
 makeOCDB.byComponent.C:59
 makeOCDB.byComponent.C:60
 makeOCDB.byComponent.C:61
 makeOCDB.byComponent.C:62
 makeOCDB.byComponent.C:63
 makeOCDB.byComponent.C:64
 makeOCDB.byComponent.C:65
 makeOCDB.byComponent.C:66
 makeOCDB.byComponent.C:67
 makeOCDB.byComponent.C:68
 makeOCDB.byComponent.C:69
 makeOCDB.byComponent.C:70
 makeOCDB.byComponent.C:71
 makeOCDB.byComponent.C:72
 makeOCDB.byComponent.C:73
 makeOCDB.byComponent.C:74
 makeOCDB.byComponent.C:75
 makeOCDB.byComponent.C:76
 makeOCDB.byComponent.C:77
 makeOCDB.byComponent.C:78
 makeOCDB.byComponent.C:79
 makeOCDB.byComponent.C:80
 makeOCDB.byComponent.C:81
 makeOCDB.byComponent.C:82
 makeOCDB.byComponent.C:83
 makeOCDB.byComponent.C:84
 makeOCDB.byComponent.C:85
 makeOCDB.byComponent.C:86
 makeOCDB.byComponent.C:87
 makeOCDB.byComponent.C:88
 makeOCDB.byComponent.C:89
 makeOCDB.byComponent.C:90
 makeOCDB.byComponent.C:91
 makeOCDB.byComponent.C:92
 makeOCDB.byComponent.C:93
 makeOCDB.byComponent.C:94
 makeOCDB.byComponent.C:95
 makeOCDB.byComponent.C:96
 makeOCDB.byComponent.C:97
 makeOCDB.byComponent.C:98
 makeOCDB.byComponent.C:99
 makeOCDB.byComponent.C:100
 makeOCDB.byComponent.C:101
 makeOCDB.byComponent.C:102
 makeOCDB.byComponent.C:103
 makeOCDB.byComponent.C:104
 makeOCDB.byComponent.C:105
 makeOCDB.byComponent.C:106
 makeOCDB.byComponent.C:107
 makeOCDB.byComponent.C:108
 makeOCDB.byComponent.C:109
 makeOCDB.byComponent.C:110
 makeOCDB.byComponent.C:111
 makeOCDB.byComponent.C:112
 makeOCDB.byComponent.C:113
 makeOCDB.byComponent.C:114
 makeOCDB.byComponent.C:115
 makeOCDB.byComponent.C:116
 makeOCDB.byComponent.C:117
 makeOCDB.byComponent.C:118
 makeOCDB.byComponent.C:119
 makeOCDB.byComponent.C:120
 makeOCDB.byComponent.C:121
 makeOCDB.byComponent.C:122
 makeOCDB.byComponent.C:123
 makeOCDB.byComponent.C:124
 makeOCDB.byComponent.C:125
 makeOCDB.byComponent.C:126
 makeOCDB.byComponent.C:127
 makeOCDB.byComponent.C:128
 makeOCDB.byComponent.C:129
 makeOCDB.byComponent.C:130
 makeOCDB.byComponent.C:131
 makeOCDB.byComponent.C:132
 makeOCDB.byComponent.C:133
 makeOCDB.byComponent.C:134
 makeOCDB.byComponent.C:135
 makeOCDB.byComponent.C:136
 makeOCDB.byComponent.C:137
 makeOCDB.byComponent.C:138
 makeOCDB.byComponent.C:139
 makeOCDB.byComponent.C:140
 makeOCDB.byComponent.C:141
 makeOCDB.byComponent.C:142
 makeOCDB.byComponent.C:143
 makeOCDB.byComponent.C:144
 makeOCDB.byComponent.C:145
 makeOCDB.byComponent.C:146
 makeOCDB.byComponent.C:147