]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/SPECTRA/macros/runProtonAnalysis.C
Adopting for real data + improvments in the macro to visualize the QA and the results
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / macros / runProtonAnalysis.C
CommitLineData
790140ac 1void runProtonAnalysis(Bool_t kAnalyzeMC = kTRUE,
2 const char* esdAnalysisType = "Hybrid",
0ab648ea 3 const char* pidMode = "Bayesian") {
da8c4c1c 4 //Macro to run the proton analysis tested for local, proof & GRID.
0ab648ea 5 //Local: Takes four arguments, the analysis mode, the type of the ESD
6 // analysis, the PID mode and the path where the tag and ESD or
7 // AOD files reside.
8 //Interactive: Takes four arguments, the analysis mode, the type of the ESD
9 // analysis, the PID mode and the name of the collection of tag
10 // files.
11 //Batch: Takes four arguments, the analysis mode, the type of the ESD
12 // analysis, the PID mode and the name of the collection file with
13 // the event list for each file.
14 //Proof: Takes five arguments, the analysis level, the analysis mode in
15 // case of ESD, the PID mode, the number of events and the dataset
16 // name and .
da8c4c1c 17 //Analysis mode can be: "MC", "ESD", "AOD"
18 //ESD analysis type can be one of the three: "TPC", "Hybrid", "Global"
87a55728 19 //PID mode can be one of the four: "Bayesian" (standard Bayesian approach)
0ab648ea 20 // "Ratio" (ratio of measured over expected/theoretical dE/dx a la STAR)
87a55728 21 // "Sigma1" (N-sigma area around the fitted dE/dx vs P band)
22 // "Sigma2" (same as previous but taking into account the No of TPC points)
734d2c12 23 TStopwatch timer;
24 timer.Start();
25
790140ac 26 runLocal("ESD",
27 kAnalyzeMC,
0ab648ea 28 esdAnalysisType,
29 pidMode,
790140ac 30 "/home/pchrist/ALICE/Baryons/Data/104070");
31 //runInteractive("ESD",kAnalyzeMC, esdAnalysisType,pidMode,"tag.xml");
32 //runBatch("ESD",kAnalyzeMC, esdAnalysisType,pidMode,"wn.xml");
33 //runProof("ESD",kAnalyzeMC, esdAnalysisType,pidMode,
34 //500000,0,"/COMMON/COMMON/LHC09d1_0.9TeV_0.5T#esdTree");
47e7cd57 35
734d2c12 36 timer.Stop();
37 timer.Print();
38}
39
40//_________________________________________________//
da8c4c1c 41void runLocal(const char* mode = "ESD",
790140ac 42 Bool_t kAnalyzeMC = kTRUE,
da8c4c1c 43 const char* analysisType = 0x0,
0ab648ea 44 const char* pidMode = 0x0,
da8c4c1c 45 const char* path = "/home/pchrist/ALICE/Alien/Tutorial/November2007/Tags") {
da8c4c1c 46 TString smode = mode;
47 TString outputFilename = "Protons."; outputFilename += mode;
48 if(analysisType) {
49 outputFilename += "."; outputFilename += analysisType;
50 }
51 outputFilename += ".root";
52
734d2c12 53 //____________________________________________________//
da8c4c1c 54 //_____________Setting up the par files_______________//
734d2c12 55 //____________________________________________________//
56 setupPar("STEERBase");
57 gSystem->Load("libSTEERBase.so");
734d2c12 58 setupPar("ESD");
59 gSystem->Load("libVMC.so");
60 gSystem->Load("libESD.so");
734d2c12 61 setupPar("AOD");
62 gSystem->Load("libAOD.so");
734d2c12 63 setupPar("ANALYSIS");
64 gSystem->Load("libANALYSIS.so");
e4358d7f 65 setupPar("ANALYSISalice");
66 gSystem->Load("libANALYSISalice.so");
0ab648ea 67 setupPar("CORRFW");
68 gSystem->Load("libCORRFW.so");
734d2c12 69 setupPar("PWG2spectra");
70 gSystem->Load("libPWG2spectra.so");
da8c4c1c 71 //____________________________________________________//
734d2c12 72
73 //____________________________________________//
e4358d7f 74 AliTagAnalysis *tagAnalysis = new AliTagAnalysis("ESD");
da8c4c1c 75 tagAnalysis->ChainLocalTags(path);
734d2c12 76
77 AliRunTagCuts *runCuts = new AliRunTagCuts();
78 AliLHCTagCuts *lhcCuts = new AliLHCTagCuts();
79 AliDetectorTagCuts *detCuts = new AliDetectorTagCuts();
80 AliEventTagCuts *evCuts = new AliEventTagCuts();
81
82 TChain* chain = 0x0;
e4358d7f 83 chain = tagAnalysis->QueryTags(runCuts,lhcCuts,detCuts,evCuts);
734d2c12 84 chain->SetBranchStatus("*Calo*",0);
85
da8c4c1c 86 //____________________________________________//
0ab648ea 87 gROOT->LoadMacro("configProtonAnalysis.C");
790140ac 88 AliProtonAnalysis *analysis = GetProtonAnalysisObject(mode,kAnalyzeMC,
0ab648ea 89 analysisType,
90 pidMode);
734d2c12 91 //____________________________________________//
92 // Make the analysis manager
e7df5638 93 AliAnalysisManager *mgr = new AliAnalysisManager("protonAnalysisManager");
734d2c12 94 AliVEventHandler* esdH = new AliESDInputHandler;
95 mgr->SetInputEventHandler(esdH);
6667f3a7 96 if(smode == "MC") {
97 AliMCEventHandler *mc = new AliMCEventHandler();
98 mgr->SetMCtruthEventHandler(mc);
99 }
0ab648ea 100
734d2c12 101 //____________________________________________//
0ab648ea 102 //Create the proton task
e4358d7f 103 AliAnalysisTaskProtons *taskProtons = new AliAnalysisTaskProtons("TaskProtons");
0ab648ea 104 taskProtons->SetAnalysisObject(analysis);
e4358d7f 105 mgr->AddTask(taskProtons);
106
0ab648ea 107 // Create containers for input/output
bf80af3b 108 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
0ab648ea 109 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("outputList",
251e4034 110 TList::Class(),
0ab648ea 111 AliAnalysisManager::kOutputContainer,
da8c4c1c 112 outputFilename.Data());
735cc63d 113 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("outputQAList",
114 TList::Class(),
115 AliAnalysisManager::kOutputContainer,
116 outputFilename.Data());
734d2c12 117
734d2c12 118 //____________________________________________//
e4358d7f 119 mgr->ConnectInput(taskProtons,0,cinput1);
120 mgr->ConnectOutput(taskProtons,0,coutput1);
735cc63d 121 mgr->ConnectOutput(taskProtons,1,coutput2);
734d2c12 122 if (!mgr->InitAnalysis()) return;
123 mgr->PrintStatus();
124 mgr->StartAnalysis("local",chain);
734d2c12 125}
126
127//_________________________________________________//
da8c4c1c 128void runInteractive(const char* mode = "ESD",
790140ac 129 Bool_t kAnalyzeMC = kTRUE,
da8c4c1c 130 const char* analysisType = 0x0,
0ab648ea 131 const char* pidMode = 0x0,
da8c4c1c 132 const char* collectionName = "tag.xml") {
734d2c12 133 gSystem->Load("libProofPlayer.so");
134
da8c4c1c 135 TString smode = mode;
136 TString outputFilename = "Protons."; outputFilename += mode;
137 if(analysisType) {
138 outputFilename += "."; outputFilename += analysisType;
139 }
140 outputFilename += ".root";
141
734d2c12 142 printf("*** Connect to AliEn ***\n");
143 TGrid::Connect("alien://");
144
145 //____________________________________________________//
da8c4c1c 146 //_____________Setting up the par files_______________//
734d2c12 147 //____________________________________________________//
148 setupPar("STEERBase");
149 gSystem->Load("libSTEERBase.so");
734d2c12 150 setupPar("ESD");
151 gSystem->Load("libVMC.so");
152 gSystem->Load("libESD.so");
734d2c12 153 setupPar("AOD");
154 gSystem->Load("libAOD.so");
734d2c12 155 setupPar("ANALYSIS");
156 gSystem->Load("libANALYSIS.so");
e4358d7f 157 setupPar("ANALYSISalice");
158 gSystem->Load("libANALYSISalice.so");
0ab648ea 159 setupPar("CORRFW");
160 gSystem->Load("libCORRFW.so");
734d2c12 161 setupPar("PWG2spectra");
162 gSystem->Load("libPWG2spectra.so");
da8c4c1c 163 //____________________________________________________//
734d2c12 164
165 //____________________________________________//
e4358d7f 166 AliTagAnalysis *tagAnalysis = new AliTagAnalysis("ESD");
734d2c12 167
168 AliRunTagCuts *runCuts = new AliRunTagCuts();
169 AliLHCTagCuts *lhcCuts = new AliLHCTagCuts();
170 AliDetectorTagCuts *detCuts = new AliDetectorTagCuts();
171 AliEventTagCuts *evCuts = new AliEventTagCuts();
172
173 //grid tags
da8c4c1c 174 TAlienCollection* coll = TAlienCollection::Open(collectionName);
734d2c12 175 TGridResult* TagResult = coll->GetGridResult("",0,0);
e4358d7f 176 tagAnalysis->ChainGridTags(TagResult);
734d2c12 177 TChain* chain = 0x0;
e4358d7f 178 chain = tagAnalysis->QueryTags(runCuts,lhcCuts,detCuts,evCuts);
734d2c12 179 chain->SetBranchStatus("*Calo*",0);
da8c4c1c 180
181 //____________________________________________//
0ab648ea 182 gROOT->LoadMacro("configProtonAnalysis.C");
790140ac 183 AliProtonAnalysis *analysis = GetProtonAnalysisObject(mode,kAnalyzeMC,
0ab648ea 184 analysisType,
185 pidMode);
734d2c12 186 //____________________________________________//
187 // Make the analysis manager
e7df5638 188 AliAnalysisManager *mgr = new AliAnalysisManager("protonAnalysisManager");
734d2c12 189 AliVEventHandler* esdH = new AliESDInputHandler;
190 mgr->SetInputEventHandler(esdH);
6667f3a7 191 if(smode == "MC") {
192 AliMCEventHandler *mc = new AliMCEventHandler();
193 mgr->SetMCtruthEventHandler(mc);
194 }
195
734d2c12 196 //____________________________________________//
0ab648ea 197 //Create the proton task
e4358d7f 198 AliAnalysisTaskProtons *taskProtons = new AliAnalysisTaskProtons("TaskProtons");
0ab648ea 199 taskProtons->SetAnalysisObject(analysis);
e4358d7f 200 mgr->AddTask(taskProtons);
201
0ab648ea 202 // Create containers for input/output
bf80af3b 203 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
0ab648ea 204 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("outputList",
251e4034 205 TList::Class(),
0ab648ea 206 AliAnalysisManager::kOutputContainer,
da8c4c1c 207 outputFilename.Data());
735cc63d 208 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("outputQAList",
209 TList::Class(),
210 AliAnalysisManager::kOutputContainer,
211 outputFilename.Data());
212
734d2c12 213 //____________________________________________//
e4358d7f 214 mgr->ConnectInput(taskProtons,0,cinput1);
215 mgr->ConnectOutput(taskProtons,0,coutput1);
735cc63d 216 mgr->ConnectOutput(taskProtons,1,coutput2);
734d2c12 217 if (!mgr->InitAnalysis()) return;
218 mgr->PrintStatus();
219 mgr->StartAnalysis("local",chain);
734d2c12 220}
221
222//_________________________________________________//
da8c4c1c 223void runBatch(const char* mode = "ESD",
790140ac 224 Bool_t kAnalyzeMC = kTRUE,
da8c4c1c 225 const char* analysisType = 0x0,
0ab648ea 226 const char* pidMode = 0x0,
da8c4c1c 227 const char *collectionfile = "wn.xml") {
da8c4c1c 228 TString smode = mode;
229 TString outputFilename = "Protons."; outputFilename += mode;
230 if(analysisType) {
231 outputFilename += "."; outputFilename += analysisType;
232 }
233 outputFilename += ".root";
234
734d2c12 235 printf("*** Connect to AliEn ***\n");
236 TGrid::Connect("alien://");
237 gSystem->Load("libProofPlayer.so");
238
239 //____________________________________________________//
da8c4c1c 240 //_____________Setting up the par files_______________//
734d2c12 241 //____________________________________________________//
242 setupPar("STEERBase");
243 gSystem->Load("libSTEERBase.so");
734d2c12 244 setupPar("ESD");
245 gSystem->Load("libVMC.so");
246 gSystem->Load("libESD.so");
734d2c12 247 setupPar("AOD");
248 gSystem->Load("libAOD.so");
734d2c12 249 setupPar("ANALYSIS");
250 gSystem->Load("libANALYSIS.so");
e4358d7f 251 setupPar("ANALYSISalice");
252 gSystem->Load("libANALYSISalice.so");
0ab648ea 253 setupPar("CORRFW");
254 gSystem->Load("libCORRFW.so");
734d2c12 255 setupPar("PWG2spectra");
256 gSystem->Load("libPWG2spectra.so");
da8c4c1c 257 //____________________________________________________//
734d2c12 258
259 //____________________________________________//
260 //Usage of event tags
e4358d7f 261 AliTagAnalysis *tagAnalysis = new AliTagAnalysis();
734d2c12 262 TChain *chain = 0x0;
e4358d7f 263 chain = tagAnalysis->GetChainFromCollection(collectionfile,"esdTree");
734d2c12 264 chain->SetBranchStatus("*Calo*",0);
265
da8c4c1c 266 //____________________________________________//
0ab648ea 267 gROOT->LoadMacro("configProtonAnalysis.C");
790140ac 268 AliProtonAnalysis *analysis = GetProtonAnalysisObject(mode,kAnalyzeMC,
0ab648ea 269 analysisType,
270 pidMode);
734d2c12 271 //____________________________________________//
272 // Make the analysis manager
e7df5638 273 AliAnalysisManager *mgr = new AliAnalysisManager("protonAnalysisManager");
734d2c12 274 AliVEventHandler* esdH = new AliESDInputHandler;
275 mgr->SetInputEventHandler(esdH);
6667f3a7 276 if(smode == "MC") {
277 AliMCEventHandler *mc = new AliMCEventHandler();
278 mgr->SetMCtruthEventHandler(mc);
279 }
280
734d2c12 281 //____________________________________________//
0ab648ea 282 //Create the proton task
e4358d7f 283 AliAnalysisTaskProtons *taskProtons = new AliAnalysisTaskProtons("TaskProtons");
0ab648ea 284 taskProtons->SetAnalysisObject(analysis);
e4358d7f 285 mgr->AddTask(taskProtons);
286
0ab648ea 287 // Create containers for input/output
bf80af3b 288 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
0ab648ea 289 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("outputList",
290 TList::Class(),
291 AliAnalysisManager::kOutputContainer,
da8c4c1c 292 outputFilename.Data());
735cc63d 293 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("outputQAList",
294 TList::Class(),
295 AliAnalysisManager::kOutputContainer,
296 outputFilename.Data());
297
734d2c12 298 //____________________________________________//
e4358d7f 299 mgr->ConnectInput(taskProtons,0,cinput1);
300 mgr->ConnectOutput(taskProtons,0,coutput1);
735cc63d 301 mgr->ConnectOutput(taskProtons,1,coutput2);
734d2c12 302 if (!mgr->InitAnalysis()) return;
303 mgr->PrintStatus();
304 mgr->StartAnalysis("grid",chain);
734d2c12 305}
306
307//_________________________________________________//
da8c4c1c 308void runProof(const char* mode = "ESD",
790140ac 309 Bool_t kAnalyzeMC = kTRUE,
0ab648ea 310 const char* analysisType = 0x0,
311 const char* pidMode = 0x0,
f62e9410 312 Int_t stats = 0, Int_t startingPoint = 0,
0ab648ea 313 const char* dataset = 0x0) {
df01f00b 314 TString smode = mode;
315 TString outputFilename = "Protons."; outputFilename += mode;
da8c4c1c 316 if(analysisType) {
317 outputFilename += "."; outputFilename += analysisType;
318 }
df01f00b 319 outputFilename += ".root";
320
f62e9410 321 gEnv->SetValue("XSec.GSI.DelegProxy","2");
734d2c12 322 printf("****** Connect to PROOF *******\n");
96f84c25 323 TProof::Open("alicecaf.cern.ch");
aafecd8b 324 gProof->SetParallel();
734d2c12 325
326 // Enable the Analysis Package
327 gProof->UploadPackage("STEERBase.par");
328 gProof->EnablePackage("STEERBase");
329 gProof->UploadPackage("ESD.par");
330 gProof->EnablePackage("ESD");
331 gProof->UploadPackage("AOD.par");
332 gProof->EnablePackage("AOD");
333 gProof->UploadPackage("ANALYSIS.par");
334 gProof->EnablePackage("ANALYSIS");
e4358d7f 335 gProof->UploadPackage("ANALYSISalice.par");
336 gProof->EnablePackage("ANALYSISalice");
251e4034 337 gProof->UploadPackage("CORRFW.par");
338 gProof->EnablePackage("CORRFW");
734d2c12 339 gProof->UploadPackage("PWG2spectra.par");
340 gProof->EnablePackage("PWG2spectra");
341
da8c4c1c 342 //____________________________________________//
0ab648ea 343 gROOT->LoadMacro("configProtonAnalysis.C");
790140ac 344 AliProtonAnalysis *analysis = GetProtonAnalysisObject(mode,kAnalyzeMC,
0ab648ea 345 analysisType,
346 pidMode);
da8c4c1c 347 //____________________________________________//
734d2c12 348
e4358d7f 349 //____________________________________________//
734d2c12 350 // Make the analysis manager
e7df5638 351 AliAnalysisManager *mgr = new AliAnalysisManager("protonAnalysisManager");
734d2c12 352 AliVEventHandler* esdH = new AliESDInputHandler;
df01f00b 353 mgr->SetInputEventHandler(esdH);
354 if(smode == "MC") {
355 AliMCEventHandler *mc = new AliMCEventHandler();
356 mgr->SetMCtruthEventHandler(mc);
357 }
734d2c12 358 //____________________________________________//
0ab648ea 359 //Create the proton task
e4358d7f 360 AliAnalysisTaskProtons *taskProtons = new AliAnalysisTaskProtons("TaskProtons");
0ab648ea 361 taskProtons->SetAnalysisObject(analysis);
e4358d7f 362 mgr->AddTask(taskProtons);
734d2c12 363
364 // Create containers for input/output
f62e9410 365 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
0ab648ea 366 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("outputList",
367 TList::Class(),
251e4034 368 AliAnalysisManager::kOutputContainer,
0ab648ea 369 outputFilename.Data());
735cc63d 370 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("outputQAList",
371 TList::Class(),
372 AliAnalysisManager::kOutputContainer,
373 outputFilename.Data());
df01f00b 374
734d2c12 375 //____________________________________________//
e4358d7f 376 mgr->ConnectInput(taskProtons,0,cinput1);
377 mgr->ConnectOutput(taskProtons,0,coutput1);
735cc63d 378 mgr->ConnectOutput(taskProtons,1,coutput2);
734d2c12 379 if (!mgr->InitAnalysis()) return;
380 mgr->PrintStatus();
e4358d7f 381
382 if(dataset)
f62e9410 383 mgr->StartAnalysis("proof",dataset,stats,startingPoint);
e4358d7f 384 else {
385 // You should get this macro and the txt file from:
386 // http://aliceinfo.cern.ch/Offline/Analysis/CAF/
387 gROOT->LoadMacro("CreateESDChain.C");
388 TChain* chain = 0x0;
389 chain = CreateESDChain("ESD82XX_30K.txt",stats);
390 chain->SetBranchStatus("*Calo*",0);
391
392 mgr->StartAnalysis("proof",chain);
393 }
734d2c12 394}
395
396//_________________________________________________//
397Int_t setupPar(const char* pararchivename) {
398 ///////////////////
399 // Setup PAR File//
400 ///////////////////
401 if (pararchivename) {
402 char processline[1024];
403 sprintf(processline,".! tar xvzf %s.par",pararchivename);
404 gROOT->ProcessLine(processline);
405 const char* ocwd = gSystem->WorkingDirectory();
406 gSystem->ChangeDirectory(pararchivename);
407
408 // check for BUILD.sh and execute
409 if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
410 printf("*******************************\n");
411 printf("*** Building PAR archive ***\n");
412 printf("*******************************\n");
413
414 if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
415 Error("runAnalysis","Cannot Build the PAR Archive! - Abort!");
416 return -1;
417 }
418 }
419 // check for SETUP.C and execute
420 if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
421 printf("*******************************\n");
422 printf("*** Setup PAR archive ***\n");
423 printf("*******************************\n");
424 gROOT->Macro("PROOF-INF/SETUP.C");
425 }
426
427 gSystem->ChangeDirectory("../");
428 }
429 return 1;
430}