1 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
2 void InitCF(AliDielectron* die, Int_t cutDefinition);
4 void SetupTrackCuts(Bool_t isESD, 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=("TOFTRDany;TOFTRDfirst");
12 enum { kTOFTRD, kTOFTRD2};
14 TObjArray *arrNames=names.Tokenize(";");
15 const Int_t nDie=arrNames->GetEntries();
19 AliDielectron* ConfigBJpsi_ff_PbPb(Int_t cutDefinition, Bool_t isMC=kFALSE)
22 // Setup the instance of AliDielectron
28 //(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
31 Bool_t isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
33 // switch off some configurations
34 //switch(cutDefinition) {
37 //default: return 0x0; break;
40 // create the actual framework object
41 TString name=Form("%02d",cutDefinition);
42 if (cutDefinition<arrNames->GetEntriesFast()){
43 name=arrNames->At(cutDefinition)->GetName();
45 AliDielectron *die = new AliDielectron(Form("%s",name.Data()),
46 Form("Track cuts: %s",name.Data()));
48 AliDielectronDebugTree *tree = new AliDielectronDebugTree(Form("%s",name.Data()),Form("Track cuts: %s",name.Data()));
49 tree->SetOutputFileName(Form("jpsi_debug_tree_%s.root",name.Data()));
52 tree->AddLegVariable(AliDielectronVarManager::kPt);
53 tree->AddLegVariable(AliDielectronVarManager::kPx);
54 tree->AddLegVariable(AliDielectronVarManager::kPy);
55 tree->AddLegVariable(AliDielectronVarManager::kEta);
56 tree->AddLegVariable(AliDielectronVarManager::kXv);
57 tree->AddLegVariable(AliDielectronVarManager::kYv);
58 tree->AddLegVariable(AliDielectronVarManager::kE);
59 tree->AddLegVariable(AliDielectronVarManager::kTPCnSigmaEle);
60 tree->AddLegVariable(AliDielectronVarManager::kTPCsignal);
61 tree->AddLegVariable(AliDielectronVarManager::kTRDntracklets);
62 tree->AddLegVariable(AliDielectronVarManager::kNclsTRD);
63 tree->AddLegVariable(AliDielectronVarManager::kTOFnSigmaEle);
64 tree->AddLegVariable(AliDielectronVarManager::kITSLayerFirstCls);
65 tree->AddPairVariable(AliDielectronVarManager::kM);
66 tree->AddPairVariable(AliDielectronVarManager::kE);
67 tree->AddPairVariable(AliDielectronVarManager::kP);
68 tree->AddPairVariable(AliDielectronVarManager::kPt);
69 tree->AddPairVariable(AliDielectronVarManager::kY);
70 tree->AddPairVariable(AliDielectronVarManager::kEta);
71 tree->AddPairVariable(AliDielectronVarManager::kPairType);
72 tree->AddPairVariable(AliDielectronVarManager::kPseudoProperTime);
73 tree->AddPairVariable(AliDielectronVarManager::kPseudoProperTimeErr);
74 if(hasMC) tree->AddPairVariable(AliDielectronVarManager::kPseudoProperTimeResolution);
75 if(hasMC) tree->AddPairVariable(AliDielectronVarManager::kPseudoProperTimePull);
76 if(hasMC) tree->AddPairVariable(AliDielectronVarManager::kPdgCode);
77 if(hasMC) tree->AddPairVariable(AliDielectronVarManager::kPdgCodeMother);
78 if(hasMC) tree->AddPairVariable(AliDielectronVarManager::kPdgCodeGrandMother);
79 if(hasMC) tree->AddPairVariable(AliDielectronVarManager::kIsJpsiPrimary);
80 tree->AddPairVariable(AliDielectronVarManager::kCentralitySPD);
81 tree->AddPairVariable(AliDielectronVarManager::kCentrality);
82 tree->AddPairVariable(AliDielectronVarManager::kNevents);
83 tree->AddPairVariable(AliDielectronVarManager::kXvPrim);
84 tree->AddPairVariable(AliDielectronVarManager::kYvPrim);
85 tree->AddPairVariable(AliDielectronVarManager::kZvPrim);
86 tree->AddPairVariable(AliDielectronVarManager::kXRes);
87 tree->AddPairVariable(AliDielectronVarManager::kYRes);
88 tree->AddPairVariable(AliDielectronVarManager::kZRes);
94 die->SetDebugTree(tree);
97 // Monte Carlo Signals and TRD efficiency tables
102 TString pidTab="$TRAIN_ROOT/util/dielectron/dielectron/TRDpidEff_eleProb07_TRDntr4_6.root";
103 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
104 if (trainRoot.IsNull()) pidTab="$ALICE_ROOT/PWGDQ/dielectron/files/TRDpidEff_eleProb07_TRDntr4_6.root";
106 if (gSystem->AccessPathName(gSystem->ExpandPathName(pidTab.Data())))
107 Error("ConfigPbPb","PID table not found: %s",pidTab.Data());
109 die->SetTRDcorrectionFilename(pidTab.Data());
113 SetupTrackCuts(isESD,die,cutDefinition);
114 SetupPairCuts(die,cutDefinition);
117 if(cutDefinition == kTOFTRD ||
118 cutDefinition == kTOFTRD2 )
119 InitHistograms(die,cutDefinition);
121 // CF container setup
122 // InitCF(die,cutDefinition);
127 if(cutDefinition == kTOFTRD) {
129 AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
130 rot->SetIterations(10);
131 rot->SetConeAnglePhi(TMath::Pi());
132 rot->SetStartAnglePhi(TMath::Pi());
133 die->SetTrackRotator(rot);
135 AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
136 mix->AddVariable(AliDielectronVarManager::kZvPrim,20,-10.,10.);
137 mix->AddVariable(AliDielectronVarManager::kCentrality,"0,5,10,20,50,80");
138 mix->SetMixType(AliDielectronMixingHandler::kAll);
140 die->SetMixingHandler(mix);
147 // prefilter settings
148 //if(cutDefinition == kTOFTRD2)
149 // die->SetPreFilterAllSigns();
151 die->SetPreFilterUnlikeOnly();
153 // setup eta correction
154 if(isESD) SetEtaCorrection();
159 //______________________________________________________________________________________
160 void SetupTrackCuts(Bool_t isESD, AliDielectron *die, Int_t cutDefinition)
163 // Setup the track cuts
167 AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
168 die->GetTrackFilter().AddCuts(cuts);
170 //Pt cut, should make execution a bit faster
171 AliDielectronVarCuts *pt = new AliDielectronVarCuts("Pt>.8","Pt>.8");
172 pt->AddCut(AliDielectronVarManager::kPt,0.8,1e30);
175 // track cuts ESD and AOD
176 AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
177 varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
178 varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
179 varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
180 //varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
181 varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0);
182 varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
184 AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
186 varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
187 switch(cutDefinition) {
188 case kTOFTRD2: varCuts->AddCut(AliDielectronVarManager::kITSLayerFirstCls,-0.01,0.5); //ITS(0) = SPDfirst
190 default: varCuts->AddCut(AliDielectronVarManager::kITSLayerFirstCls,-0.01,1.5); //ITS(0-1) = SPDany
195 switch(cutDefinition) {
196 case kTOFTRD2: trkCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst); //ITS(0) = SPDfirst
198 default: trkCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);//ITS(0-1) = SPDany
203 cuts->AddCut(varCuts);
205 trkCuts->SetRequireITSRefit(kTRUE);
206 trkCuts->SetRequireTPCRefit(kTRUE);
207 cuts->AddCut(trkCuts);
209 //Do we have an MC handler?
210 // Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
212 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
213 AliDielectronPID *pid = new AliDielectronPID("PID","PID");
215 ////////////////////////////////// DATA
217 pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,3.5,0.,0.,kTRUE);
218 pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
220 //if(cutDefinition==kTRD || cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2)
221 if(cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2)
222 pid->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
223 AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
226 ////////////////////////////////// MC
230 Double_t nSigmaPi = 3.5; Double_t nSigmaP = 3.5;
231 Double_t resolution=0.0549;
232 Double_t BBpro[5] = {0};
233 Double_t BBpio[5] = {0};
235 for(Int_t icent=0; icent<8; icent++) {
239 BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848;
240 BBpio[0] = 0.0252122; BBpio[1] = 38.8991; BBpio[2] = 4.0901e-11; BBpio[3] = 5.27988; BBpio[4] = 4.3108;
243 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
244 BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093;
247 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
248 BBpio[0] = 0.0263205; BBpio[1] = 37.9307; BBpio[2] = 4.29724e-11; BBpio[3] = 5.74458; BBpio[4] = 4.32459;
251 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
252 BBpio[0] = 0.026294; BBpio[1] = 39.0346; BBpio[2] = 4.12261e-11; BBpio[3] = 5.28808; BBpio[4] = 4.31301;
255 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
256 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
259 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
260 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
263 BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848;
264 BBpio[0] = 0.026302; BBpio[1] = 38.6888; BBpio[2] = 3.56792e-11; BBpio[3] = 5.2465; BBpio[4] = 4.31094;
267 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
268 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
271 BBpro[0] = 0.0313438; BBpro[1] = 25.8666; BBpro[2] = 4.5457e-11; BBpro[3] = 2.07912; BBpro[4] = 5.99986;
272 BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093;
275 BBpro[0] = 0.0319126; BBpro[1] = 36.8784; BBpro[2] = 3.4274e-11; BBpro[3] = 3.2431; BBpro[4] = 5.93388;
276 BBpio[0] = 0.027079; BBpio[1] = 67.5936; BBpio[2] = 9.72548e-11; BBpio[3] = 9.61382; BBpio[4] = 5.99372;
281 TF1 *ffPro=new TF1(Form("fBethe%d_c%d",AliPID::kProton,icent), Form("(%f*%f+(AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])-AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])))/%f", nSigmaP,resolution, AliPID::ParticleMass(AliPID::kProton), AliPID::ParticleMass(AliPID::kElectron), resolution), 0.05,200.);
283 TF1 *ffPio=new TF1(Form("fBethe%d_c%d",AliPID::kPion,icent), Form("(%f*%f+(AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])-AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])))/%f", nSigmaPi,resolution, AliPID::ParticleMass(AliPID::kPion), AliPID::ParticleMass(AliPID::kElectron), resolution), 0.05,200.);
285 TString list=gSystem->Getenv("LIST");
288 if (list.Contains("LHC11a10b") || list.IsNull()) {
289 printf("LHC11a10b parameters\n");
290 ffPro->SetParameters(BBpro[0],BBpro[1],BBpro[2],BBpro[3],BBpro[4]);
291 ffPio->SetParameters(BBpio[0],BBpio[1],BBpio[2],BBpio[3],BBpio[4]);
294 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPro,10,((double)icent)*10.,((double)icent+1)*10,
295 kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
297 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPio,10,((double)icent)*10.,((double)icent+1)*10,
298 kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
302 // shifts for the nSigma electrons
303 TGraph* nSigmaCorrection = new TGraph();
305 if (list.Contains("LHC11a10b") || list.IsNull()) {
306 nSigmaCorrection->SetPoint(0, 137161., -0.50-(0.28));
307 nSigmaCorrection->SetPoint(1, 139510., -0.50-(0.28));
308 pid->SetCorrGraph(nSigmaCorrection);
313 ////////////////////////////////// DATA + MC
314 // pid cuts TPC + TOF & TRD
315 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
316 if(cutDefinition==kTOFTRD || cutDefinition==kTOFTRD2)
317 pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
319 //if(cutDefinition!=krec)
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
339 Double_t gCut = 0.05; // default
341 AliDielectronVarCuts *gammaCut=new AliDielectronVarCuts("gammaCut","gammaCut");
342 gammaCut->AddCut(AliDielectronVarManager::kM,0.,gCut);
343 die->GetPairPreFilter().AddCuts(gammaCut);
346 // rapidity selection
347 AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9");
348 rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
349 die->GetPairFilter().AddCuts(rapCut);
353 //______________________________________________________________________________________
354 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
357 // Initialise the histograms
359 // Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
361 //Setup histogram Manager
362 AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
365 //add histograms to event class
366 histos->AddClass("Event");
367 histos->UserHistogram("Event","VtxZ","Vertex Z;z (cm)",
369 AliDielectronVarManager::kZvPrim);
370 //histos->UserHistogram("Event","Centrality","Centrality;centrality (%)",
371 // "0.,5.,10.,20.,40.,50.,60.,80.,100.",
372 // AliDielectronVarManager::kCentrality);
373 histos->UserHistogram("Event","Centrality","Centrality;centrality (%)",
374 20,0.,100.,AliDielectronVarManager::kCentrality);
376 histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0",
377 500,0.,25000., AliDielectronVarManager::kMultV0);
378 histos->UserHistogram("Event","Cent_Mult","Centrality vs. Multiplicity;centrality (%);Multiplicity V0",
379 10,0.,100., 500,0.,25000.,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kMultV0);
380 histos->UserProfile("Event","Cent_Nacc",
381 "accepted tracks;centrality (%)",
382 AliDielectronVarManager::kNacc,
383 "0.,5.,10.,20.,40.,50.,60.,80.,100.",
384 AliDielectronVarManager::kCentrality);
385 histos->UserProfile("Event","Cent_NVtxContrib",
386 "number of vertex contributors;centrality (%)",
387 AliDielectronVarManager::kNVtxContrib,
388 "0.,5.,10.,20.,40.,50.,60.,80.,100.",
389 AliDielectronVarManager::kCentrality);
394 ////// MONTE CARLO //////
396 if(cutDefinition == kTOFTRD && hasMC) {
397 histos->AddClass("MCEvent");
398 histos->UserHistogram("MCEvent","Cent_NJPsis","Centrality vs. generated incl. J/#psi per event;centrality (%);N_{J/#psi}",
399 10,0.,100., 21,-0.5,20.5,
400 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kNumberOfJPsis);
405 //Initialise histogram classes
406 histos->SetReservedWords("Track;Pair");
410 // to fill also mixed event histograms loop until 10
411 for (Int_t i=0; i<3; ++i){
412 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
415 if(cutDefinition <= kTOFTRD) {
418 for (Int_t i=0; i<3; ++i){
419 histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
423 //to fill also track info from 2nd event loop until 2
424 for (Int_t i=0; i<2; ++i){
425 histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
429 // histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
430 // histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
432 //add histograms to Track classes
433 //histos->UserHistogram("Track","TOFbit","TOFbit;bit;#tracks",19,-9.5,9.5,AliDielectronVarManager::kTOFPIDBit);
434 histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",
436 AliDielectronVarManager::kPt);
437 histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",
439 AliDielectronVarManager::kNclsTPC);
440 histos->UserHistogram("Track","TPCsignalN","Number of Clusters TPC;TPC number clusteres;#tracks",
442 AliDielectronVarManager::kTPCsignalN);
444 histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",
446 AliDielectronVarManager::kImpactParXY);
447 histos->UserHistogram("Track","dZ","dZ;dZ [cm];#tracks",
449 AliDielectronVarManager::kImpactParZ);
450 histos->UserHistogram("Track","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks",
451 200,-1,1,200,0,6.285,
452 AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
454 histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
455 400,0.2,20.,200,0.,200.,
456 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
457 histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
458 400,0.2,20.,200,-10.,10.,
459 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
461 histos->UserHistogram("Track","Ncl",";Number clusters TPC;Number clusters TPC",
463 AliDielectronVarManager::kNclsTPC);
464 histos->UserHistogram("Track","NclFr",";Number of findable clusters (robust);Number findable clusters TPC",
466 AliDielectronVarManager::kNFclsTPCr);
467 histos->UserHistogram("Track","Ncl_NclFr","Number of (findable) clusters TPC;found clusters;findable clusters",
468 160,-0.5,159.5,160,-0.5,159.5,
469 AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
470 histos->UserHistogram("Track","NtrklTRD",";Number tracklets TRD for pid;Number tracklets TRD",
472 AliDielectronVarManager::kTRDpidQuality);
474 //add histograms to Pair classes
475 histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
477 AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
478 histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
480 AliDielectronVarManager::kY);
481 histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
483 AliDielectronVarManager::kOpeningAngle);
484 histos->UserHistogram("Pair","Chi2NDF","#chi^{2}/NDF;#chi^{2}/NDF",
486 AliDielectronVarManager::kChi2NDF);
488 histos->UserHistogram("Pair","PseudoProperTime","Pseudoproper decay length; pseudoproper-decay-length[#mum];Entries/40#mum",
489 150,-0.3.,0.3,AliDielectronVarManager::kPseudoProperTime);
494 die->SetHistogramManager(histos);
498 void InitCF(AliDielectron* die, Int_t cutDefinition)
501 // Setup the CF Manager if needed
503 // Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
505 AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
508 cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
509 if(cutDefinition!=kSubRndm) cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
511 if(cutDefinition <= kTOFTRD2) {
513 // pair and event vars
514 cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.,10.,20.,40.,50.,60.,80.");
515 cf->AddVariable(AliDielectronVarManager::kPt,"0., 1., 2.5, 5., 100.0");
516 if(!hasMC) cf->AddVariable(AliDielectronVarManager::kZvPrim,20, -10., 10.);
517 if(hasMC) cf->AddVariable(AliDielectronVarManager::kNacc,20,0.,3000.0);
518 if(hasMC) cf->AddVariable(AliDielectronVarManager::kNVtxContrib,20,0.,4000.);
519 if(hasMC) cf->AddVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
520 //cf->AddVariable(AliDielectronVarManager::kY,"-0.8,0.8");
523 cf->AddVariable(AliDielectronVarManager::kPt,"0.8, 1.0, 1.1, 1.2, 1.5, 100.0",kTRUE);
524 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3,-2.5,-2,2,2.5,3",kTRUE);
525 //cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"3.5,4.0,4.5,5.0,100",kTRUE);
526 // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,5.0,100",kTRUE);
529 if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,0.9",kTRUE);
530 //cf->AddVariable(AliDielectronVarManager::kNclsTPC,"70, 90, 100, 120, 160",kTRUE);
536 cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers() ); // LHC10h only
537 // cf->AddVariable(AliDielectronVarManager::kRunNumber, 170593-136831, 136831, 170593); // LHC10h -> LHC11h
538 if(cutDefinition==kTOFTRD || cutDefinition==kTOFTRD2) cf->SetStepForMCtruth();
539 cf->SetStepsForMCtruthOnly();
540 // cf->SetStepsForBackground();
543 die->SetCFManagerPair(cf);
546 void AddMCSignals(AliDielectron *die){
547 //Do we have an MC handler?
548 //Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
551 AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi");
552 inclusiveJpsi->SetLegPDGs(11,-11);
553 inclusiveJpsi->SetMotherPDGs(443,443);
554 inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
555 inclusiveJpsi->SetFillPureMCStep(kTRUE);
556 inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
557 inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
558 die->AddSignalMC(inclusiveJpsi);
560 AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi"); // prompt J/psi (not from beauty decays)
561 promptJpsi->SetLegPDGs(11,-11);
562 promptJpsi->SetMotherPDGs(443,443);
563 promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
564 promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
565 promptJpsi->SetFillPureMCStep(kTRUE);
566 promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
567 promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
568 promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
569 promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
570 die->AddSignalMC(promptJpsi);
572 AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi");
573 beautyJpsi->SetLegPDGs(11,-11);
574 beautyJpsi->SetMotherPDGs(443,443);
575 beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
576 beautyJpsi->SetGrandMotherPDGs(500,500);
577 beautyJpsi->SetFillPureMCStep(kTRUE);
578 beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
579 beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
580 beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
581 die->AddSignalMC(beautyJpsi);
583 AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi"); // embedded J/psi
584 directJpsi->SetLegPDGs(11,-11);
585 directJpsi->SetMotherPDGs(443,443);
586 directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
587 directJpsi->SetFillPureMCStep(kTRUE);
588 directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
589 directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
590 directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
591 directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
592 die->AddSignalMC(directJpsi);
595 void SetEtaCorrection()
597 if (AliDielectronPID::GetEtaCorrFunction()) return;
599 TString list=gSystem->Getenv("LIST");
601 TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root";
602 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
603 if (trainRoot.IsNull()) etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
604 if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
605 Error("ConfigPbPb","Eta map not found: %s",etaMap.Data());
609 TFile f(etaMap.Data());
610 if (!f.IsOpen()) return;
611 TList *keys=f.GetListOfKeys();
613 for (Int_t i=0; i<keys->GetEntries(); ++i){
614 TString kName=keys->At(i)->GetName();
616 if (reg.MatchB(list)){
617 printf("Using Eta Correction Function: %s\n",kName.Data());
618 AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
623 TVectorD *GetRunNumbers() {
625 Double_t runLHC10h[] = { // all runs
626 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,
631 Int_t sizeLHC10h = (int) (sizeof(runLHC10h)/sizeof(Double_t));
632 runLHC10h[sizeLHC10h-1] = runLHC10h[sizeLHC10h-2] + 1.;
633 TVectorD *vecLHC10h = new TVectorD(sizeLHC10h, runLHC10h);