1 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
2 void InitCF(AliDielectron* die, Int_t cutDefinition);
3 void InitHF(AliDielectron* die, Int_t cutDefinition);
5 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
6 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
8 void AddMCSignals(AliDielectron *die);
9 void SetEtaCorrection();
10 TVectorD *GetRunNumbers();
12 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");
13 enum { kTPC=0, kTOF, kTRD, krec, kTOFTRD, kTOFTRD2, kITScls, kITSamy, kDCA, kChi, kGam0, kGam01, kGam05, kGam10, kGam15, kGam20, kEtaGap01, kEtaGap02, kEtaGap03, kEtaGap04, kEtaGap05, kSubLS, kSubRndm };
15 TObjArray *arrNames=names.Tokenize(";");
16 const Int_t nDie=arrNames->GetEntries();
19 Bool_t hasMC = kFALSE;
20 TString list = gSystem->Getenv("LIST");
23 AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, TString prod="")
26 // Setup the instance of AliDielectron
30 if( list.IsNull()) list=prod;
31 if( list.Contains("LHC10h") || list.Contains("LHC11h") ) hasMC=kFALSE;
32 if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ) hasMC=kTRUE;
35 isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
37 // switch off some configurations
38 switch(cutDefinition) {
46 if(!hasMC) return 0x0;
68 if( hasMC) return 0x0;
72 // create the actual framework object
73 TString name=Form("%02d",cutDefinition);
74 if (cutDefinition<arrNames->GetEntriesFast()){
75 name=arrNames->At(cutDefinition)->GetName();
77 AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("Track cuts: %s",name.Data()));
80 printf(" Add %s %s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?"MC":""),name.Data(),list.Data());
82 // Monte Carlo Signals and TRD efficiency tables
85 printf(" Add %d MC signals \n",die->GetMCSignals()->GetEntriesFast());
88 /* if (list.Contains("LHC11a") ) {
89 TString pidTab="$TRAIN_ROOT/util/dielectron/dielectron/TRDpidEff_eleProb07_TRDntr4_6.root";
90 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
91 if (trainRoot.IsNull()) pidTab="$ALICE_ROOT/PWGDQ/dielectron/files/TRDpidEff_eleProb07_TRDntr4_6.root";
93 if (gSystem->AccessPathName(gSystem->ExpandPathName(pidTab.Data())))
94 Error("ConfigPbPb","PID table not found: %s",pidTab.Data());
96 die->SetTRDcorrectionFilename(pidTab.Data());
101 SetupTrackCuts(die,cutDefinition);
102 SetupPairCuts(die,cutDefinition);
105 if(cutDefinition == kTOF ||
106 cutDefinition == kTOFTRD ||
107 cutDefinition == kGam0 ||
108 cutDefinition == kTOFTRD2 ||
109 cutDefinition >= kEtaGap01 ) {
110 InitHistograms(die,cutDefinition);
111 printf(" Add %d types and %03d histos to the manager \n",die->GetHistogramList()->GetEntries(),
112 0/*die->GetHistoManager()->GetList()->GetEntries()*/);
115 // CF container setup, switched off
116 if(cutDefinition < kEtaGap01 ||
117 cutDefinition == kSubRndm ) {
118 if(0) InitCF(die,cutDefinition);
119 if(0) printf(" Add %d pair, %d leg vars, %p steps and %p bins to the container \n",
120 die->GetCFManagerPair()->GetNvarsPair(),die->GetCFManagerPair()->GetNvarsLeg(),
121 die->GetCFManagerPair()->GetContainer(), die->GetCFManagerPair()->GetContainer() );
125 // if(cutDefinition < kEtaGap01 ) {
126 // InitHF(die,cutDefinition);
132 printf(" Activate bgrd estimators: ME and ROT \n");
135 AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
136 rot->SetIterations(10);
137 rot->SetConeAnglePhi(TMath::Pi());
138 rot->SetStartAnglePhi(TMath::Pi());
139 die->SetTrackRotator(rot);
141 AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
142 mix->AddVariable(AliDielectronVarManager::kZvPrim, 30,-10.,10.);
143 // mix->AddVariable(AliDielectronVarManager::kCentrality, 8, 0.,80.);
144 mix->SetMixType(AliDielectronMixingHandler::kAll);
146 die->SetMixingHandler(mix);
149 // TPC event plane configurations
151 switch(cutDefinition) {
152 case kEtaGap01: gGap=0.1; break;
153 case kEtaGap02: gGap=0.2; break;
154 case kEtaGap03: gGap=0.3; break;
155 case kEtaGap04: gGap=0.4; break;
156 case kEtaGap05: gGap=0.5; break;
160 AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
161 poi->AddCut(AliDielectronVarManager::kM,2.92,3.20); // particles of interest, jpsi mass window
162 die->GetEventPlanePOIPreFilter().AddCuts(poi);
164 if(cutDefinition >= kEtaGap01 &&
165 cutDefinition < kSubLS ) {
166 AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap");
167 etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE);
168 die->GetEventPlanePreFilter().AddCuts(etaGap);
171 if(cutDefinition==kSubLS) die->SetLikeSignSubEvents();
172 die->SetPreFilterEventPlane();
175 // prefilter settings
176 if(cutDefinition == kTOFTRD2)
177 die->SetPreFilterAllSigns();
179 die->SetPreFilterUnlikeOnly();
181 // setup eta correction
182 // if(isESD && list.Contains("LHC10h")) SetEtaCorrection();
185 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
186 if (!trainRoot.IsNull()) {
187 die->SetVZEROCalibrationFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroCalibrationLHC10h.root");
188 die->SetVZERORecenteringFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroRecenteringLHC10h.root");
194 //______________________________________________________________________________________
195 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
198 // Setup the track cuts
202 AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
203 die->GetTrackFilter().AddCuts(cuts);
205 // AOD track filter (needs to be first cut)
206 AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("TrkFilter","TrkFilter");
207 trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqualSPDanyPIDele);
208 // if(!isESD) cuts->AddCut(trkFilter);
210 //Pt cut, should make execution a bit faster
211 AliDielectronVarCuts *pt = new AliDielectronVarCuts("PtCut","PtCut");
212 pt->AddCut(AliDielectronVarManager::kPt,1.1,1e30); //0.8
215 // track cuts ESD and AOD
216 AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
217 varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
218 varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
219 varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
220 varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
221 varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0);
222 varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
223 cuts->AddCut(varCuts);
225 AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
226 // trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kAny);
227 // trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kFirst);
228 trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 15); // ITS-4 = 1+2+4+8
229 // trkCuts->SetMaxWaivedITSNcls(1);
230 trkCuts->SetRequireITSRefit(kTRUE);
231 trkCuts->SetRequireTPCRefit(kTRUE);
232 cuts->AddCut(trkCuts);
234 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
235 AliDielectronPID *pid = new AliDielectronPID("PID","PID");
237 ////////////////////////////////// DATA
239 pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,3.0,0.,0.,kTRUE);
240 pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
242 if(cutDefinition==kTRD || cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2)
243 pid->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
244 AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
247 ////////////////////////////////// MC
251 Double_t nSigmaPi = 3.5; Double_t nSigmaP = 3.5;
252 Double_t resolution=0.0549;
253 Double_t BBpro[5] = {0};
254 Double_t BBpio[5] = {0};
256 for(Int_t icent=0; icent<8; icent++) {
260 BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848;
261 BBpio[0] = 0.0252122; BBpio[1] = 38.8991; BBpio[2] = 4.0901e-11; BBpio[3] = 5.27988; BBpio[4] = 4.3108;
264 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
265 BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093;
268 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
269 BBpio[0] = 0.0263205; BBpio[1] = 37.9307; BBpio[2] = 4.29724e-11; BBpio[3] = 5.74458; BBpio[4] = 4.32459;
272 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
273 BBpio[0] = 0.026294; BBpio[1] = 39.0346; BBpio[2] = 4.12261e-11; BBpio[3] = 5.28808; BBpio[4] = 4.31301;
276 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
277 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
280 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
281 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
284 BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848;
285 BBpio[0] = 0.026302; BBpio[1] = 38.6888; BBpio[2] = 3.56792e-11; BBpio[3] = 5.2465; BBpio[4] = 4.31094;
288 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
289 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
292 BBpro[0] = 0.0313438; BBpro[1] = 25.8666; BBpro[2] = 4.5457e-11; BBpro[3] = 2.07912; BBpro[4] = 5.99986;
293 BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093;
296 BBpro[0] = 0.0319126; BBpro[1] = 36.8784; BBpro[2] = 3.4274e-11; BBpro[3] = 3.2431; BBpro[4] = 5.93388;
297 BBpio[0] = 0.027079; BBpio[1] = 67.5936; BBpio[2] = 9.72548e-11; BBpio[3] = 9.61382; BBpio[4] = 5.99372;
302 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.);
304 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.);
307 if (list.Contains("LHC11a10b")) {
308 printf(" LHC11a10b parameters\n");
309 ffPro->SetParameters(BBpro[0],BBpro[1],BBpro[2],BBpro[3],BBpro[4]);
310 ffPio->SetParameters(BBpio[0],BBpio[1],BBpio[2],BBpio[3],BBpio[4]);
313 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPro,10,((double)icent)*10.,((double)icent+1)*10,
314 kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
316 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPio,10,((double)icent)*10.,((double)icent+1)*10,
317 kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
321 // shifts for the nSigma electrons
322 TGraph* nSigmaCorrection = new TGraph();
324 if (list.Contains("LHC11a10b")) {
325 nSigmaCorrection->SetPoint(0, 137161., -0.50-(0.28));
326 nSigmaCorrection->SetPoint(1, 139510., -0.50-(0.28));
327 pid->SetCorrGraph(nSigmaCorrection);
332 ////////////////////////////////// DATA + MC
333 // pid cuts TPC + TOF & TRD
334 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.0,4.);
335 if(cutDefinition==kTOF || cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2)
336 pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
338 if(cutDefinition!=krec) cuts->AddCut(pid);
339 /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
342 // exclude conversion electrons selected by the tender
343 AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
344 noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
345 cuts->AddCut(noconv);
349 //______________________________________________________________________________________
350 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
353 // Setup the pair cuts
356 // conversion rejection
358 switch(cutDefinition) {
359 case kTPC: gCut=0.05; break;
360 case krec: gCut=0.05; break;
361 case kGam10: gCut=0.1; break;
362 case kGam15: gCut=0.15; break;
363 case kGam20: gCut=0.2; break;
364 case kGam05: gCut=0.05; break;
365 case kGam01: gCut=0.01; break;
366 case kGam0: gCut=0.0; break;
367 default: gCut=0.05; // default
370 AliDielectronVarCuts *gammaCuts = new AliDielectronVarCuts("GammaCuts","GammaCuts");
371 // gammaCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.1, kTRUE);
372 // gammaCuts->AddCut(AliDielectronVarManager::kLegDist, 0.0, 0.25, kTRUE);
373 // gammaCuts->AddCut(AliDielectronVarManager::kR, 3.0, 90.0, kTRUE);
374 // gammaCuts->AddCut(AliDielectronVarManager::kPsiPair, 0.0, 0.05, kTRUE);
375 // gammaCuts->AddCut(AliDielectronVarManager::kChi2NDF, 0.0, 10.0, kTRUE);
376 gammaCuts->AddCut(AliDielectronVarManager::kM, 0.0, gCut);
377 die->GetPairPreFilter().AddCuts(gammaCuts);
380 // rapidity selection
381 // AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9");
382 // rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
383 // die->GetPairFilter().AddCuts(rapCut);
387 //______________________________________________________________________________________
388 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
391 // Initialise the histograms
394 //Setup histogram Manager
395 AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
397 //add histograms to event class
398 histos->AddClass("Event");
399 histos->UserHistogram("Event","RunNumber","Events per run;run;events",
401 AliDielectronVarManager::kRunNumber);
402 histos->UserHistogram("Event","VtxZ","Vertex Z;z (cm)", 300,-15.,15.,
403 AliDielectronVarManager::kZvPrim);
404 histos->UserHistogram("Event","Centrality","Centrality;centrality (%);events",
405 "0.,5.,10.,20.,40.,50.,60.,80.",
406 AliDielectronVarManager::kCentrality);
407 histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0;events", 500,0.,25000.,
408 AliDielectronVarManager::kMultV0);
409 histos->UserHistogram("Event","Cent_Mult","Centrality vs. Multiplicity;centrality (%);Multiplicity V0",
410 10,0.,100., 500,0.,25000.,
411 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kMultV0);
412 histos->UserProfile("Event","Cent_Nacc",
413 "accepted tracks;centrality (%)",
414 AliDielectronVarManager::kNacc,
415 "0.,5.,10.,20.,40.,50.,60.,80.,100.",
416 AliDielectronVarManager::kCentrality);
417 histos->UserProfile("Event","Cent_NVtxContrib",
418 "number of vertex contributors;centrality (%)",
419 AliDielectronVarManager::kNVtxContrib,
420 "0.,5.,10.,20.,40.,50.,60.,80.,100.",
421 AliDielectronVarManager::kCentrality);
424 if(cutDefinition == kTOFTRD || cutDefinition==kTOF) {
425 histos->UserHistogram("Event","TPCxH2","TPC Qx component;TPCxH2",
427 AliDielectronVarManager::kTPCxH2);
428 histos->UserHistogram("Event","TPCyH2","TPC Qy component;TPCyH2",
430 AliDielectronVarManager::kTPCyH2);
431 histos->UserHistogram("Event","TPCrpH2","TPC reaction plane; #Psi^{TPC}",
433 AliDielectronVarManager::kTPCrpH2);
434 histos->UserHistogram("Event","TPCsub1xH2","TPC Qx component sub1;TPCsub1xH2",
436 AliDielectronVarManager::kTPCsub1xH2);
437 histos->UserHistogram("Event","TPCsub1yH2","TPC Qy component sub1;TPCsub1yH2",
439 AliDielectronVarManager::kTPCsub1yH2);
440 histos->UserHistogram("Event","TPCsub1rpH2","TPC reaction plane sub1; #Psi^{sub1}",
442 AliDielectronVarManager::kTPCsub1rpH2);
443 histos->UserHistogram("Event","TPCsub2xH2","TPC Qx component sub2;TPCsub2xH2",
445 AliDielectronVarManager::kTPCsub2xH2);
446 histos->UserHistogram("Event","TPCsub2yH2","TPC Qy component sub2;TPCsub2yH2",
448 AliDielectronVarManager::kTPCsub2yH2);
449 histos->UserHistogram("Event","TPCsub2rpH2","TPC reaction plane sub2; #Psi^{sub2}",
451 AliDielectronVarManager::kTPCsub2rpH2);
452 histos->UserHistogram("Event","TPCsub12DiffH2","TPC reaction plane diff; cos(2(#Psi^{sub1}-#Psi^{sub2}))",
454 AliDielectronVarManager::kTPCsub12DiffH2);
455 /* // uncorrected eventplane
456 histos->UserHistogram("Event","TPCxH2uc","TPC Qx component;TPCxH2uc",
458 AliDielectronVarManager::kTPCxH2uc);
459 histos->UserHistogram("Event","TPCyH2uc","TPC Qy component;TPCyH2uc",
461 AliDielectronVarManager::kTPCyH2uc);
462 histos->UserHistogram("Event","TPCrpH2uc","TPC reaction plane;TPCrpH2uc",
464 AliDielectronVarManager::kTPCrpH2uc);
465 histos->UserHistogram("Event","TPCsub1xH2uc","TPC Qx component sub1;TPCsub1xH2uc",
467 AliDielectronVarManager::kTPCsub1xH2uc);
468 histos->UserHistogram("Event","TPCsub1yH2uc","TPC Qy component sub1;TPCsub1yH2uc",
470 AliDielectronVarManager::kTPCsub1yH2uc);
471 histos->UserHistogram("Event","TPCsub1rpH2uc","TPC reaction plane sub1;TPCsub1rpH2uc",
473 AliDielectronVarManager::kTPCsub1rpH2uc);
474 histos->UserHistogram("Event","TPCsub2xH2uc","TPC Qx component sub2;TPCsub2xH2uc",
476 AliDielectronVarManager::kTPCsub2xH2uc);
477 histos->UserHistogram("Event","TPCsub2yH2uc","TPC Qy component sub2;TPCsub2yH2uc",
479 AliDielectronVarManager::kTPCsub2yH2uc);
480 histos->UserHistogram("Event","TPCsub2rpH2uc","TPC reaction plane sub2;TPCsub2rpH2uc",
482 AliDielectronVarManager::kTPCsub2rpH2uc);
483 histos->UserHistogram("Event","TPCsub12DiffH2uc","TPC reaction plane difference;TPCsub12DiffH2uc",
485 AliDielectronVarManager::kTPCsub12DiffH2uc);
487 histos->UserHistogram("Event","V0ACrpH2","VZERO-AC RP; #Psi_{2}^{V0AC} (rad.)",
489 AliDielectronVarManager::kV0ACrpH2);
490 histos->UserHistogram("Event","V0ArpH2","VZERO-A RP; #Psi_{2}^{V0A} (rad.)",
492 AliDielectronVarManager::kV0ArpH2);
493 histos->UserHistogram("Event","V0CrpH2","VZERO-C RP; #Psi_{2}^{V0C} (rad.)",
495 AliDielectronVarManager::kV0CrpH2);
497 histos->UserHistogram("Event","V0ATPCDiffH2","VZERO-A TPC diff; cos(2(#Psi^{V0A}-#Psi^{TPC}))",
499 AliDielectronVarManager::kV0ATPCDiffH2);
500 histos->UserHistogram("Event","V0CTPCDiffH2","VZERO-C TPC diff; cos(2(#Psi^{V0C}-#Psi^{TPC}))",
502 AliDielectronVarManager::kV0CTPCDiffH2);
503 histos->UserHistogram("Event","V0AV0CDiffH2","VZERO-A VZERO-C diff; cos(2(#Psi^{V0A}-#Psi^{V0C}))",
505 AliDielectronVarManager::kV0AV0CDiffH2);
507 // centrality dependent event plane histograms
508 histos->UserHistogram("Event","Cent_TPCrpH2","TPC RP;centrality (%);#Psi^{TPC} (rad.)",
509 10,0.,100.,100,-2.,2.,
510 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCrpH2);
511 histos->UserHistogram("Event","Cent_TPCsub1rpH2","TPC-1 RP;centrality (%);#Psi^{sub1} (rad.)",
512 10,0.,100.,100,-2.,2.,
513 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub1rpH2);
514 histos->UserHistogram("Event","Cent_TPCsub2rpH2","TPC-2 RP;centrality (%);#Psi^{sub2} (rad.)",
515 10,0.,100.,100,-2.,2.,
516 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub2rpH2);
518 histos->UserHistogram("Event","Cent_V0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{V0AC} (rad.)",
519 10,0.,100.,100,-2.0,2.0,
520 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ACrpH2);
521 histos->UserHistogram("Event","Cent_V0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A} (rad.)",
522 10,0.,100.,100,-2.0,2.0,
523 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ArpH2);
524 histos->UserHistogram("Event","Cent_V0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C} (rad.)",
525 10,0.,100.,100,-2.0,2.0,
526 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0CrpH2);
527 // for resolution calculation
528 histos->UserHistogram("Event","Cent_V0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{TPC}))",
529 10,0.,100.,300,-1.0,1.0,
530 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ATPCDiffH2);
531 histos->UserHistogram("Event","Cent_V0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{V0C}-#Psi^{TPC}))",
532 10,0.,100.,300,-1.0,1.0,
533 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0CTPCDiffH2);
534 histos->UserHistogram("Event","Cent_V0AV0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{V0C}))",
535 10,0.,100.,300,-1.0,1.0,
536 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0AV0CDiffH2);
537 histos->UserHistogram("Event","Cent_TPCsub12DiffH2","TPC-sub1 TPC-sub2 diff;centrality (%);cos(2(#Psi^{sub1}-#Psi^{sub2}))",
538 10,0.,100.,300,-1.0,1.0,
539 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2);
541 histos->UserHistogram("Event","Cent_TPCsub12DiffH2Sin","TPC-sub1 TPC-sub2 diff;centrality (%);sin(2(#Psi^{sub1}-#Psi^{sub2}))",
542 10,0.,100.,300,-1.0,1.0,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2Sin);
544 // EPSelectionTask V0 information directly from the ESDs
545 histos->UserHistogram("Event","Cent_v0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{v0AC} (rad.)",
546 10,0.,100.,100,-2.0,2.0,
547 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ACrpH2);
548 histos->UserHistogram("Event","Cent_v0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{v0A} (rad.)",
549 10,0.,100.,100,-2.0,2.0,
550 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ArpH2);
551 histos->UserHistogram("Event","Cent_v0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{v0C} (rad.)",
552 10,0.,100.,100,-2.0,2.0,
553 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CrpH2);
554 // for resolution calculation
555 histos->UserHistogram("Event","Cent_v0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{TPC}))",
556 10,0.,100.,300,-1.0,1.0,
557 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ATPCDiffH2);
558 histos->UserHistogram("Event","Cent_v0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{v0C}-#Psi^{TPC}))",
559 10,0.,100.,300,-1.0,1.0,
560 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CTPCDiffH2);
561 histos->UserHistogram("Event","Cent_v0Av0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{v0C}))",
562 10,0.,100.,300,-1.0,1.0,
563 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0Av0CDiffH2);
567 ////// MONTE CARLO //////
569 if(cutDefinition == kTOFTRD && hasMC) {
570 histos->AddClass("MCEvent");
571 histos->UserHistogram("MCEvent","Cent_NJPsis","Centrality vs. generated incl. J/#psi per event;centrality (%);N_{J/#psi}",
572 10,0.,100., 21,-0.5,20.5,
573 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kNumberOfJPsis);
577 //Initialise histogram classes
578 histos->SetReservedWords("Track;Pair");
581 // to fill also mixed event histograms loop until 10
582 for (Int_t i=0; i<3; ++i){
583 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
586 if(cutDefinition < kEtaGap01) {
589 for (Int_t i=0; i<3; ++i){
590 histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
594 //to fill also track info from 2nd event loop until 2
595 for (Int_t i=0; i<2; ++i){
596 histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
599 // histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
600 // histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
602 ///// add histograms to Track classes /////
605 histos->UserHistogram("Track","ImpactParXY",";dXY (cm);#tracks", 500,-1.,1.,
606 AliDielectronVarManager::kImpactParXY);
607 histos->UserHistogram("Track","ImpactParZ",";dZ (cm);#tracks", 600,-3.,3.,
608 AliDielectronVarManager::kImpactParZ);
611 histos->UserHistogram("Track","Pt",";p_{T} (GeV/c);#tracks", 400,0,20.,
612 AliDielectronVarManager::kPt);
613 histos->UserHistogram("Track","Eta_Phi",";#eta;#varphi;#tracks", 200,-1,1,200,0,6.285,
614 AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
617 histos->UserHistogram("Track","TPCnCls",";N_{cls}^{TPC};#tracks", 160,-0.5,159.5,
618 AliDielectronVarManager::kNclsTPC);
619 histos->UserHistogram("Track","TPCsignalN",";N_{cls}^{TPC};#tracks", 160,-0.5,159.5,
620 AliDielectronVarManager::kTPCsignalN);
621 histos->UserHistogram("Track","NclFr",";N_{max.cls}^{TPC};#tracks", 160,-0.5,159.5,
622 AliDielectronVarManager::kNFclsTPCr);
623 histos->UserHistogram("Track","Ncl_NclFr",";N_{cls}^{TPC};N_{max.cls}^{TPC};#tracks",
624 160,-0.5,159.5,160,-0.5,159.5,
625 AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
628 histos->UserHistogram("Track","NtrklTRD",";N_{trkl}^{TRD};#tracks",
630 AliDielectronVarManager::kTRDpidQuality);
633 histos->UserHistogram("Track","dEdx_P",";p (GeV/c);TPC signal (arb units);#tracks",
634 400,0.2,20.,200,0.,200.,
635 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
636 histos->UserHistogram("Track","TPCnSigmaEle_P","p (GeV/c);n#sigma_{ele}^{TPC};#tracks",
637 400,0.2,20.,200,-10.,10.,
638 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
639 histos->UserHistogram("Track","TOFbeta_P",";p (GeV/c);#beta;#tracks",
640 250,0.0,5.0,300,0.,1.2,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFbeta,kTRUE);
642 ///// add histograms to Pair classes /////
643 histos->UserHistogram("Pair","InvMass",";m_{ee} (GeV/c^{2});#pairs",
644 300,.0,300*0.04, AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
645 histos->UserHistogram("Pair","Rapidity",";y;#pairs",
646 100,-1.,1., AliDielectronVarManager::kY);
647 histos->UserHistogram("Pair","OpeningAngle","opening angle (rad.);#pairs",
648 100,0.,3.15, AliDielectronVarManager::kOpeningAngle);
649 histos->UserHistogram("Pair","Chi2NDF",";#chi^{2}/NDF;#pairs",
650 100,0.,20, AliDielectronVarManager::kChi2NDF);
651 histos->UserHistogram("Pair","PsiPair",";#psi;#pairs",
652 100,0.,3.15, AliDielectronVarManager::kPsiPair);
653 histos->UserHistogram("Pair","R",";r (cm)",
654 200,0.,100., AliDielectronVarManager::kR);
655 histos->UserHistogram("Pair","LegDist",";dca (cm)",
656 50,0.,5., AliDielectronVarManager::kLegDist);
657 histos->UserHistogram("Pair","LegDistXY",";dca_{xy} (cm)",
658 50,0.,5., AliDielectronVarManager::kLegDistXY);
662 //// FLOW results use tprofiles
663 if(cutDefinition == kTOFTRD || cutDefinition == kTOF || cutDefinition >= kEtaGap01) {
665 histos->UserProfile("Pair","M_Cent_Pt_V0ACrpH2FlowV2",
666 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
667 AliDielectronVarManager::kV0ACrpH2FlowV2,
668 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
669 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
671 histos->UserProfile("Pair","M_Cent_Pt_V0ArpH2FlowV2",
672 "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
673 AliDielectronVarManager::kV0ArpH2FlowV2,
674 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
675 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
677 histos->UserProfile("Pair","M_Cent_Pt_V0CrpH2FlowV2",
678 "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
679 AliDielectronVarManager::kV0CrpH2FlowV2,
680 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
681 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
683 histos->UserProfile("Pair","M_Cent_Pt_v0ACrpH2FlowV2",
684 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
685 AliDielectronVarManager::kv0ACrpH2FlowV2,
686 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
687 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
689 histos->UserProfile("Pair","M_Cent_Pt_v0ArpH2FlowV2",
690 "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
691 AliDielectronVarManager::kv0ArpH2FlowV2,
692 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
693 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
695 histos->UserProfile("Pair","M_Cent_Pt_v0CrpH2FlowV2",
696 "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
697 AliDielectronVarManager::kv0CrpH2FlowV2,
698 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
699 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
703 histos->UserProfile("Pair","M_V0ACrpH2FlowV2",
704 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
705 AliDielectronVarManager::kV0ACrpH2FlowV2,
707 AliDielectronVarManager::kM);
709 histos->UserProfile("Pair","M_V0ArpH2FlowV2",
710 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
711 AliDielectronVarManager::kV0ArpH2FlowV2,
713 AliDielectronVarManager::kM);
715 histos->UserProfile("Pair","M_V0CrpH2FlowV2",
716 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
717 AliDielectronVarManager::kV0CrpH2FlowV2,
719 AliDielectronVarManager::kM);
723 die->SetHistogramManager(histos);
726 void InitHF(AliDielectron* die, Int_t cutDefinition)
729 // Setup the HF arrays
732 AliDielectronHF *hf=new AliDielectronHF(die->GetName(),die->GetTitle());
733 // if(hasMC) hf->SetStepForMCGenerated();
734 hf->SetPairTypes(AliDielectronHF::kAll);
735 hf->SetVariable(AliDielectronVarManager::kM, 125, 0.0, 0.04*125);
737 hf->AddCutVariable(AliDielectronVarManager::kCentrality, "0.,5.,10.,20.,40.,50.,60.,80." );
738 hf->AddCutVariable(AliDielectronVarManager::kPt, "0.,2.5,5.,100." );
739 hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, 8,-1.*TMath::Pi(),TMath::Pi());
740 // hf->AddCutVariable(AliDielectronVarManager::kY, 1, -0.9, 0.9 );
741 // hf->AddCutVariable(AliDielectronVarManager::kPt, "0.8, 1.0, 1.1, 1.2, 1.5, 100.0", kTRUE, AliDielectronHF::kBinToMax);
742 // hf->AddCutVariable(AliDielectronVarManager::kNclsTPC, "70,90,100,120,160", kTRUE, AliDielectronHF::kBinToMax);
743 // hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaEle,"-4,-3,-2.5,-2,2,2.5,3,4", kTRUE, AliDielectronHF::kSymBin);
744 //hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaPio,"3.,3.5,4.,100.", kTRUE, AliDielectronHF::kBinToMax);
745 //hf->AddCutVariable(AliDielectronVarManager::kITSLayerFirstCls,4,0.,4., kFALSE, kTRUE, AliDielectronHF::kBinFromMin);
746 //hf->AddCutVariable(AliDielectronVarManager::kNclsITS, 5,2.,7., kFALSE, kTRUE, AliDielectronHF::kBinToMax);
747 //hf->AddCutVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers());
749 die->SetHistogramArray(hf);
752 void InitCF(AliDielectron* die, Int_t cutDefinition)
755 // Setup the CF Manager if needed
758 AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
761 cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.,10.,20.,40.,50.,60.,80.");
762 // if(!hasMC) cf->AddVariable(AliDielectronVarManager::kZvPrim,20, -10., 10.);
763 if(hasMC) cf->AddVariable(AliDielectronVarManager::kNacc,20,0.,3000.0);
764 if(hasMC) cf->AddVariable(AliDielectronVarManager::kNVtxContrib,20,0.,4000.);
765 if(hasMC) cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers() );
768 // cf->AddVariable(AliDielectronVarManager::kY,"-0.8,0.8");
769 cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
770 cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
771 cf->AddVariable(AliDielectronVarManager::kPt,"0., 1., 2.5, 5., 100.0");
772 if(hasMC) cf->AddVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
773 // if(hasMC) cf->AddVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.);
776 cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2,4,-1.*TMath::Pi(),TMath::Pi());
777 cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2,4,-1.*TMath::Pi(),TMath::Pi());
780 cf->AddVariable(AliDielectronVarManager::kPt,"0.8, 1.0, 1.1, 1.2, 1.5, 100.0",kTRUE);
781 if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,0.9",kTRUE);
782 // cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE);
783 // cf->AddVariable(AliDielectronVarManager::kNclsITS,"1,2,3,4,5,6",kTRUE);
784 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3,-2.5,-2,2,2.5,3",kTRUE);
785 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"2.5,3.0,3.5,4.0,4.5,100",kTRUE);
786 cf->AddVariable(AliDielectronVarManager::kNclsTPC,"70, 90, 100, 120, 160",kTRUE);
787 // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,5.0,100",kTRUE);
788 // cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE); break;
789 // cf->AddVariable(AliDielectronVarManager::kTRDpidQuality,"3.5, 4.5, 5.5, 6.5",kTRUE);
790 // if(!hasMC && isESD) cf->AddVariable(AliDielectronVarManager::kTRDchi2,"-1.,0.,2.,4.",kTRUE);
794 if(cutDefinition==kTOFTRD) cf->SetStepForMCtruth();
795 cf->SetStepsForMCtruthOnly();
796 // cf->SetStepsForBackground();
799 die->SetCFManagerPair(cf);
802 void AddMCSignals(AliDielectron *die){
803 //Do we have an MC handler?
806 AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi");
807 inclusiveJpsi->SetLegPDGs(11,-11);
808 inclusiveJpsi->SetMotherPDGs(443,443);
809 inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
810 inclusiveJpsi->SetFillPureMCStep(kTRUE);
811 inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
812 inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
813 die->AddSignalMC(inclusiveJpsi);
815 AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi"); // prompt J/psi (not from beauty decays)
816 promptJpsi->SetLegPDGs(11,-11);
817 promptJpsi->SetMotherPDGs(443,443);
818 promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
819 promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
820 promptJpsi->SetFillPureMCStep(kTRUE);
821 promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
822 promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
823 promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
824 promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
825 die->AddSignalMC(promptJpsi);
827 AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi");
828 beautyJpsi->SetLegPDGs(11,-11);
829 beautyJpsi->SetMotherPDGs(443,443);
830 beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
831 beautyJpsi->SetGrandMotherPDGs(500,500);
832 beautyJpsi->SetFillPureMCStep(kTRUE);
833 beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
834 beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
835 beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
836 die->AddSignalMC(beautyJpsi);
838 AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi"); // embedded J/psi
839 directJpsi->SetLegPDGs(11,-11);
840 directJpsi->SetMotherPDGs(443,443);
841 directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
842 directJpsi->SetFillPureMCStep(kTRUE);
843 directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
844 directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
845 directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
846 directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
847 die->AddSignalMC(directJpsi);
849 AliDielectronSignalMC* conversionElePairs = new AliDielectronSignalMC("conversionElePairs","conversion electron pairs"); // pairs made from conversion (may be also from 2 different conversions)
850 conversionElePairs->SetLegPDGs(11,-11);
851 conversionElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
852 conversionElePairs->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
853 conversionElePairs->SetMotherPDGs(22,22);
854 // die->AddSignalMC(conversionElePairs);
857 void SetEtaCorrection()
859 if (AliDielectronPID::GetEtaCorrFunction()) return;
861 TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root";
862 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
863 if (trainRoot.IsNull()) etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
864 if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
865 Error("ConfigPbPb","Eta map not found: %s",etaMap.Data());
869 TFile f(etaMap.Data());
870 if (!f.IsOpen()) return;
871 TList *keys=f.GetListOfKeys();
873 for (Int_t i=0; i<keys->GetEntries(); ++i){
874 TString kName=keys->At(i)->GetName();
876 if (reg.MatchB(list)){
877 printf(" Using Eta Correction Function: %s\n",kName.Data());
878 AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
883 TVectorD *GetRunNumbers() {
885 Double_t runLHC10h[] = { // all good runs based on RCT 29.Mai
886 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
889 Double_t runLHC11h[] = { // all good runs based on RCT 29.Mai
890 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, 169590, 169588, 169587, 169586, 169557, 169555, 169554, 169553, 169550, 169515, 169512, 169506, 169504, 169498, 169475, 169420, 169419, 169418, 169417, 169415, 169411, 169238, 169167, 169160, 169156, 169148, 169145, 169144, 169138, 169099, 169094, 169091, 169045, 169044, 169040, 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
893 // selection via environement variable (works only for gsi trains)
896 if(list.Contains("LHC10h") || list.Contains("LHC11a10")) {
897 Int_t size = (int) (sizeof(runLHC10h)/sizeof(Double_t));
898 TVectorD *vec = new TVectorD(size+1);
900 (*vec)[size] = runLHC10h[0] + 1;
901 for (int i = 0; i < size; i++) {
902 (*vec)[i] = runLHC10h[size-1-i];
908 if( list.Contains("LHC11h") || list.Contains("LHC12a17") ) {
910 Int_t size = (int) (sizeof(runLHC11h)/sizeof(Double_t));
911 TVectorD *vec = new TVectorD(size+1);
913 (*vec)[size] = runLHC11h[0] + 1;
914 for (int i = 0; i < size; i++) {
915 (*vec)[i] = runLHC11h[size-1-i];
921 TVectorD *vec = new TVectorD(2);