1 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
2 void InitCF(AliDielectron* die, Int_t cutDefinition);
4 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
5 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
7 void AddMCSignals(AliDielectron *die);
8 void SetEtaCorrection();
9 TVectorD *GetRunNumbers();
11 TString names=("TPC;TOF;TRD;rec;TOFTRD;TOFTRD2;ITScls;ITSamy;dca;chi2;Gam0;Gam01;Gam05;Gam10;Gam15;Gam20;EtaGap01;EtaGap02;EtaGap03;EtaGap04;EtaGap05;SubLS;SubRndm");
12 enum { kTPC=0, kTOF, kTRD, krec, kTOFTRD, kTOFTRD2, kITScls, kITSamy, kDCA, kChi, kGam0, kGam01, kGam05, kGam10, kGam15, kGam20, kEtaGap01, kEtaGap02, kEtaGap03, kEtaGap04, kEtaGap05, kSubLS, kSubRndm };
14 TObjArray *arrNames=names.Tokenize(";");
15 const Int_t nDie=arrNames->GetEntries();
19 AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, Bool_t isMC=kFALSE)
22 // Setup the instance of AliDielectron
27 //(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
30 Bool_t isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
32 // switch off some configurations
33 switch(cutDefinition) {
41 if(!hasMC) return 0x0;
63 if( hasMC) return 0x0;
67 // create the actual framework object
68 TString name=Form("%02d",cutDefinition);
69 if (cutDefinition<arrNames->GetEntriesFast()){
70 name=arrNames->At(cutDefinition)->GetName();
72 AliDielectron *die = new AliDielectron(Form("%s",name.Data()),
73 Form("Track cuts: %s",name.Data()));
75 // Monte Carlo Signals and TRD efficiency tables
80 TString pidTab="$TRAIN_ROOT/util/dielectron/dielectron/TRDpidEff_eleProb07_TRDntr4_6.root";
81 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
82 if (trainRoot.IsNull()) pidTab="$ALICE_ROOT/PWGDQ/dielectron/files/TRDpidEff_eleProb07_TRDntr4_6.root";
84 if (gSystem->AccessPathName(gSystem->ExpandPathName(pidTab.Data())))
85 Error("ConfigPbPb","PID table not found: %s",pidTab.Data());
87 die->SetTRDcorrectionFilename(pidTab.Data());
91 SetupTrackCuts(die,cutDefinition);
92 SetupPairCuts(die,cutDefinition);
95 if(cutDefinition == kTOFTRD ||
96 cutDefinition == kGam0 ||
97 cutDefinition == kTOFTRD2 ||
98 cutDefinition >= kEtaGap01 )
99 InitHistograms(die,cutDefinition);
101 // CF container setup
102 if(cutDefinition < kEtaGap01 ||
103 cutDefinition == kSubRndm )
104 InitCF(die,cutDefinition);
109 if(cutDefinition == kTOFTRD) {
111 AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
112 rot->SetIterations(10);
113 rot->SetConeAnglePhi(TMath::Pi());
114 rot->SetStartAnglePhi(TMath::Pi());
115 die->SetTrackRotator(rot);
117 AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
118 mix->AddVariable(AliDielectronVarManager::kZvPrim,20,-10.,10.);
119 mix->AddVariable(AliDielectronVarManager::kCentrality,"0,5,10,20,50,80");
120 mix->SetMixType(AliDielectronMixingHandler::kAll);
122 die->SetMixingHandler(mix);
126 // TPC event plane configurations
128 switch(cutDefinition) {
129 case kEtaGap01: gGap=0.1; break;
130 case kEtaGap02: gGap=0.2; break;
131 case kEtaGap03: gGap=0.3; break;
132 case kEtaGap04: gGap=0.4; break;
133 case kEtaGap05: gGap=0.5; break;
137 AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
138 poi->AddCut(AliDielectronVarManager::kM,2.92,3.20); // particles of interest, jpsi mass window
139 die->GetEventPlanePOIPreFilter().AddCuts(poi);
141 if(cutDefinition >= kEtaGap01 &&
142 cutDefinition < kSubLS ) {
143 AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap");
144 etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE);
145 die->GetEventPlanePreFilter().AddCuts(etaGap);
148 if(cutDefinition==kSubLS) die->SetLikeSignSubEvents();
149 die->SetPreFilterEventPlane();
152 // prefilter settings
153 if(cutDefinition == kTOFTRD2)
154 die->SetPreFilterAllSigns();
156 die->SetPreFilterUnlikeOnly();
158 // setup eta correction
159 if(isESD) SetEtaCorrection();
162 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
163 if (!trainRoot.IsNull()) {
164 die->SetVZEROCalibrationFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroCalibrationLHC10h.root");
165 die->SetVZERORecenteringFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroRecenteringLHC10h.root");
171 //______________________________________________________________________________________
172 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
175 // Setup the track cuts
179 AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
180 die->GetTrackFilter().AddCuts(cuts);
182 //Pt cut, should make execution a bit faster
183 AliDielectronVarCuts *pt = new AliDielectronVarCuts("PtCut","PtCut");
184 if(cutDefinition >= kEtaGap01 )
185 pt->AddCut(AliDielectronVarManager::kPt,1.1,1e30);
187 pt->AddCut(AliDielectronVarManager::kPt,0.8,1e30);
190 // track cuts ESD and AOD
191 AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
192 varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
193 varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
194 varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
195 varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
196 varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0);
197 varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
198 switch(cutDefinition) {
199 case kTOFTRD2: varCuts->AddCut(AliDielectronVarManager::kITSLayerFirstCls,-0.01,0.5); //ITS(0) = SPDfirst
201 default: varCuts->AddCut(AliDielectronVarManager::kITSLayerFirstCls,-0.01,1.5); //ITS(0-1) = SPDany
204 cuts->AddCut(varCuts);
206 AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
207 trkCuts->SetRequireITSRefit(kTRUE);
208 trkCuts->SetRequireTPCRefit(kTRUE);
209 cuts->AddCut(trkCuts);
211 //Do we have an MC handler?
212 // Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
214 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
215 AliDielectronPID *pid = new AliDielectronPID("PID","PID");
217 ////////////////////////////////// DATA
219 pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,3.5,0.,0.,kTRUE);
220 pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
222 if(cutDefinition==kTRD || cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2)
223 pid->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
224 AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
227 ////////////////////////////////// MC
231 Double_t nSigmaPi = 3.5; Double_t nSigmaP = 3.5;
232 Double_t resolution=0.0549;
233 Double_t BBpro[5] = {0};
234 Double_t BBpio[5] = {0};
236 for(Int_t icent=0; icent<8; icent++) {
240 BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848;
241 BBpio[0] = 0.0252122; BBpio[1] = 38.8991; BBpio[2] = 4.0901e-11; BBpio[3] = 5.27988; BBpio[4] = 4.3108;
244 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
245 BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093;
248 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
249 BBpio[0] = 0.0263205; BBpio[1] = 37.9307; BBpio[2] = 4.29724e-11; BBpio[3] = 5.74458; BBpio[4] = 4.32459;
252 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
253 BBpio[0] = 0.026294; BBpio[1] = 39.0346; BBpio[2] = 4.12261e-11; BBpio[3] = 5.28808; BBpio[4] = 4.31301;
256 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
257 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
260 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
261 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
264 BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848;
265 BBpio[0] = 0.026302; BBpio[1] = 38.6888; BBpio[2] = 3.56792e-11; BBpio[3] = 5.2465; BBpio[4] = 4.31094;
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.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
272 BBpro[0] = 0.0313438; BBpro[1] = 25.8666; BBpro[2] = 4.5457e-11; BBpro[3] = 2.07912; BBpro[4] = 5.99986;
273 BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093;
276 BBpro[0] = 0.0319126; BBpro[1] = 36.8784; BBpro[2] = 3.4274e-11; BBpro[3] = 3.2431; BBpro[4] = 5.93388;
277 BBpio[0] = 0.027079; BBpio[1] = 67.5936; BBpio[2] = 9.72548e-11; BBpio[3] = 9.61382; BBpio[4] = 5.99372;
282 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.);
284 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.);
286 TString list=gSystem->Getenv("LIST");
289 if (list.Contains("LHC11a10b") || list.IsNull()) {
290 printf("LHC11a10b parameters\n");
291 ffPro->SetParameters(BBpro[0],BBpro[1],BBpro[2],BBpro[3],BBpro[4]);
292 ffPio->SetParameters(BBpio[0],BBpio[1],BBpio[2],BBpio[3],BBpio[4]);
295 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPro,10,((double)icent)*10.,((double)icent+1)*10,
296 kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
298 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPio,10,((double)icent)*10.,((double)icent+1)*10,
299 kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
303 // shifts for the nSigma electrons
304 TGraph* nSigmaCorrection = new TGraph();
306 if (list.Contains("LHC11a10b") || list.IsNull()) {
307 nSigmaCorrection->SetPoint(0, 137161., -0.50-(0.28));
308 nSigmaCorrection->SetPoint(1, 139510., -0.50-(0.28));
309 pid->SetCorrGraph(nSigmaCorrection);
314 ////////////////////////////////// DATA + MC
315 // pid cuts TPC + TOF & TRD
316 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
317 if(cutDefinition==kTOF || cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2)
318 pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
320 if(cutDefinition!=krec) cuts->AddCut(pid);
321 /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
324 // exclude conversion electrons selected by the tender
325 AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
326 noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
327 cuts->AddCut(noconv);
331 //______________________________________________________________________________________
332 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
335 // Setup the pair cuts
338 // conversion rejection
340 switch(cutDefinition) {
341 case kTPC: gCut=0.05; break;
342 case krec: gCut=0.05; break;
343 case kGam10: gCut=0.1; break;
344 case kGam15: gCut=0.15; break;
345 case kGam20: gCut=0.2; break;
346 case kGam05: gCut=0.05; break;
347 case kGam01: gCut=0.01; break;
348 case kGam0: gCut=0.0; break;
349 default: gCut=0.05; // default
352 AliDielectronVarCuts *gammaCut=new AliDielectronVarCuts("gammaCut","gammaCut");
353 gammaCut->AddCut(AliDielectronVarManager::kM,0.,gCut);
354 die->GetPairPreFilter().AddCuts(gammaCut);
357 // rapidity selection
358 AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9");
359 rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
360 die->GetPairFilter().AddCuts(rapCut);
364 //______________________________________________________________________________________
365 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
368 // Initialise the histograms
370 // Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
372 //Setup histogram Manager
373 AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
376 //add histograms to event class
377 histos->AddClass("Event");
378 histos->UserHistogram("Event","VtxZ","Vertex Z;z (cm)",
380 AliDielectronVarManager::kZvPrim);
381 histos->UserHistogram("Event","Centrality","Centrality;centrality (%)",
382 "0.,5.,10.,20.,40.,50.,60.,80.,100.",
383 AliDielectronVarManager::kCentrality);
384 histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0",
386 AliDielectronVarManager::kMultV0);
387 histos->UserHistogram("Event","Cent_Mult","Centrality vs. Multiplicity;centrality (%);Multiplicity V0",
388 10,0.,100., 500,0.,25000.,
389 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kMultV0);
390 histos->UserProfile("Event","Cent_Nacc",
391 "accepted tracks;centrality (%)",
392 AliDielectronVarManager::kNacc,
393 "0.,5.,10.,20.,40.,50.,60.,80.,100.",
394 AliDielectronVarManager::kCentrality);
395 histos->UserProfile("Event","Cent_NVtxContrib",
396 "number of vertex contributors;centrality (%)",
397 AliDielectronVarManager::kNVtxContrib,
398 "0.,5.,10.,20.,40.,50.,60.,80.,100.",
399 AliDielectronVarManager::kCentrality);
403 if(cutDefinition == kTOFTRD || cutDefinition >= kEtaGap01) {
404 histos->UserHistogram("Event","TPCxH2","TPC Qx component;TPCxH2",
406 AliDielectronVarManager::kTPCxH2);
407 histos->UserHistogram("Event","TPCyH2","TPC Qy component;TPCyH2",
409 AliDielectronVarManager::kTPCyH2);
410 histos->UserHistogram("Event","TPCrpH2","TPC reaction plane; #Psi^{TPC}",
412 AliDielectronVarManager::kTPCrpH2);
413 histos->UserHistogram("Event","TPCsub1xH2","TPC Qx component sub1;TPCsub1xH2",
415 AliDielectronVarManager::kTPCsub1xH2);
416 histos->UserHistogram("Event","TPCsub1yH2","TPC Qy component sub1;TPCsub1yH2",
418 AliDielectronVarManager::kTPCsub1yH2);
419 histos->UserHistogram("Event","TPCsub1rpH2","TPC reaction plane sub1; #Psi^{sub1}",
421 AliDielectronVarManager::kTPCsub1rpH2);
422 histos->UserHistogram("Event","TPCsub2xH2","TPC Qx component sub2;TPCsub2xH2",
424 AliDielectronVarManager::kTPCsub2xH2);
425 histos->UserHistogram("Event","TPCsub2yH2","TPC Qy component sub2;TPCsub2yH2",
427 AliDielectronVarManager::kTPCsub2yH2);
428 histos->UserHistogram("Event","TPCsub2rpH2","TPC reaction plane sub2; #Psi^{sub2}",
430 AliDielectronVarManager::kTPCsub2rpH2);
431 histos->UserHistogram("Event","TPCsub12DiffH2","TPC reaction plane diff; cos(2(#Psi^{sub1}-#Psi^{sub2}))",
433 AliDielectronVarManager::kTPCsub12DiffH2);
434 /* // uncorrected eventplane
435 histos->UserHistogram("Event","TPCxH2uc","TPC Qx component;TPCxH2uc",
437 AliDielectronVarManager::kTPCxH2uc);
438 histos->UserHistogram("Event","TPCyH2uc","TPC Qy component;TPCyH2uc",
440 AliDielectronVarManager::kTPCyH2uc);
441 histos->UserHistogram("Event","TPCrpH2uc","TPC reaction plane;TPCrpH2uc",
443 AliDielectronVarManager::kTPCrpH2uc);
444 histos->UserHistogram("Event","TPCsub1xH2uc","TPC Qx component sub1;TPCsub1xH2uc",
446 AliDielectronVarManager::kTPCsub1xH2uc);
447 histos->UserHistogram("Event","TPCsub1yH2uc","TPC Qy component sub1;TPCsub1yH2uc",
449 AliDielectronVarManager::kTPCsub1yH2uc);
450 histos->UserHistogram("Event","TPCsub1rpH2uc","TPC reaction plane sub1;TPCsub1rpH2uc",
452 AliDielectronVarManager::kTPCsub1rpH2uc);
453 histos->UserHistogram("Event","TPCsub2xH2uc","TPC Qx component sub2;TPCsub2xH2uc",
455 AliDielectronVarManager::kTPCsub2xH2uc);
456 histos->UserHistogram("Event","TPCsub2yH2uc","TPC Qy component sub2;TPCsub2yH2uc",
458 AliDielectronVarManager::kTPCsub2yH2uc);
459 histos->UserHistogram("Event","TPCsub2rpH2uc","TPC reaction plane sub2;TPCsub2rpH2uc",
461 AliDielectronVarManager::kTPCsub2rpH2uc);
462 histos->UserHistogram("Event","TPCsub12DiffH2uc","TPC reaction plane difference;TPCsub12DiffH2uc",
464 AliDielectronVarManager::kTPCsub12DiffH2uc);
466 histos->UserHistogram("Event","V0ACrpH2","VZERO-AC RP; #Psi_{2}^{V0AC} (rad.)",
468 AliDielectronVarManager::kV0ACrpH2);
469 histos->UserHistogram("Event","V0ArpH2","VZERO-A RP; #Psi_{2}^{V0A} (rad.)",
471 AliDielectronVarManager::kV0ArpH2);
472 histos->UserHistogram("Event","V0CrpH2","VZERO-C RP; #Psi_{2}^{V0C} (rad.)",
474 AliDielectronVarManager::kV0CrpH2);
476 histos->UserHistogram("Event","V0ATPCDiffH2","VZERO-A TPC diff; cos(2(#Psi^{V0A}-#Psi^{TPC}))",
478 AliDielectronVarManager::kV0ATPCDiffH2);
479 histos->UserHistogram("Event","V0CTPCDiffH2","VZERO-C TPC diff; cos(2(#Psi^{V0C}-#Psi^{TPC}))",
481 AliDielectronVarManager::kV0CTPCDiffH2);
482 histos->UserHistogram("Event","V0AV0CDiffH2","VZERO-A VZERO-C diff; cos(2(#Psi^{V0A}-#Psi^{V0C}))",
484 AliDielectronVarManager::kV0AV0CDiffH2);
486 // centrality dependent event plane histograms
487 histos->UserHistogram("Event","Cent_TPCrpH2","TPC RP;centrality (%);#Psi^{TPC} (rad.)",
488 10,0.,100.,100,-2.,2.,
489 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCrpH2);
490 histos->UserHistogram("Event","Cent_TPCsub1rpH2","TPC-1 RP;centrality (%);#Psi^{sub1} (rad.)",
491 10,0.,100.,100,-2.,2.,
492 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub1rpH2);
493 histos->UserHistogram("Event","Cent_TPCsub2rpH2","TPC-2 RP;centrality (%);#Psi^{sub2} (rad.)",
494 10,0.,100.,100,-2.,2.,
495 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub2rpH2);
497 histos->UserHistogram("Event","Cent_V0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{V0AC} (rad.)",
498 10,0.,100.,100,-2.0,2.0,
499 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ACrpH2);
500 histos->UserHistogram("Event","Cent_V0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A} (rad.)",
501 10,0.,100.,100,-2.0,2.0,
502 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ArpH2);
503 histos->UserHistogram("Event","Cent_V0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C} (rad.)",
504 10,0.,100.,100,-2.0,2.0,
505 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0CrpH2);
506 // for resolution calculation
507 histos->UserHistogram("Event","Cent_V0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{TPC}))",
508 10,0.,100.,300,-1.0,1.0,
509 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ATPCDiffH2);
510 histos->UserHistogram("Event","Cent_V0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{V0C}-#Psi^{TPC}))",
511 10,0.,100.,300,-1.0,1.0,
512 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0CTPCDiffH2);
513 histos->UserHistogram("Event","Cent_V0AV0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{V0C}))",
514 10,0.,100.,300,-1.0,1.0,
515 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0AV0CDiffH2);
516 histos->UserHistogram("Event","Cent_TPCsub12DiffH2","TPC-sub1 TPC-sub2 diff;centrality (%);cos(2(#Psi^{sub1}-#Psi^{sub2}))",
517 10,0.,100.,300,-1.0,1.0,
518 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2);
520 histos->UserHistogram("Event","Cent_TPCsub12DiffH2Sin","TPC-sub1 TPC-sub2 diff;centrality (%);sin(2(#Psi^{sub1}-#Psi^{sub2}))",
521 10,0.,100.,300,-1.0,1.0,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2Sin);
522 //// EPSelectionTask V0 information directly from the ESDs
523 histos->UserHistogram("Event","Cent_v0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{v0AC} (rad.)",
524 10,0.,100.,100,-2.0,2.0,
525 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ACrpH2);
526 histos->UserHistogram("Event","Cent_v0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{v0A} (rad.)",
527 10,0.,100.,100,-2.0,2.0,
528 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ArpH2);
529 histos->UserHistogram("Event","Cent_v0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{v0C} (rad.)",
530 10,0.,100.,100,-2.0,2.0,
531 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CrpH2);
532 // for resolution calculation
533 histos->UserHistogram("Event","Cent_v0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{TPC}))",
534 10,0.,100.,300,-1.0,1.0,
535 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ATPCDiffH2);
536 histos->UserHistogram("Event","Cent_v0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{v0C}-#Psi^{TPC}))",
537 10,0.,100.,300,-1.0,1.0,
538 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CTPCDiffH2);
539 histos->UserHistogram("Event","Cent_v0Av0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{v0C}))",
540 10,0.,100.,300,-1.0,1.0,
541 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0Av0CDiffH2);
545 ////// MONTE CARLO //////
547 if(cutDefinition == kTOFTRD && hasMC) {
548 histos->AddClass("MCEvent");
549 histos->UserHistogram("MCEvent","Cent_NJPsis","Centrality vs. generated incl. J/#psi per event;centrality (%);N_{J/#psi}",
550 10,0.,100., 21,-0.5,20.5,
551 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kNumberOfJPsis);
556 //Initialise histogram classes
557 histos->SetReservedWords("Track;Pair");
561 // to fill also mixed event histograms loop until 10
562 for (Int_t i=0; i<3; ++i){
563 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
566 if(cutDefinition < kEtaGap01) {
569 for (Int_t i=0; i<3; ++i){
570 histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
574 //to fill also track info from 2nd event loop until 2
575 for (Int_t i=0; i<2; ++i){
576 histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
580 // histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
581 // histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
583 //add histograms to Track classes
584 //histos->UserHistogram("Track","TOFbit","TOFbit;bit;#tracks",19,-9.5,9.5,AliDielectronVarManager::kTOFPIDBit);
585 histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",
587 AliDielectronVarManager::kPt);
588 histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",
590 AliDielectronVarManager::kNclsTPC);
591 histos->UserHistogram("Track","TPCsignalN","Number of Clusters TPC;TPC number clusteres;#tracks",
593 AliDielectronVarManager::kTPCsignalN);
595 histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",
597 AliDielectronVarManager::kImpactParXY);
598 histos->UserHistogram("Track","dZ","dZ;dZ [cm];#tracks",
600 AliDielectronVarManager::kImpactParZ);
601 histos->UserHistogram("Track","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks",
602 200,-1,1,200,0,6.285,
603 AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
605 histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
606 400,0.2,20.,200,0.,200.,
607 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
608 histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
609 400,0.2,20.,200,-10.,10.,
610 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
612 histos->UserHistogram("Track","Ncl",";Number clusters TPC;Number clusters TPC",
614 AliDielectronVarManager::kNclsTPC);
615 histos->UserHistogram("Track","NclFr",";Number of findable clusters (robust);Number findable clusters TPC",
617 AliDielectronVarManager::kNFclsTPCr);
618 histos->UserHistogram("Track","Ncl_NclFr","Number of (findable) clusters TPC;found clusters;findable clusters",
619 160,-0.5,159.5,160,-0.5,159.5,
620 AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
621 histos->UserHistogram("Track","NtrklTRD",";Number tracklets TRD for pid;Number tracklets TRD",
623 AliDielectronVarManager::kTRDpidQuality);
625 //add histograms to Pair classes
626 histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
628 AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
629 histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
631 AliDielectronVarManager::kY);
632 histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
634 AliDielectronVarManager::kOpeningAngle);
635 histos->UserHistogram("Pair","Chi2NDF","#chi^{2}/NDF;#chi^{2}/NDF",
637 AliDielectronVarManager::kChi2NDF);
640 //// FLOW results use tprofiles
641 if(cutDefinition == kTOFTRD || cutDefinition == kTOFTRD2 || cutDefinition >= kEtaGap01) {
643 histos->UserProfile("Pair","M_Cent_Pt_V0ACrpH2FlowV2",
644 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
645 AliDielectronVarManager::kV0ACrpH2FlowV2,
646 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
647 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
649 histos->UserProfile("Pair","M_Cent_Pt_V0ArpH2FlowV2",
650 "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
651 AliDielectronVarManager::kV0ArpH2FlowV2,
652 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
653 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
655 histos->UserProfile("Pair","M_Cent_Pt_V0CrpH2FlowV2",
656 "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
657 AliDielectronVarManager::kV0CrpH2FlowV2,
658 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
659 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
661 histos->UserProfile("Pair","M_V0ACrpH2FlowV2",
662 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
663 AliDielectronVarManager::kV0ACrpH2FlowV2,
665 AliDielectronVarManager::kM);
667 histos->UserProfile("Pair","M_V0ArpH2FlowV2",
668 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
669 AliDielectronVarManager::kV0ArpH2FlowV2,
671 AliDielectronVarManager::kM);
673 histos->UserProfile("Pair","M_V0CrpH2FlowV2",
674 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
675 AliDielectronVarManager::kV0CrpH2FlowV2,
677 AliDielectronVarManager::kM);
680 die->SetHistogramManager(histos);
684 void InitCF(AliDielectron* die, Int_t cutDefinition)
687 // Setup the CF Manager if needed
689 // Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
691 AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
694 cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
695 if(cutDefinition!=kSubRndm) cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
697 if(cutDefinition < kGam0 || cutDefinition == kSubRndm) {
699 // pair and event vars
700 if(cutDefinition <= kChi || cutDefinition == kSubRndm) {
701 cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.,10.,20.,40.,50.,60.,80.");
702 cf->AddVariable(AliDielectronVarManager::kPt,"0., 1., 2.5, 5., 100.0");
703 if(!hasMC) cf->AddVariable(AliDielectronVarManager::kZvPrim,20, -10., 10.);
704 if(hasMC) cf->AddVariable(AliDielectronVarManager::kNacc,20,0.,3000.0);
705 if(hasMC) cf->AddVariable(AliDielectronVarManager::kNVtxContrib,20,0.,4000.);
706 if(hasMC) cf->AddVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
707 //cf->AddVariable(AliDielectronVarManager::kY,"-0.8,0.8");
711 if(cutDefinition!=kSubRndm) {
712 cf->AddVariable(AliDielectronVarManager::kPt,"0.8, 1.0, 1.1, 1.2, 1.5, 100.0",kTRUE);
713 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3,-2.5,-2,2,2.5,3",kTRUE);
714 //cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"3.5,4.0,4.5,5.0,100",kTRUE);
715 // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,5.0,100",kTRUE);
718 if(cutDefinition<=kChi) {
719 if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,0.9",kTRUE);
720 //cf->AddVariable(AliDielectronVarManager::kNclsTPC,"70, 90, 100, 120, 160",kTRUE);
724 switch(cutDefinition) {
727 case kTOF: //cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE); break;
730 // if(hasMC) cf->AddVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.);
731 //cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE); break;
733 case kITScls: cf->AddVariable(AliDielectronVarManager::kNclsITS,"1,2,3,4,5,6",kTRUE); break;
734 case kITSamy: cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE); break;
736 cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE);
737 cf->AddVariable(AliDielectronVarManager::kImpactParXY,8,-2.,2.,kTRUE);
738 cf->AddVariable(AliDielectronVarManager::kImpactParZ,8,-4.,4.,kTRUE);
740 case kChi: cf->AddVariable(AliDielectronVarManager::kChi2NDF,"0,1,2,3,4,5",kTRUE); break;
741 // cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE);
742 // cf->AddVariable(AliDielectronVarManager::kTOFPIDBit,"-.5,.5,1.5",kTRUE);
743 // cf->AddVariable(AliDielectronVarManager::kTRDpidQuality,"3.5, 4.5, 5.5, 6.5",kTRUE);
750 cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers() ); // LHC10h -> LHC11h
751 // cf->AddVariable(AliDielectronVarManager::kRunNumber, 170593-136831, 136831, 170593); // LHC10h -> LHC11h
752 if(cutDefinition==kTOFTRD || cutDefinition==kGam0) cf->SetStepForMCtruth();
753 // if(cutDefinition!=kTOFTRD)
754 cf->SetStepsForMCtruthOnly();
755 // cf->SetStepsForBackground();
758 die->SetCFManagerPair(cf);
761 void AddMCSignals(AliDielectron *die){
762 //Do we have an MC handler?
763 //Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
766 AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi");
767 inclusiveJpsi->SetLegPDGs(11,-11);
768 inclusiveJpsi->SetMotherPDGs(443,443);
769 inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
770 inclusiveJpsi->SetFillPureMCStep(kTRUE);
771 inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
772 inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
773 die->AddSignalMC(inclusiveJpsi);
775 AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi"); // prompt J/psi (not from beauty decays)
776 promptJpsi->SetLegPDGs(11,-11);
777 promptJpsi->SetMotherPDGs(443,443);
778 promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
779 promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
780 promptJpsi->SetFillPureMCStep(kTRUE);
781 promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
782 promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
783 promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
784 promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
785 die->AddSignalMC(promptJpsi);
787 AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi");
788 beautyJpsi->SetLegPDGs(11,-11);
789 beautyJpsi->SetMotherPDGs(443,443);
790 beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
791 beautyJpsi->SetGrandMotherPDGs(500,500);
792 beautyJpsi->SetFillPureMCStep(kTRUE);
793 beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
794 beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
795 beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
796 die->AddSignalMC(beautyJpsi);
798 AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi"); // embedded J/psi
799 directJpsi->SetLegPDGs(11,-11);
800 directJpsi->SetMotherPDGs(443,443);
801 directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
802 directJpsi->SetFillPureMCStep(kTRUE);
803 directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
804 directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
805 directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
806 directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
807 die->AddSignalMC(directJpsi);
810 void SetEtaCorrection()
812 if (AliDielectronPID::GetEtaCorrFunction()) return;
814 TString list=gSystem->Getenv("LIST");
816 TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root";
817 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
818 if (trainRoot.IsNull()) etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
819 if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
820 Error("ConfigPbPb","Eta map not found: %s",etaMap.Data());
824 TFile f(etaMap.Data());
825 if (!f.IsOpen()) return;
826 TList *keys=f.GetListOfKeys();
828 for (Int_t i=0; i<keys->GetEntries(); ++i){
829 TString kName=keys->At(i)->GetName();
831 if (reg.MatchB(list)){
832 printf("Using Eta Correction Function: %s\n",kName.Data());
833 AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
838 TVectorD *GetRunNumbers() {
840 Double_t runLHC10h[] = { // all runs
841 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,
846 Int_t sizeLHC10h = (int) (sizeof(runLHC10h)/sizeof(Double_t));
847 runLHC10h[sizeLHC10h-1] = runLHC10h[sizeLHC10h-2] + 1.;
848 TVectorD *vecLHC10h = new TVectorD(sizeLHC10h, runLHC10h);