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, 20,-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, 7); // ITS-3 = 1+2+4
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","VtxZ","Vertex Z;z (cm)", 300,-15.,15.,
400 AliDielectronVarManager::kZvPrim);
401 histos->UserHistogram("Event","Centrality","Centrality;centrality (%);events",
402 "0.,5.,10.,20.,40.,50.,60.,80.",
403 AliDielectronVarManager::kCentrality);
404 histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0;events", 500,0.,25000.,
405 AliDielectronVarManager::kMultV0);
406 histos->UserHistogram("Event","Cent_Mult","Centrality vs. Multiplicity;centrality (%);Multiplicity V0",
407 10,0.,100., 500,0.,25000.,
408 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kMultV0);
409 histos->UserProfile("Event","Cent_Nacc",
410 "accepted tracks;centrality (%)",
411 AliDielectronVarManager::kNacc,
412 "0.,5.,10.,20.,40.,50.,60.,80.,100.",
413 AliDielectronVarManager::kCentrality);
414 histos->UserProfile("Event","Cent_NVtxContrib",
415 "number of vertex contributors;centrality (%)",
416 AliDielectronVarManager::kNVtxContrib,
417 "0.,5.,10.,20.,40.,50.,60.,80.,100.",
418 AliDielectronVarManager::kCentrality);
421 if(cutDefinition == kTOFTRD || cutDefinition==kTOF) {
422 histos->UserHistogram("Event","TPCxH2","TPC Qx component;TPCxH2",
424 AliDielectronVarManager::kTPCxH2);
425 histos->UserHistogram("Event","TPCyH2","TPC Qy component;TPCyH2",
427 AliDielectronVarManager::kTPCyH2);
428 histos->UserHistogram("Event","TPCrpH2","TPC reaction plane; #Psi^{TPC}",
430 AliDielectronVarManager::kTPCrpH2);
431 histos->UserHistogram("Event","TPCsub1xH2","TPC Qx component sub1;TPCsub1xH2",
433 AliDielectronVarManager::kTPCsub1xH2);
434 histos->UserHistogram("Event","TPCsub1yH2","TPC Qy component sub1;TPCsub1yH2",
436 AliDielectronVarManager::kTPCsub1yH2);
437 histos->UserHistogram("Event","TPCsub1rpH2","TPC reaction plane sub1; #Psi^{sub1}",
439 AliDielectronVarManager::kTPCsub1rpH2);
440 histos->UserHistogram("Event","TPCsub2xH2","TPC Qx component sub2;TPCsub2xH2",
442 AliDielectronVarManager::kTPCsub2xH2);
443 histos->UserHistogram("Event","TPCsub2yH2","TPC Qy component sub2;TPCsub2yH2",
445 AliDielectronVarManager::kTPCsub2yH2);
446 histos->UserHistogram("Event","TPCsub2rpH2","TPC reaction plane sub2; #Psi^{sub2}",
448 AliDielectronVarManager::kTPCsub2rpH2);
449 histos->UserHistogram("Event","TPCsub12DiffH2","TPC reaction plane diff; cos(2(#Psi^{sub1}-#Psi^{sub2}))",
451 AliDielectronVarManager::kTPCsub12DiffH2);
452 /* // uncorrected eventplane
453 histos->UserHistogram("Event","TPCxH2uc","TPC Qx component;TPCxH2uc",
455 AliDielectronVarManager::kTPCxH2uc);
456 histos->UserHistogram("Event","TPCyH2uc","TPC Qy component;TPCyH2uc",
458 AliDielectronVarManager::kTPCyH2uc);
459 histos->UserHistogram("Event","TPCrpH2uc","TPC reaction plane;TPCrpH2uc",
461 AliDielectronVarManager::kTPCrpH2uc);
462 histos->UserHistogram("Event","TPCsub1xH2uc","TPC Qx component sub1;TPCsub1xH2uc",
464 AliDielectronVarManager::kTPCsub1xH2uc);
465 histos->UserHistogram("Event","TPCsub1yH2uc","TPC Qy component sub1;TPCsub1yH2uc",
467 AliDielectronVarManager::kTPCsub1yH2uc);
468 histos->UserHistogram("Event","TPCsub1rpH2uc","TPC reaction plane sub1;TPCsub1rpH2uc",
470 AliDielectronVarManager::kTPCsub1rpH2uc);
471 histos->UserHistogram("Event","TPCsub2xH2uc","TPC Qx component sub2;TPCsub2xH2uc",
473 AliDielectronVarManager::kTPCsub2xH2uc);
474 histos->UserHistogram("Event","TPCsub2yH2uc","TPC Qy component sub2;TPCsub2yH2uc",
476 AliDielectronVarManager::kTPCsub2yH2uc);
477 histos->UserHistogram("Event","TPCsub2rpH2uc","TPC reaction plane sub2;TPCsub2rpH2uc",
479 AliDielectronVarManager::kTPCsub2rpH2uc);
480 histos->UserHistogram("Event","TPCsub12DiffH2uc","TPC reaction plane difference;TPCsub12DiffH2uc",
482 AliDielectronVarManager::kTPCsub12DiffH2uc);
484 histos->UserHistogram("Event","V0ACrpH2","VZERO-AC RP; #Psi_{2}^{V0AC} (rad.)",
486 AliDielectronVarManager::kV0ACrpH2);
487 histos->UserHistogram("Event","V0ArpH2","VZERO-A RP; #Psi_{2}^{V0A} (rad.)",
489 AliDielectronVarManager::kV0ArpH2);
490 histos->UserHistogram("Event","V0CrpH2","VZERO-C RP; #Psi_{2}^{V0C} (rad.)",
492 AliDielectronVarManager::kV0CrpH2);
494 histos->UserHistogram("Event","V0ATPCDiffH2","VZERO-A TPC diff; cos(2(#Psi^{V0A}-#Psi^{TPC}))",
496 AliDielectronVarManager::kV0ATPCDiffH2);
497 histos->UserHistogram("Event","V0CTPCDiffH2","VZERO-C TPC diff; cos(2(#Psi^{V0C}-#Psi^{TPC}))",
499 AliDielectronVarManager::kV0CTPCDiffH2);
500 histos->UserHistogram("Event","V0AV0CDiffH2","VZERO-A VZERO-C diff; cos(2(#Psi^{V0A}-#Psi^{V0C}))",
502 AliDielectronVarManager::kV0AV0CDiffH2);
504 // centrality dependent event plane histograms
505 histos->UserHistogram("Event","Cent_TPCrpH2","TPC RP;centrality (%);#Psi^{TPC} (rad.)",
506 10,0.,100.,100,-2.,2.,
507 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCrpH2);
508 histos->UserHistogram("Event","Cent_TPCsub1rpH2","TPC-1 RP;centrality (%);#Psi^{sub1} (rad.)",
509 10,0.,100.,100,-2.,2.,
510 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub1rpH2);
511 histos->UserHistogram("Event","Cent_TPCsub2rpH2","TPC-2 RP;centrality (%);#Psi^{sub2} (rad.)",
512 10,0.,100.,100,-2.,2.,
513 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub2rpH2);
515 histos->UserHistogram("Event","Cent_V0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{V0AC} (rad.)",
516 10,0.,100.,100,-2.0,2.0,
517 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ACrpH2);
518 histos->UserHistogram("Event","Cent_V0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A} (rad.)",
519 10,0.,100.,100,-2.0,2.0,
520 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ArpH2);
521 histos->UserHistogram("Event","Cent_V0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C} (rad.)",
522 10,0.,100.,100,-2.0,2.0,
523 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0CrpH2);
524 // for resolution calculation
525 histos->UserHistogram("Event","Cent_V0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{TPC}))",
526 10,0.,100.,300,-1.0,1.0,
527 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ATPCDiffH2);
528 histos->UserHistogram("Event","Cent_V0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{V0C}-#Psi^{TPC}))",
529 10,0.,100.,300,-1.0,1.0,
530 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0CTPCDiffH2);
531 histos->UserHistogram("Event","Cent_V0AV0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{V0C}))",
532 10,0.,100.,300,-1.0,1.0,
533 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0AV0CDiffH2);
534 histos->UserHistogram("Event","Cent_TPCsub12DiffH2","TPC-sub1 TPC-sub2 diff;centrality (%);cos(2(#Psi^{sub1}-#Psi^{sub2}))",
535 10,0.,100.,300,-1.0,1.0,
536 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2);
538 histos->UserHistogram("Event","Cent_TPCsub12DiffH2Sin","TPC-sub1 TPC-sub2 diff;centrality (%);sin(2(#Psi^{sub1}-#Psi^{sub2}))",
539 10,0.,100.,300,-1.0,1.0,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2Sin);
541 // EPSelectionTask V0 information directly from the ESDs
542 histos->UserHistogram("Event","Cent_v0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{v0AC} (rad.)",
543 10,0.,100.,100,-2.0,2.0,
544 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ACrpH2);
545 histos->UserHistogram("Event","Cent_v0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{v0A} (rad.)",
546 10,0.,100.,100,-2.0,2.0,
547 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ArpH2);
548 histos->UserHistogram("Event","Cent_v0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{v0C} (rad.)",
549 10,0.,100.,100,-2.0,2.0,
550 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CrpH2);
551 // for resolution calculation
552 histos->UserHistogram("Event","Cent_v0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{TPC}))",
553 10,0.,100.,300,-1.0,1.0,
554 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ATPCDiffH2);
555 histos->UserHistogram("Event","Cent_v0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{v0C}-#Psi^{TPC}))",
556 10,0.,100.,300,-1.0,1.0,
557 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CTPCDiffH2);
558 histos->UserHistogram("Event","Cent_v0Av0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{v0C}))",
559 10,0.,100.,300,-1.0,1.0,
560 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0Av0CDiffH2);
564 ////// MONTE CARLO //////
566 if(cutDefinition == kTOFTRD && hasMC) {
567 histos->AddClass("MCEvent");
568 histos->UserHistogram("MCEvent","Cent_NJPsis","Centrality vs. generated incl. J/#psi per event;centrality (%);N_{J/#psi}",
569 10,0.,100., 21,-0.5,20.5,
570 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kNumberOfJPsis);
574 //Initialise histogram classes
575 histos->SetReservedWords("Track;Pair");
578 // to fill also mixed event histograms loop until 10
579 for (Int_t i=0; i<3; ++i){
580 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
583 if(cutDefinition < kEtaGap01) {
586 for (Int_t i=0; i<3; ++i){
587 histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
591 //to fill also track info from 2nd event loop until 2
592 for (Int_t i=0; i<2; ++i){
593 histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
596 // histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
597 // histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
599 ///// add histograms to Track classes /////
602 histos->UserHistogram("Track","ImpactParXY",";dXY (cm);#tracks", 500,-1.,1.,
603 AliDielectronVarManager::kImpactParXY);
604 histos->UserHistogram("Track","ImpactParZ",";dZ (cm);#tracks", 600,-3.,3.,
605 AliDielectronVarManager::kImpactParZ);
608 histos->UserHistogram("Track","Pt",";p_{T} (GeV/c);#tracks", 400,0,20.,
609 AliDielectronVarManager::kPt);
610 histos->UserHistogram("Track","Eta_Phi",";#eta;#varphi;#tracks", 200,-1,1,200,0,6.285,
611 AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
614 histos->UserHistogram("Track","TPCnCls",";N_{cls}^{TPC};#tracks", 160,-0.5,159.5,
615 AliDielectronVarManager::kNclsTPC);
616 histos->UserHistogram("Track","TPCsignalN",";N_{cls}^{TPC};#tracks", 160,-0.5,159.5,
617 AliDielectronVarManager::kTPCsignalN);
618 histos->UserHistogram("Track","NclFr",";N_{max.cls}^{TPC};#tracks", 160,-0.5,159.5,
619 AliDielectronVarManager::kNFclsTPCr);
620 histos->UserHistogram("Track","Ncl_NclFr",";N_{cls}^{TPC};N_{max.cls}^{TPC};#tracks",
621 160,-0.5,159.5,160,-0.5,159.5,
622 AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
625 histos->UserHistogram("Track","NtrklTRD",";N_{trkl}^{TRD};#tracks",
627 AliDielectronVarManager::kTRDpidQuality);
630 histos->UserHistogram("Track","dEdx_P",";p (GeV/c);TPC signal (arb units);#tracks",
631 400,0.2,20.,200,0.,200.,
632 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
633 histos->UserHistogram("Track","TPCnSigmaEle_P","p (GeV/c);n#sigma_{ele}^{TPC};#tracks",
634 400,0.2,20.,200,-10.,10.,
635 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
637 ///// add histograms to Pair classes /////
638 histos->UserHistogram("Pair","InvMass",";m_{ee} (GeV/c^{2});#pairs",
639 300,.0,300*0.04, AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
640 histos->UserHistogram("Pair","Rapidity",";y;#pairs",
641 100,-1.,1., AliDielectronVarManager::kY);
642 histos->UserHistogram("Pair","OpeningAngle","opening angle (rad.);#pairs",
643 100,0.,3.15, AliDielectronVarManager::kOpeningAngle);
644 histos->UserHistogram("Pair","Chi2NDF",";#chi^{2}/NDF;#pairs",
645 100,0.,20, AliDielectronVarManager::kChi2NDF);
646 histos->UserHistogram("Pair","PsiPair",";#psi;#pairs",
647 100,0.,3.15, AliDielectronVarManager::kPsiPair);
648 histos->UserHistogram("Pair","R",";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);
657 //// FLOW results use tprofiles
658 if(cutDefinition == kTOFTRD || cutDefinition == kTOF || cutDefinition >= kEtaGap01) {
660 histos->UserProfile("Pair","M_Cent_Pt_V0ACrpH2FlowV2",
661 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
662 AliDielectronVarManager::kV0ACrpH2FlowV2,
663 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
664 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
666 histos->UserProfile("Pair","M_Cent_Pt_V0ArpH2FlowV2",
667 "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
668 AliDielectronVarManager::kV0ArpH2FlowV2,
669 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
670 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
672 histos->UserProfile("Pair","M_Cent_Pt_V0CrpH2FlowV2",
673 "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
674 AliDielectronVarManager::kV0CrpH2FlowV2,
675 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
676 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
678 histos->UserProfile("Pair","M_Cent_Pt_v0ACrpH2FlowV2",
679 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
680 AliDielectronVarManager::kv0ACrpH2FlowV2,
681 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
682 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
684 histos->UserProfile("Pair","M_Cent_Pt_v0ArpH2FlowV2",
685 "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
686 AliDielectronVarManager::kv0ArpH2FlowV2,
687 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
688 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
690 histos->UserProfile("Pair","M_Cent_Pt_v0CrpH2FlowV2",
691 "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
692 AliDielectronVarManager::kv0CrpH2FlowV2,
693 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
694 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
698 histos->UserProfile("Pair","M_V0ACrpH2FlowV2",
699 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
700 AliDielectronVarManager::kV0ACrpH2FlowV2,
702 AliDielectronVarManager::kM);
704 histos->UserProfile("Pair","M_V0ArpH2FlowV2",
705 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
706 AliDielectronVarManager::kV0ArpH2FlowV2,
708 AliDielectronVarManager::kM);
710 histos->UserProfile("Pair","M_V0CrpH2FlowV2",
711 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
712 AliDielectronVarManager::kV0CrpH2FlowV2,
714 AliDielectronVarManager::kM);
718 die->SetHistogramManager(histos);
721 void InitHF(AliDielectron* die, Int_t cutDefinition)
724 // Setup the HF arrays
727 AliDielectronHF *hf=new AliDielectronHF(die->GetName(),die->GetTitle());
728 // if(hasMC) hf->SetStepForMCGenerated();
729 hf->SetPairTypes(AliDielectronHF::kAll);
730 hf->SetVariable(AliDielectronVarManager::kM, 125, 0.0, 0.04*125);
732 hf->AddCutVariable(AliDielectronVarManager::kCentrality, "0.,5.,10.,20.,40.,50.,60.,80." );
733 hf->AddCutVariable(AliDielectronVarManager::kPt, "0.,2.5,5.,100." );
734 hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2,4,-1.*TMath::Pi(),TMath::Pi() );
735 hf->AddCutVariable(AliDielectronVarManager::kY, 1, -0.9, 0.9 );
736 // hf->AddCutVariable(AliDielectronVarManager::kPt, "0.8, 1.0, 1.1, 1.2, 1.5, 100.0", kTRUE, AliDielectronHF::kBinToMax);
737 hf->AddCutVariable(AliDielectronVarManager::kNclsTPC, "70,90,100,120,160", kTRUE, AliDielectronHF::kBinToMax);
738 hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaEle,"-4,-3,-2.5,-2,2,2.5,3,4", kTRUE, AliDielectronHF::kSymBin);
739 hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaPio,"3.,3.5,4.,100.", kTRUE, AliDielectronHF::kBinToMax);
740 hf->AddCutVariable(AliDielectronVarManager::kITSLayerFirstCls,4,0.,4., kFALSE, kTRUE, AliDielectronHF::kBinFromMin);
741 //hf->AddCutVariable(AliDielectronVarManager::kNclsITS, 5,2.,7., kFALSE, kTRUE, AliDielectronHF::kBinToMax);
742 //hf->AddCutVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers());
744 die->SetHistogramArray(hf);
747 void InitCF(AliDielectron* die, Int_t cutDefinition)
750 // Setup the CF Manager if needed
753 AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
756 cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.,10.,20.,40.,50.,60.,80.");
757 // if(!hasMC) cf->AddVariable(AliDielectronVarManager::kZvPrim,20, -10., 10.);
758 if(hasMC) cf->AddVariable(AliDielectronVarManager::kNacc,20,0.,3000.0);
759 if(hasMC) cf->AddVariable(AliDielectronVarManager::kNVtxContrib,20,0.,4000.);
760 if(hasMC) cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers() );
763 // cf->AddVariable(AliDielectronVarManager::kY,"-0.8,0.8");
764 cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
765 cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
766 cf->AddVariable(AliDielectronVarManager::kPt,"0., 1., 2.5, 5., 100.0");
767 if(hasMC) cf->AddVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
768 // if(hasMC) cf->AddVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.);
771 cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2,4,-1.*TMath::Pi(),TMath::Pi());
772 cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2,4,-1.*TMath::Pi(),TMath::Pi());
775 cf->AddVariable(AliDielectronVarManager::kPt,"0.8, 1.0, 1.1, 1.2, 1.5, 100.0",kTRUE);
776 if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,0.9",kTRUE);
777 // cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE);
778 // cf->AddVariable(AliDielectronVarManager::kNclsITS,"1,2,3,4,5,6",kTRUE);
779 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3,-2.5,-2,2,2.5,3",kTRUE);
780 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"2.5,3.0,3.5,4.0,4.5,100",kTRUE);
781 cf->AddVariable(AliDielectronVarManager::kNclsTPC,"70, 90, 100, 120, 160",kTRUE);
782 // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,5.0,100",kTRUE);
783 // cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE); break;
784 // cf->AddVariable(AliDielectronVarManager::kTRDpidQuality,"3.5, 4.5, 5.5, 6.5",kTRUE);
785 // if(!hasMC && isESD) cf->AddVariable(AliDielectronVarManager::kTRDchi2,"-1.,0.,2.,4.",kTRUE);
789 if(cutDefinition==kTOFTRD) cf->SetStepForMCtruth();
790 cf->SetStepsForMCtruthOnly();
791 // cf->SetStepsForBackground();
794 die->SetCFManagerPair(cf);
797 void AddMCSignals(AliDielectron *die){
798 //Do we have an MC handler?
801 AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi");
802 inclusiveJpsi->SetLegPDGs(11,-11);
803 inclusiveJpsi->SetMotherPDGs(443,443);
804 inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
805 inclusiveJpsi->SetFillPureMCStep(kTRUE);
806 inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
807 inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
808 die->AddSignalMC(inclusiveJpsi);
810 AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi"); // prompt J/psi (not from beauty decays)
811 promptJpsi->SetLegPDGs(11,-11);
812 promptJpsi->SetMotherPDGs(443,443);
813 promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
814 promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
815 promptJpsi->SetFillPureMCStep(kTRUE);
816 promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
817 promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
818 promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
819 promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
820 die->AddSignalMC(promptJpsi);
822 AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi");
823 beautyJpsi->SetLegPDGs(11,-11);
824 beautyJpsi->SetMotherPDGs(443,443);
825 beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
826 beautyJpsi->SetGrandMotherPDGs(500,500);
827 beautyJpsi->SetFillPureMCStep(kTRUE);
828 beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
829 beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
830 beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
831 die->AddSignalMC(beautyJpsi);
833 AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi"); // embedded J/psi
834 directJpsi->SetLegPDGs(11,-11);
835 directJpsi->SetMotherPDGs(443,443);
836 directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
837 directJpsi->SetFillPureMCStep(kTRUE);
838 directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
839 directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
840 directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
841 directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
842 die->AddSignalMC(directJpsi);
844 AliDielectronSignalMC* conversionElePairs = new AliDielectronSignalMC("conversionElePairs","conversion electron pairs"); // pairs made from conversion (may be also from 2 different conversions)
845 conversionElePairs->SetLegPDGs(11,-11);
846 conversionElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
847 conversionElePairs->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
848 conversionElePairs->SetMotherPDGs(22,22);
849 // die->AddSignalMC(conversionElePairs);
852 void SetEtaCorrection()
854 if (AliDielectronPID::GetEtaCorrFunction()) return;
856 TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root";
857 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
858 if (trainRoot.IsNull()) etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
859 if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
860 Error("ConfigPbPb","Eta map not found: %s",etaMap.Data());
864 TFile f(etaMap.Data());
865 if (!f.IsOpen()) return;
866 TList *keys=f.GetListOfKeys();
868 for (Int_t i=0; i<keys->GetEntries(); ++i){
869 TString kName=keys->At(i)->GetName();
871 if (reg.MatchB(list)){
872 printf(" Using Eta Correction Function: %s\n",kName.Data());
873 AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
878 TVectorD *GetRunNumbers() {
880 Double_t runLHC10h[] = { // all good runs based on RCT 29.Mai
881 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
884 Double_t runLHC11h[] = { // all good runs based on RCT 29.Mai
885 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
888 // selection via environement variable (works only for gsi trains)
891 if(list.Contains("LHC10h") || list.Contains("LHC11a10")) {
892 Int_t size = (int) (sizeof(runLHC10h)/sizeof(Double_t));
893 TVectorD *vec = new TVectorD(size+1);
895 (*vec)[size] = runLHC10h[0] + 1;
896 for (int i = 0; i < size; i++) {
897 (*vec)[i] = runLHC10h[size-1-i];
903 if( list.Contains("LHC11h") || list.Contains("LHC12a17") ) {
905 Int_t size = (int) (sizeof(runLHC11h)/sizeof(Double_t));
906 TVectorD *vec = new TVectorD(size+1);
908 (*vec)[size] = runLHC11h[0] + 1;
909 for (int i = 0; i < size; i++) {
910 (*vec)[i] = runLHC11h[size-1-i];
916 TVectorD *vec = new TVectorD(2);