]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/macrosJPSI/ConfigJpsi_jb_PbPb.C
Fix version number
[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
11AliESDtrackCuts *SetupESDtrackCuts(Int_t cutDefinition);
12
13TString names=("TPC;TOF;TRD;rec;TOFTRD;TOFTRD2;ITScls;ITSamy;dca;chi2;Gam0;Gam01;Gam05;Gam10;Gam15;Gam20;EtaGap01;EtaGap02;EtaGap03;EtaGap04;EtaGap05;SubLS;SubRndm");
14enum { 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
16TObjArray *arrNames=names.Tokenize(";");
17const Int_t nDie=arrNames->GetEntries();
18
19AliDielectron* 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//______________________________________________________________________________________
168void 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//______________________________________________________________________________________
330void 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//______________________________________________________________________________________
363AliESDtrackCuts *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//______________________________________________________________________________________
406void 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
729void 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
806void 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
855void 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
883TVectorD *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,
8870
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}