2 //--------------------------------------------------------------------------
3 // Example macro for running locally AliAnalysisTaskNorm task
6 //--------------------------------------------------------------------------
8 enum {kLocal, kInteractif_xml, kInteractif_ESDList};
9 Int_t GetMode(TString inputFileName);
10 TChain* CreateChainFromCollection(const char *xmlfile);
11 TChain* CreateChainFromAODFile(const char *rootfile,Bool_t isESD);
12 TChain* CreateChainFromESDList(const char *esdList);
13 TChain* CreateChain(TString inputFileName,Bool_t isESD);
15 void runNorm(TString inputFileName = "AliAOD.root", Int_t nEvents = 1e6, TString beamConf = "p-Pb", Bool_t isESD = kFALSE, Bool_t isMC = kFALSE, Int_t debugLevel = 0)
22 Int_t mode = GetMode(inputFileName);
24 Error("runAnalysis","Please provide either an ESD/AOD root file or a collection of ESDs/AODs.");
28 // Load common libraries
29 gSystem->Load("libTree");
30 gSystem->Load("libGeom");
31 gSystem->Load("libVMC");
32 gSystem->Load("libPhysics");
33 gSystem->Load("libSTEERBase");
34 // gSystem->Load("libSTEER");
35 gSystem->Load("libESD");
36 gSystem->Load("libAOD");
37 gSystem->Load("libANALYSIS");
38 gSystem->Load("libANALYSISalice");
39 gSystem->Load("libEventMixing");
40 gSystem->Load("libCORRFW");
41 gSystem->Load("libPWGmuon");
42 gSystem->Load("libPWGmuondep");
44 gSystem->AddIncludePath(Form("-I\"%s/include\"", gSystem->ExpandPathName("$ALICE_ROOT")));
45 gROOT->ProcessLine(Form(".include %s/include", gSystem->ExpandPathName("$ALICE_ROOT")));
48 TChain* chain = CreateChain(inputFileName,isESD);
51 // Create the analysis manager
52 AliAnalysisManager *mgr = new AliAnalysisManager("MuonTask");
56 AliESDInputHandler* esdH = new AliESDInputHandler();
57 esdH->SetReadFriends(kFALSE);
58 mgr->SetInputEventHandler(esdH);
62 AliAODInputHandler* aodH = new AliAODInputHandler();
63 mgr->SetInputEventHandler(aodH);
66 TString dataType = mgr->GetInputEventHandler()->GetDataType();
67 Info("runLocal",Form("Manager with %s",dataType.Data()));
69 // Enable MC event handler for ESDs
71 AliVEventHandler* handler = new AliMCEventHandler;
72 mgr->SetMCtruthEventHandler(handler);
75 // event selection and centrality framework
77 gROOT->LoadMacro("$ALICE_ROOT/OADB/macros/AddTaskPhysicsSelection.C");
78 AliPhysicsSelectionTask* physicsSelection = AddTaskPhysicsSelection(isMC);
79 if ( !physicsSelection ) {
80 Error("runLocal","AliPhysicsSelectionTask not created!");
86 gROOT->LoadMacro("$ALICE_ROOT/OADB/macros/AddTaskCentrality.C");
87 AliCentralitySelectionTask *taskCentrality = AddTaskCentrality();
88 if ( !taskCentrality ) {
89 Error("runLocal on ESD","AliCentralitySelectionTask not created!");
92 if ( isMC ) taskCentrality->SetMCInput();
93 //taskCentrality->SetPass(1); // remember to set the pass you are processing!!!
96 //Only on full AOD it is possible to reprocess the centrality framework
97 gROOT->LoadMacro("$ALICE_ROOT/OADB/macros/AddTaskCentrality.C");
98 AliCentralitySelectionTask *taskCentrality = AddTaskCentrality(kTRUE,kTRUE);
99 if ( !taskCentrality ) {
100 Error("runLocal on AOD","AliCentralitySelectionTask not created!");
103 if ( isMC ) taskCentrality->SetMCInput();
108 gROOT->LoadMacro("$ALICE_ROOT/PWG/muon/AddTaskNorm.C");
109 AliAnalysisTaskNorm* task = AddTaskNorm(isESD,isMC,beamConf);
111 Error("runAnalysis","AliAnalysisTaskNorm not created!");
114 task->SetDebugLevel(debugLevel);
116 // Enable debug printouts
117 mgr->SetDebugLevel(debugLevel);
119 // start local analysis
120 if (mgr->InitAnalysis()) {
122 if(debugLevel>=2) mgr->SetNSysInfo(100);
123 mgr->StartAnalysis("local", chain, nEvents);
127 mgr->ProfileTask("Task");
134 //______________________________________________________________________________
135 Int_t GetMode(TString inputFileName)
137 if ( inputFileName.EndsWith(".xml") ) return kInteractif_xml;
138 else if ( inputFileName.EndsWith(".txt") ) return kInteractif_ESDList;
139 else if ( inputFileName.EndsWith(".root") ) return kLocal;
143 //______________________________________________________________________________
144 TChain* CreateChainFromCollection(const char *xmlfile)
146 // Create a chain from the collection of tags.
147 TAlienCollection* coll = TAlienCollection::Open(xmlfile);
149 ::Error("CreateChainFromTags", "Cannot create an AliEn collection from %s", xmlfile);
153 TGridResult* tagResult = coll->GetGridResult("",kFALSE,kFALSE);
154 AliTagAnalysis *tagAna = new AliTagAnalysis("ESD");
155 tagAna->ChainGridTags(tagResult);
157 AliRunTagCuts *runCuts = new AliRunTagCuts();
158 AliLHCTagCuts *lhcCuts = new AliLHCTagCuts();
159 AliDetectorTagCuts *detCuts = new AliDetectorTagCuts();
160 AliEventTagCuts *evCuts = new AliEventTagCuts();
162 // Check if the cuts configuration file was provided
163 if (!gSystem->AccessPathName("ConfigureCuts.C")) {
164 gROOT->LoadMacro("ConfigureCuts.C");
165 ConfigureCuts(runCuts, lhcCuts, detCuts, evCuts);
168 TChain *chain = tagAna->QueryTags(runCuts, lhcCuts, detCuts, evCuts);
169 if (!chain || !chain->GetNtrees()) return NULL;
174 //______________________________________________________________________________
175 TChain* CreateChainFromAODFile(const char *rootfile, Bool_t isESD)
177 // Create a chain using the root file.
179 if ( !isESD) chain = new TChain("aodTree");
180 else chain = new TChain("esdTree");
181 chain->Add(rootfile);
182 if (!chain->GetNtrees()) return NULL;
187 //______________________________________________________________________________
188 TChain* CreateChainFromESDList(const char *esdList)
190 // Create a chain using tags from the run list.
191 TChain* chain = new TChain("esdTree");
192 ifstream inFile(esdList);
194 if (inFile.is_open()) {
195 while (! inFile.eof() ) {
196 inFileName.ReadLine(inFile,kFALSE);
197 if(!inFileName.EndsWith(".root")) continue;
198 chain->Add(inFileName.Data());
202 if (!chain->GetNtrees()) return NULL;
207 //______________________________________________________________________________
208 TChain* CreateChain(TString inputFileName, Bool_t isESD)
210 printf("*******************************\n");
211 printf("*** Getting the Chain ***\n");
212 printf("*******************************\n");
213 Int_t mode = GetMode(inputFileName);
214 if(mode == kInteractif_xml) return CreateChainFromCollection(inputFileName.Data());
215 else if (mode == kInteractif_ESDList) return CreateChainFromESDList(inputFileName.Data());
216 else if (mode == kLocal) return CreateChainFromAODFile(inputFileName.Data(),isESD);