]>
Commit | Line | Data |
---|---|---|
2fbc0b17 | 1 | //DEFINITION OF A FEW CONSTANTS |
2 | const Double_t ymin = -2.0 ; | |
3 | const Double_t ymax = 2.0 ; | |
4 | const Double_t ptmin = 0.0 ; | |
5 | const Double_t ptmax = 8.0 ; | |
6 | const Double_t phimin = 0 ; | |
7 | const Double_t phimax = 360 ; | |
8 | const Int_t mintrackrefsTPC = 2 ; | |
9 | const Int_t mintrackrefsITS = 3 ; | |
318a0e1f | 10 | const Int_t PDG = 310; |
2fbc0b17 | 11 | const Int_t minclustersTPC = 10 ; |
12 | const Int_t chargeV0 = 0 ; | |
13 | //---------------------------------------------------- | |
14 | ||
15 | Bool_t AliCFV0Task( | |
16 | const Bool_t useGrid = 1, | |
86c32a36 | 17 | const Bool_t readAOD = 0, |
2fbc0b17 | 18 | const char * kTagXMLFile="wn.xml", // XML file containing tags |
19 | ) | |
20 | { | |
21 | ||
22 | TBenchmark benchmark; | |
23 | benchmark.Start("AliSingleTrackTask"); | |
24 | ||
25 | AliLog::SetGlobalDebugLevel(0); | |
26 | ||
27 | Load(useGrid) ; //load the required libraries | |
28 | ||
29 | AliLog::SetGlobalDebugLevel(0); | |
30 | ||
31 | TChain * analysisChain ; | |
32 | ||
33 | if (useGrid) { //data located on AliEn | |
34 | TGrid::Connect("alien://") ; | |
35 | // Create an AliRunTagCuts and an AliEventTagCuts Object and impose some selection criteria | |
36 | AliRunTagCuts *runCuts = new AliRunTagCuts(); | |
37 | AliEventTagCuts *eventCuts = new AliEventTagCuts(); | |
38 | AliLHCTagCuts *lhcCuts = new AliLHCTagCuts(); | |
39 | AliDetectorTagCuts *detCuts = new AliDetectorTagCuts(); | |
40 | eventCuts->SetMultiplicityRange(0,20000); | |
41 | // Create an AliTagAnalysis Object and chain the tags | |
42 | AliTagAnalysis *tagAna = new AliTagAnalysis(); | |
43 | tagAna->SetType("ESD"); //for aliroot > v4-05 | |
44 | TAlienCollection *coll = TAlienCollection::Open(kTagXMLFile); | |
45 | TGridResult *tagResult = coll->GetGridResult("",0,0); | |
46 | tagResult->Print(); | |
47 | tagAna->ChainGridTags(tagResult); | |
48 | // Create a new esd chain and assign the chain that is returned by querying the tags | |
49 | analysisChain = tagAna->QueryTags(runCuts,lhcCuts,detCuts,eventCuts); | |
50 | } | |
51 | else {// local data | |
2fbc0b17 | 52 | //here put your input data path |
86c32a36 | 53 | if (readAOD) { |
54 | analysisChain = new TChain("aodTree"); | |
fb494025 | 55 | analysisChain->Add("your_data_path/001/AliAOD.root"); |
56 | analysisChain->Add("your_data_path/002/AliAOD.root"); | |
86c32a36 | 57 | } |
58 | else { | |
59 | analysisChain = new TChain("esdTree"); | |
fb494025 | 60 | analysisChain->Add("your_data_path/001/AliESDs.root"); |
61 | analysisChain->Add("your_data_path/002/AliESDs.root"); | |
86c32a36 | 62 | } |
2fbc0b17 | 63 | } |
64 | ||
65 | ||
66 | Info("AliCFV0Task",Form("CHAIN HAS %d ENTRIES",(Int_t)analysisChain->GetEntries())); | |
67 | ||
68 | //CONTAINER DEFINITION | |
69 | Info("AliCFV0Task","SETUP CONTAINER"); | |
70 | //the sensitive variables, their indices | |
71 | Int_t ipt = 0; | |
72 | Int_t iy = 1; | |
73 | //Setting up the container grid... | |
74 | Int_t nstep = 4 ; //number of selection steps MC | |
75 | const Int_t nvar = 2 ; //number of variables on the grid:pt,y,phi,vtx | |
76 | const Int_t nbin1 = 8 ; //bins in pt | |
77 | const Int_t nbin2 = 8 ; //bins in y | |
78 | //arrays for the number of bins in each dimension | |
79 | const Int_t iBin[nvar] ={nbin1,nbin2}; | |
80 | //arrays for lower bounds : | |
81 | Double_t binLim1[nbin1+1]; | |
82 | Double_t binLim2[nbin2+1]; | |
83 | //values for bin lower bounds | |
84 | for(Int_t i=0; i<=nbin1; i++) binLim1[i]=ptmin + (ptmax-ptmin)/nbin1*(Double_t)i ; | |
85 | for(Int_t i=0; i<=nbin2; i++) binLim2[i]=ymin + (ymax-ymin) /nbin2*(Double_t)i ; | |
86 | //one "container" for MC | |
87 | AliCFContainer* container = new AliCFContainer("container","container for V0s",nstep,nvar,iBin); | |
88 | //setting the bin limits | |
89 | container -> SetBinLimits(ipt,binLim1); | |
90 | container -> SetBinLimits(iy,binLim2); | |
91 | ||
92 | ||
93 | //CREATE THE CUTS ----------------------------------------------- | |
94 | ||
95 | // Gen-Level kinematic cuts | |
96 | AliCFTrackKineCuts *mcKineCuts = new AliCFTrackKineCuts("mcKineCuts","MC-level kinematic cuts"); | |
97 | mcKineCuts->SetPtRange(ptmin,ptmax); | |
98 | mcKineCuts->SetRapidityRange(ymin,ymax); | |
99 | mcKineCuts->SetChargeMC(0); | |
100 | ||
101 | AliCFParticleGenCuts* mcGenCuts = new AliCFParticleGenCuts("mcGenCuts","MC particle generation cuts"); | |
318a0e1f | 102 | //mcGenCuts->SetRequireIsPrimary(); //problem with some particles... |
2fbc0b17 | 103 | mcGenCuts->SetRequirePdgCode(PDG); |
104 | ||
105 | //Acceptance Cuts | |
106 | AliCFPairAcceptanceCuts *mcAccCuts = new AliCFPairAcceptanceCuts("mcAccCuts","MC acceptance cuts for V0"); | |
1925ad4d | 107 | mcAccCuts->GetNegCut()->SetMinNHitITS(mintrackrefsITS); |
108 | mcAccCuts->GetPosCut()->SetMinNHitITS(mintrackrefsITS); | |
109 | mcAccCuts->GetNegCut()->SetMinNHitTPC(mintrackrefsTPC); | |
110 | mcAccCuts->GetPosCut()->SetMinNHitTPC(mintrackrefsTPC); | |
2fbc0b17 | 111 | |
112 | // Rec-Level kinematic cuts | |
113 | AliCFTrackKineCuts *recKineCuts = new AliCFTrackKineCuts("recKineCuts","V0 rec-level kine cuts"); | |
114 | recKineCuts->SetPtRange(ptmin,ptmax); | |
115 | recKineCuts->SetRapidityRange(ymin,ymax); | |
318a0e1f | 116 | recKineCuts->SetChargeRec(0); |
2fbc0b17 | 117 | |
118 | AliCFPairQualityCuts *recQualityCuts = new AliCFPairQualityCuts("recQualityCuts","V0 rec-level quality cuts"); | |
1925ad4d | 119 | if (!readAOD) { |
120 | recQualityCuts->GetNegCut()->SetMinNClusterTPC(minclustersTPC); | |
121 | recQualityCuts->GetPosCut()->SetMinNClusterTPC(minclustersTPC); | |
122 | } | |
123 | recQualityCuts->GetNegCut()->SetStatus(AliESDtrack::kTPCrefit & AliESDtrack::kITSrefit); | |
124 | recQualityCuts->GetPosCut()->SetStatus(AliESDtrack::kTPCrefit & AliESDtrack::kITSrefit); | |
2fbc0b17 | 125 | |
126 | AliCFV0TopoCuts *recTopoCuts = new AliCFV0TopoCuts("recTopoCuts","V0 Topological Cuts"); | |
127 | recTopoCuts->SetMaxDcaDaughters(0.1); | |
128 | recTopoCuts->SetMinCosPointAngle(0.995); | |
129 | recTopoCuts->SetMinDcaNeg(0.1); | |
130 | recTopoCuts->SetMinDcaPos(0.1); | |
131 | ||
132 | ||
133 | AliCFPairPidCut* cutPID = new AliCFPairPidCut("cutPID","ESD_PID") ; | |
134 | Double_t prior_pp[AliPID::kSPECIES] = {0.0244519, | |
135 | 0.0143988, | |
136 | 0.805747 , | |
137 | 0.0928785, | |
138 | 0.0625243 }; | |
139 | ||
140 | Double_t prior_pbpb[AliPID::kSPECIES] = {0.0609, | |
141 | 0.1064, | |
142 | 0.7152 , | |
143 | 0.0442, | |
144 | 0.0733 }; | |
1925ad4d | 145 | cutPID->GetNegCut()->SetPriors(prior_pp); |
146 | cutPID->GetPosCut()->SetPriors(prior_pp); | |
147 | cutPID->GetNegCut()->SetDetectors("ITS TPC TRD"); | |
148 | cutPID->GetPosCut()->SetDetectors("ITS TPC TRD"); | |
149 | ||
150 | if (readAOD) { | |
151 | cutPID->GetNegCut()->SetAODmode(kTRUE); | |
152 | cutPID->GetPosCut()->SetAODmode(kTRUE); | |
153 | } | |
154 | else { | |
155 | cutPID->GetNegCut()->SetAODmode(kFALSE); | |
156 | cutPID->GetPosCut()->SetAODmode(kFALSE); | |
157 | } | |
158 | ||
159 | cutPID->GetNegCut()->SetProbabilityCut(0); | |
160 | cutPID->GetPosCut()->SetProbabilityCut(0); | |
161 | ||
2fbc0b17 | 162 | switch(TMath::Abs(PDG)) { |
1925ad4d | 163 | case 310 : |
164 | cutPID->GetNegCut()->SetParticleType(AliPID::kPion , kTRUE); | |
165 | cutPID->GetPosCut()->SetParticleType(AliPID::kPion , kTRUE); | |
166 | break; | |
167 | case 3122 : | |
168 | cutPID->GetNegCut()->SetParticleType(AliPID::kPion , kTRUE); | |
169 | cutPID->GetPosCut()->SetParticleType(AliPID::kProton, kTRUE); | |
170 | break; | |
171 | case -3122 : | |
172 | cutPID->GetNegCut()->SetParticleType(AliPID::kProton, kTRUE); | |
173 | cutPID->GetPosCut()->SetParticleType(AliPID::kPion , kTRUE); | |
174 | break; | |
2fbc0b17 | 175 | default : printf("UNDEFINED PID\n"); break; |
176 | } | |
177 | ||
178 | Info("AliCFV0Task","CREATE MC KINE CUTS"); | |
179 | TObjArray* mcList = new TObjArray(0) ; | |
180 | mcList->AddLast(mcKineCuts); | |
181 | mcList->AddLast(mcGenCuts); | |
182 | ||
183 | Info("AliCFV0Task","CREATE ACCEPTANCE CUTS"); | |
184 | TObjArray* accList = new TObjArray(0) ; | |
185 | accList->AddLast(mcAccCuts); | |
186 | ||
187 | Info("AliCFV0Task","CREATE RECONSTRUCTION CUTS"); | |
188 | TObjArray* recList = new TObjArray(0) ; | |
189 | recList->AddLast(recKineCuts); | |
190 | recList->AddLast(recQualityCuts); | |
191 | recList->AddLast(recTopoCuts); | |
192 | ||
193 | Info("AliCFV0Task","CREATE PID CUTS"); | |
194 | TObjArray* fPIDCutList = new TObjArray(0) ; | |
195 | fPIDCutList->AddLast(cutPID); | |
196 | ||
197 | ||
198 | //CREATE THE INTERFACE TO CORRECTION FRAMEWORK USED IN THE TASK | |
199 | Info("AliCFV0Task","CREATE INTERFACE AND CUTS"); | |
200 | AliCFManager* man = new AliCFManager() ; | |
201 | man->SetParticleContainer(container); | |
202 | man->SetParticleCutsList (AliCFManager::kPartGenCuts,mcList); | |
203 | man->SetParticleCutsList (AliCFManager::kPartAccCuts,accList); | |
204 | man->SetParticleCutsList (AliCFManager::kPartRecCuts,recList); | |
205 | man->SetParticleCutsList (AliCFManager::kPartSelCuts,fPIDCutList); | |
206 | ||
207 | //CREATE THE TASK | |
208 | Info("AliCFV0Task","CREATE TASK"); | |
209 | // create the task | |
210 | AliCFV0Task *task = new AliCFV0Task("AliCFV0Task"); | |
211 | task->SetCFManager(man); //here is set the CF manager | |
86c32a36 | 212 | if (!readAOD) task->SetRebuildV0s(kTRUE); |
2fbc0b17 | 213 | task->SetV0PDG(PDG); |
214 | ||
215 | //SETUP THE ANALYSIS MANAGER TO READ INPUT CHAIN AND WRITE DESIRED OUTPUTS | |
216 | Info("AliCFV0Task","CREATE ANALYSIS MANAGER"); | |
217 | // Make the analysis manager | |
218 | AliAnalysisManager *mgr = new AliAnalysisManager("TestManager"); | |
219 | ||
318a0e1f | 220 | if (useGrid) mgr->SetAnalysisType(AliAnalysisManager::kGridAnalysis); |
221 | else mgr->SetAnalysisType(AliAnalysisManager::kLocalAnalysis); | |
222 | ||
223 | AliMCEventHandler* mcHandler = new AliMCEventHandler(); | |
318a0e1f | 224 | mgr->SetMCtruthEventHandler(mcHandler); |
318a0e1f | 225 | |
86c32a36 | 226 | AliInputEventHandler* dataHandler ; |
227 | ||
228 | if (readAOD) dataHandler = new AliAODInputHandler(); | |
229 | else dataHandler = new AliESDInputHandler(); | |
230 | mgr->SetInputEventHandler(dataHandler); | |
318a0e1f | 231 | |
2fbc0b17 | 232 | // Create and connect containers for input/output |
233 | ||
234 | //input data | |
318a0e1f | 235 | AliAnalysisDataContainer *cinput0 = |
236 | mgr->CreateContainer("cchain0",TChain::Class(),AliAnalysisManager::kInputContainer); | |
237 | //slot 0 : default output tree (by default handled by AliAnalysisTaskSE) | |
238 | AliAnalysisDataContainer *coutput0 = mgr->CreateContainer("ctree0", TTree::Class(),AliAnalysisManager::kOutputContainer,"outputV0.root"); | |
2fbc0b17 | 239 | // output histo (number of events processed) |
318a0e1f | 240 | AliAnalysisDataContainer *coutput1 = |
241 | mgr->CreateContainer("chist0", TH1I::Class(),AliAnalysisManager::kOutputContainer,"outputV0.root"); | |
2fbc0b17 | 242 | // output Correction Framework Container (for acceptance & efficiency calculations) |
318a0e1f | 243 | AliAnalysisDataContainer *coutput2 = |
244 | mgr->CreateContainer("ccontainer0", AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,"outputV0.root"); | |
245 | ||
246 | cinput0->SetData(analysisChain); | |
2fbc0b17 | 247 | |
248 | mgr->AddTask(task); | |
9f9224a6 | 249 | mgr->ConnectInput (task,0,mgr->GetCommonInputContainer()); |
2fbc0b17 | 250 | mgr->ConnectOutput(task,0,coutput0); |
251 | mgr->ConnectOutput(task,1,coutput1); | |
318a0e1f | 252 | mgr->ConnectOutput(task,2,coutput2); |
2fbc0b17 | 253 | |
2fbc0b17 | 254 | |
2fbc0b17 | 255 | Info("AliCFV0Task","READY TO RUN"); |
256 | //RUN !!! | |
257 | if (mgr->InitAnalysis()) { | |
258 | mgr->PrintStatus(); | |
259 | mgr->StartAnalysis("local",analysisChain); | |
260 | } | |
261 | ||
262 | benchmark.Stop("AliCFV0Task"); | |
263 | benchmark.Show("AliCFV0Task"); | |
264 | ||
265 | return kTRUE ; | |
266 | } | |
267 | ||
268 | void Load(Bool_t useGrid) { | |
86c32a36 | 269 | |
2fbc0b17 | 270 | //load the required aliroot libraries |
271 | gSystem->Load("libANALYSIS") ; | |
318a0e1f | 272 | gSystem->Load("libANALYSISalice") ; |
86c32a36 | 273 | gSystem->Load("libCORRFW.so") ; |
2fbc0b17 | 274 | |
86c32a36 | 275 | //compile online the task class |
276 | gSystem->SetIncludePath("-I. -I$ALICE_ROOT/include -I$ROOTSYS/include"); | |
2fbc0b17 | 277 | gROOT->LoadMacro("./AliCFV0Task.cxx+"); |
278 | } |