2 // 1. Check cuts for 2010 (Jochen?)
3 // 2. Run with many centrality bins at once
6 enum { kMyRunModeLocal = 0, kMyRunModeCAF, kMyRunModeGRID};
8 TList * listToLoad = new TList();
10 TChain * GetAnalysisChain(const char * incollection);
12 void run(Char_t* data, Long64_t nev = -1, Long64_t offset = 0, Bool_t debug = kFALSE, Int_t runMode = 0, Bool_t isMC = 0,
13 Int_t centrBin = 0, const char * centrEstimator = "VOM", Int_t useOtherCentralityCut = 0, Int_t trackMin=0, Int_t trackMax=10000,
14 const char* option = "",TString customSuffix = "", Int_t workers = -1, Bool_t useSingleBin=kTRUE)
24 InitAndLoadLibs(runMode,workers,debug);
26 // Create the analysis manager
27 mgr = new AliAnalysisManager;
30 AliESDInputHandler* esdH = new AliESDInputHandler;
31 // Do I need any of this?
32 esdH->SetInactiveBranches("AliESDACORDE FMD ALIESDTZERO ALIESDZDC AliRawDataErrorLogs CaloClusters Cascades EMCALCells EMCALTrigger ESDfriend Kinks AliESDTZERO ALIESDACORDE MuonTracks TrdTracks");
33 mgr->SetInputEventHandler(esdH);
36 AliMCEventHandler* handler = new AliMCEventHandler;
37 handler->SetPreReadMode(AliMCEventHandler::kLmPreRead);
38 mgr->SetMCtruthEventHandler(handler);
42 // If we are running on grid, we need the alien handler
43 if (runMode == kMyRunModeGRID) {
44 // Create and configure the alien handler plugin
45 gROOT->LoadMacro("CreateAlienHandler.C");
46 AliAnalysisGrid *alienHandler = CreateAlienHandler(data, listToLoad, "full", isMC);
48 cout << "Cannot create alien handler" << endl;
51 mgr->SetGridHandler(alienHandler);
57 gROOT->ProcessLine(".L $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
58 physicsSelectionTask = AddTaskPhysicsSelection(isMC);
61 AliCentralitySelectionTask *taskCentr = new AliCentralitySelectionTask("CentralitySelection");
62 const char * file1 = "$ALICE_ROOT/ANALYSIS/macros/test_AliCentralityBy1D.root";
63 const char * file2 = "$ALICE_ROOT/ANALYSIS/macros/test_AliCentralityByFunction.root";
64 // const char * file1 = "$ALICE_ROOT/ANALYSIS/macros/AliCentralityBy1D_LHC10g2a_100.root";
65 // const char * file2 = "$ALICE_ROOT/ANALYSIS/macros/AliCentralityByFunction_LHC10g2a_100.root";
66 // const char * file1 = "$ALICE_ROOT/ANALYSIS/macros/AliCentralityBy1D_137161_GLAU.root";
67 // const char * file2 = "$ALICE_ROOT/ANALYSIS/macros/test_AliCentralityByFunction.root";
69 // taskCentr->SetPercentileFile (file1);
70 // taskCentr->SetPercentileFile2(file2);
71 //FIXME: include back centrality estimator
72 // mgr->AddTask(taskCentr);
73 // mgr->ConnectInput (taskCentr,0, mgr->GetCommonInputContainer());
75 // Create my own centrality selector
76 AliAnalysisMultPbCentralitySelector * centrSelector = new AliAnalysisMultPbCentralitySelector();
77 centrSelector->SetIsMC(isMC);
78 centrSelector->SetCentrTaskFiles(file1,file2); // for bookkeping only
79 centrSelector->SetCentralityBin(centrBin);
80 if (!useSingleBin) centrSelector->SetCentralityBin(0); // FIXME: ok?
81 centrSelector->SetCentralityEstimator(centrEstimator);
84 if(useOtherCentralityCut == 1){
85 cout << "Setting centrality by MULT" << endl;
86 centrSelector->SetUseMultRange();
87 centrSelector->SetMultRange(trackMin,trackMax);
89 if(useOtherCentralityCut == 2){
90 cout << "Setting centrality by V0" << endl;
92 centrSelector->SetUseV0Range();
93 centrSelector->SetMultRange(trackMin,trackMax);
95 if(useOtherCentralityCut == 3){
96 cout << "Setting centrality by SPD outer" << endl;
97 centrSelector->SetUseSPDOuterRange();
98 centrSelector->SetMultRange(trackMin,trackMax);
101 // Parse option strings
102 TString optionStr(option);
104 // remove SAVE option if set
105 // This is copied from a macro by Jan. The reason I kept it is that I may want to pass textual options to the new task at some point
106 Bool_t doSave = kFALSE;
107 TString optionStr(option);
108 if (optionStr.Contains("SAVE"))
110 optionStr = optionStr(0,optionStr.Index("SAVE")) + optionStr(optionStr.Index("SAVE")+4, optionStr.Length());
114 AliESDtrackCuts * cuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE);
115 TString pathsuffix = "";
117 if(!useSingleBin) pathsuffix += "_AllCentr";
119 if (optionStr.Contains("DCA")) {
121 // cuts = AliESDtrackCuts::GetStandardITSPureSATrackCuts2009();
122 cout << ">>>> USING DCA cut" << endl;
123 cuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE);
124 pathsuffix+="_DCAcut";
127 if (optionStr.Contains("ITSsa")) {
129 cuts = AliESDtrackCuts::GetStandardITSPureSATrackCuts2009();
130 cout << ">>>> USING ITS sa tracks" << endl;
131 pathsuffix+="_ITSsa";
134 if (optionStr.Contains("TPC")) {
136 cuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
137 cout << ">>>> USING TPC only tracks" << endl;
141 Bool_t useMCKinematics = isMC;
142 if (optionStr.Contains("NOMCKIN")) {
143 cout << ">>>> Ignoring MC kinematics" << endl;
144 useMCKinematics=kFALSE;
145 pathsuffix+="_NOMCKIN";
148 AliLog::SetClassDebugLevel("AliESDtrackCuts", AliLog::kDebug);// FIXME
149 cuts->DefineHistograms();
153 gROOT->ProcessLine(".L $ALICE_ROOT/PWG0/multPbPb/AddTaskMultPbPbTracks.C");
154 AliAnalysisTaskMultPbTracks * task = AddTaskMultPbPbTracks("multPbPbtracks.root", cuts, centrSelector);
155 task->SetIsMC(useMCKinematics);
156 task->SetOfflineTrigger(AliVEvent::kMB);
157 if(optionStr.Contains("TPC")) task->SetTPCOnly();
158 if(useMCKinematics) task->GetHistoManager()->SetSuffix("MC");
159 if(customSuffix!=""){
160 cout << "Setting custom suffix: " << customSuffix << endl;
161 task->GetHistoManager()->SetSuffix(customSuffix);
164 gROOT->ProcessLine(".L $ALICE_ROOT/PWG0/multPbPb/AddTaskMultPbPbTracksAllCentrality.C");
165 centrSelector->SetUseV0Range(kTRUE);
168 const Float_t minCentr[] = {0 ,79 ,239,559 ,1165,2135,3555,5525,8213 ,12191,15079};
169 const Float_t maxCentr[] = {79,239,559,1165,2135,3555,5525,8213,12191,15079,21000};
170 AliAnalysisTaskMultPbTracks ** tasks = AddTaskMultPbPbTracksAllCentrality("multPbPbtracks.root", cuts, centrSelector, ncentr,minCentr,maxCentr);
171 for(Int_t icentr = 0; icentr < ncentr; icentr++){
172 tasks[icentr]->Print();
173 cout << "MC KINEMATICS:" << useMCKinematics << endl;
175 tasks[icentr]->SetIsMC(useMCKinematics);
176 tasks[icentr]->SetOfflineTrigger(AliVEvent::kMB);
177 if(optionStr.Contains("TPC")) tasks[icentr]->SetTPCOnly();
178 if(useMCKinematics) tasks[icentr]->GetHistoManager()->SetSuffix("MC");
179 if(customSuffix!=""){
180 cout << "Setting custom suffix: " << customSuffix+long(icentr) << endl;
181 tasks[icentr]->GetHistoManager()->SetSuffix(customSuffix+long(icentr));
185 // Init and run the analy
186 if (!mgr->InitAnalysis()) return;
190 if (runMode == kMyRunModeLocal ) {
191 // If running in local mode, create chain of ESD files
192 cout << "RUNNING LOCAL, CHAIN" << endl;
193 TChain * chain = GetAnalysisChain(data);
195 mgr->StartAnalysis("local",chain,nev);
196 } else if (runMode == kMyRunModeCAF) {
197 mgr->StartAnalysis("proof",TString(data)+"#esdTree",nev);
198 } else if (runMode == kMyRunModeGRID) {
199 mgr->StartAnalysis("grid");
201 cout << "ERROR: unknown run mode" << endl;
204 if (!useOtherCentralityCut) {
205 pathsuffix = pathsuffix + "_" + centrEstimator + "_bin_"+long(centrBin);
206 } else if(useOtherCentralityCut==1){
207 pathsuffix = pathsuffix + "_TrackRange_" + long(trackMin) + "_" + long(trackMax);
208 } else if(useOtherCentralityCut==2){
209 pathsuffix = pathsuffix + "_V0Range_" + long(trackMin) + "_" + long(trackMax);
210 } else if(useOtherCentralityCut==3){
211 pathsuffix = pathsuffix + "_SPDOutRange_" + long(trackMin) + "_" + long(trackMax);
213 pathsuffix += customSuffix;
215 if (doSave) MoveOutput(data, pathsuffix.Data());
218 TFile * f = new TFile("cuts.root", "recreate");
219 cuts->SaveHistograms();
225 void MoveOutput(const char * data, const char * suffix = ""){
227 TString path("output/");
228 path = path + TString(data).Tokenize("/")->Last()->GetName() + suffix;
230 TString fileName = "multPbPbtracks.root";
231 gSystem->mkdir(path, kTRUE);
232 gSystem->Rename(fileName, path + "/" + fileName);
233 for(Int_t ibin = 0; ibin < 20; ibin++){
234 TString fileBin = fileName;
235 fileBin.ReplaceAll(".root",Form("_%2.2d.root",ibin));
236 gSystem->Rename(fileBin, path + "/" + fileBin);
239 gSystem->Rename("event_stat.root", path + "/event_stat.root");
240 Printf(">>>>> Moved files to %s", path.Data());
245 TChain * GetAnalysisChain(const char * incollection){
246 // Builds a chain of esd files
247 // incollection can be
248 // - a single root file
249 // - an xml collection of files on alien
250 // - a ASCII containing a list of local root files
251 TChain* analysisChain = 0;
253 analysisChain = new TChain("esdTree");
254 if (TString(incollection).Contains(".root")){
255 analysisChain->Add(incollection);
257 else if (TString(incollection).Contains("xml")){
258 TGrid::Connect("alien://");
259 TAlienCollection * coll = TAlienCollection::Open (incollection);
261 analysisChain->Add(TString("alien://")+coll->GetLFN());
264 ifstream file_collect(incollection);
266 while (line.ReadLine(file_collect) ) {
267 analysisChain->Add(line.Data());
270 analysisChain->GetListOfFiles()->Print();
272 return analysisChain;
276 void InitAndLoadLibs(Int_t runMode=kMyRunModeLocal, Int_t workers=0,Bool_t debug=0) {
277 // Loads libs and par files + custom task and classes
279 // Custom stuff to be loaded
280 listToLoad->Add(new TObjString("$ALICE_ROOT/ANALYSIS/AliCentralitySelectionTask.cxx+"));
281 listToLoad->Add(new TObjString("$ALICE_ROOT/PWG1/background/AliHistoListWrapper.cxx+"));
282 listToLoad->Add(new TObjString("$ALICE_ROOT/PWG0/multPbPb/AliAnalysisMultPbTrackHistoManager.cxx+"));
283 listToLoad->Add(new TObjString("$ALICE_ROOT/PWG0/multPbPb/AliAnalysisMultPbCentralitySelector.cxx+"));
284 listToLoad->Add(new TObjString("$ALICE_ROOT/PWG0/multPbPb/AliAnalysisTaskMultPbTracks.cxx+"));
287 if (runMode == kMyRunModeCAF)
289 cout << "Init in CAF mode" << endl;
291 gEnv->SetValue("XSec.GSI.DelegProxy", "2");
292 TProof * p = TProof::Open("alice-caf.cern.ch", workers>0 ? Form("workers=%d",workers) : "");
293 //TProof * p = TProof::Open("skaf.saske.sk", workers>0 ? Form("workers=%d",workers) : "");
294 p->Exec("TObject *o = gEnv->GetTable()->FindObject(\"Proof.UseMergers\"); gEnv->GetTable()->Remove(o);", kTRUE);
296 // gProof->EnablePackage("VO_ALICE@AliRoot::v4-21-17b-AN");
297 // gSystem->Load("libCore.so");
298 // gSystem->Load("libTree.so");
299 // gSystem->Load("libGeom.so");
300 // gSystem->Load("libVMC.so");
301 // gSystem->Load("libPhysics.so");
302 // gSystem->Load("libSTEERBase");
303 // gSystem->Load("libESD");
304 // gSystem->Load("libAOD");
305 // gSystem->Load("libANALYSIS");
306 // gSystem->Load("libOADB");
307 // gSystem->Load("libANALYSISalice");
309 // Enable the needed package
310 gProof->UploadPackage("$ALICE_ROOT/obj/STEERBase");
311 gProof->EnablePackage("$ALICE_ROOT/obj/STEERBase");
312 gProof->UploadPackage("$ALICE_ROOT/obj/ESD");
313 gProof->EnablePackage("$ALICE_ROOT/obj/ESD");
314 gProof->UploadPackage("$ALICE_ROOT/obj/AOD");
315 gProof->EnablePackage("$ALICE_ROOT/obj/AOD");
316 gProof->UploadPackage("$ALICE_ROOT/obj/ANALYSIS");
317 gProof->EnablePackage("$ALICE_ROOT/obj/ANALYSIS");
318 gProof->UploadPackage("$ALICE_ROOT/obj/OADB");
319 gProof->EnablePackage("$ALICE_ROOT/obj/OADB");
320 gProof->UploadPackage("$ALICE_ROOT/obj/ANALYSISalice");
321 gProof->EnablePackage("$ALICE_ROOT/obj/ANALYSISalice");
322 gProof->UploadPackage("$ALICE_ROOT/obj/PWG0base");
323 gProof->EnablePackage("$ALICE_ROOT/obj/PWG0base");
324 gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWG0/multPb"));
325 gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWG1/background"));
329 cout << "Init in Local or Grid mode" << endl;
330 gSystem->Load("libCore.so");
331 gSystem->Load("libTree.so");
332 gSystem->Load("libGeom.so");
333 gSystem->Load("libVMC.so");
334 gSystem->Load("libPhysics.so");
335 gSystem->Load("libSTEERBase");
336 gSystem->Load("libESD");
337 gSystem->Load("libAOD");
338 gSystem->Load("libANALYSIS");
339 gSystem->Load("libOADB");
340 gSystem->Load("libANALYSISalice");
341 // Use AliRoot includes to compile our task
342 gROOT->ProcessLine(".include $ALICE_ROOT/include");
344 // gSystem->Load("libVMC");
345 // gSystem->Load("libTree");
346 // gSystem->Load("libSTEERBase");
347 // gSystem->Load("libESD");
348 // gSystem->Load("libAOD");
349 // gSystem->Load("libANALYSIS");
350 // gSystem->Load("libANALYSISalice");
351 // gSystem->Load("libPWG0base");
353 gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWG0/multPb"));
354 gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWG1/background"));
355 // gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWG1/background/"));
357 // Load helper classes
358 TIterator * iter = listToLoad->MakeIterator();
359 TObjString * name = 0;
360 while (name = (TObjString *)iter->Next()) {
361 gSystem->ExpandPathName(name->String());
362 cout << name->String().Data();
363 if (runMode == kMyRunModeCAF) {
364 gProof->Load(name->String()+(debug?"+g":""));
366 gROOT->LoadMacro(name->String()+(debug?"+g":""));