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;TOFTRD;TOFTRD2D;rec;Gam0;Gam01;Gam05;Gam10;Gam15;Gam20;EtaGap01;EtaGap02;EtaGap03;EtaGap04;EtaGap05;SubLS;SubRndm");
13 enum { kTPC=0, kTOF, kTRD, kTOFTRD, kTOFTRD2D, krec,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 if(hasMC) { // MONTE CARLO
39 switch(cutDefinition) {
40 case kTPC: return 0x0;
41 case kTOF: return 0x0;
42 case kTRD: return 0x0;
43 case kTOFTRD: return 0x0;
44 case kTOFTRD2D: return 0x0;
45 case krec: return 0x0;
46 case kGam0: return 0x0;
47 case kGam01: return 0x0;
48 case kGam05: return 0x0;
49 case kGam10: return 0x0;
50 case kGam15: return 0x0;
51 case kGam20: return 0x0;
52 case kEtaGap01: return 0x0;
53 case kEtaGap02: return 0x0;
54 case kEtaGap03: return 0x0;
55 case kEtaGap04: return 0x0;
56 case kEtaGap05: return 0x0;
57 case kSubLS: return 0x0;
58 case kSubRndm: return 0x0;
60 } else { // COLLISION DATA
61 switch(cutDefinition) {
62 case kTPC: return 0x0;
63 // case kTOF: return 0x0;
64 case kTRD: return 0x0;
65 // case kTOFTRD: return 0x0;
66 case kTOFTRD2D: return 0x0;
67 case krec: return 0x0;
68 case kGam0: return 0x0;
69 case kGam01: return 0x0;
70 case kGam05: return 0x0;
71 case kGam10: return 0x0;
72 case kGam15: return 0x0;
73 case kGam20: return 0x0;
74 case kEtaGap01: return 0x0;
75 case kEtaGap02: return 0x0;
76 case kEtaGap03: return 0x0;
77 case kEtaGap04: return 0x0;
78 case kEtaGap05: return 0x0;
79 case kSubLS: return 0x0;
80 case kSubRndm: return 0x0;
84 // create the actual framework object
85 TString name=Form("%02d",cutDefinition);
86 if (cutDefinition<arrNames->GetEntriesFast()){
87 name=arrNames->At(cutDefinition)->GetName();
89 AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("Track cuts: %s",name.Data()));
92 printf(" Add %s %s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?"MC":""),name.Data(),list.Data());
94 // Monte Carlo Signals and TRD efficiency tables
97 printf(" Add %d MC signals \n",die->GetMCSignals()->GetEntriesFast());
100 /* if (list.Contains("LHC11a") ) {
101 TString pidTab="$TRAIN_ROOT/util/dielectron/dielectron/TRDpidEff_eleProb07_TRDntr4_6.root";
102 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
103 if (trainRoot.IsNull()) pidTab="$ALICE_ROOT/PWGDQ/dielectron/files/TRDpidEff_eleProb07_TRDntr4_6.root";
105 if (gSystem->AccessPathName(gSystem->ExpandPathName(pidTab.Data())))
106 Error("ConfigPbPb","PID table not found: %s",pidTab.Data());
108 die->SetTRDcorrectionFilename(pidTab.Data());
113 InitHistograms(die,cutDefinition);
114 printf(" Add %d class types to the histo manager \n",die->GetHistogramList()->GetEntries());
117 SetupTrackCuts(die,cutDefinition);
118 SetupPairCuts(die,cutDefinition);
121 // CF container setup, switched off
122 if(cutDefinition < kEtaGap01 ||
123 cutDefinition == kSubRndm ) {
124 if(0) InitCF(die,cutDefinition);
125 if(0) printf(" Add %d pair, %d leg vars, %p steps and %p bins to the container \n",
126 die->GetCFManagerPair()->GetNvarsPair(),die->GetCFManagerPair()->GetNvarsLeg(),
127 die->GetCFManagerPair()->GetContainer(), die->GetCFManagerPair()->GetContainer() );
131 InitHF(die,cutDefinition);
135 printf(" Activate bgrd estimators: ME and ROT \n");
138 AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
139 rot->SetIterations(10);
140 rot->SetConeAnglePhi(TMath::Pi());
141 rot->SetStartAnglePhi(TMath::Pi());
142 // die->SetTrackRotator(rot);
145 AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
146 mix->AddVariable(AliDielectronVarManager::kZvPrim, 20,-10.,10.);
147 mix->AddVariable(AliDielectronVarManager::kCentrality, 8, 0.,80.);
148 mix->AddVariable(AliDielectronVarManager::kv0ACrpH2, 8, TMath::Pi()/-2., TMath::Pi()/2.);
149 mix->SetMixType(AliDielectronMixingHandler::kAll);
151 die->SetMixingHandler(mix);
153 // TPC event plane configurations
155 switch(cutDefinition) {
156 case kEtaGap01: gGap=0.1; break;
157 case kEtaGap02: gGap=0.2; break;
158 case kEtaGap03: gGap=0.3; break;
159 case kEtaGap04: gGap=0.4; break;
160 case kEtaGap05: gGap=0.5; break;
164 AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
165 poi->AddCut(AliDielectronVarManager::kM,2.92,3.20); // particles of interest, jpsi mass window
166 die->GetEventPlanePOIPreFilter().AddCuts(poi);
168 if(cutDefinition >= kEtaGap01 &&
169 cutDefinition < kSubLS ) {
170 AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap");
171 etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE);
172 die->GetEventPlanePreFilter().AddCuts(etaGap);
175 if(cutDefinition==kSubLS) die->SetLikeSignSubEvents();
176 die->SetPreFilterEventPlane();
179 // prefilter settings
180 die->SetPreFilterUnlikeOnly();
181 //die->SetPreFilterAllSigns();
182 //die->SetNoPairing();
184 // setup eta correction
185 // if(isESD && list.Contains("LHC10h")) SetEtaCorrection();
188 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
189 if (!trainRoot.IsNull()) {
190 die->SetVZEROCalibrationFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroCalibrationLHC10h.root");
191 die->SetVZERORecenteringFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroRecenteringLHC10h.root");
197 //______________________________________________________________________________________
198 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
201 // Setup the track cuts
205 AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
206 // cuts->AddDielectron(die);
207 die->GetTrackFilter().AddCuts(cuts);
209 // AOD track filter (needs to be first cut to speed up)
210 AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("TrkFilter","TrkFilter");
211 // trkFilter->AddCutQA(die->GetHistoManager());
212 trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqual);
213 // trkFilter->SetMinNCrossedRowsOverFindable(0.6);
214 if(!isESD) cuts->AddCut(trkFilter);
216 //Pt cut, should make execution a bit faster
217 AliDielectronVarCuts *pt = new AliDielectronVarCuts("PtCut","PtCut");
218 // pt->AddCutQA(die->GetHistoManager());
219 pt->AddCut(AliDielectronVarManager::kPt,1.1,1e30); //0.8
222 // track cuts ESD and AOD
223 AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
224 // varCuts->AddCutQA(die->GetHistoManager());
225 varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
226 varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
227 varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
228 varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
229 varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0);
230 varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
231 if(cutDefinition==kTOF || cutDefinition==kTOFTRD || cutDefinition==kTOFTRD2D)
232 varCuts->AddCut(AliDielectronVarManager::kTOFbeta, 0.2, 0.9, kTRUE);
233 cuts->AddCut(varCuts);
236 AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
237 // trkCuts->AddCutQA(die->GetHistoManager());
238 // trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kAny);
239 // trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kFirst);
240 trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 15); // ITS-4 = 1+2+4+8
241 // trkCuts->SetMaxWaivedITSNcls(1);
242 trkCuts->SetRequireITSRefit(kTRUE);
243 trkCuts->SetRequireTPCRefit(kTRUE);
244 cuts->AddCut(trkCuts);
246 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
247 AliDielectronPID *pid = new AliDielectronPID("PID","PID");
248 // pid->AddCutQA(die->GetHistoManager());
249 ////////////////////////////////// DATA
251 pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,4.0,0.,0.,kTRUE);
252 pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
254 if(cutDefinition==kTRD || cutDefinition==kTOFTRD)
255 pid->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
256 AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
258 if(cutDefinition==kTOFTRD2D)
259 pid->AddCut(AliDielectronPID::kTRDeleEff2D,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
260 AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
263 ////////////////////////////////// MC
267 Double_t nSigmaPi = 3.5; Double_t nSigmaP = 3.5;
268 Double_t resolution=0.0549;
269 Double_t BBpro[5] = {0};
270 Double_t BBpio[5] = {0};
272 for(Int_t icent=0; icent<8; icent++) {
276 BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848;
277 BBpio[0] = 0.0252122; BBpio[1] = 38.8991; BBpio[2] = 4.0901e-11; BBpio[3] = 5.27988; BBpio[4] = 4.3108;
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.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093;
284 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
285 BBpio[0] = 0.0263205; BBpio[1] = 37.9307; BBpio[2] = 4.29724e-11; BBpio[3] = 5.74458; BBpio[4] = 4.32459;
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.026294; BBpio[1] = 39.0346; BBpio[2] = 4.12261e-11; BBpio[3] = 5.28808; BBpio[4] = 4.31301;
292 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
293 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
296 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
297 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
300 BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848;
301 BBpio[0] = 0.026302; BBpio[1] = 38.6888; BBpio[2] = 3.56792e-11; BBpio[3] = 5.2465; BBpio[4] = 4.31094;
304 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
305 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
308 BBpro[0] = 0.0313438; BBpro[1] = 25.8666; BBpro[2] = 4.5457e-11; BBpro[3] = 2.07912; BBpro[4] = 5.99986;
309 BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093;
312 BBpro[0] = 0.0319126; BBpro[1] = 36.8784; BBpro[2] = 3.4274e-11; BBpro[3] = 3.2431; BBpro[4] = 5.93388;
313 BBpio[0] = 0.027079; BBpio[1] = 67.5936; BBpio[2] = 9.72548e-11; BBpio[3] = 9.61382; BBpio[4] = 5.99372;
318 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.);
320 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.);
323 if (list.Contains("LHC11a10b")) {
324 printf(" LHC11a10b parameters\n");
325 ffPro->SetParameters(BBpro[0],BBpro[1],BBpro[2],BBpro[3],BBpro[4]);
326 ffPio->SetParameters(BBpio[0],BBpio[1],BBpio[2],BBpio[3],BBpio[4]);
329 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPro,10,((double)icent)*10.,((double)icent+1)*10,
330 kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
332 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPio,10,((double)icent)*10.,((double)icent+1)*10,
333 kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
337 // shifts for the nSigma electrons
338 TGraph* nSigmaCorrection = new TGraph();
340 if (list.Contains("LHC11a10b")) {
341 nSigmaCorrection->SetPoint(0, 137161., -0.50-(0.28));
342 nSigmaCorrection->SetPoint(1, 139510., -0.50-(0.28));
343 pid->SetCorrGraph(nSigmaCorrection);
348 ////////////////////////////////// DATA + MC
349 // pid cuts TPC + TOF & TRD
350 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.,4.);
352 if(cutDefinition==kTOF || cutDefinition==kTOFTRD || cutDefinition==kTOFTRD2D)
353 pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
355 if(cutDefinition!=krec) cuts->AddCut(pid);
356 /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
359 // exclude conversion electrons selected by the tender
360 AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
361 noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
362 cuts->AddCut(noconv);
366 //______________________________________________________________________________________
367 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
370 // Setup the pair cuts
373 // conversion rejection
375 switch(cutDefinition) {
376 case kTPC: gCut=0.05; break;
377 case krec: gCut=0.05; break;
378 case kGam10: gCut=0.1; break;
379 case kGam15: gCut=0.15; break;
380 case kGam20: gCut=0.2; break;
381 case kGam05: gCut=0.05; break;
382 case kGam01: gCut=0.01; break;
383 case kGam0: gCut=0.0; break;
384 default: gCut=0.05; // default
387 AliDielectronVarCuts *gammaCuts = new AliDielectronVarCuts("GammaCuts","GammaCuts");
388 // gammaCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.1, kTRUE);
389 // gammaCuts->AddCut(AliDielectronVarManager::kLegDist, 0.0, 0.25, kTRUE);
390 // gammaCuts->AddCut(AliDielectronVarManager::kR, 3.0, 90.0, kTRUE);
391 // gammaCuts->AddCut(AliDielectronVarManager::kPsiPair, 0.0, 0.05, kTRUE);
392 // gammaCuts->AddCut(AliDielectronVarManager::kChi2NDF, 0.0, 10.0, kTRUE);
393 gammaCuts->AddCut(AliDielectronVarManager::kM, 0.0, gCut);
394 die->GetPairPreFilter().AddCuts(gammaCuts);
397 // rapidity selection
398 // AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9");
399 // rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
400 // die->GetPairFilter().AddCuts(rapCut);
404 //______________________________________________________________________________________
405 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
408 // Initialise the histograms
411 // booleans for histo selection
412 Bool_t bHistTrackQA=kFALSE, bHistEvts = kFALSE, bHistPair = kFALSE, bHistPairME = kFALSE, bHistFlow = kFALSE, bHistFlowQA=kFALSE;
413 switch (cutDefinition) {
415 case kTOF: bHistEvts=kTRUE; bHistFlow=kTRUE; bHistPair=kTRUE; bHistPairME=kTRUE; break;
418 case kTOFTRD2D: bHistFlow=kTRUE; bHistPair=kTRUE; break;
429 case kSubRndm: bHistFlow=kTRUE; bHistFlowQA=kTRUE; break;
430 case kSubLS: bHistFlow=kTRUE; bHistFlowQA=kTRUE; bHistEvts=kTRUE; break;
440 //Setup histogram Manager
441 AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
443 //add histograms to event class
444 histos->AddClass("Event");
445 histos->UserHistogram("Event","Centrality","Centrality;centrality (%);events",
447 AliDielectronVarManager::kCentrality);
449 ////// EVENT HISTOS /////
451 histos->UserHistogram("Event","RunNumber","Events per run;run;events",
453 AliDielectronVarManager::kRunNumber);
454 histos->UserHistogram("Event","RunNumber_VtxZ",";run;z_{vtx} (cm)",
455 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(150,-15.,15.),
456 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kZvPrim);
457 histos->UserHistogram("Event","RunNumber_Multiplicity",";run;multiplicity V0",
458 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(250,0.,25000.),
459 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kMultV0);
460 histos->UserHistogram("Event","RunNumber_v0ArpH2",";run;#Psi_{2}^{V0A} (rad.)",
461 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(100,-2.,+2.),
462 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0ArpH2);
463 histos->UserHistogram("Event","RunNumber_v0CrpH2",";run;#Psi_{2}^{V0C} (rad.)",
464 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(100,-2.,+2.),
465 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0CrpH2);
466 histos->UserHistogram("Event","RunNumber_TPCrpH2",";run;#Psi_{2}^{TPC} (rad.)",
467 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(100,-2.,+2.),
468 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kTPCrpH2);
470 histos->UserHistogram("Event","VtxZ","Vertex Z;z_{vtx} (cm)", 300,-15.,15.,
471 AliDielectronVarManager::kZvPrim);
472 histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0;events", 500,0.,25000.,
473 AliDielectronVarManager::kMultV0);
474 histos->UserHistogram("Event","Cent_Mult","Centrality vs. Multiplicity;centrality (%);Multiplicity V0",
475 100,0.,100., 250,0.,25000.,
476 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kMultV0);
477 histos->UserProfile("Event","Cent_Nacc", "accepted tracks;centrality (%)",
478 AliDielectronVarManager::kNacc,
479 "0.,5.,10.,20.,40.,50.,60.,80.,100.",
480 AliDielectronVarManager::kCentrality);
481 histos->UserProfile("Event","Cent_NVtxContrib", "number of vertex contributors;centrality (%)",
482 AliDielectronVarManager::kNVtxContrib,
484 AliDielectronVarManager::kCentrality);
491 // RP angles versus centrality
492 histos->UserHistogram("Event","Cent_TPCrpH2","TPC RP;centrality (%);#Psi^{TPC} (rad.)",
493 10,0.,100.,100,-2.,2.,
494 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCrpH2);
495 histos->UserHistogram("Event","Cent_TPCsub1rpH2","TPC-1 RP;centrality (%);#Psi^{sub1} (rad.)",
496 10,0.,100.,100,-2.,2.,
497 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub1rpH2);
498 histos->UserHistogram("Event","Cent_TPCsub2rpH2","TPC-2 RP;centrality (%);#Psi^{sub2} (rad.)",
499 10,0.,100.,100,-2.,2.,
500 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub2rpH2);
502 histos->UserHistogram("Event","Cent_v0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{V0AC} (rad.)",
503 10,0.,100.,100,-2.0,2.0,
504 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ACrpH2);
505 histos->UserHistogram("Event","Cent_v0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A} (rad.)",
506 10,0.,100.,100,-2.0,2.0,
507 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ArpH2);
508 histos->UserHistogram("Event","Cent_v0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C} (rad.)",
509 10,0.,100.,100,-2.0,2.0,
510 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CrpH2);
512 histos->UserHistogram("Event","Cent_v0A0rpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A0} (rad.)",
513 10,0.,100.,100,-2.0,2.0,
514 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0A0rpH2);
515 histos->UserHistogram("Event","Cent_v0A3rpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A3} (rad.)",
516 10,0.,100.,100,-2.0,2.0,
517 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0A3rpH2);
518 histos->UserHistogram("Event","Cent_v0C0rpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C0} (rad.)",
519 10,0.,100.,100,-2.0,2.0,
520 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0C0rpH2);
521 histos->UserHistogram("Event","Cent_v0C3rpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C3} (rad.)",
522 10,0.,100.,100,-2.0,2.0,
523 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0C3rpH2);
528 histos->UserHistogram("Event","TPCxH2","TPC Qx component;TPCxH2",
530 AliDielectronVarManager::kTPCxH2);
531 histos->UserHistogram("Event","TPCyH2","TPC Qy component;TPCyH2",
533 AliDielectronVarManager::kTPCyH2);
534 histos->UserHistogram("Event","TPCrpH2","TPC reaction plane; #Psi^{TPC}",
536 AliDielectronVarManager::kTPCrpH2);
537 histos->UserHistogram("Event","TPCsub1rpH2","TPC reaction plane sub1; #Psi^{sub1}",
539 AliDielectronVarManager::kTPCsub1rpH2);
540 histos->UserHistogram("Event","TPCsub2rpH2","TPC reaction plane sub2; #Psi^{sub2}",
542 AliDielectronVarManager::kTPCsub2rpH2);
543 histos->UserHistogram("Event","TPCsub12DiffH2","TPC reaction plane diff; cos(2(#Psi^{sub1}-#Psi^{sub2}))",
545 AliDielectronVarManager::kTPCsub12DiffH2);
546 /* // uncorrected eventplane
547 histos->UserHistogram("Event","TPCxH2uc","TPC Qx component;TPCxH2uc",
549 AliDielectronVarManager::kTPCxH2uc);
550 histos->UserHistogram("Event","TPCyH2uc","TPC Qy component;TPCyH2uc",
552 AliDielectronVarManager::kTPCyH2uc);
553 histos->UserHistogram("Event","TPCrpH2uc","TPC reaction plane;TPCrpH2uc",
555 AliDielectronVarManager::kTPCrpH2uc);
556 histos->UserHistogram("Event","TPCsub1xH2uc","TPC Qx component sub1;TPCsub1xH2uc",
558 AliDielectronVarManager::kTPCsub1xH2uc);
559 histos->UserHistogram("Event","TPCsub1yH2uc","TPC Qy component sub1;TPCsub1yH2uc",
561 AliDielectronVarManager::kTPCsub1yH2uc);
562 histos->UserHistogram("Event","TPCsub1rpH2uc","TPC reaction plane sub1;TPCsub1rpH2uc",
564 AliDielectronVarManager::kTPCsub1rpH2uc);
565 histos->UserHistogram("Event","TPCsub2xH2uc","TPC Qx component sub2;TPCsub2xH2uc",
567 AliDielectronVarManager::kTPCsub2xH2uc);
568 histos->UserHistogram("Event","TPCsub2yH2uc","TPC Qy component sub2;TPCsub2yH2uc",
570 AliDielectronVarManager::kTPCsub2yH2uc);
571 histos->UserHistogram("Event","TPCsub2rpH2uc","TPC reaction plane sub2;TPCsub2rpH2uc",
573 AliDielectronVarManager::kTPCsub2rpH2uc);
574 histos->UserHistogram("Event","TPCsub12DiffH2uc","TPC reaction plane difference;TPCsub12DiffH2uc",
576 AliDielectronVarManager::kTPCsub12DiffH2uc);
579 // EP resolution calculation
580 histos->UserHistogram("Event","Cent_v0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{TPC}))",
581 10,0.,100.,300,-1.0,1.0,
582 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ATPCDiffH2);
583 histos->UserHistogram("Event","Cent_v0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{V0C}-#Psi^{TPC}))",
584 10,0.,100.,300,-1.0,1.0,
585 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CTPCDiffH2);
586 histos->UserHistogram("Event","Cent_v0Av0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{V0C}))",
587 10,0.,100.,300,-1.0,1.0,
588 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0Av0CDiffH2);
589 histos->UserHistogram("Event","Cent_TPCsub12DiffH2","TPC-sub1 TPC-sub2 diff;centrality (%);cos(2(#Psi^{sub1}-#Psi^{sub2}))",
590 10,0.,100.,300,-1.0,1.0,
591 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2);
593 histos->UserHistogram("Event","Cent_TPCsub12DiffH2Sin","TPC-sub1 TPC-sub2 diff;centrality (%);sin(2(#Psi^{sub1}-#Psi^{sub2}))",
594 10,0.,100.,300,-1.0,1.0,
595 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2Sin);
597 histos->UserProfile("Pair","TPCxH2-Cent-RunNumber", ";centrality (%);run;#LTQ_{x}#GT",
598 AliDielectronVarManager::kTPCxH2,
599 AliDielectronHelper::MakeLinBinning(10, 0.,100.), GetRunNumbers(),
600 AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRunNumber);
601 histos->UserProfile("Pair","TPCyH2-Cent-RunNumber", ";centrality (%);run;#LTQ_{x}#GT",
602 AliDielectronVarManager::kTPCyH2,
603 AliDielectronHelper::MakeLinBinning(10, 0.,100.), GetRunNumbers(),
604 AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRunNumber);
613 histos->UserHistogram("Event","RunNumber","Events per run;run;#events",
614 GetRunNumbers(), AliDielectronVarManager::kRunNumber);
615 histos->UserProfile("Event","RunNumber-Centrality",";run;#LTcentrality#GT (%)", AliDielectronVarManager::kCentrality,
616 GetRunNumbers(), AliDielectronVarManager::kRunNumber);
617 histos->UserProfile("Event","RunNumber-CentralitySPD",";run;#LTcentrality_{SPD}#GT (%)", AliDielectronVarManager::kCentralitySPD,
618 GetRunNumbers(), AliDielectronVarManager::kRunNumber);
619 histos->UserProfile("Event","RunNumber-VtxZ",";run;#LTz_{vtx}#GT (cm)", AliDielectronVarManager::kZvPrim,
620 GetRunNumbers(), AliDielectronVarManager::kRunNumber);
621 histos->UserProfile("Event","RunNumber-sigVtxZ",";run;#LTRMS(z_{vtx})#GT (cm)", AliDielectronVarManager::kZvPrim,
622 GetRunNumbers(), AliDielectronVarManager::kRunNumber, "s;-10;10");
625 histos->SetReservedWords("Track");
626 for (Int_t i=0; i<2; ++i) histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
628 histos->UserProfile("Track","RunNumber-Pt",";run;#LTp_{T}#GT (GeV/c)", AliDielectronVarManager::kPt,
629 GetRunNumbers(), AliDielectronVarManager::kRunNumber);
630 histos->UserProfile("Track","RunNumber-Eta",";run;#LT#eta#GT", AliDielectronVarManager::kEta,
631 GetRunNumbers(), AliDielectronVarManager::kRunNumber);
632 histos->UserProfile("Track","RunNumber-Phi",";run;#LT#varphi#GT", AliDielectronVarManager::kPhi,
633 GetRunNumbers(), AliDielectronVarManager::kRunNumber);
634 histos->UserProfile("Track","RunNumber-ImpactParXY",";run;#LTdXY#GT (cm)", AliDielectronVarManager::kImpactParXY,
635 GetRunNumbers(), AliDielectronVarManager::kRunNumber);
636 histos->UserProfile("Track","RunNumber-ImpactParZ",";run;#LTdZ#GT (cm)", AliDielectronVarManager::kImpactParZ,
637 GetRunNumbers(), AliDielectronVarManager::kRunNumber);
639 histos->UserProfile("Track","RunNumber-NclsTPC",";run;#LTN_{cls}^{TPC}#GT", AliDielectronVarManager::kNclsTPC,
640 GetRunNumbers(), AliDielectronVarManager::kRunNumber);
641 histos->UserProfile("Track","RunNumber_Cent-NclsTPC",";run;centrality (%);#LTN_{cls}^{TPC}#GT", AliDielectronVarManager::kNclsTPC,
642 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(32, 0.,80.),
643 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality);
644 histos->UserProfile("Track","RunNumber_Eta-NclsTPC",";run;#eta;#LTN_{cls}^{TPC}#GT", AliDielectronVarManager::kNclsTPC,
645 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(20, -1.,+1.),
646 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kEta);
647 histos->UserProfile("Track","RunNumber_Phi-NclsTPC",";run;#varphi;#LTN_{cls}^{TPC}#GT", AliDielectronVarManager::kNclsTPC,
648 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(18, 0.,TMath::Pi()),
649 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kPhi);
652 histos->UserProfile("Track","RunNumber-NclsITS",";run;#LTN_{cls}^{ITS}#GT", AliDielectronVarManager::kNclsITS,
653 GetRunNumbers(), AliDielectronVarManager::kRunNumber);
654 histos->UserProfile("Track","RunNumber_Cent-NclsITS",";run;centrality (%);#LTN_{cls}^{ITS}#GT", AliDielectronVarManager::kNclsITS,
655 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(32, 0.,80.),
656 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality);
657 histos->UserProfile("Track","RunNumber_Eta-NclsITS",";run;#eta;#LTN_{cls}^{ITS}#GT", AliDielectronVarManager::kNclsITS,
658 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(20, -1.,+1.),
659 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kEta);
660 histos->UserProfile("Track","RunNumber_Phi-NclsITS",";run;#varphi;#LTN_{cls}^{ITS}#GT", AliDielectronVarManager::kNclsITS,
661 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(18, 0.,TMath::Pi()),
662 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kPhi);
665 histos->UserProfile("Track","RunNumber-TPCnSigmaEle",";run;#LTn#sigma_{ele}^{TPC}#GT", AliDielectronVarManager::kTPCnSigmaEle,
666 GetRunNumbers(), AliDielectronVarManager::kRunNumber);
667 histos->UserProfile("Track","RunNumber_Cent-TPCnSigmaEle",";run;centrality (%);#LTn#sigma_{ele}^{TPC}#GT", AliDielectronVarManager::kTPCnSigmaEle,
668 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(32, 0.,80.),
669 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality);
670 histos->UserProfile("Track","RunNumber_Eta-TPCnSigmaEle",";run;#eta;#LTn#sigma_{ele}^{TPC}#GT", AliDielectronVarManager::kTPCnSigmaEle,
671 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(20, -1.,+1.),
672 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kEta);
673 histos->UserProfile("Track","RunNumber_Phi-TPCnSigmaEle",";run;#varphi;#LTn#sigma_{ele}^{TPC}#GT", AliDielectronVarManager::kTPCnSigmaEle,
674 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(18, 0.,TMath::Pi()),
675 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kPhi);
677 histos->UserProfile("Track","RunNumber-TOFnSigmaEle",";run;#LTn#sigma_{ele}^{TOF}#GT", AliDielectronVarManager::kTOFnSigmaEle,
678 GetRunNumbers(), AliDielectronVarManager::kRunNumber);
679 histos->UserProfile("Track","RunNumber_Cent-TOFnSigmaEle",";run;centrality (%);#LTn#sigma_{ele}^{TOF}#GT", AliDielectronVarManager::kTOFnSigmaEle,
680 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(32, 0.,80.),
681 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality);
682 histos->UserProfile("Track","RunNumber_Eta-TOFnSigmaEle",";run;#eta;#LTn#sigma_{ele}^{TOF}#GT", AliDielectronVarManager::kTOFnSigmaEle,
683 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(20, -1.,+1.),
684 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kEta);
685 histos->UserProfile("Track","RunNumber_Phi-TOFnSigmaEle",";run;#varphi;#LTn#sigma_{ele}^{TOF}#GT", AliDielectronVarManager::kTOFnSigmaEle,
686 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(18, 0.,TMath::Pi()),
687 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kPhi);
692 //Initialise histogram classes
693 histos->SetReservedWords("Track;Pair");
696 // to fill also mixed event histograms loop until 7 or 10
697 for (Int_t i=0; i<(bHistPairME ? 8 : 3); ++i){
698 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
700 //legs from pair (fill SE)
701 for (Int_t i=0; i<3; ++i){
702 histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
705 //to fill also track info from 2nd event loop until 2
706 for (Int_t i=0; i<2; ++i){
707 histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
710 // histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
711 // histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
714 histos->UserHistogram("Track","ImpactParXY",";dXY (cm);#tracks", 500,-1.,1.,
715 AliDielectronVarManager::kImpactParXY);
716 histos->UserHistogram("Track","ImpactParZ",";dZ (cm);#tracks", 600,-3.,3.,
717 AliDielectronVarManager::kImpactParZ);
720 histos->UserHistogram("Track","pt",";p_{T} (GeV/c);#tracks", 400,0,20.,
721 AliDielectronVarManager::kPt);
722 histos->UserHistogram("Track","Eta_Phi",";#eta;#varphi;#tracks", 200,-1,1,200,0,6.285,
723 AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
726 histos->UserHistogram("Track","TPCnCls",";N_{cls}^{TPC};#tracks", 160,-0.5,159.5,
727 AliDielectronVarManager::kNclsTPC);
728 histos->UserHistogram("Track","TPCsignalN",";N_{cls}^{TPC};#tracks", 160,-0.5,159.5,
729 AliDielectronVarManager::kTPCsignalN);
730 histos->UserHistogram("Track","NclFr",";N_{max.cls}^{TPC};#tracks", 160,-0.5,159.5,
731 AliDielectronVarManager::kNFclsTPCr);
732 histos->UserHistogram("Track","Ncl_NclFr",";N_{cls}^{TPC};N_{max.cls}^{TPC};#tracks",
733 160,-0.5,159.5,160,-0.5,159.5,
734 AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
737 histos->UserHistogram("Track","NtrklTRD",";N_{trkl}^{TRD};#tracks",
739 AliDielectronVarManager::kTRDpidQuality);
742 histos->UserHistogram("Track","dEdx_P",";p (GeV/c);TPC signal (arb units);#tracks",
743 400,0.2,20.,200,0.,200.,
744 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
745 histos->UserHistogram("Track","TPCnSigmaEle_P","p (GeV/c);n#sigma_{ele}^{TPC};#tracks",
746 400,0.2,20.,200,-10.,10.,
747 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
748 histos->UserHistogram("Track","TOFbeta_P",";p (GeV/c);#beta;#tracks",
749 250,0.0,5.0,300,0.,1.2,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFbeta,kTRUE);
751 ///// add histograms to Pair classes /////
752 histos->UserHistogram("Pair","InvMass",";m_{ee} (GeV/c^{2});#pairs",
753 300,.0,300*0.04, AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
754 histos->UserHistogram("Pair","Rapidity",";y;#pairs",
755 100,-1.,1., AliDielectronVarManager::kY);
756 histos->UserHistogram("Pair","Pt",";p_{T} (GeV/c);#pairs",
757 400,0,20., AliDielectronVarManager::kPt);
758 histos->UserHistogram("Pair","OpeningAngle",";opening angle (rad.);#pairs",
759 100,0.,3.15, AliDielectronVarManager::kOpeningOBAngle);
760 histos->UserHistogram("Pair","Chi2NDF",";#chi^{2}/NDF;#pairs",
761 100,0.,20, AliDielectronVarManager::kChi2NDF);
762 histos->UserHistogram("Pair","PsiPair",";#psi;#pairs",
763 100,0.,3.15, AliDielectronVarManager::kPsiPair);
764 histos->UserHistogram("Pair","R",";r (cm)",
765 200,0.,100., AliDielectronVarManager::kR);
766 histos->UserHistogram("Pair","LegDist",";dca (cm)",
767 50,0.,5., AliDielectronVarManager::kLegDist);
768 histos->UserHistogram("Pair","LegDistXY",";dca_{xy} (cm)",
769 50,0.,5., AliDielectronVarManager::kLegDistXY);
771 //// FLOW results use tprofiles
773 histos->UserProfile("Pair","M_Cent_Pt_v0ACrpH2FlowV2",
774 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
775 AliDielectronVarManager::kv0ACrpH2FlowV2,
776 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
777 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
778 histos->UserProfile("Pair","M_Cent_Pt_v0ArpH2FlowV2",
779 "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
780 AliDielectronVarManager::kv0ArpH2FlowV2,
781 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
782 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
783 histos->UserProfile("Pair","M_Cent_Pt_v0CrpH2FlowV2",
784 "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
785 AliDielectronVarManager::kv0CrpH2FlowV2,
786 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
787 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
792 ////// MONTE CARLO //////
794 if(cutDefinition == kTOFTRD && hasMC) {
795 histos->AddClass("MCEvent");
796 histos->UserHistogram("MCEvent","Cent_NJPsis","Centrality vs. generated incl. J/#psi per event;centrality (%);N_{J/#psi}",
797 10,0.,100., 21,-0.5,20.5,
798 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kNumberOfJPsis);
802 // histos->UserHistogram("Track","TRDprobEle",";P_{ele}^{TRD};#tracks",
803 // 100,0.,1., AliDielectronVarManager::kTRDprobEle);
805 die->SetHistogramManager(histos);
808 void InitHF(AliDielectron* die, Int_t cutDefinition)
811 // Setup the HF arrays
814 AliDielectronHF *hf=new AliDielectronHF(die->GetName(),die->GetTitle());
815 // if(hasMC) hf->SetStepForMCGenerated();
816 hf->SetPairTypes(AliDielectronHF::kAll);
817 hf->SetVariable(AliDielectronVarManager::kM, 125, 0.0, 0.04*125);
819 hf->AddCutVariable(AliDielectronVarManager::kCentrality, "0.,5.,10.,20.,40.,50.,60.,80." );
820 hf->AddCutVariable(AliDielectronVarManager::kPt, "0.,2.5,5.,100." );
821 hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, 8,-1.*TMath::Pi(),TMath::Pi());
822 // hf->AddCutVariable(AliDielectronVarManager::kY, 1, -0.9, 0.9 );
823 // hf->AddCutVariable(AliDielectronVarManager::kPt, "0.8, 1.0, 1.1, 1.2, 1.5, 100.0", kTRUE, AliDielectronHF::kBinToMax);
824 // hf->AddCutVariable(AliDielectronVarManager::kNclsTPC, "70,90,100,120,160", kTRUE, AliDielectronHF::kBinToMax);
825 // hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaEle,"-4,-3,-2.5,-2,2,2.5,3,4", kTRUE, AliDielectronHF::kSymBin);
826 //hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaPio,"3.,3.5,4.,100.", kTRUE, AliDielectronHF::kBinToMax);
827 //hf->AddCutVariable(AliDielectronVarManager::kITSLayerFirstCls,4,0.,4., kFALSE, kTRUE, AliDielectronHF::kBinFromMin);
828 //hf->AddCutVariable(AliDielectronVarManager::kNclsITS, 5,2.,7., kFALSE, kTRUE, AliDielectronHF::kBinToMax);
829 //hf->AddCutVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers());
831 die->SetHistogramArray(hf);
834 void InitCF(AliDielectron* die, Int_t cutDefinition)
837 // Setup the CF Manager if needed
840 AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
843 cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.,10.,20.,40.,50.,60.,80.");
844 // if(!hasMC) cf->AddVariable(AliDielectronVarManager::kZvPrim,20, -10., 10.);
845 if(hasMC) cf->AddVariable(AliDielectronVarManager::kNacc,20,0.,3000.0);
846 if(hasMC) cf->AddVariable(AliDielectronVarManager::kNVtxContrib,20,0.,4000.);
847 if(hasMC) cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers() );
850 // cf->AddVariable(AliDielectronVarManager::kY,"-0.8,0.8");
851 cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
852 cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
853 cf->AddVariable(AliDielectronVarManager::kPt,"0., 1., 2.5, 5., 100.0");
854 if(hasMC) cf->AddVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
855 // if(hasMC) cf->AddVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.);
858 cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2,4,-1.*TMath::Pi(),TMath::Pi());
859 cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2,4,-1.*TMath::Pi(),TMath::Pi());
862 cf->AddVariable(AliDielectronVarManager::kPt,"0.8, 1.0, 1.1, 1.2, 1.5, 100.0",kTRUE);
863 if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,0.9",kTRUE);
864 // cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE);
865 // cf->AddVariable(AliDielectronVarManager::kNclsITS,"1,2,3,4,5,6",kTRUE);
866 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3,-2.5,-2,2,2.5,3",kTRUE);
867 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"2.5,3.0,3.5,4.0,4.5,100",kTRUE);
868 cf->AddVariable(AliDielectronVarManager::kNclsTPC,"70, 90, 100, 120, 160",kTRUE);
869 // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,5.0,100",kTRUE);
870 // cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE); break;
871 // cf->AddVariable(AliDielectronVarManager::kTRDpidQuality,"3.5, 4.5, 5.5, 6.5",kTRUE);
872 // if(!hasMC && isESD) cf->AddVariable(AliDielectronVarManager::kTRDchi2,"-1.,0.,2.,4.",kTRUE);
876 if(cutDefinition==kTOFTRD) cf->SetStepForMCtruth();
877 cf->SetStepsForMCtruthOnly();
878 // cf->SetStepsForBackground();
881 die->SetCFManagerPair(cf);
884 void AddMCSignals(AliDielectron *die){
885 //Do we have an MC handler?
888 AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi");
889 inclusiveJpsi->SetLegPDGs(11,-11);
890 inclusiveJpsi->SetMotherPDGs(443,443);
891 inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
892 inclusiveJpsi->SetFillPureMCStep(kTRUE);
893 inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
894 inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
895 die->AddSignalMC(inclusiveJpsi);
897 AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi"); // prompt J/psi (not from beauty decays)
898 promptJpsi->SetLegPDGs(11,-11);
899 promptJpsi->SetMotherPDGs(443,443);
900 promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
901 promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
902 promptJpsi->SetFillPureMCStep(kTRUE);
903 promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
904 promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
905 promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
906 promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
907 die->AddSignalMC(promptJpsi);
909 AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi");
910 beautyJpsi->SetLegPDGs(11,-11);
911 beautyJpsi->SetMotherPDGs(443,443);
912 beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
913 beautyJpsi->SetGrandMotherPDGs(500,500);
914 beautyJpsi->SetFillPureMCStep(kTRUE);
915 beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
916 beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
917 beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
918 die->AddSignalMC(beautyJpsi);
920 AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi"); // embedded J/psi
921 directJpsi->SetLegPDGs(11,-11);
922 directJpsi->SetMotherPDGs(443,443);
923 directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
924 directJpsi->SetFillPureMCStep(kTRUE);
925 directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
926 directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
927 directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
928 directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
929 die->AddSignalMC(directJpsi);
931 AliDielectronSignalMC* conversionElePairs = new AliDielectronSignalMC("conversionElePairs","conversion electron pairs"); // pairs made from conversion (may be also from 2 different conversions)
932 conversionElePairs->SetLegPDGs(11,-11);
933 conversionElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
934 conversionElePairs->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
935 conversionElePairs->SetMotherPDGs(22,22);
936 // die->AddSignalMC(conversionElePairs);
938 // prompt J/psi radiative channel
939 AliDielectronSignalMC* promptJpsiRad = new AliDielectronSignalMC("promptJpsiRad","Prompt J/psi Radiative"); // prompt J/psi (not from beauty decays)
940 promptJpsiRad->SetLegPDGs(11,-11);
941 promptJpsiRad->SetMotherPDGs(443,443);
942 promptJpsiRad->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
943 promptJpsiRad->SetMothersRelation(AliDielectronSignalMC::kSame);
944 promptJpsiRad->SetFillPureMCStep(kTRUE);
945 promptJpsiRad->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
946 promptJpsiRad->SetCheckBothChargesLegs(kTRUE,kTRUE);
947 promptJpsiRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
948 promptJpsiRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
949 promptJpsiRad->SetJpsiRadiative(AliDielectronSignalMC::kIsRadiative);
950 die->AddSignalMC(promptJpsiRad);
952 // prompt J/psi Non radiative channel
953 AliDielectronSignalMC* promptJpsiNonRad = new AliDielectronSignalMC("promptJpsiNonRad","Prompt J/psi non-Radiative"); // prompt J/psi (not from beauty decays)
954 promptJpsiNonRad->SetLegPDGs(11,-11);
955 promptJpsiNonRad->SetMotherPDGs(443,443);
956 promptJpsiNonRad->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
957 promptJpsiNonRad->SetMothersRelation(AliDielectronSignalMC::kSame);
958 promptJpsiNonRad->SetFillPureMCStep(kTRUE);
959 promptJpsiNonRad->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
960 promptJpsiNonRad->SetCheckBothChargesLegs(kTRUE,kTRUE);
961 promptJpsiNonRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
962 promptJpsiNonRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
963 promptJpsiNonRad->SetJpsiRadiative(AliDielectronSignalMC::kIsNotRadiative);
964 die->AddSignalMC(promptJpsiNonRad);
967 void SetEtaCorrection()
969 if (AliDielectronPID::GetEtaCorrFunction()) return;
971 TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root";
972 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
973 if (trainRoot.IsNull()) etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
974 if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
975 Error("ConfigPbPb","Eta map not found: %s",etaMap.Data());
979 TFile f(etaMap.Data());
980 if (!f.IsOpen()) return;
981 TList *keys=f.GetListOfKeys();
983 for (Int_t i=0; i<keys->GetEntries(); ++i){
984 TString kName=keys->At(i)->GetName();
986 if (reg.MatchB(list)){
987 printf(" Using Eta Correction Function: %s\n",kName.Data());
988 AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
993 TVectorD *GetRunNumbers() {
995 Double_t runLHC10h[] = { // all good runs based on RCT 29.Mai
996 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
999 Double_t runLHC11h[] = { // all good runs based on RCT 29.Mai
1000 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
1003 // selection via environement variable (works only for gsi trains)
1006 if(list.Contains("LHC10h") || list.Contains("LHC11a10")) {
1007 Int_t size = (int) (sizeof(runLHC10h)/sizeof(Double_t));
1008 TVectorD *vec = new TVectorD(size+1);
1010 (*vec)[size] = runLHC10h[0] + 1;
1011 for (int i = 0; i < size; i++) {
1012 (*vec)[i] = runLHC10h[size-1-i];
1018 if( list.Contains("LHC11h") || list.Contains("LHC12a17") ) {
1020 Int_t size = (int) (sizeof(runLHC11h)/sizeof(Double_t));
1021 TVectorD *vec = new TVectorD(size+1);
1023 (*vec)[size] = runLHC11h[0] + 1;
1024 for (int i = 0; i < size; i++) {
1025 (*vec)[i] = runLHC11h[size-1-i];
1031 TVectorD *vec = new TVectorD(2);