]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/macrosJPSI/ConfigJpsi_jb_PbPb.C
-update
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosJPSI / ConfigJpsi_jb_PbPb.C
CommitLineData
8c06b662 1void InitHistograms(AliDielectron *die, Int_t cutDefinition);
2void InitCF(AliDielectron* die, Int_t cutDefinition);
3
4void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
5void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
6
7void AddMCSignals(AliDielectron *die);
8void SetEtaCorrection();
9TVectorD *GetRunNumbers();
10
8c06b662 11TString names=("TPC;TOF;TRD;rec;TOFTRD;TOFTRD2;ITScls;ITSamy;dca;chi2;Gam0;Gam01;Gam05;Gam10;Gam15;Gam20;EtaGap01;EtaGap02;EtaGap03;EtaGap04;EtaGap05;SubLS;SubRndm");
12enum { 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
14TObjArray *arrNames=names.Tokenize(";");
15const Int_t nDie=arrNames->GetEntries();
16
2d7910f3 17Bool_t hasMC = kFALSE;
18TString list = gSystem->Getenv("LIST");
6938ad55 19
2d7910f3 20AliDielectron* 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//______________________________________________________________________________________
179void 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//______________________________________________________________________________________
339void 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//______________________________________________________________________________________
377void 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
721void 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
797void 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
853void 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
879TVectorD *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}