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, Int_t centrBin = 0, const char * centrEstimator = "VOM", const char* option = "",TString customSuffix = "", Int_t workers = -1)
22 InitAndLoadLibs(runMode,workers,debug);
24 // Create the analysis manager
25 mgr = new AliAnalysisManager;
28 AliESDInputHandler* esdH = new AliESDInputHandler;
29 // Do I need any of this?
30 // esdH->SetInactiveBranches("AliESDACORDE FMD ALIESDTZERO ALIESDZDC AliRawDataErrorLogs CaloClusters Cascades EMCALCells EMCALTrigger ESDfriend Kinks AliESDTZERO ALIESDACORDE MuonTracks TrdTracks");
31 mgr->SetInputEventHandler(esdH);
34 AliMCEventHandler* handler = new AliMCEventHandler;
35 handler->SetPreReadMode(AliMCEventHandler::kLmPreRead);
36 mgr->SetMCtruthEventHandler(handler);
40 // If we are running on grid, we need the alien handler
41 if (runMode == kMyRunModeGRID) {
42 // Create and configure the alien handler plugin
43 gROOT->LoadMacro("CreateAlienHandler.C");
44 AliAnalysisGrid *alienHandler = CreateAlienHandler(data, listToLoad, "full", isMC);
46 cout << "Cannot create alien handler" << endl;
49 mgr->SetGridHandler(alienHandler);
55 gROOT->ProcessLine(".L $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
56 physicsSelectionTask = AddTaskPhysicsSelection(isMC,1);
59 AliPhysicsSelection * physSel = physicsSelectionTask->GetPhysicsSelection();
60 // physSel->AddCollisionTriggerClass("+CTRUE-B-NOPF-ALL");
61 physSel->AddCollisionTriggerClass("+C0SM1-B-NOPF-ALL");
62 physSel->AddBGTriggerClass ("+C0SM1-A-NOPF-ALL");
63 physSel->AddBGTriggerClass ("+C0SM1-C-NOPF-ALL");
64 physSel->AddBGTriggerClass ("+C0SM1-E-NOPF-ALL");
68 AliCentralitySelectionTask *taskCentr = new AliCentralitySelectionTask("CentralitySelection");
69 // const char * file1 = "$ALICE_ROOT/ANALYSIS/macros/test_AliCentralityBy1D.root";
70 // const char * file2 = "$ALICE_ROOT/ANALYSIS/macros/test_AliCentralityByFunction.root";
71 const char * file1 = "$ALICE_ROOT/ANALYSIS/macros/AliCentralityBy1D_LHC10g2a_100.root";
72 const char * file2 = "$ALICE_ROOT/ANALYSIS/macros/AliCentralityByFunction_LHC10g2a_100.root";
73 taskCentr->SetPercentileFile (file1);
74 taskCentr->SetPercentileFile2(file2);
75 mgr->AddTask(taskCentr);
76 mgr->ConnectInput (taskCentr,0, mgr->GetCommonInputContainer());
78 // Create my own centrality selector
79 AliAnalysisMultPbCentralitySelector * centrSelector = new AliAnalysisMultPbCentralitySelector();
80 centrSelector->SetCentrTaskFiles(file1,file2); // for bookkeping only
81 centrSelector->SetCentralityBin(centrBin);
82 centrSelector->SetCentralityEstimator(centrEstimator);
84 // centrSelector->SetUseMultRange();
85 centrSelector->SetIsMC(isMC,1500,2300);
86 // centrSelector->SetMultRange(10,20);
88 // Parse option strings
89 TString optionStr(option);
91 // remove SAVE option if set
92 // 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
93 Bool_t doSave = kFALSE;
94 TString optionStr(option);
95 if (optionStr.Contains("SAVE"))
97 optionStr = optionStr(0,optionStr.Index("SAVE")) + optionStr(optionStr.Index("SAVE")+4, optionStr.Length());
101 AliESDtrackCuts * cuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE);
102 TString pathsuffix = "";
103 // cuts->SetPtRange(0.15,0.2);// FIXME pt cut
104 // const char * pathsuffix = "_pt_015_020_nofakes";
106 if (optionStr.Contains("ITSsa")) {
108 cuts = AliESDtrackCuts::GetStandardITSPureSATrackCuts2009();
109 cout << ">>>> USING ITS sa tracks" << endl;
113 if (optionStr.Contains("TPC")) {
115 cuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
116 cout << ">>>> USING TPC only tracks" << endl;
120 Bool_t useMCKinematics = isMC;
121 if (optionStr.Contains("NOMCKIN")) {
122 cout << ">>>> Ignoring MC kinematics" << endl;
123 useMCKinematics=kFALSE;
128 gROOT->ProcessLine(".L $ALICE_ROOT/PWG0/multPbPb/AddTaskMultPbPbTracks.C");
129 AliAnalysisTaskMultPbTracks * task = AddTaskMultPbPbTracks("multPbPbtracks.root", cuts, centrSelector); // kTRUE enables DCA cut
130 task->SetIsMC(useMCKinematics);
132 task->SetOfflineTrigger(AliVEvent::kMB);
134 task->SetOfflineTrigger(AliVEvent::kUserDefined);
136 if(useMCKinematics) task->GetHistoManager()->SetSuffix("MC");
137 if(customSuffix!=""){
138 cout << "Setting custom suffix: " << customSuffix << endl;
139 task->GetHistoManager()->SetSuffix(customSuffix);
141 // task->SelectCollisionCandidates(AliVEvent::kUserDefined);
142 if (!mgr->InitAnalysis()) return;
146 if (runMode == kMyRunModeLocal ) {
147 // If running in local mode, create chain of ESD files
148 cout << "RUNNING LOCAL, CHAIN" << endl;
149 TChain * chain = GetAnalysisChain(data);
151 mgr->StartAnalysis("local",chain,nev);
152 } else if (runMode == kMyRunModeCAF) {
153 mgr->StartAnalysis("proof",TString(data)+"#esdTree",nev);
154 } else if (runMode == kMyRunModeGRID) {
155 mgr->StartAnalysis("grid");
157 cout << "ERROR: unknown run mode" << endl;
160 pathsuffix = pathsuffix + "_" + centrEstimator + "_bin_"+long(centrBin);
161 pathsuffix += customSuffix;
163 if (doSave) MoveOutput(data, pathsuffix.Data());
169 void MoveOutput(const char * data, const char * suffix = ""){
171 TString path("output/");
172 path = path + TString(data).Tokenize("/")->Last()->GetName() + suffix;
174 TString fileName = "multPbPbtracks.root";
175 gSystem->mkdir(path, kTRUE);
176 gSystem->Rename(fileName, path + "/" + fileName);
177 gSystem->Rename("event_stat.root", path + "/event_stat.root");
178 Printf(">>>>> Moved files to %s", path.Data());
183 TChain * GetAnalysisChain(const char * incollection){
184 // Builds a chain of esd files
185 // incollection can be
186 // - a single root file
187 // - an xml collection of files on alien
188 // - a ASCII containing a list of local root files
189 TChain* analysisChain = 0;
191 analysisChain = new TChain("esdTree");
192 if (TString(incollection).Contains(".root")){
193 analysisChain->Add(incollection);
195 else if (TString(incollection).Contains("xml")){
196 TGrid::Connect("alien://");
197 TAlienCollection * coll = TAlienCollection::Open (incollection);
199 analysisChain->Add(TString("alien://")+coll->GetLFN());
202 ifstream file_collect(incollection);
204 while (line.ReadLine(file_collect) ) {
205 analysisChain->Add(line.Data());
208 analysisChain->GetListOfFiles()->Print();
210 return analysisChain;
214 void InitAndLoadLibs(Int_t runMode=kMyRunModeLocal, Int_t workers=0,Bool_t debug=0) {
215 // Loads libs and par files + custom task and classes
217 // Custom stuff to be loaded
218 listToLoad->Add(new TObjString("$ALICE_ROOT/ANALYSIS/AliCentralitySelectionTask.cxx+"));
219 listToLoad->Add(new TObjString("$ALICE_ROOT/PWG1/background/AliHistoListWrapper.cxx+"));
220 listToLoad->Add(new TObjString("$ALICE_ROOT/PWG0/multPbPb/AliAnalysisMultPbTrackHistoManager.cxx+"));
221 listToLoad->Add(new TObjString("$ALICE_ROOT/PWG0/multPbPb/AliAnalysisMultPbCentralitySelector.cxx+"));
222 listToLoad->Add(new TObjString("$ALICE_ROOT/PWG0/multPbPb/AliAnalysisTaskMultPbTracks.cxx+"));
225 if (runMode == kMyRunModeCAF)
227 cout << "Init in CAF mode" << endl;
229 gEnv->SetValue("XSec.GSI.DelegProxy", "2");
230 TProof::Open("alice-caf.cern.ch", workers>0 ? Form("workers=%d",workers) : "");
232 // Enable the needed package
233 gProof->UploadPackage("$ALICE_ROOT/STEERBase");
234 gProof->EnablePackage("$ALICE_ROOT/STEERBase");
235 gProof->UploadPackage("$ALICE_ROOT/ESD");
236 gProof->EnablePackage("$ALICE_ROOT/ESD");
237 gProof->UploadPackage("$ALICE_ROOT/AOD");
238 gProof->EnablePackage("$ALICE_ROOT/AOD");
239 gProof->UploadPackage("$ALICE_ROOT/ANALYSIS");
240 gProof->EnablePackage("$ALICE_ROOT/ANALYSIS");
241 gProof->UploadPackage("$ALICE_ROOT/ANALYSISalice");
242 gProof->EnablePackage("$ALICE_ROOT/ANALYSISalice");
243 gProof->UploadPackage("$ALICE_ROOT/PWG0base");
244 gProof->EnablePackage("$ALICE_ROOT/PWG0base");
245 gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWG0/multPb"));
246 gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWG1/background"));
250 cout << "Init in Local or Grid mode" << endl;
251 gSystem->Load("libCore.so");
252 gSystem->Load("libTree.so");
253 gSystem->Load("libGeom.so");
254 gSystem->Load("libVMC.so");
255 gSystem->Load("libPhysics.so");
256 gSystem->Load("libSTEERBase");
257 gSystem->Load("libESD");
258 gSystem->Load("libAOD");
259 gSystem->Load("libANALYSIS");
260 gSystem->Load("libANALYSISalice");
261 // Use AliRoot includes to compile our task
262 gROOT->ProcessLine(".include $ALICE_ROOT/include");
264 // gSystem->Load("libVMC");
265 // gSystem->Load("libTree");
266 // gSystem->Load("libSTEERBase");
267 // gSystem->Load("libESD");
268 // gSystem->Load("libAOD");
269 // gSystem->Load("libANALYSIS");
270 // gSystem->Load("libANALYSISalice");
271 // gSystem->Load("libPWG0base");
273 gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWG0/multPb"));
274 gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWG1/background"));
275 // gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWG1/background/"));
277 // Load helper classes
278 TIterator * iter = listToLoad->MakeIterator();
279 TObjString * name = 0;
280 while (name = (TObjString *)iter->Next()) {
281 gSystem->ExpandPathName(name->String());
282 cout << name->String().Data();
283 if (runMode == kMyRunModeCAF) {
284 gProof->Load(name->String()+(debug?"+g":""));
286 gROOT->LoadMacro(name->String()+(debug?"+g":""));