]>
Commit | Line | Data |
---|---|---|
c0757458 | 1 | // |
2 | // Particle cuts | |
3 | // | |
4 | const Double_t etamin = -0.9; | |
5 | const Double_t etamax = 0.9; | |
6 | const Double_t ptmin = 0.0; | |
7 | const Double_t ptmax = 24.0; | |
8 | const Double_t phimin = -2*TMath::Pi(); | |
9 | const Double_t phimax = 2*TMath::Pi(); | |
10 | const Double_t thetamin = 0; | |
11 | const Double_t thetamax = TMath::Pi(); | |
12 | const Double_t zvtxmin = -10.0; | |
13 | const Double_t zvtxmax = 10.0; | |
14 | // | |
15 | const Int_t mintrackrefsTPC = 5; | |
16 | const Int_t mintrackrefsITS = 4; | |
17 | const Int_t mintrackrefsTOF = 0; | |
18 | const Int_t mintrackrefsMUON = 0; | |
19 | const Int_t minclustersTPC = 70; | |
20 | const Int_t minclustersITS = 2; | |
21 | const Bool_t TPCRefit = kTRUE; | |
22 | const Bool_t ITSRefit = kFALSE; | |
305e50f1 | 23 | const Bool_t ischarged = kTRUE; |
c0757458 | 24 | const Int_t fBit = 0; |
2d9f660a | 25 | const TString centralityEstimator = "V0M"; |
c0757458 | 26 | |
27 | // | |
28 | // Container settings | |
29 | // | |
30 | // Container mutliplicity bins | |
31 | const Float_t multmin_0_20 = 0; | |
32 | const Float_t multmax_0_20 = 20; | |
33 | const Float_t multmin_20_50 = 20; | |
34 | const Float_t multmax_20_50 = 50; | |
35 | const Float_t multmin_50_102 = 50; | |
36 | const Float_t multmax_50_102 = 102; | |
37 | // Container Pt bins | |
38 | Double_t ptmin_0_2 = 0.0; | |
39 | Double_t ptmax_0_2 = 2.0; | |
40 | Double_t ptmin_2_6 = 2.0; | |
41 | Double_t ptmax_2_6 = 6.0; | |
42 | Double_t ptmin_6_8 = 6.0; | |
43 | Double_t ptmax_6_8 = 8.0; | |
44 | Double_t ptmin_8_16 = 8.0; | |
45 | Double_t ptmax_8_16 = 16.0; | |
46 | Double_t ptmin_16_24 = 16.0; | |
47 | Double_t ptmax_16_24 = 24.0; | |
2d9f660a | 48 | // Container centrality bins |
49 | const Float_t centmin_0_10 = 0.; | |
50 | const Float_t centmax_0_10 = 10.; | |
51 | const Float_t centmin_10_60 = 10.; | |
52 | const Float_t centmax_10_60 = 60.; | |
53 | const Float_t centmin_60_100 = 60.; | |
54 | const Float_t centmax_60_100 = 100.; | |
c0757458 | 55 | |
56 | ||
57 | AliCFSingleTrackEfficiencyTask *AddSingleTrackEfficiencyTask(const Bool_t readAOD = 0, // Flag to read AOD:1 or ESD:0 | |
58 | TString suffix="", // suffix for the output directory | |
2d9f660a | 59 | AliPID::EParticleType specie=AliPID::kPion, Int_t pdgcode=0, //particle specie |
60 | ULong64_t triggerMask=AliVEvent::kAnyINT, | |
61 | Bool_t useCentrality = kFALSE | |
c0757458 | 62 | ) |
63 | { | |
64 | ||
65 | Info("AliCFSingleTrackEfficiencyTask","SETUP CONTAINER"); | |
66 | ||
67 | // | |
68 | // Setting up the container | |
69 | // | |
70 | // Variables | |
2d9f660a | 71 | const Int_t nvar = 7; // number of variables on the grid: pt, y, phi, theta, zvtx, multiplicity, centrality |
c0757458 | 72 | UInt_t nstep = 8; // number of container steps |
73 | const UInt_t ipt = 0; | |
74 | const UInt_t iy = 1; | |
75 | const UInt_t iphi = 2; | |
76 | const UInt_t itheta = 3; | |
77 | const UInt_t izvtx = 4; | |
78 | const UInt_t imult = 5; | |
2d9f660a | 79 | const UInt_t imult = 5; |
80 | const UInt_t icent = 6; | |
c0757458 | 81 | // |
82 | // Containter bining | |
83 | // A1. Bins variation by hand for pt | |
84 | const Int_t nbinpt_0_2 = 8; //bins in pt from 0 to 2 GeV | |
85 | const Int_t nbinpt_2_6 = 8; //bins in pt from 2 to 6 GeV | |
86 | const Int_t nbinpt_6_8 = 2; //bins in pt from 6 to 8 GeV | |
87 | const Int_t nbinpt_8_16 = 4; //bins in pt from 8 to 16 GeV | |
88 | const Int_t nbinpt_16_24 = 1; //bins in pt from 16 to 24 GeV | |
89 | // A2. Bins variation by hand for other variables | |
90 | const Int_t nbin2 = 9; //bins in eta | |
91 | const Int_t nbin3 = 9; //bins in phi | |
92 | const Int_t nbin4 = 9; //bins in theta | |
93 | const Int_t nbin5 = 10; //bins in zvtx | |
94 | // A3. Bins for multiplicity | |
95 | const Int_t nbinmult = 48; //bins in multiplicity (total number) | |
96 | const Int_t nbinmult_0_20 = 20; //bins in multiplicity between 0 and 20 | |
97 | const Int_t nbinmult_20_50 = 15; //bins in multiplicity between 20 and 50 | |
98 | const Int_t nbinmult_50_102 = 13; //bins in multiplicity between 50 and 102 | |
2d9f660a | 99 | // A4. Bins for centrality |
100 | const Int_t nbincent = 28; //bins in centrality | |
101 | const Int_t nbincent_0_10 = 4; //bins in centrality between 0 and 10 | |
102 | const Int_t nbincent_10_60 = 20; //bins in centrality between 10 and 60 | |
103 | const Int_t nbincent_60_100 = 4; //bins in centrality between 60 and 100 | |
c0757458 | 104 | |
105 | //arrays for the number of bins in each dimension | |
106 | Int_t iBin[nvar]; | |
107 | iBin[0]=nbinpt_0_2+nbinpt_2_6+nbinpt_6_8+nbinpt_8_16+nbinpt_16_24; | |
108 | iBin[1]=nbin2; | |
109 | iBin[2]=nbin3; | |
110 | iBin[3]=nbin4; | |
111 | iBin[4]=nbin5; | |
112 | iBin[5]=nbinmult; | |
2d9f660a | 113 | iBin[6]=nbincent; |
c0757458 | 114 | |
115 | //arrays for lower bounds : | |
116 | Double_t *binLimpT = new Double_t[iBin[0]+1]; | |
117 | Double_t *binLim2 = new Double_t[iBin[1]+1]; | |
118 | Double_t *binLim3 = new Double_t[iBin[2]+1]; | |
119 | Double_t *binLim4 = new Double_t[iBin[3]+1]; | |
120 | Double_t *binLim5 = new Double_t[iBin[4]+1]; | |
121 | Double_t *binLimmult = new Double_t[iBin[5]+1]; | |
2d9f660a | 122 | Double_t *binLimcent = new Double_t[iBin[6]+1]; |
c0757458 | 123 | |
124 | // set the pt bins | |
125 | for(Int_t i=0; i<=nbinpt_0_2; i++) binLimpT[i]=(Double_t)ptmin_0_2 + (ptmax_0_2-ptmin_0_2)/nbinpt_0_2*(Double_t)i ; | |
126 | for(Int_t i=0; i<=nbinpt_2_6; i++) binLimpT[i+nbinpt_0_2]=(Double_t)ptmin_2_6 + (ptmax_2_6-ptmin_2_6)/nbinpt_2_6*(Double_t)i ; | |
127 | for(Int_t i=0; i<=nbinpt_6_8; i++) binLimpT[i+nbinpt_0_2+nbinpt_2_6]=(Double_t)ptmin_6_8 + (ptmax_6_8-ptmin_6_8)/nbinpt_6_8*(Double_t)i ; | |
128 | for(Int_t i=0; i<=nbinpt_8_16; i++) binLimpT[i+nbinpt_0_2+nbinpt_2_6+nbinpt_6_8]=(Double_t)ptmin_8_16 + (ptmax_8_16-ptmin_8_16)/nbinpt_8_16*(Double_t)i ; | |
129 | for(Int_t i=0; i<=nbinpt_16_24; i++) binLimpT[i+nbinpt_0_2+nbinpt_2_6+nbinpt_6_8+nbinpt_8_16]=(Double_t)ptmin_16_24 + (ptmax_16_24-ptmin_16_24)/nbinpt_16_24*(Double_t)i; | |
130 | ||
131 | // Other Variables | |
132 | for(Int_t i=0; i<=nbin2; i++) binLim2[i]=(Double_t)etamin + (etamax-etamin)/nbin2*(Double_t)i ; | |
133 | for(Int_t i=0; i<=nbin3; i++) binLim3[i]=(Double_t)phimin + (phimax-phimin)/nbin3*(Double_t)i ; | |
134 | for(Int_t i=0; i<=nbin4; i++) binLim4[i]=(Double_t)thetamin + (thetamax-thetamin)/nbin4*(Double_t)i ; | |
135 | for(Int_t i=0; i<=nbin5; i++) binLim5[i]=(Double_t)zvtxmin + (zvtxmax-zvtxmin)/nbin5*(Double_t)i ; | |
136 | ||
137 | // multiplicity bining.. | |
138 | for(Int_t i=0; i<=nbinmult_0_20; i++) binLimmult[i]=(Double_t)multmin_0_20 + (multmax_0_20-multmin_0_20)/nbinmult_0_20*(Double_t)i ; | |
139 | for(Int_t i=0; i<=nbinmult_20_50; i++) binLimmult[i+nbinmult_0_20]=(Double_t)multmin_20_50 + (multmax_20_50-multmin_20_50)/nbinmult_20_50*(Double_t)i ; | |
140 | for(Int_t i=0; i<=nbinmult_50_102; i++) binLimmult[i+nbinmult_0_20+nbinmult_20_50]=(Double_t)multmin_50_102 + (multmax_50_102-multmin_50_102)/nbinmult_50_102*(Double_t)i ; | |
141 | ||
2d9f660a | 142 | // centrality bining |
143 | for(Int_t i=0; i<=nbincent_0_10; i++) binLimcent[i]=(Double_t)centmin_0_10 + (centmax_0_10-centmin_0_10)/nbincent_0_10*(Double_t)i; | |
144 | for(Int_t i=0; i<=nbincent_10_60; i++) binLimcent[i+nbincent_0_10]=(Double_t)centmin_10_60 + (centmax_10_60-centmin_10_60)/nbincent_10_60*(Double_t)i; | |
145 | for(Int_t i=0; i<=nbincent_60_100; i++) binLimcent[i+nbincent_0_10+nbincent_10_60]=(Double_t)centmin_60_100 + (centmax_60_100-centmin_60_100)/nbincent_60_100*(Double_t)i; | |
c0757458 | 146 | |
147 | // Container | |
148 | AliCFContainer* container = new AliCFContainer("container","container for tracks",nstep,nvar,iBin); | |
149 | container -> SetBinLimits(ipt,binLimpT); // pt | |
150 | container -> SetBinLimits(iy,binLim2); // eta | |
151 | container -> SetBinLimits(iphi,binLim3); // phi | |
152 | container -> SetBinLimits(itheta,binLim4); // theta | |
153 | container -> SetBinLimits(izvtx,binLim5); // Zvtx | |
154 | container -> SetBinLimits(imult,binLimmult);// multiplicity | |
2d9f660a | 155 | container -> SetBinLimits(icent,binLimcent);// centrality |
c0757458 | 156 | |
157 | // Variable Titles | |
158 | container -> SetVarTitle(ipt,"pt"); | |
159 | container -> SetVarTitle(iy, "y"); | |
160 | container -> SetVarTitle(iphi,"phi"); | |
161 | container -> SetVarTitle(itheta, "theata"); | |
162 | container -> SetVarTitle(izvtx, "Zvtx"); | |
163 | container -> SetVarTitle(imult, "Multiplicity"); | |
2d9f660a | 164 | container -> SetVarTitle(icent, "Centrality"); |
c0757458 | 165 | |
166 | // Step Titles | |
167 | container -> SetStepTitle(0, " MC Particle with Generated Cuts"); | |
168 | container -> SetStepTitle(1, " MC Particle with Kine Acceptance Cuts"); | |
169 | container -> SetStepTitle(2, " MC Particle with Track Ref Acceptance Cuts"); | |
170 | container -> SetStepTitle(3, " Total Reconstructed Particle "); | |
171 | container -> SetStepTitle(4, " Reco Particle With Kine Acceptance Cuts"); | |
172 | container -> SetStepTitle(5, " Reco Particle to MC True pt particles "); | |
173 | container -> SetStepTitle(6, " Reco Particle With Quality Cuts"); | |
174 | container -> SetStepTitle(7, " Reco PID With Quality Cuts"); | |
175 | ||
176 | ||
177 | // SET TLIST FOR QA HISTOS | |
178 | TList* qaList = new TList(); | |
179 | TObjArray* emptyList = new TObjArray(0); | |
180 | ||
181 | //CREATE THE INTERFACE TO CORRECTION FRAMEWORK USED IN THE TASK | |
182 | printf("CREATE INTERFACE AND CUTS\n"); | |
183 | AliCFManager* man = new AliCFManager(); | |
184 | ||
185 | man->SetNStepEvent(2); | |
186 | man->SetEventContainer(container); | |
187 | man->SetEventCutsList(0,emptyList);//evtmcList); | |
188 | man->SetEventCutsList(1,emptyList);//evtrecoList); | |
189 | ||
190 | man->SetParticleContainer(container); | |
191 | man->SetParticleCutsList(0,emptyList);//mcGenList); | |
192 | man->SetParticleCutsList(1,emptyList);//mcKineList); | |
193 | man->SetParticleCutsList(2,emptyList);//mcaccList); | |
194 | man->SetParticleCutsList(3,emptyList);//evtrecoPureList); | |
195 | man->SetParticleCutsList(4,emptyList);//recKineList); | |
196 | man->SetParticleCutsList(5,emptyList); | |
197 | man->SetParticleCutsList(6,emptyList); | |
198 | man->SetParticleCutsList(7,emptyList); | |
199 | ||
200 | // Simulated particle & event cuts | |
201 | AliSingleTrackEffCuts* cuts = new AliSingleTrackEffCuts(); | |
202 | cuts->SetPtRange(ptmin,ptmax); | |
203 | cuts->SetEtaRange(etamin,etamax); | |
305e50f1 | 204 | cuts->SetIsCharged(ischarged); |
c0757458 | 205 | cuts->SetMinVtxContr(1); |
206 | cuts->SetMaxVtxZ(zvtxmax); | |
207 | cuts->SetNumberOfClusters(mintrackrefsITS,mintrackrefsTPC,mintrackrefsTOF,mintrackrefsMUON); | |
2d9f660a | 208 | cuts->SetTriggerMask(triggerMask); |
c0757458 | 209 | cuts->SetIsAOD(readAOD); |
210 | // | |
211 | // Pid selection here | |
212 | // | |
213 | if(pdgcode>0){ | |
214 | cuts->SetUsePid(true); | |
215 | cuts->SetParticleSpecie(specie); | |
216 | cuts->SetPdgCode(pdgcode); | |
217 | // | |
218 | const Int_t nlims=1; | |
219 | Float_t plims[nlims+1]={0.,999.}; //TPC limits in momentum [GeV/c] | |
220 | Float_t sigmas[nlims]={3.}; | |
221 | cuts->SetUseTPCPid(); | |
222 | cuts->SetTPCSigmaPtBins(nlims,plims,sigmas); | |
223 | cuts->SetMaximumPTPC(4.); | |
224 | // | |
225 | const Int_t nlims2=1; | |
226 | Float_t plims2[nlims2+1]={0.,999.}; //TPC limits in momentum [GeV/c] | |
227 | Float_t sigmas2[nlims2]={3.}; | |
228 | cuts->SetUseTOFPid(); | |
229 | cuts->SetTOFSigmaPtBins(nlims2,plims2,sigmas2); | |
230 | cuts->SetMaximumPTOF(4.); | |
231 | } | |
232 | ||
233 | // | |
234 | // Track Quality cuts via ESD track cuts | |
235 | // | |
236 | AliESDtrackCuts* QualityCuts = new AliESDtrackCuts(); | |
237 | QualityCuts->SetRequireSigmaToVertex(kFALSE); | |
238 | QualityCuts->SetMinNClustersTPC(minclustersTPC); | |
239 | QualityCuts->SetMinNClustersITS(minclustersITS); | |
240 | QualityCuts->SetRequireTPCRefit(TPCRefit); | |
241 | QualityCuts->SetRequireITSRefit(ITSRefit); | |
242 | QualityCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny); | |
243 | QualityCuts->SetMinDCAToVertexXY(0.); | |
244 | QualityCuts->SetEtaRange(etamin,etamax); | |
245 | QualityCuts->SetPtRange(ptmin,ptmax); | |
246 | ||
247 | ||
248 | //CREATE THE TASK | |
249 | printf("CREATE CF Single track task\n"); | |
250 | ||
251 | AliCFSingleTrackEfficiencyTask *task = new AliCFSingleTrackEfficiencyTask("AliCFSingleTrackEfficiencyTask",QualityCuts,cuts); | |
d07c54b9 | 252 | if(readAOD) task->SetFilterBit(kTRUE); |
253 | else task->SetFilterBit(kFALSE); | |
c0757458 | 254 | task->SetFilterType(fBit); |
2d9f660a | 255 | // task->SelectCollisionCandidates(triggerMask);//AliVEvent::kMB); |
256 | if(useCentrality) task->SetUseCentrality(useCentrality,centralityEstimator); | |
c0757458 | 257 | task->SetCFManager(man); //here is set the CF manager |
258 | ||
259 | // | |
260 | // Get the pointer to the existing analysis manager via the static access method. | |
261 | //============================================================================== | |
262 | AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); | |
263 | if (!mgr) { | |
264 | ::Error("AddTask", "No analysis manager to connect to."); | |
265 | return NULL; | |
266 | } | |
267 | ||
268 | // This task requires an ESD or AOD input handler and an AOD output handler. | |
269 | // Check this using the analysis manager. | |
270 | //=============================================================================== | |
271 | TString type = mgr->GetInputEventHandler()->GetDataType(); | |
272 | if (!type.Contains("ESD") && !type.Contains("AOD")) { | |
273 | ::Error("AddSingleTrackEfficiencyTask", "AliCFSingleTrackEfficiency task needs the manager to have an ESD or AOD input handler."); | |
274 | return NULL; | |
275 | } | |
276 | ||
277 | mgr->AddTask(task); | |
278 | printf(" Create the output container\n"); | |
279 | ||
280 | // | |
281 | // Create and connect containers for input/output | |
282 | // | |
283 | // ----- output data ----- | |
284 | TString outputfile = AliAnalysisManager::GetCommonFileName(); | |
285 | TString input1name="cchain0"; | |
286 | TString output2name="HistEventsProcessed", output3name="container",output4name="list",output5name="ESDtrackCuts",output6name="MCtrackCuts"; | |
287 | outputfile += ":PWGPP_CFSingleTrack"; | |
288 | outputfile += suffix; | |
289 | output2name += suffix; | |
290 | output3name += suffix; | |
291 | output4name += suffix; | |
292 | output5name += suffix; | |
293 | output6name += suffix; | |
294 | ||
295 | ||
296 | // ------ input data ------ | |
297 | AliAnalysisDataContainer *cinput0 = mgr->GetCommonInputContainer(); | |
298 | // ----- output data ----- | |
299 | // output TH1I for event counting | |
300 | AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(output2name, TH1I::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data()); | |
301 | // output Correction Framework Container (for acceptance & efficiency calculations) | |
302 | AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(output3name, AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data()); | |
303 | // output QA histograms | |
304 | AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(output4name, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data()); | |
305 | // output ESD track cuts for book keeping | |
306 | AliAnalysisDataContainer *coutput4 = mgr->CreateContainer(output5name, AliESDtrackCuts::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data()); | |
307 | // output event and particle selection cuts for book keeping | |
308 | AliAnalysisDataContainer *coutput5 = mgr->CreateContainer(output6name, AliSingleTrackEffCuts::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data()); | |
309 | ||
310 | mgr->ConnectInput(task,0,mgr->GetCommonInputContainer()); | |
311 | mgr->ConnectOutput(task,1,coutput1); | |
312 | mgr->ConnectOutput(task,2,coutput2); | |
313 | mgr->ConnectOutput(task,3,coutput3); | |
314 | mgr->ConnectOutput(task,4,coutput4); | |
315 | mgr->ConnectOutput(task,5,coutput5); | |
316 | ||
317 | return task; | |
318 | } |