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 SetupElectronCuts(AliDielectron *die, Int_t cutDefinition);
7 TVectorD *GetRunNumbers();
8 TVectorD *BinsToVector(Int_t nbins, Double_t min, Double_t max);
10 TString names=("CutStats;noPID;TPC;TOF;TRD;TOFTRD;TRDeff;e_mcPid;jpsi_mcPid;conv_mcPid");
11 enum {kCutStats=0, knoPID, kTPC, kTOF, kTRD, kTOFTRD, kTRDeff, kEleMC, kEleJPsiMC, kEleConvMC};
12 TObjArray *arrNames=names.Tokenize(";");
14 const Int_t nDie=arrNames->GetEntries();
17 Bool_t hasMC = kFALSE;
18 TString list = gSystem->Getenv("LIST");
20 AliDielectron* ConfigJpsiQA_jb_PbPb(Int_t cutDefinition, TString prod="")
23 // Setup the instance of AliDielectron
27 if( list.IsNull()) list=prod;
28 if( list.Contains("LHC10h") || list.Contains("LHC11h") ) hasMC=kFALSE;
29 if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ) hasMC=kTRUE;
32 isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
34 // switch off some configurations
35 if(hasMC) { // MONTE CARLO
36 switch(cutDefinition) {
37 case kCutStats: return 0x0;
38 case knoPID: return 0x0;
39 case kTPC: return 0x0;
40 case kTOF: return 0x0;
41 case kTRD: return 0x0;
42 case kTOFTRD: return 0x0;
43 case kTRDeff: return 0x0;
44 case kEleMC: return 0x0;
45 case kEleJPsiMC: return 0x0;
46 case kEleConvMC: return 0x0;
48 } else { // COLLISION DATA
49 switch(cutDefinition) {
50 // case kCutStats: return 0x0;
51 // case knoPID: return 0x0;
52 // case kTPC: return 0x0;
53 // case kTOF: return 0x0;
54 // case kTRD: return 0x0;
55 case kTOFTRD: return 0x0;
56 case kTRDeff: return 0x0;
57 case kEleMC: return 0x0;
58 case kEleJPsiMC: return 0x0;
59 case kEleConvMC: return 0x0;
63 // create the actual framework object
64 TString name=Form("%02d",cutDefinition);
65 if (cutDefinition<arrNames->GetEntriesFast()){
66 name=arrNames->At(cutDefinition)->GetName();
68 AliDielectron *die = new AliDielectron(Form("%s",name.Data()),Form("Track cuts: %s",name.Data()));
71 printf(" Add %s %s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?"MC":""),name.Data(),list.Data());
73 //only track QA, no Pairing
74 if(cutDefinition<kTRDeff) {
76 printf(" Set no pairing \n");
80 if(cutDefinition!=kTRDeff) SetupTrackCuts(die,cutDefinition);
81 if(cutDefinition==kTRDeff) SetupElectronCuts(die,cutDefinition);
84 InitHistograms(die,cutDefinition);
85 printf(" Add %d types and %03d histos to the manager \n",die->GetHistogramList()->GetEntries(),
86 0/*die->GetHistoManager()->GetList()->GetEntries()*/);
89 if(cutDefinition == kTRDeff ) {
90 InitCF(die,cutDefinition);
91 printf(" Add %d pair, %d leg vars, %p steps and %p bins to the container \n",
92 die->GetCFManagerPair()->GetNvarsPair(),die->GetCFManagerPair()->GetNvarsLeg(),
93 die->GetCFManagerPair()->GetContainer(), die->GetCFManagerPair()->GetContainer() );
99 //______________________________________________________________________________________
100 void SetupElectronCuts(AliDielectron *die, Int_t cutDefinition)
103 AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
104 die->GetTrackFilter().AddCuts(cuts);
106 // track cuts ESD and AOD
107 AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
108 varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
109 varCuts->AddCut(AliDielectronVarManager::kP, .75, 1e30);
110 varCuts->AddCut(AliDielectronVarManager::kTRDpidQuality,1.0, 6.0);
111 if(!isESD) varCuts->AddCut(AliDielectronVarManager::kV0Index0, 1.0);
112 // varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
113 // varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 60.0, 160.0);
114 // varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
115 // varCuts->AddCut(AliDielectronVarManager::kPt, 0.8, 1e30);
116 cuts->AddCut(varCuts);
118 AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
119 trkCuts->SetRequireTPCRefit(kTRUE);
120 cuts->AddCut(trkCuts);
123 AliDielectronPID *pid = new AliDielectronPID("PID","PID cut");
124 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-5.0, 3.5, 0.0, 0.0, kFALSE, AliDielectronPID::kRequire);
128 AliDielectronVarCuts *gammaCuts = new AliDielectronVarCuts("GammaCuts","GammaCuts");
129 gammaCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.035); // 0.1
130 // gammaCuts->AddCut(AliDielectronVarManager::kCosPointingAngle, TMath::Cos(0.02), 1.0);
131 // gammaCuts->AddCut(AliDielectronVarManager::kLegDist, 0.0, 0.25);
132 // gammaCuts->AddCut(AliDielectronVarManager::kR, 3.0, 90.0);
133 // gammaCuts->AddCut(AliDielectronVarManager::kPsiPair, 0.0, 0.05);
134 // gammaCuts->AddCut(AliDielectronVarManager::kChi2NDF, 0.0, 10.0);
135 gammaCuts->AddCut(AliDielectronVarManager::kM, 0.0, 0.05);
136 die->GetPairFilter().AddCuts(gammaCuts);
139 // AliDielectronVarCuts *lambdaCuts = new AliDielectronVarCuts("LambdaCuts","LambdaCuts");
140 // lambdaCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.035, kTRUE); // 0.035
141 // lambdaCuts->AddCut(AliDielectronVarManager::kR, 3.0, 40.0, kTRUE);
142 // lambdaCuts->AddCut(AliDielectronVarManager::kChi2NDF, 0.0, 0.5, kTRUE);
143 // lambdaCuts->AddCut(AliDielectronVarManager::kM, 1.01, 1.03, kTRUE);
144 // lambdaCuts->AddCut(AliDielectronVarManager::kY, -0.9, 0.9, kTRUE);
145 // die->GetPairFilter().AddCuts(lambdaCuts);
147 // AliDielectronVarCuts *k0sCuts = new AliDielectronVarCuts("K0sCuts","K0sCuts");
148 // k0sCuts->AddCut(AliDielectronVarManager::kR, 3.0, 40.0, kTRUE);
149 // k0sCuts->AddCut(AliDielectronVarManager::kChi2NDF, 0.0, 0.5, kTRUE);
150 // k0sCuts->AddCut(AliDielectronVarManager::kM, 4.90, 0.504, kTRUE);
151 // k0sCuts->AddCut(AliDielectronVarManager::kY, -0.9, 0.9, kTRUE);
152 // die->GetPairFilter().AddCuts(k0sCuts);
156 //______________________________________________________________________________________
157 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
160 // Setup the track cuts
164 AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
165 die->GetTrackFilter().AddCuts(cuts);
167 //Pt cut, should make execution a bit faster
168 AliDielectronVarCuts *pt = new AliDielectronVarCuts("Pt>.8","Pt>.8");
169 if(cutDefinition<kEleMC)
170 pt->AddCut(AliDielectronVarManager::kPt,0.8,1e30);
172 pt->AddCut(AliDielectronVarManager::kPt,0.8,1e30);
173 if(cutDefinition!=kCutStats && cutDefinition!=knoPID) cuts->AddCut(pt);
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);
183 if(!isESD) varCuts->AddCut(AliDielectronVarManager::kV0Index0, 0.0);
184 if(cutDefinition!=kCutStats) cuts->AddCut(varCuts);
186 AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
187 // trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kAny);
188 trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 15); // ITS-4 = 1+2+4+8
189 trkCuts->SetRequireITSRefit(kTRUE);
190 trkCuts->SetRequireTPCRefit(kTRUE);
191 if(cutDefinition!=kCutStats) cuts->AddCut(trkCuts);
193 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
194 AliDielectronPID *pid = new AliDielectronPID("PID","PID");
196 ////////////////////////////////// DATA
197 if(!hasMC && cutDefinition==kTPC) {
198 pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,3.5,0.,0.,kTRUE);
199 pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
202 ////////////////////////////////// MC
204 if (cutDefinition>=kEleMC) {
205 AliDielectronVarCuts *pdgCuts=new AliDielectronVarCuts("pdgCuts","pdgCuts");
206 pdgCuts->SetCutType(AliDielectronVarCuts::kAny);
207 pdgCuts->AddCut(AliDielectronVarManager::kPdgCode,11.);
208 pdgCuts->AddCut(AliDielectronVarManager::kPdgCode,-11.);
209 cuts->AddCut(pdgCuts);
211 AliDielectronVarCuts *pdgMotherCutsT=new AliDielectronVarCuts("pdgMotherCutsT","pdgMotherCutsT");
212 AliDielectronVarCuts *pdgMotherCutsP=new AliDielectronVarCuts("pdgMotherCutsP","pdgMotherCutsP");
213 if (cutDefinition==kEleJPsiMC){
214 // pdgMotherCutsT->AddCut(AliDielectronVarManager::kPdgCodeMother,443.);
215 // cuts->AddCut(pdgMotherCutsT);
216 pdgMotherCutsP->AddCut(AliDielectronVarManager::kPdgCode,443.);
217 pdgMotherCutsP->AddCut(AliDielectronVarManager::kHaveSameMother,1.);
218 die->GetPairFilter().AddCuts(pdgMotherCutsP);
220 if (cutDefinition==kEleConvMC){
221 pdgMotherCutsT->AddCut(AliDielectronVarManager::kPdgCodeMother,22.);
222 cuts->AddCut(pdgMotherCutsT);
224 pdgMotherCutsP->AddCut(AliDielectronVarManager::kHaveSameMother,1.);
225 die->GetPairFilter().AddCuts(pdgMotherCutsP);
230 ////////////////////////////////// DATA + MC
231 // pid cuts TPC + TOF & TRD
232 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.,4.);
233 if(cutDefinition==kTOF || cutDefinition==kTOFTRD)
234 pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
235 if(cutDefinition==kTRD || cutDefinition==kTOFTRD)
236 pid->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.9,1.,3.5.,6.,kFALSE,
237 AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
239 if(cutDefinition!=knoPID && cutDefinition!=kCutStats && cutDefinition!=kTRDeff && !hasMC ) cuts->AddCut(pid);
240 /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
242 // exclude conversion electrons selected by the tender
243 //AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
244 //noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
245 //cuts->AddCut(noconv);
249 //______________________________________________________________________________________
250 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
253 // Initialise the histograms
256 //Setup histogram Manager
257 AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(), die->GetTitle());
259 //Initialise histogram classes
260 histos->SetReservedWords("Track;Pair");
262 // booleans for histo selection
263 Bool_t bHistEvts = kFALSE, bHistPair = kFALSE, bHistCuts = kFALSE, bHistPID = kFALSE, bHistEff=kFALSE, bHistRunQA=kFALSE;
264 switch (cutDefinition) {
265 case kCutStats: bHistCuts=kTRUE; break;
266 case knoPID: bHistEvts=kTRUE; bHistPID=kTRUE; bHistRunQA=kTRUE; break;
271 bHistPID=kTRUE; break;
272 case kTRDeff: bHistEff=kTRUE; break;
276 bHistPair=kTRUE; break;
281 //to fill also track info from 2nd event loop until 2
282 for (Int_t i=0; i<2; ++i){
283 histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
286 //add histograms to event class
288 histos->AddClass("Event");
289 histos->UserHistogram("Event","RunNumber",";run;#events",GetRunNumbers(),AliDielectronVarManager::kRunNumber);
290 histos->UserHistogram("Event","VtxZ",";z_{vtx} (cm)",300,-15.,15.,AliDielectronVarManager::kZvPrim);
292 histos->AddClass("MCEvent");
293 histos->UserHistogram("MCEvent","NumberOfJPsis",";N_{J/#psi};#events",20,0.,20.,AliDielectronVarManager::kNumberOfJPsis);
300 histos->UserHistogram("Event","TPCrpH2uc_RunNumber",";run;#Psi^{TPC} (rad.)",
301 GetRunNumbers(), BinsToVector(100,-2.,2.) ,
302 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kTPCrpH2uc);
303 histos->UserHistogram("Event","vOArpH2_RunNumber",";run;#Psi_{2}^{V0A} (rad.)",
304 GetRunNumbers(), BinsToVector(100,-2.,2.) ,
305 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0ArpH2);
306 histos->UserHistogram("Event","vOCrpH2_RunNumber",";run;#Psi_{2}^{V0C} (rad.)",
307 GetRunNumbers(), BinsToVector(100,-2.,2.) ,
308 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0CrpH2);
310 histos->UserHistogram("Event","TPCrpH2uc_Cent_RunNumber",";centrality (%);#Psi^{TPC} (rad.);run",
311 BinsToVector(10,0.,100.), BinsToVector(100,-2.,2.), GetRunNumbers(),
312 AliDielectronVarManager::kCentrality,
313 AliDielectronVarManager::kTPCrpH2uc,
314 AliDielectronVarManager::kRunNumber );
315 histos->UserHistogram("Event","vOArpH2_Cent_RunNumber",";centrality (%);#Psi_{2}^{V0A} (rad.);run",
316 BinsToVector(10,0.,100.), BinsToVector(100,-2.,2.), GetRunNumbers(),
317 AliDielectronVarManager::kCentrality,
318 AliDielectronVarManager::kv0ArpH2,
319 AliDielectronVarManager::kRunNumber );
320 histos->UserHistogram("Event","vOCrpH2_Cent_RunNumber",";centrality (%);#Psi_{2}^{V0C} (rad.);run",
321 BinsToVector(10,0.,100.), BinsToVector(100,-2.,2.), GetRunNumbers(),
322 AliDielectronVarManager::kCentrality,
323 AliDielectronVarManager::kv0CrpH2,
324 AliDielectronVarManager::kRunNumber );
328 histos->UserHistogram("Track","TPCnSigmaPio_Nacc_RunNumber",";N_{acc};run;n#sigma_{pio}^{TPC}",
329 BinsToVector(60,0.,3000.), GetRunNumbers(), BinsToVector(40,-5.,5.),
330 AliDielectronVarManager::kNacc,
331 AliDielectronVarManager::kRunNumber,
332 AliDielectronVarManager::kTPCnSigmaPio);
333 histos->UserHistogram("Track","TPCnSigmaPio_Nacc",";N_{acc};n#sigma_{pio}^{TPC}",
334 BinsToVector(60,0.,3000.), BinsToVector(40,-5.,5.),
335 AliDielectronVarManager::kNacc,
336 AliDielectronVarManager::kTPCnSigmaPio);
338 histos->UserProfile("Track","TPCnSigmaPio-Nacc-RunNumber",";N_{acc};run;n#sigma_{pio}^{TPC}",
339 AliDielectronVarManager::kTPCnSigmaPio,
340 BinsToVector(60,0.,3000.), GetRunNumbers(),
341 AliDielectronVarManager::kNacc, AliDielectronVarManager::kRunNumber, "s;-5;5" );
342 histos->UserProfile("Track","TPCnSigmaPio-RunNumber",";run;n#sigma_{pio}^{TPC}",
343 AliDielectronVarManager::kTPCnSigmaPio,
344 GetRunNumbers(), AliDielectronVarManager::kRunNumber, "s;-5;5");
345 histos->UserProfile("Track","TPCnSigmaPio-Nacc",";N_{acc};n#sigma_{pio}^{TPC}",
346 AliDielectronVarManager::kTPCnSigmaPio,
347 BinsToVector(60,0.,3000.), AliDielectronVarManager::kNacc , "s;-5;5");
353 // if(cutDefinition==kTPC) { // centrality dependence
354 histos->UserHistogram("Track","dEdx_P_Cent",";p (GeV/c);TPC signal (arb units);centrality (%)",
355 400,0.2,20., 200,0.,200., 10,0.,100.,
356 AliDielectronVarManager::kPIn,
357 AliDielectronVarManager::kTPCsignal,
358 AliDielectronVarManager::kCentrality,
361 histos->UserHistogram("Track","TPCnSigmaEle_P_Cent",";p (GeV/c);n#sigma_{ele}^{TPC};centrality (%)",
362 100,0.2,20., 100,-10.,10., 10,0.,100.,
363 AliDielectronVarManager::kPIn,
364 AliDielectronVarManager::kTPCnSigmaEle,
365 AliDielectronVarManager::kCentrality,
368 histos->UserHistogram("Track","TPCnSigmaPio_P_Cent",";p (GeV/c);n#sigma_{pio}^{TPC};centrality (%)",
369 100,0.2,20., 100,-10.,10., 10,0.,100.,
370 AliDielectronVarManager::kPIn,
371 AliDielectronVarManager::kTPCnSigmaPio,
372 AliDielectronVarManager::kCentrality,
375 histos->UserHistogram("Track","TPCnSigmaPro_P_Cent",";p (GeV/c);n#sigma_{pro}^{TPC};centrality (%)",
376 100,0.2,20., 100,-10.,10., 10,0.,100.,
377 AliDielectronVarManager::kPIn,
378 AliDielectronVarManager::kTPCnSigmaPro,
379 AliDielectronVarManager::kCentrality,
382 histos->UserHistogram("Track","TOFbeta_P_Cent",";p (GeV/c);#beta;centrality (%);#tracks",
383 250,0.0,5., 300,0.,1.2, 10,0.,100.,
384 AliDielectronVarManager::kPIn,
385 AliDielectronVarManager::kTOFbeta,
386 AliDielectronVarManager::kCentrality);
388 histos->UserHistogram("Track","TOFnSigmaEle_P_Cent","dEdxTOF;p (GeV/c);n#sigma_{ele}^{TOF};centrality (%);#tracks",
389 250,0.0,5., 100,-10.,10., 10,0.,100.,
390 AliDielectronVarManager::kPIn,
391 AliDielectronVarManager::kTOFnSigmaEle,
392 AliDielectronVarManager::kCentrality);
396 histos->UserHistogram("Track","dEdx_P",";p (GeV/c);TPC signal (arb units);#tracks",
397 400,0.2,20.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
398 histos->UserHistogram("Track","TPCnSigmaEle_P",";p (GeV/c);n#sigma_{ele}^{TPC}",
399 100,0.2,20.,100,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
400 histos->UserHistogram("Track","TPCnSigmaPio_P",";p (GeV/c);n#sigma_{pio}^{TPC}",
401 100,0.2,20.,100,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPio,kTRUE);
402 histos->UserHistogram("Track","TPCnSigmaPro_P",";p (GeV/c);n#sigma_{pro}^{TPC}",
403 100,0.2,20.,100,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPro,kTRUE);
404 histos->UserHistogram("Track","dEdx_NclsTPC",";N_{cls}^{TPC};TPC signal (arb units);#tracks",
405 160,0.,160.,200,0.,200.,AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kTPCsignal);
407 histos->UserHistogram("Track","TOFbeta_P",";p (GeV/c);#beta;#tracks",
408 250,0.0,5.0,300,0.,1.2,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFbeta);
409 histos->UserHistogram("Track","TOFnSigmaEle_P",";p (GeV/c);n#sigma_{ele}^{TOF}",
410 100,0.2,20.,50,-10.,10.,AliDielectronVarManager::kP,AliDielectronVarManager::kTOFnSigmaEle,kTRUE);
412 if(cutDefinition==knoPID || cutDefinition==kTPC) {
413 histos->UserHistogram("Track","dEdx_RunNumber",";run;TPC signal (arb units)",
414 GetRunNumbers(), BinsToVector(200,0.,200.),
415 AliDielectronVarManager::kRunNumber,
416 AliDielectronVarManager::kTPCsignal);
417 histos->UserHistogram("Track","TPCnSigmaEle_RunNumber",";run;TPC signal (arb units)",
418 GetRunNumbers(), BinsToVector(100,-5.,5.),
419 AliDielectronVarManager::kRunNumber,
420 AliDielectronVarManager::kTPCnSigmaEle);
421 histos->UserHistogram("Track","dEdx_Eta",";#eta;TPC signal (arb units)",
422 100,-1.,1.,200,0.,200.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCsignal,kTRUE);
423 histos->UserHistogram("Track","dEdx_Phi",";#phi;TPC signal (arb units)",
424 180,0.,6.285,200,0.,200.,AliDielectronVarManager::kPhi,AliDielectronVarManager::kTPCsignal,kTRUE);
431 for (Int_t i=1; i<=1; ++i){ // only +- pairs
432 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
434 //add histograms to Pair classes
435 histos->UserHistogram("Pair","InvMass",";m_{ee} (GeV/c^{2});#pairs",
436 100,.0,100*0.005, AliDielectronVarManager::kM); // 5MeV bins, 0.5GeV/c2
437 histos->UserHistogram("Pair","OpeningAngle",";angle (rad.)",
438 100,0.,3.15, AliDielectronVarManager::kOpeningAngle);
439 histos->UserHistogram("Pair","CosPointingAngle",";|cos(#theta)|",
440 110,0.0,1.1, AliDielectronVarManager::kCosPointingAngle);
441 histos->UserHistogram("Pair","Chi2NDF",";#chi^{2}/NDF",
442 100,0.,20, AliDielectronVarManager::kChi2NDF);
443 histos->UserHistogram("Pair","PsiPair","PsiPair;#psi",
444 100,0.,3.15, AliDielectronVarManager::kPsiPair);
445 histos->UserHistogram("Pair","R","Radius;r (cm)",
446 200,0.,100., AliDielectronVarManager::kR);
447 histos->UserHistogram("Pair","LegDist",";dca (cm)",
448 100,0.,1., AliDielectronVarManager::kLegDist);
449 histos->UserHistogram("Pair","LegDistXY",";dca_{xy} (cm)",
450 100,0.,1., AliDielectronVarManager::kLegDistXY);
451 histos->UserHistogram("Pair","PdgCode",";mother PDG code;#tracks",
452 10000,-5000.5,4999.5,AliDielectronVarManager::kPdgCode);
455 histos->UserHistogram("Track","NclsITS",";N_{cls}^{ITS};#tracks",
456 "0,1,2,3,4,5,6,7", AliDielectronVarManager::kNclsITS);
457 histos->UserHistogram("Track","ITSLayerFirstCls",";ITS layer first cls;#tracks",
458 "-1,0,1,2,3,4,5,6", AliDielectronVarManager::kITSLayerFirstCls);
463 for (Int_t i=1; i<=1; ++i){ // only +- pairs
464 // histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
466 histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
470 histos->UserHistogram("Track","TPCnSigmaEle",";n#sigma_{ele}^{TPC};#tracks",
471 100,-10.,10.,AliDielectronVarManager::kTPCnSigmaEle);
473 histos->UserHistogram("Track","TRDpidQuality",";N_{trkl}^{TRD};#tracks",
474 "0,1,2,3,4,5,6,7", AliDielectronVarManager::kTRDpidQuality);
475 histos->UserHistogram("Track","TRDchi2",";#chi^{2}_{TRD};#tracks",
476 11,-1.,10., AliDielectronVarManager::kTRDchi2);
477 histos->UserHistogram("Track","TRDprobEle",";P_{ele}^{TRD};#tracks",
478 100,0.,1., AliDielectronVarManager::kTRDprobEle);
479 histos->UserHistogram("Track","TRDprobPio",";P_{pio}^{TRD};#tracks",
480 100,0.,1., AliDielectronVarManager::kTRDprobPio);
482 histos->UserHistogram("Track","TRDprobEle_TRDpidQuality",";N_{trkl}^{TRD};P_{ele}^{TRD}",
484 AliDielectronVarManager::kTRDpidQuality, AliDielectronVarManager::kTRDprobEle);
485 histos->UserHistogram("Track","TRDprobPio_TRDpidQuality",";N_{trkl}^{TRD};P_{pio}^{TRD}",
487 AliDielectronVarManager::kTRDpidQuality, AliDielectronVarManager::kTRDprobPio);
489 histos->UserProfile("Track","TRDprobEle-TRDpidQuality",";N_{trkl}^{TRD};P_{ele}^{TRD}",
490 AliDielectronVarManager::kTRDprobEle,
491 "0,1,2,3,4,5,6,7", AliDielectronVarManager::kTRDpidQuality);
492 histos->UserProfile("Track","TRDprobPio-TRDpidQuality",";N_{trkl}^{TRD};P_{pio}^{TRD}",
493 AliDielectronVarManager::kTRDprobPio,
494 "0,1,2,3,4,5,6,7", AliDielectronVarManager::kTRDpidQuality);
496 histos->UserHistogram("Track","NclsTPC",";N_{cls}^{TPC};#tracks",
497 160,0.,160., AliDielectronVarManager::kNclsTPC);
502 //histos->UserHistogram("Track","Pt",";p_{T} (GeV/c);#tracks",200,0,20.,AliDielectronVarManager::kPt);
503 //histos->UserHistogram("Track","Eta",";#eta;#tracks",100,-2.,2.,AliDielectronVarManager::kEta);
504 //histos->UserHistogram("Track","Phi",";#phi;#tracks",360,0.,6.285,AliDielectronVarManager::kPhi);
506 histos->UserHistogram("Track","TRDchi2",";#chi^{2}_{TRD};#tracks",11,-1.,10., AliDielectronVarManager::kTRDchi2);
507 histos->UserHistogram("Track","TRDchi2_TRDpidQuality",";#chi^{2}_{TRD};N_{trkl}^{TRD};#tracks",
508 11,-1.,10., 7,0.,7., AliDielectronVarManager::kTRDchi2, AliDielectronVarManager::kTRDpidQuality);
510 histos->UserHistogram("Track","V0Index0",";V0;#tracks",2,-0.5,1.5,AliDielectronVarManager::kV0Index0);
512 histos->UserHistogram("Track","PdgCodeMother",";mother PDG code;#tracks",10000,-5000.5,4999.5,AliDielectronVarManager::kPdgCodeMother);
513 // histos->UserHistogram("Track","PdgCode",";tracks PDG code;#tracks",10000,-5000.5,4999.5,AliDielectronVarManager::kPdgCode);
517 //add histograms to get cut statistics
519 histos->UserHistogram("Track","Eta",";Eta;#tracks",
520 "-5.,-0.9,-0.8,0.8,0.9,5.", AliDielectronVarManager::kEta);
521 histos->UserHistogram("Track","Pt",";p_{T} (GeV/c);#tracks",
522 "0.0,0.8, 1.0, 1.2, 1.5, 100.0", AliDielectronVarManager::kPt);
523 histos->UserHistogram("Track","ImpactParXY",";dXY (cm);#tracks",
524 500,-1.,1., AliDielectronVarManager::kImpactParXY);
525 histos->UserHistogram("Track","ImpactParZ",";dZ (cm);#tracks",
526 600,-3.,3., AliDielectronVarManager::kImpactParZ);
528 histos->UserHistogram("Track","NclsITS",";N_{cls}^{ITS};#tracks",
529 "0,1,2,3,4,5,6,7", AliDielectronVarManager::kNclsITS);
530 histos->UserHistogram("Track","ITSLayerFirstCls",";ITS layer first cls;#tracks",
531 "-1,0,1,2,3,4,5,6", AliDielectronVarManager::kITSLayerFirstCls);
532 histos->UserHistogram("Track","NclsITS_ITSLayerFirstCls",";N_{cls}^{ITS};ITS layer first cls;#tracks",
533 7, 0., 7., 7, -1., 6.,
534 AliDielectronVarManager::kNclsITS, AliDielectronVarManager::kITSLayerFirstCls);
536 histos->UserHistogram("Track","NclsTPC",";N_{cls}^{TPC};#tracks",
537 "70, 90, 100, 120, 160", AliDielectronVarManager::kNclsTPC);
538 histos->UserHistogram("Track","TPCchi2PerCluster",";#chi^{2}/N_{cls}^{TPC};#tracks",
539 10,0,10,AliDielectronVarManager::kTPCchi2Cl);
540 histos->UserHistogram("Track","TPC_nSigma_Electrons",";n#sigma_{ele}^{TPC};#tracks",
541 "-100,-4,-3,-2,-1.5,-1,1,1.5,2,3,4,100",AliDielectronVarManager::kTPCnSigmaEle);
542 histos->UserHistogram("Track","TPC_nSigma_Pions",";n#sigma_{pio}^{TPC};#tracks",
543 "-100,3.5,4.0,4.5,5.0,5.5,100",AliDielectronVarManager::kTPCnSigmaPio);
544 histos->UserHistogram("Track","TPC_nSigma_Protons",";n#sigma_{pro}^{TPC};#tracks",
545 "-100,3.5,4.0,4.5,5.0,5.5,100",AliDielectronVarManager::kTPCnSigmaPro);
547 histos->UserProfile("Track","NclsTPC-Eta-Phi",";#eta;#phi;N_{cls}^{TPC}",
548 AliDielectronVarManager::kNclsTPC,
549 BinsToVector(100,-2.,2.), BinsToVector(360,0.,6.285),
550 AliDielectronVarManager::kEta, AliDielectronVarManager::kPhi, "i;1;160");
552 histos->UserHistogram("Track","TRDpidQuality",";N_{trkl}^{TRD};#tracks",
553 "0,1,2,3,4,5,6,7", AliDielectronVarManager::kTRDpidQuality);
554 histos->UserHistogram("Track","TRDprobEle",";P_{ele}^{TRD};#tracks",
555 100,0.,1., AliDielectronVarManager::kTRDprobEle);
556 // histos->UserHistogram("Track","TRD_PIDbit",";TRD pid bit;#tracks",
557 // "-.5,.5,1.5", AliDielectronVarManager::kTRDPIDBit);
560 histos->UserHistogram("Track","TOF_PIDbit",";TOF pid bit;#tracks",
561 "-.5,.5,1.5", AliDielectronVarManager::kTOFPIDBit);
562 histos->UserHistogram("Track","TOF_nSigma_Electrons",";n#sigma_{ele}^{TOF};#tracks",
563 "-100,-3,-2,2,3,100",AliDielectronVarManager::kTOFnSigmaEle);
568 // histos->UserHistogram("Track","Pt",";p_{T} (GeV/c);#tracks",200,0,20.,AliDielectronVarManager::kPt);
569 // histos->UserHistogram("Track","Eta",";#eta;#tracks",100,-2.,2.,AliDielectronVarManager::kEta);
570 // histos->UserHistogram("Track","Phi",";#phi;#tracks",360,0.,6.285,AliDielectronVarManager::kPhi);
571 // histos->UserHistogram("Track","Eta_Phi",";#eta; #phi;#tracks",
572 // 100,-2,2,144,0,6.285,AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
574 // histos->UserHistogram("Track","Ncl",";Number clusters TPC;Number clusters TPC",
575 // 160,-0.5,159.5,AliDielectronVarManager::kNclsTPC);
576 // histos->UserHistogram("Track","NclFrFrac",";found/findable clusters (robust);#tracks",
577 // 160,0,1.1,AliDielectronVarManager::kNFclsTPCrFrac);
578 // histos->UserHistogram("Track","TPCsignalN","Number of Clusters TPC PID;#clusteres TPC PID;#tracks",
579 // 160,-0.5,159.5,AliDielectronVarManager::kTPCsignalN);
581 // histos->UserHistogram("Track","Ncl_NclPid","Number clusters TPC vs. number of clusters PID;#clusters TPC; #clusters TPC PID",
582 // 160,-0.5,159.5,160,-0.5,159.5,AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kTPCsignalN);
583 // histos->UserHistogram("Track","TPCchi2Cl","TPC #chi^{2}/cluster;TPC #chi^{2}/cluster;#tracks",
584 // 100,0.,10.,AliDielectronVarManager::kTPCchi2Cl);
586 die->SetHistogramManager(histos);
589 void InitCF(AliDielectron* die, Int_t cutDefinition)
592 // Setup the CF Manager if needed
595 AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
598 cf->AddVariable(AliDielectronVarManager::kP, "1.0,1.5,2.0,3.0,5.0,10.0",kTRUE);
599 cf->AddVariable(AliDielectronVarManager::kTRDphi, 45, -3.15, +3.15, kTRUE);
600 cf->AddVariable(AliDielectronVarManager::kEta, 20, -1.0, 1.0, kTRUE);
601 cf->AddVariable(AliDielectronVarManager::kTRDntracklets, 7, -0.5, 6.5, kTRUE);
602 cf->AddVariable(AliDielectronVarManager::kTRDprobEle, 20, 0.0, 1.0, kTRUE);
603 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle, 10.,-3.5, +3.5, kTRUE);
605 die->SetCFManagerPair(cf);
608 TVectorD *GetRunNumbers() {
610 Double_t runLHC10h[] = { // all good runs based on RCT 29.Mai
611 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
614 Double_t runLHC11h[] = { // all good runs based on RCT 29.Mai
615 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
618 // selection via environement variable (works only for gsi trains)
621 if(list.Contains("LHC10h") || list.Contains("LHC11a10")) {
622 Int_t size = (int) (sizeof(runLHC10h)/sizeof(Double_t));
623 TVectorD *vec = new TVectorD(size+1);
625 (*vec)[size] = runLHC10h[0] + 1;
626 for (int i = 0; i < size; i++) {
627 (*vec)[i] = runLHC10h[size-1-i];
633 if( list.Contains("LHC11h") || list.Contains("LHC12a17") ) {
635 Int_t size = (int) (sizeof(runLHC11h)/sizeof(Double_t));
636 TVectorD *vec = new TVectorD(size+1);
638 (*vec)[size] = runLHC11h[0] + 1;
639 for (int i = 0; i < size; i++) {
640 (*vec)[i] = runLHC11h[size-1-i];
646 TVectorD *vec = new TVectorD(2);
653 TVectorD *BinsToVector(Int_t nbins, Double_t min, Double_t max) {
654 return AliDielectronHelper::MakeLinBinning(nbins,min,max);
655 // TVectorD *vec = new TVectorD(nbins+1);
657 // Double_t binwdth = (max-min)/nbins;
658 // for (int i = 0; i < nbins+1; i++) (*vec)[i] = min + i*binwdth;