3 * Example macro to run an HLT analysis task for comparing the offline
4 * with the HLT esd tree on the GRID.
6 * The output is a root file containing the histograms defined in the
7 * analysis task. There is one output file per detector.
11 * aliroot -q compare-HLT-offline-grid.C'("000115322","/alice/data/2010/LHC10b","ESDcomparison","output","full","global")'
14 * - GRID input directory, where you define in which LHC period the run number belongs to
15 * - GRID working directory, where the .xml, .jdl and the task are uploaded (you have to create it yourself in advance)
16 * - GRID output directory with respect to the working one, where the output files of the task are located (you have to create it yourself in advance)
17 * - run in full mode, i.e. completely on the GRID with all the chunks of the run processed
18 * - specify the analysis task you want to run
19 * - specify whether you are interested only in HLT triggered events
22 * @author Hege.Erdal@student.uib.no, Kalliopi.Kanaki@ift.uib.no
25 void compare_HLT_offline_grid(TString runNumber,
27 TString gridWorkingDir,
28 TString gridOutputDir,
29 const char* mode = "full",
30 const char* detectorTask="global",
31 TString taskFolder="$ALICE_ROOT/HLT/QA/tasks/",
32 bool fUseHLTTrigger=kFALSE
39 //gSystem->Load("libTree");
40 gSystem->Load("libCore");
41 gSystem->Load("libGeom");
42 gSystem->Load("libVMC");
43 gSystem->Load("libPhysics");
45 //----------- Loading the required libraries ---------//
47 gSystem->Load("libSTEERBase");
48 gSystem->Load("libESD");
49 gSystem->Load("libAOD");
50 gSystem->Load("libANALYSIS");
51 gSystem->Load("libANALYSISalice");
52 gSystem->Load("libHLTbase");
53 gROOT->ProcessLine(".include $ALICE_ROOT/include");
54 gSystem->AddIncludePath("-I$ALICE_ROOT/HLT/BASE -I.")
55 //gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
58 Bool_t bAll=kFALSE, bTPC=kFALSE, bPHOS=kFALSE, bEMCAL=kFALSE, bITS=kFALSE, bGLOBAL=kFALSE, bD0=kFALSE, bCB=kFALSE;
60 TString allArgs = detectorTask;
63 TObjArray *pTokens = allArgs.Tokenize(" ");
65 for(int i=0; i<pTokens->GetEntries(); i++){
66 argument=((TObjString*)pTokens->At(i))->GetString();
67 if(argument.IsNull()) continue;
69 if(argument.CompareTo("phos", TString::kIgnoreCase)==0){
73 if(argument.CompareTo("emcal", TString::kIgnoreCase)==0){
77 if(argument.CompareTo("global", TString::kIgnoreCase)==0){
81 if(argument.CompareTo("D0", TString::kIgnoreCase)==0){
85 if(argument.CompareTo("cb", TString::kIgnoreCase)==0){
89 if(argument.CompareTo("all",TString::kIgnoreCase)==0){
100 //-------- Make the analysis manager ---------------//
102 AliAnalysisManager *mgr = new AliAnalysisManager("TestManager");
103 AliESDInputHandler *esdH = new AliESDInputHandler;
105 esdH->SetReadFriends(kFALSE);
106 mgr->SetInputEventHandler(esdH);
107 mgr->SetNSysInfo(1000);
109 //To use Physics Selection
110 //AliPhysicsSelectionTask *physSelTask = AddTaskPhysicsSelection(kFALSE,kTRUE);
112 // Create and configure the alien handler plugin
113 gROOT->LoadMacro("CreateAlienHandler.C");
114 AliAnalysisGrid *alienHandler = CreateAlienHandler(runNumber, dataDir, gridWorkingDir, gridOutputDir, mode, detectorTask);
115 if (!alienHandler) return;
117 // Connect plugin to the analysis manager
118 mgr->SetGridHandler(alienHandler);
120 //-------------- Compile the analysis tasks ---------- //
121 if(bPHOS && bEMCAL) {
122 gSystem->Load("libHLTbase");
123 gSystem->Load("libAliHLTUtil");
124 gSystem->Load("libAliHLTGlobal");
125 TString strTask1("AliAnalysisTaskHLTCalo.cxx+");
126 TString strTask2("AliAnalysisTaskHLTPHOS.cxx+");
127 TString strTask3("AliAnalysisTaskHLTEMCAL.cxx+");
128 gROOT->LoadMacro(taskFolder+strTask1);
129 gROOT->LoadMacro(taskFolder+strTask2);
130 gROOT->LoadMacro(taskFolder+strTask3);
133 gSystem->Load("libHLTbase");
134 gSystem->Load("libAliHLTUtil");
135 gSystem->Load("libAliHLTGlobal");
136 TString strTask1("AliAnalysisTaskHLTCalo.cxx+");
137 TString strTask2("AliAnalysisTaskHLTPHOS.cxx+");
138 gROOT->LoadMacro(taskFolder+strTask1);
139 gROOT->LoadMacro(taskFolder+strTask2);
142 gSystem->Load("libHLTbase");
143 gSystem->Load("libAliHLTUtil");
144 gSystem->Load("libAliHLTGlobal");
145 TString strTask1("AliAnalysisTaskHLTCalo.cxx+");
146 TString strTask2("AliAnalysisTaskHLTEMCAL.cxx+");
147 gROOT->LoadMacro(taskFolder+strTask1);
148 gROOT->LoadMacro(taskFolder+strTask2);
151 TString strTask("AliAnalysisTaskHLT.cxx+");
152 gROOT->LoadMacro(taskFolder+strTask);
155 TString strTask("AliAnalysisTaskD0Trigger.cxx+");
156 gROOT->LoadMacro(taskFolder+strTask);
159 TString strTask("AliAnalysisTaskHLTCentralBarrel.cxx+");
160 gROOT->LoadMacro(taskFolder+strTask);
163 //-------------- define the tasks ------------//
166 AliAnalysisTaskHLTPHOS *taskPHOS = new AliAnalysisTaskHLTPHOS("offhlt_comparison_PHOS");
167 mgr->AddTask(taskPHOS);
168 AliAnalysisDataContainer *coutputPHOS = mgr->CreateContainer("phos_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-PHOS-comparison.root");
169 mgr->ConnectInput(taskPHOS,0,mgr->GetCommonInputContainer());
170 mgr->ConnectOutput(taskPHOS,1,coutputPHOS);
173 AliAnalysisTaskHLTEMCAL *taskEMCAL = new AliAnalysisTaskHLTEMCAL("offhlt_comparison_EMCAL");
174 mgr->AddTask(taskEMCAL);
175 AliAnalysisDataContainer *coutputEMCAL = mgr->CreateContainer("emcal_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-EMCAL-comparison.root");
176 mgr->ConnectInput(taskEMCAL,0,mgr->GetCommonInputContainer());
177 mgr->ConnectOutput(taskEMCAL,1,coutputEMCAL);
181 AliAnalysisTaskHLT *taskGLOBAL = new AliAnalysisTaskHLT("offhlt_comparison_GLOBAL");
182 taskGLOBAL->SetUseHLTTriggerDecision(fUseHLTTrigger);
183 if(fUseHLTTrigger==kTRUE) printf("\n\nOnly HLT triggered events will be used to fill the distributions for task %s.\n\n", taskGLOBAL->GetName());
184 //taskGLOBAL->SelectCollisionCandidates();
185 mgr->AddTask(taskGLOBAL);
186 if(fUseHLTTrigger==kFALSE)
187 AliAnalysisDataContainer *coutputGLOBAL = mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-GLOBAL-comparison.root");
189 AliAnalysisDataContainer *coutputGLOBAL = mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-GLOBAL-comparison_triggered.root");
190 mgr->ConnectInput(taskGLOBAL,0,mgr->GetCommonInputContainer());
191 mgr->ConnectOutput(taskGLOBAL,1,coutputGLOBAL);
194 float cuts[7]={0.5,0.04,0.7,0.8,0.05,-0.00025,0.7};
195 AliAnalysisTaskD0Trigger *taskD0 = new AliAnalysisTaskD0Trigger("offhlt_comparison_D0_Trigger",cuts);
196 mgr->AddTask(taskD0);
197 AliAnalysisDataContainer *coutputD0 = mgr->CreateContainer("D0_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-D0-comparison.root");
198 mgr->ConnectInput(taskD0,0,mgr->GetCommonInputContainer());
199 mgr->ConnectOutput(taskD0,1,coutputD0);
202 AliAnalysisTaskHLTCentralBarrel *taskCB = new AliAnalysisTaskHLTCentralBarrel("offhlt_comparison_CB");
203 mgr->AddTask(taskCB);
204 AliAnalysisDataContainer *coutputCB = mgr->CreateContainer("esd_thnsparse",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-CentralBarrel-comparison.root");
205 mgr->ConnectInput(taskCB,0,mgr->GetCommonInputContainer());
206 mgr->ConnectOutput(taskCB,1,coutputCB);
208 // Enable debug printouts
209 mgr->SetDebugLevel(2);
211 if (!mgr->InitAnalysis()) return;
213 mgr->StartAnalysis("grid");
219 void compare_HLT_offline_grid(){
221 cout << " Usage examples:" << endl;
222 cout << " compare-HLT-offline-grid.C'(runNumber, dataDir, gridWorkingDir, gridOutputDir, mode, taskOption, taskFolder, fUseHLTTrigger)' 2>&1 | tee log" << endl;
223 cout << " compare-HLT-offline-grid.C'(\"000115322\",\"/alice/data/2010/LHC10b\",\"ESDcomparison\",\"output\",\"full\",\"global\",\"./\",kTRUE)' 2>&1 | tee log" << endl;