1 void runProtonAnalysis(Bool_t kAnalyzeMC = kTRUE,
2 const char* esdAnalysisType = "Hybrid",
3 const char* pidMode = "Ratio",
4 Bool_t kUseOnlineTrigger = kTRUE,
5 Bool_t kUseOfflineTrigger = kTRUE,
6 Bool_t kRunQA = kFALSE) {
7 //Macro to run the proton analysis tested for local, proof & GRID.
8 //Local: Takes six arguments, the analysis mode, a boolean to define the ESD
9 // analysis of MC data, the type of the ESD analysis, the PID mode,
10 // the run number for the offline trigger in case of real data
11 // analysis and the path where the tag and ESD or AOD files reside.
12 //Interactive: Takes six arguments, the analysis mode, a boolean to define
13 // the ESD analysis of MC data, the type of the ESD analysis,
14 // the PID mode, the run number for the offline trigger in case
15 // of real data analysis and the name of the collection of tag
17 //Batch: Takes six arguments, the analysis mode, a boolean to define
18 // the ESD analysis of MC data, the type of the ESD analysis,
19 // the PID mode, the run number for the offline trigger in case
20 // of real data analysis and the name of the collection file with
21 // the event list for each file.
22 //Proof: Takes eight arguments, the analysis mode, a boolean to define
23 // the ESD analysis of MC data, the type of the ESD analysis,
24 // the PID mode, the run number for the offline trigger in case
25 // of real data analysis, the number of events to be analyzed,
26 // the event number from where we start the analysis and the dataset
27 //========================================================================
28 //Analysis mode can be: "MC", "ESD", "AOD"
29 //ESD analysis type can be one of the three: "TPC", "Hybrid", "Global"
30 //PID mode can be one of the four: "Bayesian" (standard Bayesian approach)
31 // "Ratio" (ratio of measured over expected/theoretical dE/dx a la STAR)
32 // "Sigma" (N-sigma area around the fitted dE/dx vs P band)
39 pidMode, kUseOnlineTrigger,kUseOfflineTrigger,
41 "/home/pchrist/ALICE/Baryons/Data/104070");*/
42 //runInteractive("ESD", kAnalyzeMC, esdAnalysisType, pidMode, kUseOnlineTrigger, kUseOfflineTrigger, kRunQA, "tag.xml");
43 //runBatch("ESD", kAnalyzeMC, esdAnalysisType, pidMode, kUseOnlineTrigger, kUseOfflineTrigger, kRunQA, "wn.xml");
44 runProof("ESD", kAnalyzeMC, esdAnalysisType, pidMode, kUseOnlineTrigger,
45 kUseOfflineTrigger, kRunQA,
46 500000,0,"/COMMON/COMMON/LHC10a8_run104867_8#esdTree");
52 //_________________________________________________//
53 void runLocal(const char* mode = "ESD",
54 Bool_t kAnalyzeMC = kTRUE,
55 const char* analysisType = 0x0,
56 const char* pidMode = 0x0,
57 Bool_t kUseOnlineTrigger = kTRUE,
58 Bool_t kUseOfflineTrigger = kTRUE,
59 Bool_t kRunQA = kFALSE,
60 const char* path = "/home/pchrist/ALICE/Alien/Tutorial/November2007/Tags") {
62 TString cutFilename = "ListOfCuts."; cutFilename += mode;
63 TString outputFilename = "Protons."; outputFilename += mode;
65 cutFilename += "."; cutFilename += analysisType;
66 outputFilename += "."; outputFilename += analysisType;
69 cutFilename += "."; cutFilename += pidMode;
70 outputFilename += "."; outputFilename += pidMode;
72 cutFilename += ".root";
73 outputFilename += ".root";
75 //____________________________________________________//
76 //_____________Setting up the par files_______________//
77 //____________________________________________________//
78 setupPar("STEERBase");
79 gSystem->Load("libSTEERBase.so");
81 gSystem->Load("libVMC.so");
82 gSystem->Load("libESD.so");
84 gSystem->Load("libAOD.so");
86 gSystem->Load("libANALYSIS.so");
87 setupPar("ANALYSISalice");
88 gSystem->Load("libANALYSISalice.so");
90 gSystem->Load("libCORRFW.so");
91 setupPar("PWG2spectra");
92 gSystem->Load("libPWG2spectra.so");
93 //____________________________________________________//
95 //____________________________________________//
96 AliTagAnalysis *tagAnalysis = new AliTagAnalysis("ESD");
97 tagAnalysis->ChainLocalTags(path);
99 AliRunTagCuts *runCuts = new AliRunTagCuts();
100 AliLHCTagCuts *lhcCuts = new AliLHCTagCuts();
101 AliDetectorTagCuts *detCuts = new AliDetectorTagCuts();
102 AliEventTagCuts *evCuts = new AliEventTagCuts();
105 chain = tagAnalysis->QueryTags(runCuts,lhcCuts,detCuts,evCuts);
106 chain->SetBranchStatus("*Calo*",0);
108 //____________________________________________//
109 gROOT->LoadMacro("configProtonAnalysis.C");
110 AliProtonAnalysis *analysis = GetProtonAnalysisObject(mode,kAnalyzeMC,
116 //____________________________________________//
117 // Make the analysis manager
118 AliAnalysisManager *mgr = new AliAnalysisManager("protonAnalysisManager");
119 AliVEventHandler* esdH = new AliESDInputHandler;
120 mgr->SetInputEventHandler(esdH);
122 AliMCEventHandler *mc = new AliMCEventHandler();
123 mgr->SetMCtruthEventHandler(mc);
126 //____________________________________________//
127 //Create the proton task
128 AliAnalysisTaskProtons *taskProtons = new AliAnalysisTaskProtons("TaskProtons");
129 taskProtons->SetAnalysisObject(analysis);
130 mgr->AddTask(taskProtons);
132 // Create containers for input/output
133 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
134 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("outputList",
136 AliAnalysisManager::kOutputContainer,
137 outputFilename.Data());
138 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("outputQAList",
140 AliAnalysisManager::kOutputContainer,
141 outputFilename.Data());
142 /*AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("cutCanvas",
144 AliAnalysisManager::kOutputContainer,
145 outputFilename.Data());*/
147 //____________________________________________//
148 mgr->ConnectInput(taskProtons,0,cinput1);
149 mgr->ConnectOutput(taskProtons,0,coutput1);
150 mgr->ConnectOutput(taskProtons,1,coutput2);
151 //mgr->ConnectOutput(taskProtons,2,coutput3);
152 if (!mgr->InitAnalysis()) return;
154 mgr->StartAnalysis("local",chain);
157 //_________________________________________________//
158 void runInteractive(const char* mode = "ESD",
159 Bool_t kAnalyzeMC = kTRUE,
160 const char* analysisType = 0x0,
161 const char* pidMode = 0x0,
162 Bool_t kUseOnlineTrigger = kTRUE,
163 Bool_t kUseOfflineTrigger = kTRUE,
164 Bool_t kRunQA = kFALSE,
165 const char* collectionName = "tag.xml") {
166 gSystem->Load("libProofPlayer.so");
168 TString smode = mode;
169 TString cutFilename = "ListOfCuts."; cutFilename += mode;
170 TString outputFilename = "Protons."; outputFilename += mode;
172 cutFilename += "."; cutFilename += analysisType;
173 outputFilename += "."; outputFilename += analysisType;
176 cutFilename += "."; cutFilename += pidMode;
177 outputFilename += "."; outputFilename += pidMode;
179 cutFilename += ".root";
180 outputFilename += ".root";
182 printf("*** Connect to AliEn ***\n");
183 TGrid::Connect("alien://");
185 //____________________________________________________//
186 //_____________Setting up the par files_______________//
187 //____________________________________________________//
188 setupPar("STEERBase");
189 gSystem->Load("libSTEERBase.so");
191 gSystem->Load("libVMC.so");
192 gSystem->Load("libESD.so");
194 gSystem->Load("libAOD.so");
195 setupPar("ANALYSIS");
196 gSystem->Load("libANALYSIS.so");
197 setupPar("ANALYSISalice");
198 gSystem->Load("libANALYSISalice.so");
200 gSystem->Load("libCORRFW.so");
201 setupPar("PWG2spectra");
202 gSystem->Load("libPWG2spectra.so");
203 //____________________________________________________//
205 //____________________________________________//
206 AliTagAnalysis *tagAnalysis = new AliTagAnalysis("ESD");
208 AliRunTagCuts *runCuts = new AliRunTagCuts();
209 AliLHCTagCuts *lhcCuts = new AliLHCTagCuts();
210 AliDetectorTagCuts *detCuts = new AliDetectorTagCuts();
211 AliEventTagCuts *evCuts = new AliEventTagCuts();
214 TAlienCollection* coll = TAlienCollection::Open(collectionName);
215 TGridResult* TagResult = coll->GetGridResult("",0,0);
216 tagAnalysis->ChainGridTags(TagResult);
218 chain = tagAnalysis->QueryTags(runCuts,lhcCuts,detCuts,evCuts);
219 chain->SetBranchStatus("*Calo*",0);
221 //____________________________________________//
222 gROOT->LoadMacro("configProtonAnalysis.C");
223 AliProtonAnalysis *analysis = GetProtonAnalysisObject(mode,kAnalyzeMC,
229 //runNumberForOfflineTtrigger);
230 //____________________________________________//
231 // Make the analysis manager
232 AliAnalysisManager *mgr = new AliAnalysisManager("protonAnalysisManager");
233 AliVEventHandler* esdH = new AliESDInputHandler;
234 mgr->SetInputEventHandler(esdH);
236 AliMCEventHandler *mc = new AliMCEventHandler();
237 mgr->SetMCtruthEventHandler(mc);
240 //____________________________________________//
241 //Create the proton task
242 AliAnalysisTaskProtons *taskProtons = new AliAnalysisTaskProtons("TaskProtons");
243 taskProtons->SetAnalysisObject(analysis);
244 mgr->AddTask(taskProtons);
246 // Create containers for input/output
247 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
248 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("outputList",
250 AliAnalysisManager::kOutputContainer,
251 outputFilename.Data());
252 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("outputQAList",
254 AliAnalysisManager::kOutputContainer,
255 outputFilename.Data());
256 /*AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("cutCanvas",
258 AliAnalysisManager::kOutputContainer,
259 outputFilename.Data());*/
261 //____________________________________________//
262 mgr->ConnectInput(taskProtons,0,cinput1);
263 mgr->ConnectOutput(taskProtons,0,coutput1);
264 mgr->ConnectOutput(taskProtons,1,coutput2);
265 //mgr->ConnectOutput(taskProtons,2,coutput3);
266 if (!mgr->InitAnalysis()) return;
268 mgr->StartAnalysis("local",chain);
271 //_________________________________________________//
272 void runBatch(const char* mode = "ESD",
273 Bool_t kAnalyzeMC = kTRUE,
274 const char* analysisType = 0x0,
275 const char* pidMode = 0x0,
276 Bool_t kUseOnlineTrigger = kTRUE,
277 Bool_t kUseOfflineTrigger = kTRUE,
278 Bool_t kRunQA = kFALSE,
279 const char *collectionfile = "wn.xml") {
280 TString smode = mode;
281 TString cutFilename = "ListOfCuts."; cutFilename += mode;
282 TString outputFilename = "Protons."; outputFilename += mode;
284 cutFilename += "."; cutFilename += analysisType;
285 outputFilename += "."; outputFilename += analysisType;
288 cutFilename += "."; cutFilename += pidMode;
289 outputFilename += "."; outputFilename += pidMode;
291 cutFilename += ".root";
292 outputFilename += ".root";
294 printf("*** Connect to AliEn ***\n");
295 TGrid::Connect("alien://");
296 gSystem->Load("libProofPlayer.so");
298 //____________________________________________________//
299 //_____________Setting up the par files_______________//
300 //____________________________________________________//
301 setupPar("STEERBase");
302 gSystem->Load("libSTEERBase.so");
304 gSystem->Load("libVMC.so");
305 gSystem->Load("libESD.so");
307 gSystem->Load("libAOD.so");
308 setupPar("ANALYSIS");
309 gSystem->Load("libANALYSIS.so");
310 setupPar("ANALYSISalice");
311 gSystem->Load("libANALYSISalice.so");
313 gSystem->Load("libCORRFW.so");
314 setupPar("PWG2spectra");
315 gSystem->Load("libPWG2spectra.so");
316 //____________________________________________________//
318 //____________________________________________//
319 //Usage of event tags
320 AliTagAnalysis *tagAnalysis = new AliTagAnalysis();
322 chain = tagAnalysis->GetChainFromCollection(collectionfile,"esdTree");
323 chain->SetBranchStatus("*Calo*",0);
325 //____________________________________________//
326 gROOT->LoadMacro("configProtonAnalysis.C");
327 AliProtonAnalysis *analysis = GetProtonAnalysisObject(mode,kAnalyzeMC,
333 //runNumberForOfflineTtrigger);
334 //____________________________________________//
335 // Make the analysis manager
336 AliAnalysisManager *mgr = new AliAnalysisManager("protonAnalysisManager");
337 AliVEventHandler* esdH = new AliESDInputHandler;
338 mgr->SetInputEventHandler(esdH);
340 AliMCEventHandler *mc = new AliMCEventHandler();
341 mgr->SetMCtruthEventHandler(mc);
344 //____________________________________________//
345 //Create the proton task
346 AliAnalysisTaskProtons *taskProtons = new AliAnalysisTaskProtons("TaskProtons");
347 taskProtons->SetAnalysisObject(analysis);
348 mgr->AddTask(taskProtons);
350 // Create containers for input/output
351 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
352 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("outputList",
354 AliAnalysisManager::kOutputContainer,
355 outputFilename.Data());
356 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("outputQAList",
358 AliAnalysisManager::kOutputContainer,
359 outputFilename.Data());
360 /*AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("cutCanvas",
362 AliAnalysisManager::kOutputContainer,
363 outputFilename.Data());*/
365 //____________________________________________//
366 mgr->ConnectInput(taskProtons,0,cinput1);
367 mgr->ConnectOutput(taskProtons,0,coutput1);
368 mgr->ConnectOutput(taskProtons,1,coutput2);
369 //mgr->ConnectOutput(taskProtons,2,coutput3);
370 if (!mgr->InitAnalysis()) return;
372 mgr->StartAnalysis("grid",chain);
375 //_________________________________________________//
376 void runProof(const char* mode = "ESD",
377 Bool_t kAnalyzeMC = kTRUE,
378 const char* analysisType = 0x0,
379 const char* pidMode = 0x0,
380 Bool_t kUseOnlineTrigger = kTRUE,
381 Bool_t kUseOfflineTrigger = kTRUE,
382 Bool_t kRunQA = kFALSE,
383 Int_t stats = 0, Int_t startingPoint = 0,
384 const char* dataset = 0x0) {
385 TString smode = mode;
386 TString cutFilename = "ListOfCuts."; cutFilename += mode;
387 TString outputFilename = "Protons."; outputFilename += mode;
389 cutFilename += "."; cutFilename += analysisType;
390 outputFilename += "."; outputFilename += analysisType;
393 cutFilename += "."; cutFilename += pidMode;
394 outputFilename += "."; outputFilename += pidMode;
396 cutFilename += ".root";
397 outputFilename += ".root";
399 gEnv->SetValue("XSec.GSI.DelegProxy","2");
400 printf("****** Connect to PROOF *******\n");
401 TProof::Open("alicecaf.cern.ch");
402 gProof->SetParallel();
404 // Enable the Analysis Package
405 gProof->UploadPackage("STEERBase.par");
406 gProof->EnablePackage("STEERBase");
407 gProof->UploadPackage("ESD.par");
408 gProof->EnablePackage("ESD");
409 gProof->UploadPackage("AOD.par");
410 gProof->EnablePackage("AOD");
411 gProof->UploadPackage("ANALYSIS.par");
412 gProof->EnablePackage("ANALYSIS");
413 gProof->UploadPackage("ANALYSISalice.par");
414 gProof->EnablePackage("ANALYSISalice");
415 gProof->UploadPackage("CORRFW.par");
416 gProof->EnablePackage("CORRFW");
417 gProof->UploadPackage("PWG2spectra.par");
418 gProof->EnablePackage("PWG2spectra");
420 //____________________________________________//
421 gROOT->LoadMacro("configProtonAnalysis.C");
422 AliProtonAnalysis *analysis = GetProtonAnalysisObject(mode,kAnalyzeMC,
428 //____________________________________________//
430 //____________________________________________//
431 // Make the analysis manager
432 AliAnalysisManager *mgr = new AliAnalysisManager("protonAnalysisManager");
433 AliVEventHandler* esdH = new AliESDInputHandler;
434 mgr->SetInputEventHandler(esdH);
436 AliMCEventHandler *mc = new AliMCEventHandler();
437 mgr->SetMCtruthEventHandler(mc);
439 //____________________________________________//
440 //Create the proton task
441 AliAnalysisTaskProtons *taskProtons = new AliAnalysisTaskProtons("TaskProtons");
442 taskProtons->SetAnalysisObject(analysis);
443 mgr->AddTask(taskProtons);
445 // Create containers for input/output
446 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
447 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("outputList",
449 AliAnalysisManager::kOutputContainer,
450 outputFilename.Data());
451 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("outputQAList",
453 AliAnalysisManager::kOutputContainer,
454 outputFilename.Data());
455 /*AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("cutCanvas",
457 AliAnalysisManager::kOutputContainer,
458 outputFilename.Data());*/
460 //____________________________________________//
461 mgr->ConnectInput(taskProtons,0,cinput1);
462 mgr->ConnectOutput(taskProtons,0,coutput1);
463 mgr->ConnectOutput(taskProtons,1,coutput2);
464 //mgr->ConnectOutput(taskProtons,3,coutput3);
465 if (!mgr->InitAnalysis()) return;
469 mgr->StartAnalysis("proof",dataset,stats,startingPoint);
471 // You should get this macro and the txt file from:
472 // http://aliceinfo.cern.ch/Offline/Analysis/CAF/
473 gROOT->LoadMacro("CreateESDChain.C");
475 chain = CreateESDChain("ESD82XX_30K.txt",stats);
476 chain->SetBranchStatus("*Calo*",0);
478 mgr->StartAnalysis("proof",chain);
482 //_________________________________________________//
483 Int_t setupPar(const char* pararchivename) {
487 if (pararchivename) {
488 char processline[1024];
489 sprintf(processline,".! tar xvzf %s.par",pararchivename);
490 gROOT->ProcessLine(processline);
491 const char* ocwd = gSystem->WorkingDirectory();
492 gSystem->ChangeDirectory(pararchivename);
494 // check for BUILD.sh and execute
495 if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
496 printf("*******************************\n");
497 printf("*** Building PAR archive ***\n");
498 printf("*******************************\n");
500 if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
501 Error("runAnalysis","Cannot Build the PAR Archive! - Abort!");
505 // check for SETUP.C and execute
506 if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
507 printf("*******************************\n");
508 printf("*** Setup PAR archive ***\n");
509 printf("*******************************\n");
510 gROOT->Macro("PROOF-INF/SETUP.C");
513 gSystem->ChangeDirectory("../");