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