ROOT logo
/*
  Template of calibration/filtering macro using ESD:
  - requires AliESDs.root and AliESDfriend.root
  - requires OCDB access (default set to "raw://")
  - requires run number as argument to init OCDB
  - calls LoadLibraries.C, ConfigCalibTrain.C and AddTaskTPCCalib.C macros
  - output AliESDfriends_v1.root with TPC and TRD calibration objects are created

  Example:
  .L $ALICE_ROOT/ANALYSIS/macros/runCalibTrain.C
  runCalibTrain("104892");
*/

void runCalibTrain(Int_t runNumber, const char *inFileName = "AliESDs.root", const char *ocdb="raw://")
{
  //
  // macro to run TPC calibration train 
  //
  AliSysInfo::SetVerbose(kTRUE);
  AliLog::SetGlobalLogLevel(AliLog::kError); 
  gROOT->Macro("$ALICE_ROOT/PWGPP/CalibMacros/CPass1/LoadLibraries.C");
  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/CalibMacros/CPass1/ConfigCalibTrain.C");
  gSystem->SetIncludePath("-I$ALICE_ROOT/include -I$ALICE_ROOT/ANALYSIS"); 
  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/CalibMacros/commonMacros/CleanGeom.C++");

  // detector tasks
  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/CalibMacros/CPass1/AddTaskTPCCalib.C");
  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/CalibMacros/CPass1/AddTaskTRDCalib.C");
  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/CalibMacros/CPass1/AddTOFAnalysisTaskCalibPass0.C");
  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/CalibMacros/CPass1/AddTOFAnalysisTaskCalibTree.C");
  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/CalibMacros/CPass1/AddTaskT0Calib.C");
  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/CalibMacros/CPass1/AddTaskT0Analysis.C");
  //  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/CalibMacros/CPass1/AddTaskMeanVertexCalib.C");
  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/CalibMacros/CPass1/AddTaskSDDCalib.C"); 

  // switch off debug 
  AliLog::SetClassDebugLevel("AliESDEvent",0);
  
  // steering input chain
  TChain *chain = new TChain("esdTree");
  chain->Add(inFileName);

  // config calibration train
  // setting geometry and B-field from GRP
  printf("runNumber from runCalibTrain = %d\n",runNumber);
  printf("ocdb from runCalibTrain = %s\n",ocdb);
  AliSysInfo::AddStamp("BeforeConfiguringCalibTrain");
  ConfigCalibTrain(runNumber, ocdb);
  AliSysInfo::AddStamp("AfterConfiguringCalibTrain");  
  
  if (gROOT->LoadMacro("localOCDBaccessConfig.C")==0) {
    localOCDBaccessConfig();
  }
  
  //
  // check the presence of the detectors
  AliCDBEntry* entry = AliCDBManager::Instance()->Get("GRP/GRP/Data");
  AliGRPObject* grpData = dynamic_cast<AliGRPObject*>(entry->GetObject()); 
  if (!grpData) {printf("Failed to get GRP data for run",runNumber); return;}
  Int_t activeDetectors = grpData->GetDetectorMask(); 
  TString detStr = AliDAQ::ListOfTriggeredDetectors(activeDetectors);
  printf("Detectors in the data:\n%s\n",detStr.Data());

  // setup analysis
  //
  AliAnalysisManager *mgr  = new AliAnalysisManager("ESD to ESD", "Analysis Manager");
  // mgr->SetDebugLevel(3);
  mgr->SetNSysInfo(50);   
  mgr->SetCacheSize(0);

  // Input
  AliESDInputHandler* inpHandler = new AliESDInputHandler();
  inpHandler->SetReadFriends(1);
  mgr->SetInputEventHandler(inpHandler);
  
  // Output
  const char *outFile = "AliESDfriends_v1.root";
  AliESDHandler* esdHandler   = new AliESDHandler();
  mgr->SetOutputEventHandler(esdHandler);
  esdHandler->SetOutputFileName(outFile);
  mgr->SetCommonFileName(outFile);
  //  
  // Detector Tasks
  //
  AliSysInfo::AddStamp("BeforeTPC");
  if ( detStr.Contains("TPC"))  AddTaskTPCCalib(runNumber);

  AliSysInfo::AddStamp("BeforeTRD");
  if ( detStr.Contains("TRD") && detStr.Contains("TPC"))  AddTaskTRDCalib(runNumber);

  AliSysInfo::AddStamp("BeforeTOF");
  if ( detStr.Contains("TOF") && detStr.Contains("TPC"))  {
    AddTOFAnalysisTaskCalibPass0();
    AddTOFAnalysisTaskCalibTree();
  }

  AliSysInfo::AddStamp("BeforeT0");
  if ( detStr.Contains("T0"))   {
    AddTaskT0Calib(runNumber);
    AddTaskT0Analysis();
  }

  //if ( detStr.Contains("ITSSPD")) tMeanVtx = AddTaskMeanVertexCalib();
  //
  Bool_t okTPC = detStr.Contains("TPC");
  Bool_t useTPCcrv=kFALSE;
  Bool_t writeITSTP = kFALSE;
  if (!okTPC) useTPCcrv = kFALSE;
  AliSysInfo::AddStamp("BeforeSDD");
  AliAnalysisTaskITSAlignQA *itsAlign = AddTaskSDDCalib(0,writeITSTP,useTPCcrv);
  if (!okTPC) itsAlign->SetUseITSstandaloneTracks(kTRUE);
  if (grpData->GetL3Current()[0] < 300) itsAlign->SetMinPt(0.001); 
  //
  // dummy task to clean geometry in Terminate >>>>
  CleanGeom* clgmTask = new CleanGeom("cleanGeom");
  mgr->AddTask(clgmTask);
  AliAnalysisDataContainer *dummyInp = mgr->GetCommonInputContainer();
  if (dummyInp) mgr->ConnectInput(clgmTask,0,dummyInp);

  // Run the analysis
  AliSysInfo::AddStamp("BeforeInitAnalysis");
  if (!mgr->InitAnalysis()) {
    printf("Analysis cannot be started, returning\n");
    return;
  }
  
  mgr->PrintStatus();
  AliSysInfo::AddStamp("BeforeStartAnalysis");
  mgr->StartAnalysis("local", chain);
  
  return;
}
 runCalibTrain.C:1
 runCalibTrain.C:2
 runCalibTrain.C:3
 runCalibTrain.C:4
 runCalibTrain.C:5
 runCalibTrain.C:6
 runCalibTrain.C:7
 runCalibTrain.C:8
 runCalibTrain.C:9
 runCalibTrain.C:10
 runCalibTrain.C:11
 runCalibTrain.C:12
 runCalibTrain.C:13
 runCalibTrain.C:14
 runCalibTrain.C:15
 runCalibTrain.C:16
 runCalibTrain.C:17
 runCalibTrain.C:18
 runCalibTrain.C:19
 runCalibTrain.C:20
 runCalibTrain.C:21
 runCalibTrain.C:22
 runCalibTrain.C:23
 runCalibTrain.C:24
 runCalibTrain.C:25
 runCalibTrain.C:26
 runCalibTrain.C:27
 runCalibTrain.C:28
 runCalibTrain.C:29
 runCalibTrain.C:30
 runCalibTrain.C:31
 runCalibTrain.C:32
 runCalibTrain.C:33
 runCalibTrain.C:34
 runCalibTrain.C:35
 runCalibTrain.C:36
 runCalibTrain.C:37
 runCalibTrain.C:38
 runCalibTrain.C:39
 runCalibTrain.C:40
 runCalibTrain.C:41
 runCalibTrain.C:42
 runCalibTrain.C:43
 runCalibTrain.C:44
 runCalibTrain.C:45
 runCalibTrain.C:46
 runCalibTrain.C:47
 runCalibTrain.C:48
 runCalibTrain.C:49
 runCalibTrain.C:50
 runCalibTrain.C:51
 runCalibTrain.C:52
 runCalibTrain.C:53
 runCalibTrain.C:54
 runCalibTrain.C:55
 runCalibTrain.C:56
 runCalibTrain.C:57
 runCalibTrain.C:58
 runCalibTrain.C:59
 runCalibTrain.C:60
 runCalibTrain.C:61
 runCalibTrain.C:62
 runCalibTrain.C:63
 runCalibTrain.C:64
 runCalibTrain.C:65
 runCalibTrain.C:66
 runCalibTrain.C:67
 runCalibTrain.C:68
 runCalibTrain.C:69
 runCalibTrain.C:70
 runCalibTrain.C:71
 runCalibTrain.C:72
 runCalibTrain.C:73
 runCalibTrain.C:74
 runCalibTrain.C:75
 runCalibTrain.C:76
 runCalibTrain.C:77
 runCalibTrain.C:78
 runCalibTrain.C:79
 runCalibTrain.C:80
 runCalibTrain.C:81
 runCalibTrain.C:82
 runCalibTrain.C:83
 runCalibTrain.C:84
 runCalibTrain.C:85
 runCalibTrain.C:86
 runCalibTrain.C:87
 runCalibTrain.C:88
 runCalibTrain.C:89
 runCalibTrain.C:90
 runCalibTrain.C:91
 runCalibTrain.C:92
 runCalibTrain.C:93
 runCalibTrain.C:94
 runCalibTrain.C:95
 runCalibTrain.C:96
 runCalibTrain.C:97
 runCalibTrain.C:98
 runCalibTrain.C:99
 runCalibTrain.C:100
 runCalibTrain.C:101
 runCalibTrain.C:102
 runCalibTrain.C:103
 runCalibTrain.C:104
 runCalibTrain.C:105
 runCalibTrain.C:106
 runCalibTrain.C:107
 runCalibTrain.C:108
 runCalibTrain.C:109
 runCalibTrain.C:110
 runCalibTrain.C:111
 runCalibTrain.C:112
 runCalibTrain.C:113
 runCalibTrain.C:114
 runCalibTrain.C:115
 runCalibTrain.C:116
 runCalibTrain.C:117
 runCalibTrain.C:118
 runCalibTrain.C:119
 runCalibTrain.C:120
 runCalibTrain.C:121
 runCalibTrain.C:122
 runCalibTrain.C:123
 runCalibTrain.C:124
 runCalibTrain.C:125
 runCalibTrain.C:126
 runCalibTrain.C:127
 runCalibTrain.C:128
 runCalibTrain.C:129
 runCalibTrain.C:130
 runCalibTrain.C:131
 runCalibTrain.C:132
 runCalibTrain.C:133