]>
Commit | Line | Data |
---|---|---|
8c06b662 | 1 | void InitHistograms(AliDielectron *die, Int_t cutDefinition); |
2 | void InitCF(AliDielectron* die, Int_t cutDefinition); | |
3 | ||
4 | void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition); | |
5 | void SetupPairCuts(AliDielectron *die, Int_t cutDefinition); | |
6 | ||
7 | void AddMCSignals(AliDielectron *die); | |
8 | void SetEtaCorrection(); | |
9 | TVectorD *GetRunNumbers(); | |
10 | ||
11 | AliESDtrackCuts *SetupESDtrackCuts(Int_t cutDefinition); | |
12 | ||
13 | TString names=("TPC;TOF;TRD;rec;TOFTRD;TOFTRD2;ITScls;ITSamy;dca;chi2;Gam0;Gam01;Gam05;Gam10;Gam15;Gam20;EtaGap01;EtaGap02;EtaGap03;EtaGap04;EtaGap05;SubLS;SubRndm"); | |
14 | enum { kTPC=0, kTOF, kTRD, krec, kTOFTRD, kTOFTRD2, kITScls, kITSamy, kDCA, kChi, kGam0, kGam01, kGam05, kGam10, kGam15, kGam20, kEtaGap01, kEtaGap02, kEtaGap03, kEtaGap04, kEtaGap05, kSubLS, kSubRndm }; | |
15 | ||
16 | TObjArray *arrNames=names.Tokenize(";"); | |
17 | const Int_t nDie=arrNames->GetEntries(); | |
18 | ||
19 | AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition) | |
20 | { | |
21 | // | |
22 | // Setup the instance of AliDielectron | |
23 | // | |
24 | ||
25 | // MC event handler? | |
26 | Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0); | |
27 | ||
28 | //ESD handler? | |
29 | Bool_t isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class()); | |
30 | ||
31 | // switch off some configurations | |
32 | switch(cutDefinition) { | |
33 | case kTPC: | |
34 | case kTOF: | |
35 | case kTRD: | |
36 | return 0x0; | |
37 | break; | |
38 | //case kTOFTRD: | |
39 | case krec: | |
40 | if(!hasMC) return 0x0; | |
41 | break; | |
42 | //case kTOFTRD2: | |
43 | case kITScls: | |
44 | case kITSamy: | |
45 | case kDCA: | |
46 | case kChi: | |
47 | return 0x0; | |
48 | break; | |
49 | // case kGam0: | |
50 | // case kGam01: | |
51 | // case kGam05: | |
52 | // case kGam10: | |
53 | // case kGam15: | |
54 | // case kGam20: | |
55 | case kEtaGap01: | |
56 | case kEtaGap02: | |
57 | case kEtaGap03: | |
58 | case kEtaGap04: | |
59 | case kEtaGap05: | |
60 | case kSubLS: | |
61 | case kSubRndm: | |
62 | if( hasMC) return 0x0; | |
63 | break; | |
64 | } | |
65 | ||
66 | // create the actual framework object | |
67 | TString name=Form("%02d",cutDefinition); | |
68 | if (cutDefinition<arrNames->GetEntriesFast()){ | |
69 | name=arrNames->At(cutDefinition)->GetName(); | |
70 | } | |
71 | AliDielectron *die = new AliDielectron(Form("%s",name.Data()), | |
72 | Form("Track cuts: %s",name.Data())); | |
73 | ||
74 | // Monte Carlo Signals and TRD efficiency tables | |
75 | if(hasMC) { | |
76 | AddMCSignals(die); | |
77 | ||
78 | // trd tables | |
79 | TString pidTab="$TRAIN_ROOT/util/dielectron/dielectron/TRDpidEff_eleProb07_TRDntr4_6.root"; | |
80 | TString trainRoot=gSystem->Getenv("TRAIN_ROOT"); | |
81 | if (trainRoot.IsNull()) pidTab="../PWGDQ/dielectron/files/TRDpidEff_eleProb07_TRDntr4_6.root"; | |
82 | ||
83 | if (gSystem->AccessPathName(gSystem->ExpandPathName(pidTab.Data()))) | |
84 | Error("ConfigPbPb","PID table not found: %s",pidTab.Data()); | |
85 | else | |
86 | die->SetTRDcorrectionFilename(pidTab.Data()); | |
87 | } | |
88 | ||
89 | // cut setup | |
90 | SetupTrackCuts(die,cutDefinition); | |
91 | SetupPairCuts(die,cutDefinition); | |
92 | ||
93 | // histogram setup | |
94 | if(cutDefinition == kTOFTRD || | |
95 | cutDefinition == kGam0 || | |
96 | cutDefinition == kTOFTRD2 || | |
97 | cutDefinition >= kEtaGap01 ) | |
98 | InitHistograms(die,cutDefinition); | |
99 | ||
100 | // CF container setup | |
101 | if(cutDefinition < kEtaGap01 || | |
102 | cutDefinition == kSubRndm ) | |
103 | InitCF(die,cutDefinition); | |
104 | ||
105 | // bgrd estimators | |
106 | if(!hasMC) { | |
107 | ||
108 | if(cutDefinition == kTOFTRD) { | |
109 | // rotations | |
110 | AliDielectronTrackRotator *rot=new AliDielectronTrackRotator; | |
111 | rot->SetIterations(10); | |
112 | rot->SetConeAnglePhi(TMath::Pi()); | |
113 | rot->SetStartAnglePhi(TMath::Pi()); | |
114 | die->SetTrackRotator(rot); | |
115 | // mixing | |
116 | AliDielectronMixingHandler *mix=new AliDielectronMixingHandler; | |
117 | mix->AddVariable(AliDielectronVarManager::kZvPrim,20,-10.,10.); | |
118 | mix->AddVariable(AliDielectronVarManager::kCentrality,"0,5,10,20,50,80"); | |
119 | mix->SetMixType(AliDielectronMixingHandler::kAll); | |
120 | mix->SetDepth(50); | |
121 | die->SetMixingHandler(mix); | |
122 | } | |
123 | ||
124 | ||
125 | // TPC event plane configurations | |
126 | Double_t gGap; | |
127 | switch(cutDefinition) { | |
128 | case kEtaGap01: gGap=0.1; break; | |
129 | case kEtaGap02: gGap=0.2; break; | |
130 | case kEtaGap03: gGap=0.3; break; | |
131 | case kEtaGap04: gGap=0.4; break; | |
132 | case kEtaGap05: gGap=0.5; break; | |
133 | default: gGap=0.0; | |
134 | } | |
135 | ||
136 | AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI"); | |
137 | poi->AddCut(AliDielectronVarManager::kM,2.92,3.16); // particles of interest, jpsi mass window | |
138 | die->GetEventPlanePOIPreFilter().AddCuts(poi); | |
139 | ||
140 | AliDielectronVarCuts *poiTrk = new AliDielectronVarCuts("PoItracks","PoItracks"); | |
141 | poiTrk->AddCut(AliDielectronVarManager::kPt,0.8,1e30); | |
142 | die->GetEventPlanePreFilter().AddCuts(poiTrk); | |
143 | ||
144 | if(cutDefinition >= kEtaGap01 && | |
145 | cutDefinition < kSubLS ) { | |
146 | AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap"); | |
147 | etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE); | |
148 | die->GetEventPlanePreFilter().AddCuts(etaGap); | |
149 | } | |
150 | ||
151 | if(cutDefinition==kSubLS) die->SetLikeSignSubEvents(); | |
152 | die->SetPreFilterEventPlane(); | |
153 | } | |
154 | ||
155 | // prefilter settings | |
156 | if(cutDefinition == kTOFTRD2) | |
157 | die->SetPreFilterAllSigns(); | |
158 | else | |
159 | die->SetPreFilterUnlikeOnly(); | |
160 | ||
161 | // setup eta correction | |
162 | if(isESD) SetEtaCorrection(); | |
163 | ||
164 | return die; | |
165 | } | |
166 | ||
167 | //______________________________________________________________________________________ | |
168 | void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition) | |
169 | { | |
170 | // | |
171 | // Setup the track cuts | |
172 | // | |
173 | ||
174 | // Quality cuts | |
175 | AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND); | |
176 | die->GetTrackFilter().AddCuts(cuts); | |
177 | ||
178 | //Pt cut, should make execution a bit faster | |
179 | AliDielectronVarCuts *pt = new AliDielectronVarCuts("Pt>.8","Pt>.8"); | |
180 | pt->AddCut(AliDielectronVarManager::kPt,0.8,1e30); | |
181 | cuts->AddCut(pt); | |
182 | ||
183 | //ESD track cuts | |
184 | Bool_t isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class()); | |
185 | if(isESD) cuts->AddCut(SetupESDtrackCuts(cutDefinition)); | |
186 | ||
187 | // track cuts ESD and AOD | |
188 | AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts"); | |
189 | varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0); | |
190 | varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0); | |
191 | varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9); | |
192 | varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0); | |
193 | varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0); | |
194 | switch(cutDefinition) { | |
195 | case kTOFTRD2: varCuts->AddCut(AliDielectronVarManager::kITSLayerFirstCls,-0.01,0.5); //ITS(0) = SPDfirst | |
196 | break; | |
197 | default: varCuts->AddCut(AliDielectronVarManager::kITSLayerFirstCls,-0.01,1.5); //ITS(0-1) = SPDany | |
198 | break; | |
199 | } | |
200 | cuts->AddCut(varCuts); | |
201 | ||
202 | AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts"); | |
203 | trkCuts->SetRequireITSRefit(kTRUE); | |
204 | trkCuts->SetRequireTPCRefit(kTRUE); | |
205 | cuts->AddCut(trkCuts); | |
206 | ||
207 | //Do we have an MC handler? | |
208 | Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0); | |
209 | ||
210 | /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ | |
211 | AliDielectronPID *pid = new AliDielectronPID("PID","PID"); | |
212 | ||
213 | ////////////////////////////////// DATA | |
214 | if(!hasMC) { | |
215 | pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.); // merge with below ones vv | |
216 | pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,3.5,0.,0.,kTRUE); | |
217 | //if((cutDefinition!=kTOF && cutDefinition<kTOFTRD) || cutDefinition>=kGam0) | |
218 | pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE); | |
219 | ||
220 | if(cutDefinition==kTRD || cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2) | |
221 | pid->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE, | |
222 | AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality); | |
223 | } | |
224 | ||
225 | ////////////////////////////////// MC | |
226 | if(hasMC) { | |
227 | ||
228 | // electron | |
229 | pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.); //merge with data only ^^ | |
230 | Double_t nSigmaPi = 3.5; Double_t nSigmaP = 3.5; | |
231 | Double_t resolution=0.0549; | |
232 | Double_t BBpro[5] = {0}; | |
233 | Double_t BBpio[5] = {0}; | |
234 | ||
235 | for(Int_t icent=0; icent<8; icent++) { | |
236 | ||
237 | switch (icent) { | |
238 | case 0: // 0-10% | |
239 | BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848; | |
240 | BBpio[0] = 0.0252122; BBpio[1] = 38.8991; BBpio[2] = 4.0901e-11; BBpio[3] = 5.27988; BBpio[4] = 4.3108; | |
241 | break; | |
242 | case 1: // 10-20% | |
243 | BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999; | |
244 | BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093; | |
245 | break; | |
246 | case 2: // 20-30% | |
247 | BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999; | |
248 | BBpio[0] = 0.0263205; BBpio[1] = 37.9307; BBpio[2] = 4.29724e-11; BBpio[3] = 5.74458; BBpio[4] = 4.32459; | |
249 | break; | |
250 | case 3: // 30-40% | |
251 | BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999; | |
252 | BBpio[0] = 0.026294; BBpio[1] = 39.0346; BBpio[2] = 4.12261e-11; BBpio[3] = 5.28808; BBpio[4] = 4.31301; | |
253 | break; | |
254 | case 4: // 40-50% | |
255 | BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999; | |
256 | BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363; | |
257 | break; | |
258 | case 5: // 50-60% | |
259 | BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999; | |
260 | BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363; | |
261 | break; | |
262 | case 6: // 60-70% | |
263 | BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848; | |
264 | BBpio[0] = 0.026302; BBpio[1] = 38.6888; BBpio[2] = 3.56792e-11; BBpio[3] = 5.2465; BBpio[4] = 4.31094; | |
265 | break; | |
266 | case 7: // 70-80% | |
267 | BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999; | |
268 | BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363; | |
269 | break; | |
270 | case 8: // 80-90% | |
271 | BBpro[0] = 0.0313438; BBpro[1] = 25.8666; BBpro[2] = 4.5457e-11; BBpro[3] = 2.07912; BBpro[4] = 5.99986; | |
272 | BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093; | |
273 | break; | |
274 | case 9: // 90-100% | |
275 | BBpro[0] = 0.0319126; BBpro[1] = 36.8784; BBpro[2] = 3.4274e-11; BBpro[3] = 3.2431; BBpro[4] = 5.93388; | |
276 | BBpio[0] = 0.027079; BBpio[1] = 67.5936; BBpio[2] = 9.72548e-11; BBpio[3] = 9.61382; BBpio[4] = 5.99372; | |
277 | break; | |
278 | } | |
279 | ||
280 | ||
281 | TF1 *ffPro=new TF1(Form("fBethe%d_c%d",AliPID::kProton,icent), Form("(%f*%f+(AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])-AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])))/%f", nSigmaP,resolution, AliPID::ParticleMass(AliPID::kProton), AliPID::ParticleMass(AliPID::kElectron), resolution), 0.05,200.); | |
282 | ||
283 | TF1 *ffPio=new TF1(Form("fBethe%d_c%d",AliPID::kPion,icent), Form("(%f*%f+(AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])-AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])))/%f", nSigmaPi,resolution, AliPID::ParticleMass(AliPID::kPion), AliPID::ParticleMass(AliPID::kElectron), resolution), 0.05,200.); | |
284 | ||
285 | TString list=gSystem->Getenv("LIST"); | |
286 | ||
287 | //LHC11a10b | |
288 | if (list.Contains("LHC11a10b")) { | |
289 | printf("LHC11a10b parameters\n"); | |
290 | ffPro->SetParameters(BBpro[0],BBpro[1],BBpro[2],BBpro[3],BBpro[4]); | |
291 | ffPio->SetParameters(BBpio[0],BBpio[1],BBpio[2],BBpio[3],BBpio[4]); | |
292 | ||
293 | // proton cut | |
294 | pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPro,10,((double)icent)*10.,((double)icent+1)*10, | |
295 | kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality); | |
296 | // pion cut | |
297 | pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPio,10,((double)icent)*10.,((double)icent+1)*10, | |
298 | kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality); | |
299 | } | |
300 | } | |
301 | ||
302 | // shifts for the nSigma electrons | |
303 | TGraph* nSigmaCorrection = new TGraph(); | |
304 | // LHC11a10b | |
305 | if (list.Contains("LHC11a10b")) { | |
306 | nSigmaCorrection->SetPoint(0, 137161., -0.50-(0.28)); | |
307 | nSigmaCorrection->SetPoint(1, 139510., -0.50-(0.28)); | |
308 | pid->SetCorrGraph(nSigmaCorrection); | |
309 | } | |
310 | ||
311 | } //hasMC | |
312 | ||
313 | ////////////////////////////////// DATA + MC | |
314 | // pid cuts TOF & TRD | |
315 | if(cutDefinition==kTOF || cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2) | |
316 | pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable); | |
317 | ||
318 | if(cutDefinition!=krec) cuts->AddCut(pid); | |
319 | /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/ | |
320 | ||
321 | ||
322 | // exclude conversion electrons selected by the tender | |
323 | AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv"); | |
324 | noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE); | |
325 | cuts->AddCut(noconv); | |
326 | ||
327 | } | |
328 | ||
329 | //______________________________________________________________________________________ | |
330 | void SetupPairCuts(AliDielectron *die, Int_t cutDefinition) | |
331 | { | |
332 | // | |
333 | // Setup the pair cuts | |
334 | // | |
335 | ||
336 | // conversion rejection | |
337 | Double_t gCut; | |
338 | switch(cutDefinition) { | |
339 | case kTPC: gCut=0.05; break; | |
340 | case krec: gCut=0.05; break; | |
341 | case kGam10: gCut=0.1; break; | |
342 | case kGam15: gCut=0.15; break; | |
343 | case kGam20: gCut=0.2; break; | |
344 | case kGam05: gCut=0.05; break; | |
345 | case kGam01: gCut=0.01; break; | |
346 | case kGam0: gCut=0.0; break; | |
347 | default: gCut=0.05; // default | |
348 | } | |
349 | ||
350 | AliDielectronVarCuts *gammaCut=new AliDielectronVarCuts("gammaCut","gammaCut"); | |
351 | gammaCut->AddCut(AliDielectronVarManager::kM,0.,gCut); | |
352 | die->GetPairPreFilter().AddCuts(gammaCut); | |
353 | ||
354 | ||
355 | // rapidity selection | |
356 | AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9"); | |
357 | rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9); | |
358 | die->GetPairFilter().AddCuts(rapCut); | |
359 | ||
360 | } | |
361 | ||
362 | //______________________________________________________________________________________ | |
363 | AliESDtrackCuts *SetupESDtrackCuts(Int_t cutDefinition) | |
364 | { | |
365 | // | |
366 | // Setup default AliESDtrackCuts | |
367 | // | |
368 | AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts; | |
369 | // reconstruction cuts | |
370 | esdTrackCuts->SetAcceptKinkDaughters(kFALSE); | |
371 | ||
372 | /* | |
373 | // basic track quality cuts (basicQ) | |
374 | esdTrackCuts->SetMaxDCAToVertexZ(3.0); | |
375 | esdTrackCuts->SetMaxDCAToVertexXY(1.0); | |
376 | ||
377 | // acceptance cuts | |
378 | esdTrackCuts->SetEtaRange( -0.9 , 0.9 ); | |
379 | //esdTrackCuts->SetPtRange( 0.8, 1e30 ); | |
380 | ||
381 | // reconstruction cuts | |
382 | esdTrackCuts->SetAcceptKinkDaughters(kFALSE); | |
383 | esdTrackCuts->SetRequireITSRefit(kTRUE); | |
384 | esdTrackCuts->SetRequireTPCRefit(kTRUE); | |
385 | ||
386 | esdTrackCuts->SetMinNClustersTPC(70); | |
387 | // if(cutDefinition<=kChi || cutDefinition>=kEtaGap01) | |
388 | // else esdTrackCuts->SetMinNClustersTPC(120); | |
389 | esdTrackCuts->SetMaxChi2PerClusterTPC(4); | |
390 | // if(cutDefinition!=kITSamy) esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst); // SPD first | |
391 | // esdTrackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.5); | |
392 | ||
393 | switch(cutDefinition) { | |
394 | case kTOFTRD2: | |
395 | esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst); // SPDfirst | |
396 | break; | |
397 | default: | |
398 | esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny); // SPDany | |
399 | break; | |
400 | } | |
401 | */ | |
402 | return esdTrackCuts; | |
403 | } | |
404 | ||
405 | //______________________________________________________________________________________ | |
406 | void InitHistograms(AliDielectron *die, Int_t cutDefinition) | |
407 | { | |
408 | // | |
409 | // Initialise the histograms | |
410 | // | |
411 | Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0); | |
412 | ||
413 | //Setup histogram Manager | |
414 | AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle()); | |
415 | ||
416 | ||
417 | //add histograms to event class | |
418 | histos->AddClass("Event"); | |
419 | histos->UserHistogram("Event","VtxZ","Vertex Z;z (cm)", | |
420 | 300,-15.,15., | |
421 | AliDielectronVarManager::kZvPrim); | |
422 | histos->UserHistogram("Event","Centrality","Centrality;centrality (%)", | |
423 | "0.,5.,10.,20.,40.,50.,60.,80.,100.", | |
424 | AliDielectronVarManager::kCentrality); | |
425 | histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0", | |
426 | 500,0.,25000., | |
427 | AliDielectronVarManager::kMultV0); | |
428 | histos->UserHistogram("Event","Cent_Mult","Centrality vs. Multiplicity;centrality (%);Multiplicity V0", | |
429 | 10,0.,100., 500,0.,25000., | |
430 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kMultV0); | |
431 | histos->UserProfile("Event","Cent_Nacc", | |
432 | "accepted tracks;centrality (%)", | |
433 | AliDielectronVarManager::kNacc, | |
434 | "0.,5.,10.,20.,40.,50.,60.,80.,100.", | |
435 | AliDielectronVarManager::kCentrality); | |
436 | histos->UserProfile("Event","Cent_NVtxContrib", | |
437 | "number of vertex contributors;centrality (%)", | |
438 | AliDielectronVarManager::kNVtxContrib, | |
439 | "0.,5.,10.,20.,40.,50.,60.,80.,100.", | |
440 | AliDielectronVarManager::kCentrality); | |
441 | ||
442 | ||
443 | ////// FLOW ////// | |
444 | if(0) { | |
445 | if(cutDefinition == kTOFTRD || cutDefinition >= kEtaGap01) { | |
446 | histos->UserHistogram("Event","TPCxH2","TPC Qx component;TPCxH2", | |
447 | 100,-1500.,1500., | |
448 | AliDielectronVarManager::kTPCxH2); | |
449 | histos->UserHistogram("Event","TPCyH2","TPC Qy component;TPCyH2", | |
450 | 100,-1500.,1500., | |
451 | AliDielectronVarManager::kTPCyH2); | |
452 | histos->UserHistogram("Event","TPCrpH2","TPC reaction plane; #Psi^{TPC}", | |
453 | 100,-2.,2., | |
454 | AliDielectronVarManager::kTPCrpH2); | |
455 | histos->UserHistogram("Event","TPCsub1xH2","TPC Qx component sub1;TPCsub1xH2", | |
456 | 100,-1500.,1500., | |
457 | AliDielectronVarManager::kTPCsub1xH2); | |
458 | histos->UserHistogram("Event","TPCsub1yH2","TPC Qy component sub1;TPCsub1yH2", | |
459 | 100,-1500.,1500., | |
460 | AliDielectronVarManager::kTPCsub1yH2); | |
461 | histos->UserHistogram("Event","TPCsub1rpH2","TPC reaction plane sub1; #Psi^{sub1}", | |
462 | 100,-2.,2., | |
463 | AliDielectronVarManager::kTPCsub1rpH2); | |
464 | histos->UserHistogram("Event","TPCsub2xH2","TPC Qx component sub2;TPCsub2xH2", | |
465 | 100,-1500.,1500., | |
466 | AliDielectronVarManager::kTPCsub2xH2); | |
467 | histos->UserHistogram("Event","TPCsub2yH2","TPC Qy component sub2;TPCsub2yH2", | |
468 | 100,-1500.,1500., | |
469 | AliDielectronVarManager::kTPCsub2yH2); | |
470 | histos->UserHistogram("Event","TPCsub2rpH2","TPC reaction plane sub2; #Psi^{sub2}", | |
471 | 100,-2.,2., | |
472 | AliDielectronVarManager::kTPCsub2rpH2); | |
473 | histos->UserHistogram("Event","TPCsub12DiffH2","TPC reaction plane diff; cos(2(#Psi^{sub1}-#Psi^{sub2}))", | |
474 | 100,-1.,1., | |
475 | AliDielectronVarManager::kTPCsub12DiffH2); | |
476 | /* // uncorrected eventplane | |
477 | histos->UserHistogram("Event","TPCxH2uc","TPC Qx component;TPCxH2uc", | |
478 | 100,-1500.,1500., | |
479 | AliDielectronVarManager::kTPCxH2uc); | |
480 | histos->UserHistogram("Event","TPCyH2uc","TPC Qy component;TPCyH2uc", | |
481 | 100,-1500.,1500., | |
482 | AliDielectronVarManager::kTPCyH2uc); | |
483 | histos->UserHistogram("Event","TPCrpH2uc","TPC reaction plane;TPCrpH2uc", | |
484 | 100,-2.,2., | |
485 | AliDielectronVarManager::kTPCrpH2uc); | |
486 | histos->UserHistogram("Event","TPCsub1xH2uc","TPC Qx component sub1;TPCsub1xH2uc", | |
487 | 100,-1500.,1500., | |
488 | AliDielectronVarManager::kTPCsub1xH2uc); | |
489 | histos->UserHistogram("Event","TPCsub1yH2uc","TPC Qy component sub1;TPCsub1yH2uc", | |
490 | 100,-1500.,1500., | |
491 | AliDielectronVarManager::kTPCsub1yH2uc); | |
492 | histos->UserHistogram("Event","TPCsub1rpH2uc","TPC reaction plane sub1;TPCsub1rpH2uc", | |
493 | 100,-2.,2., | |
494 | AliDielectronVarManager::kTPCsub1rpH2uc); | |
495 | histos->UserHistogram("Event","TPCsub2xH2uc","TPC Qx component sub2;TPCsub2xH2uc", | |
496 | 100,-1500.,1500., | |
497 | AliDielectronVarManager::kTPCsub2xH2uc); | |
498 | histos->UserHistogram("Event","TPCsub2yH2uc","TPC Qy component sub2;TPCsub2yH2uc", | |
499 | 100,-1500.,1500., | |
500 | AliDielectronVarManager::kTPCsub2yH2uc); | |
501 | histos->UserHistogram("Event","TPCsub2rpH2uc","TPC reaction plane sub2;TPCsub2rpH2uc", | |
502 | 100,-2.,2., | |
503 | AliDielectronVarManager::kTPCsub2rpH2uc); | |
504 | histos->UserHistogram("Event","TPCsub12DiffH2uc","TPC reaction plane difference;TPCsub12DiffH2uc", | |
505 | 100,-1.,1., | |
506 | AliDielectronVarManager::kTPCsub12DiffH2uc); | |
507 | */ | |
508 | histos->UserHistogram("Event","V0ACrpH2","VZERO-AC RP; #Psi_{2}^{V0AC} (rad.)", | |
509 | 100,-2.0,2.0, | |
510 | AliDielectronVarManager::kV0ACrpH2); | |
511 | histos->UserHistogram("Event","V0ArpH2","VZERO-A RP; #Psi_{2}^{V0A} (rad.)", | |
512 | 100,-2.0,2.0, | |
513 | AliDielectronVarManager::kV0ArpH2); | |
514 | histos->UserHistogram("Event","V0CrpH2","VZERO-C RP; #Psi_{2}^{V0C} (rad.)", | |
515 | 100,-2.0,2.0, | |
516 | AliDielectronVarManager::kV0CrpH2); | |
517 | ||
518 | histos->UserHistogram("Event","V0ATPCDiffH2","VZERO-A TPC diff; cos(2(#Psi^{V0A}-#Psi^{TPC}))", | |
519 | 300,-1.0,1.0, | |
520 | AliDielectronVarManager::kV0ATPCDiffH2); | |
521 | histos->UserHistogram("Event","V0CTPCDiffH2","VZERO-C TPC diff; cos(2(#Psi^{V0C}-#Psi^{TPC}))", | |
522 | 300,-1.0,1.0, | |
523 | AliDielectronVarManager::kV0CTPCDiffH2); | |
524 | histos->UserHistogram("Event","V0AV0CDiffH2","VZERO-A VZERO-C diff; cos(2(#Psi^{V0A}-#Psi^{V0C}))", | |
525 | 300,-1.0,1.0, | |
526 | AliDielectronVarManager::kV0AV0CDiffH2); | |
527 | ||
528 | // centrality dependent event plane histograms | |
529 | histos->UserHistogram("Event","Cent_TPCrpH2","TPC RP;centrality (%);#Psi^{TPC} (rad.)", | |
530 | 10,0.,100.,100,-2.,2., | |
531 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCrpH2); | |
532 | histos->UserHistogram("Event","Cent_TPCsub1rpH2","TPC-1 RP;centrality (%);#Psi^{sub1} (rad.)", | |
533 | 10,0.,100.,100,-2.,2., | |
534 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub1rpH2); | |
535 | histos->UserHistogram("Event","Cent_TPCsub2rpH2","TPC-2 RP;centrality (%);#Psi^{sub2} (rad.)", | |
536 | 10,0.,100.,100,-2.,2., | |
537 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub2rpH2); | |
538 | ||
539 | histos->UserHistogram("Event","Cent_V0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{V0AC} (rad.)", | |
540 | 10,0.,100.,100,-2.0,2.0, | |
541 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ACrpH2); | |
542 | histos->UserHistogram("Event","Cent_V0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A} (rad.)", | |
543 | 10,0.,100.,100,-2.0,2.0, | |
544 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ArpH2); | |
545 | histos->UserHistogram("Event","Cent_V0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C} (rad.)", | |
546 | 10,0.,100.,100,-2.0,2.0, | |
547 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0CrpH2); | |
548 | // for resolution calculation | |
549 | histos->UserHistogram("Event","Cent_V0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{TPC}))", | |
550 | 10,0.,100.,300,-1.0,1.0, | |
551 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ATPCDiffH2); | |
552 | histos->UserHistogram("Event","Cent_V0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{V0C}-#Psi^{TPC}))", | |
553 | 10,0.,100.,300,-1.0,1.0, | |
554 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0CTPCDiffH2); | |
555 | histos->UserHistogram("Event","Cent_V0AV0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{V0C}))", | |
556 | 10,0.,100.,300,-1.0,1.0, | |
557 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0AV0CDiffH2); | |
558 | histos->UserHistogram("Event","Cent_TPCsub12DiffH2","TPC-sub1 TPC-sub2 diff;centrality (%);cos(2(#Psi^{sub1}-#Psi^{sub2}))", | |
559 | 10,0.,100.,300,-1.0,1.0, | |
560 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2); | |
561 | // detector effects | |
562 | histos->UserHistogram("Event","Cent_TPCsub12DiffH2Sin","TPC-sub1 TPC-sub2 diff;centrality (%);sin(2(#Psi^{sub1}-#Psi^{sub2}))", | |
563 | 10,0.,100.,300,-1.0,1.0,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2Sin); | |
564 | //// EPSelectionTask V0 information directly from the ESDs | |
565 | histos->UserHistogram("Event","Cent_v0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{v0AC} (rad.)", | |
566 | 10,0.,100.,100,-2.0,2.0, | |
567 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ACrpH2); | |
568 | histos->UserHistogram("Event","Cent_v0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{v0A} (rad.)", | |
569 | 10,0.,100.,100,-2.0,2.0, | |
570 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ArpH2); | |
571 | histos->UserHistogram("Event","Cent_v0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{v0C} (rad.)", | |
572 | 10,0.,100.,100,-2.0,2.0, | |
573 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CrpH2); | |
574 | // for resolution calculation | |
575 | histos->UserHistogram("Event","Cent_v0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{TPC}))", | |
576 | 10,0.,100.,300,-1.0,1.0, | |
577 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ATPCDiffH2); | |
578 | histos->UserHistogram("Event","Cent_v0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{v0C}-#Psi^{TPC}))", | |
579 | 10,0.,100.,300,-1.0,1.0, | |
580 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CTPCDiffH2); | |
581 | histos->UserHistogram("Event","Cent_v0Av0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{v0C}))", | |
582 | 10,0.,100.,300,-1.0,1.0, | |
583 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0Av0CDiffH2); | |
584 | ||
585 | } | |
586 | } | |
587 | ||
588 | ////// MONTE CARLO ////// | |
589 | /* | |
590 | if(cutDefinition == kTOFTRD && hasMC) { | |
591 | histos->AddClass("MCEvent"); | |
592 | histos->UserHistogram("MCEvent","Cent_NJPsis","Centrality vs. generated incl. J/#psi per event;centrality (%);N_{J/#psi}", | |
593 | 10,0.,100., 21,-0.5,20.5, | |
594 | AliDielectronVarManager::kCentrality,AliDielectronVarManager::kNumberOfJPsis); | |
595 | } | |
596 | */ | |
597 | ||
598 | ||
599 | //Initialise histogram classes | |
600 | histos->SetReservedWords("Track;Pair"); | |
601 | ||
602 | ||
603 | //Pair classes | |
604 | // to fill also mixed event histograms loop until 10 | |
605 | for (Int_t i=0; i<3; ++i){ | |
606 | histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i))); | |
607 | } | |
608 | ||
609 | if(cutDefinition < kEtaGap01) { | |
610 | ||
611 | //legs from pair | |
612 | for (Int_t i=0; i<3; ++i){ | |
613 | histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i))); | |
614 | } | |
615 | ||
616 | //Track classes | |
617 | //to fill also track info from 2nd event loop until 2 | |
618 | for (Int_t i=0; i<2; ++i){ | |
619 | histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i))); | |
620 | } | |
621 | ||
622 | //track rotation | |
623 | // histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot))); | |
624 | // histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot))); | |
625 | ||
626 | //add histograms to Track classes | |
627 | //histos->UserHistogram("Track","TOFbit","TOFbit;bit;#tracks",19,-9.5,9.5,AliDielectronVarManager::kTOFPIDBit); | |
628 | histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks", | |
629 | 400,0,20., | |
630 | AliDielectronVarManager::kPt); | |
631 | histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks", | |
632 | 160,-0.5,159.5, | |
633 | AliDielectronVarManager::kNclsTPC); | |
634 | histos->UserHistogram("Track","TPCsignalN","Number of Clusters TPC;TPC number clusteres;#tracks", | |
635 | 160,-0.5,159.5, | |
636 | AliDielectronVarManager::kTPCsignalN); | |
637 | ||
638 | histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks", | |
639 | 500,-1.,1., | |
640 | AliDielectronVarManager::kImpactParXY); | |
641 | histos->UserHistogram("Track","dZ","dZ;dZ [cm];#tracks", | |
642 | 600,-3.,3., | |
643 | AliDielectronVarManager::kImpactParZ); | |
644 | histos->UserHistogram("Track","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks", | |
645 | 200,-1,1,200,0,6.285, | |
646 | AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi); | |
647 | ||
648 | histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks", | |
649 | 400,0.2,20.,200,0.,200., | |
650 | AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE); | |
651 | histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks", | |
652 | 400,0.2,20.,200,-10.,10., | |
653 | AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE); | |
654 | ||
655 | histos->UserHistogram("Track","Ncl",";Number clusters TPC;Number clusters TPC", | |
656 | 160,-0.5,159.5, | |
657 | AliDielectronVarManager::kNclsTPC); | |
658 | histos->UserHistogram("Track","NclFr",";Number of findable clusters (robust);Number findable clusters TPC", | |
659 | 160,-0.5,159.5, | |
660 | AliDielectronVarManager::kNFclsTPCr); | |
661 | histos->UserHistogram("Track","Ncl_NclFr","Number of (findable) clusters TPC;found clusters;findable clusters", | |
662 | 160,-0.5,159.5,160,-0.5,159.5, | |
663 | AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr); | |
664 | histos->UserHistogram("Track","NtrklTRD",";Number tracklets TRD for pid;Number tracklets TRD", | |
665 | 8,-0.5,7.5, | |
666 | AliDielectronVarManager::kTRDpidQuality); | |
667 | ||
668 | //add histograms to Pair classes | |
669 | histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs", | |
670 | 300,.0,300*0.04, | |
671 | AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2 | |
672 | histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs", | |
673 | 100,-1.,1., | |
674 | AliDielectronVarManager::kY); | |
675 | histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle", | |
676 | 100,0.,3.15, | |
677 | AliDielectronVarManager::kOpeningAngle); | |
678 | histos->UserHistogram("Pair","Chi2NDF","#chi^{2}/NDF;#chi^{2}/NDF", | |
679 | 100,0.,20, | |
680 | AliDielectronVarManager::kChi2NDF); | |
681 | } | |
682 | ||
683 | //// FLOW results use tprofiles | |
684 | if(0) { | |
685 | if(cutDefinition == kTOFTRD || cutDefinition == kTOFTRD2 || cutDefinition >= kEtaGap01) { | |
686 | ||
687 | histos->UserProfile("Pair","M_Cent_Pt_V0ACrpH2FlowV2", | |
688 | "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)", | |
689 | AliDielectronVarManager::kV0ACrpH2FlowV2, | |
690 | 125,0.,125*.04, 10, 0.,100., 200,0.,100., | |
691 | AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt); | |
692 | ||
693 | histos->UserProfile("Pair","M_Cent_Pt_V0ArpH2FlowV2", | |
694 | "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)", | |
695 | AliDielectronVarManager::kV0ArpH2FlowV2, | |
696 | 125,0.,125*.04, 10, 0.,100., 200,0.,100., | |
697 | AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt); | |
698 | ||
699 | histos->UserProfile("Pair","M_Cent_Pt_V0CrpH2FlowV2", | |
700 | "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)", | |
701 | AliDielectronVarManager::kV0CrpH2FlowV2, | |
702 | 125,0.,125*.04, 10, 0.,100., 200,0.,100., | |
703 | AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt); | |
704 | // 1D | |
705 | histos->UserProfile("Pair","M_V0ACrpH2FlowV2", | |
706 | "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})", | |
707 | AliDielectronVarManager::kV0ACrpH2FlowV2, | |
708 | 125,0.,125*.04, | |
709 | AliDielectronVarManager::kM); | |
710 | ||
711 | histos->UserProfile("Pair","M_V0ArpH2FlowV2", | |
712 | "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})", | |
713 | AliDielectronVarManager::kV0ArpH2FlowV2, | |
714 | 125,0.,125*.04, | |
715 | AliDielectronVarManager::kM); | |
716 | ||
717 | histos->UserProfile("Pair","M_V0CrpH2FlowV2", | |
718 | "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})", | |
719 | AliDielectronVarManager::kV0CrpH2FlowV2, | |
720 | 125,0.,125*.04, | |
721 | AliDielectronVarManager::kM); | |
722 | } | |
723 | } | |
724 | ||
725 | die->SetHistogramManager(histos); | |
726 | } | |
727 | ||
728 | ||
729 | void InitCF(AliDielectron* die, Int_t cutDefinition) | |
730 | { | |
731 | // | |
732 | // Setup the CF Manager if needed | |
733 | // | |
734 | Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0); | |
735 | ||
736 | AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle()); | |
737 | ||
738 | // pair variables | |
739 | cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps | |
740 | if(cutDefinition!=kSubRndm) cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11); | |
741 | ||
742 | if(cutDefinition < kGam0 || cutDefinition == kSubRndm) { | |
743 | ||
744 | // pair and event vars | |
745 | if(cutDefinition <= kChi || cutDefinition == kSubRndm) { | |
746 | cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.,10.,20.,40.,50.,60.,80."); | |
747 | cf->AddVariable(AliDielectronVarManager::kPt,"0., 1., 2.5, 5., 100.0"); | |
748 | if(!hasMC) cf->AddVariable(AliDielectronVarManager::kZvPrim,20, -10., 10.); | |
749 | if(hasMC) cf->AddVariable(AliDielectronVarManager::kNacc,20,0.,3000.0); | |
750 | if(hasMC) cf->AddVariable(AliDielectronVarManager::kNVtxContrib,20,0.,4000.); | |
751 | if(hasMC) cf->AddVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01); | |
752 | //cf->AddVariable(AliDielectronVarManager::kY,"-0.8,0.8"); | |
753 | } | |
754 | ||
755 | //leg variables | |
756 | if(cutDefinition!=kSubRndm) { | |
757 | cf->AddVariable(AliDielectronVarManager::kPt,"0.8, 1.0, 1.1, 1.2, 1.5, 100.0",kTRUE); | |
758 | cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3,-2.5,-2,2,2.5,3",kTRUE); | |
759 | //cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"3.5,4.0,4.5,5.0,100",kTRUE); | |
760 | // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,5.0,100",kTRUE); | |
761 | ||
762 | // standard vars | |
763 | if(cutDefinition<=kChi) { | |
764 | if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,0.9",kTRUE); | |
765 | //cf->AddVariable(AliDielectronVarManager::kNclsTPC,"70, 90, 100, 120, 160",kTRUE); | |
766 | } | |
767 | } | |
768 | ||
769 | switch(cutDefinition) { | |
770 | case kTPC: | |
771 | case krec: | |
772 | case kTOF: //cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE); break; | |
773 | case kTRD: | |
774 | case kTOFTRD: | |
775 | // if(hasMC) cf->AddVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.); | |
776 | //cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE); break; | |
777 | break; | |
778 | case kITScls: cf->AddVariable(AliDielectronVarManager::kNclsITS,"1,2,3,4,5,6",kTRUE); break; | |
779 | case kITSamy: cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE); break; | |
780 | case kDCA: | |
781 | cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE); | |
782 | cf->AddVariable(AliDielectronVarManager::kImpactParXY,8,-2.,2.,kTRUE); | |
783 | cf->AddVariable(AliDielectronVarManager::kImpactParZ,8,-4.,4.,kTRUE); | |
784 | break; | |
785 | case kChi: cf->AddVariable(AliDielectronVarManager::kChi2NDF,"0,1,2,3,4,5",kTRUE); break; | |
786 | // cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE); | |
787 | // cf->AddVariable(AliDielectronVarManager::kTOFPIDBit,"-.5,.5,1.5",kTRUE); | |
788 | // cf->AddVariable(AliDielectronVarManager::kTRDpidQuality,"3.5, 4.5, 5.5, 6.5",kTRUE); | |
789 | } | |
790 | ||
791 | } | |
792 | ||
793 | ||
794 | if(hasMC) { | |
795 | cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers() ); // LHC10h -> LHC11h | |
796 | // cf->AddVariable(AliDielectronVarManager::kRunNumber, 170593-136831, 136831, 170593); // LHC10h -> LHC11h | |
797 | if(cutDefinition==kTOFTRD || cutDefinition==kGam0) cf->SetStepForMCtruth(); | |
798 | // if(cutDefinition!=kTOFTRD) | |
799 | cf->SetStepsForMCtruthOnly(); | |
800 | // cf->SetStepsForBackground(); | |
801 | } | |
802 | ||
803 | die->SetCFManagerPair(cf); | |
804 | } | |
805 | ||
806 | void AddMCSignals(AliDielectron *die){ | |
807 | //Do we have an MC handler? | |
808 | Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0); | |
809 | if (!hasMC) return; | |
810 | ||
811 | AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi"); | |
812 | inclusiveJpsi->SetLegPDGs(11,-11); | |
813 | inclusiveJpsi->SetMotherPDGs(443,443); | |
814 | inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame); | |
815 | inclusiveJpsi->SetFillPureMCStep(kTRUE); | |
816 | inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE); | |
817 | inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE); | |
818 | die->AddSignalMC(inclusiveJpsi); | |
819 | ||
820 | AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi"); // prompt J/psi (not from beauty decays) | |
821 | promptJpsi->SetLegPDGs(11,-11); | |
822 | promptJpsi->SetMotherPDGs(443,443); | |
823 | promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons | |
824 | promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame); | |
825 | promptJpsi->SetFillPureMCStep(kTRUE); | |
826 | promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState); | |
827 | promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE); | |
828 | promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE); | |
829 | promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE); | |
830 | die->AddSignalMC(promptJpsi); | |
831 | ||
832 | AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi"); | |
833 | beautyJpsi->SetLegPDGs(11,-11); | |
834 | beautyJpsi->SetMotherPDGs(443,443); | |
835 | beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame); | |
836 | beautyJpsi->SetGrandMotherPDGs(500,500); | |
837 | beautyJpsi->SetFillPureMCStep(kTRUE); | |
838 | beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE); | |
839 | beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE); | |
840 | beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE); | |
841 | die->AddSignalMC(beautyJpsi); | |
842 | ||
843 | AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi"); // embedded J/psi | |
844 | directJpsi->SetLegPDGs(11,-11); | |
845 | directJpsi->SetMotherPDGs(443,443); | |
846 | directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame); | |
847 | directJpsi->SetFillPureMCStep(kTRUE); | |
848 | directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState); | |
849 | directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect); | |
850 | directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE); | |
851 | directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE); | |
852 | die->AddSignalMC(directJpsi); | |
853 | } | |
854 | ||
855 | void SetEtaCorrection() | |
856 | { | |
857 | if (AliDielectronPID::GetEtaCorrFunction()) return; | |
858 | ||
859 | TString list=gSystem->Getenv("LIST"); | |
860 | ||
861 | TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root"; | |
862 | TString trainRoot=gSystem->Getenv("TRAIN_ROOT"); | |
863 | if (trainRoot.IsNull()) etaMap="../PWGDQ/dielectron/files/EtaCorrMaps.root"; | |
864 | if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){ | |
865 | Error("ConfigPbPb","Eta map not found: %s",etaMap.Data()); | |
866 | return; | |
867 | } | |
868 | ||
869 | TFile f(etaMap.Data()); | |
870 | if (!f.IsOpen()) return; | |
871 | TList *keys=f.GetListOfKeys(); | |
872 | ||
873 | for (Int_t i=0; i<keys->GetEntries(); ++i){ | |
874 | TString kName=keys->At(i)->GetName(); | |
875 | TPRegexp reg(kName); | |
876 | if (reg.MatchB(list)){ | |
877 | printf("Using Eta Correction Function: %s\n",kName.Data()); | |
878 | AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data())); | |
879 | } | |
880 | } | |
881 | } | |
882 | ||
883 | TVectorD *GetRunNumbers() { | |
884 | ||
885 | Double_t runLHC10h[] = { // all runs | |
886 | 136851, 136854, 136879, 137042, 137045, 137124, 137125, 137132, 137133, 137135, 137136, 137137, 137161, 137162, 137163, 137165, 137230, 137231, 137232, 137235, 137236, 137243, 137365, 137366, 137370, 137430, 137431, 137432, 137434, 137439, 137440, 137441, 137443, 137530, 137531, 137539, 137541, 137544, 137546, 137549, 137595, 137608, 137609, 137638, 137639, 137685, 137686, 137689, 137691, 137692, 137693, 137704, 137718, 137722, 137724, 137748, 137751, 137752, 137843, 137844, 137847, 137848, 138125, 138126, 138150, 138151, 138153, 138154, 138190, 138192, 138197, 138200, 138201, 138225, 138275, 138359, 138364, 138396, 138438, 138439, 138442, 138469, 138533, 138534, 138578, 138579, 138582, 138583, 138620, 138621, 138624, 138637, 138638, 138652, 138653, 138662, 138666, 138730, 138731, 138732, 138736, 138737, 138740, 138742, 138795, 138796, 138826, 138828, 138830, 138831, 138836, 138837, 138870, 138871, 138872, 138924, 138965, 138972, 138973, 138976, 138977, 138978, 138979, 138980, 138982, 138983, 139024, 139025, 139028, 139029, 139030, 139031, 139034, 139036, 139037, 139038, 139042, 139104, 139105, 139107, 139110, 139172, 139173, 139308, 139309, 139310, 139311, 139314, 139316, 139328, 139329, 139360, 139437, 139438, 139439, 139440, 139441, 139465, 139466, 139467, 139470, 139471, 139503, 139504, 139505, 139507, 139510, 139511, 139513, 139514, 139517, | |
887 | 0 | |
888 | }; | |
889 | ||
890 | ||
891 | Int_t sizeLHC10h = (int) (sizeof(runLHC10h)/sizeof(Double_t)); | |
892 | runLHC10h[sizeLHC10h-1] = runLHC10h[sizeLHC10h-2] + 1.; | |
893 | TVectorD *vecLHC10h = new TVectorD(sizeLHC10h, runLHC10h); | |
894 | ||
895 | return vecLHC10h; | |
896 | ||
897 | } |