]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/macrosJPSI/ConfigJpsiQA_jpsi_PbPb.C
including switch to set on/off iso-track core removal, cleaning and bug fix
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosJPSI / ConfigJpsiQA_jpsi_PbPb.C
CommitLineData
890973b8 1void InitHistograms(AliDielectron *die, Int_t cutDefinition);
f6a71c64 2void InitCF(AliDielectron* die, Int_t cutDefinition);
890973b8 3
b863bc83 4void SetupEventCuts(AliDielectron *die, ULong64_t triggers);
890973b8 5void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
b863bc83 6void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
ab5dc7f9 7void SetupV0Cuts( AliDielectron *die, Int_t cutDefinition);
8
9void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition);
890973b8 10
5ab640ac 11void AddMCSignals(AliDielectron *die);
12
890973b8 13void SetEtaCorrection();
14TVectorD *GetRunNumbers();
15
ab5dc7f9 16TString names=("QA;PIDQA");
17enum { kQA=0, kQApid };
890973b8 18
19TObjArray *arrNames=names.Tokenize(";");
20const Int_t nDie=arrNames->GetEntries();
21
b863bc83 22Bool_t isESD = kTRUE;
23Bool_t hasMC = kFALSE;
24TString list = gSystem->Getenv("LIST");
890973b8 25
ab5dc7f9 26AliDielectron* ConfigJpsiQA_jpsi_PbPb(Int_t cutDefinition, TString prod="",
27 ULong64_t triggers=AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB)
890973b8 28{
29 //
30 // Setup the instance of AliDielectron
31 //
32
33 // find mc or not?
34 if( list.IsNull()) list=prod;
35 if( list.Contains("LHC10h") || list.Contains("LHC11h") ) hasMC=kFALSE;
36 if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ) hasMC=kTRUE;
37
38 //ESD handler?
39 isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
40
41 // switch off some configurations
42 if(hasMC) { // MONTE CARLO
43 switch(cutDefinition) {
ab5dc7f9 44 //case kQApid: return 0x0;
890973b8 45 }
46 } else { // COLLISION DATA
47 switch(cutDefinition) {
ab5dc7f9 48 // case kQA: return 0x0;
49 // case kQApid: return 0x0;
890973b8 50 }
51 }
52
53 // create the actual framework object
54 TString name=Form("%02d",cutDefinition);
ab5dc7f9 55 if (cutDefinition<arrNames->GetEntriesFast()) name=arrNames->At(cutDefinition)->GetName();
56 printf(" Adding %s%s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?" MC":""),name.Data(),list.Data());
57
58 // init AliDielectron
59 AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("QA config: %s",name.Data()));
890973b8 60 die->SetHasMC(hasMC);
61
423cc7ef 62 // cut setup
b863bc83 63 SetupEventCuts(die,triggers);
15f4cb18 64 SetupTrackCuts(die,cutDefinition);
ab5dc7f9 65 if(cutDefinition!=kQApid) SetupPairCuts(die,cutDefinition);
66 SetupV0Cuts(die,cutDefinition);
890973b8 67
5ab640ac 68 // MC signals
69 if(hasMC) {
70 AddMCSignals(die);
71 printf(" Add %d MC signals \n",die->GetMCSignals()->GetEntriesFast());
72 }
890973b8 73 // histogram setup
74 InitHistograms(die,cutDefinition);
ab5dc7f9 75 //printf(" Add %d classes to the manager \n",die->GetHistogramList()->GetEntries());
890973b8 76
f6a71c64 77 // CF container setup
ab5dc7f9 78 //InitCF(die,cutDefinition);
890973b8 79
ab5dc7f9 80 // tpc event plane configuration
81 // ConfigEvtPlane(die,cutDefinition);
34107494 82
890973b8 83 // prefilter settings
ab5dc7f9 84 // if(cutDefinition==kQA) die->SetNoPairing();
85 // else
1c96a71e 86 die->SetPreFilterUnlikeOnly();
890973b8 87 //die->SetPreFilterAllSigns();
88
89 // setup eta correction
90 // if(isESD && list.Contains("LHC10h")) SetEtaCorrection();
91
92 // VZERO calibration
93 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
94 if (!trainRoot.IsNull()) {
95 die->SetVZEROCalibrationFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroCalibrationLHC10h.root");
96 die->SetVZERORecenteringFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroRecenteringLHC10h.root");
97 }
98
99 return die;
100}
101
423cc7ef 102//______________________________________________________________________________________
b863bc83 103void SetupEventCuts(AliDielectron *die, ULong64_t triggers)
423cc7ef 104{
105 //
106 // Setup the event cuts
107 //
108
b863bc83 109 // trigger specific centrality cuts (reject trigger inefficiencies)
90c1ae2d 110 Double_t minCent=0.0, maxCent=80.;
111 if(!hasMC) {
112 switch(triggers) {
113 case AliVEvent::kCentral: minCent= 0.; maxCent= 9.; break;
114 case AliVEvent::kSemiCentral: minCent=12.; maxCent=53.; break;
115 case AliVEvent::kMB: minCent= 0.; maxCent=80.; break;
116 default: minCent= 0.; maxCent=80.; break;
117 }
b863bc83 118 }
119
423cc7ef 120 AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("eventCuts","eventCuts");
121 if(!isESD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny);
122 eventCuts->SetRequireVertex();
123 eventCuts->SetMinVtxContributors(1);
124 eventCuts->SetVertexZ(-10.,+10.);
ab5dc7f9 125 eventCuts->SetCentralityRange(minCent,maxCent);
90c1ae2d 126
127 /*
128 TF1 *fMean = new TF1("fMean", "pol1", 0,25e+3);
129 fMean->SetParameters(631.301, 1.49836);
130 TF1 *fSigma = new TF1("fSigma","[0]+sqrt([1]*x+[2])",0,25e+3);
131 fSigma->SetParameters(-25.7843, 32.8055, 35275.7);
132 eventCuts->SetCutOnV0MultipicityNTrks(fMean, fSigma, 4.0);
133 */
134
423cc7ef 135 eventCuts->Print();
136 die->GetEventFilter().AddCuts(eventCuts);
137
138}
139
890973b8 140//______________________________________________________________________________________
141void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
142{
143 //
144 // Setup the track cuts
145 //
146
147 // Quality cuts
148 AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
890973b8 149 die->GetTrackFilter().AddCuts(cuts);
150
90c1ae2d 151 // AliDielectronVarCuts *mc = new AliDielectronVarCuts("MCCut","MCCut");
152 //mc->AddCut(AliDielectronVarManager::kHasCocktailMother, 0); // exclude enhanced signals
153 //mc->AddCut(AliDielectronVarManager::kHasCocktailGrandMother, 0); // exclude enhanced signals
423cc7ef 154 // mc->AddCut(AliDielectronVarManager::kPdgCode, -6, 6, kTRUE); // exclude quarks to speed up
155 // mc->AddCut(AliDielectronVarManager::kPdgCode, 21, 21, kTRUE); // exclude gluons to speed up
90c1ae2d 156 //if(hasMC) {
157 // cuts->AddCut(mc);
158 // mc->Print();
159 //}
423cc7ef 160
890973b8 161 // AOD track filter (needs to be first cut to speed up)
162 AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("TrkFilter","TrkFilter");
890973b8 163 trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqual);
2ed1b6ff 164 //if(!isESD) cuts->AddCut(trkFilter);
890973b8 165
90c1ae2d 166 AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
ab5dc7f9 167 if(cutDefinition==kQA) trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 15); // ITS-4 = 1+2+4+8
168 if(cutDefinition==kQA) trkCuts->SetRequireITSRefit(kTRUE);
169 if(cutDefinition!=kQA) trkCuts->SetMinNCrossedRowsOverFindable(0.6);
90c1ae2d 170 trkCuts->SetRequireTPCRefit(kTRUE);
171 cuts->AddCut(trkCuts);
172
890973b8 173 // track cuts ESD and AOD
174 AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
ab5dc7f9 175 if(cutDefinition==kQA) varCuts->AddCut(AliDielectronVarManager::kPt,0.8,1e30); //1.1
176 if(cutDefinition==kQA) varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
177 if(cutDefinition==kQA) varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
178 if(cutDefinition==kQA) varCuts->AddCut(AliDielectronVarManager::kTOFbeta, 0.2, 0.9, kTRUE);
15f4cb18 179 varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
890973b8 180 varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
890973b8 181 varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 50.0, 160.0);
15f4cb18 182 varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
890973b8 183 cuts->AddCut(varCuts);
184
890973b8 185 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
186 AliDielectronPID *pid = new AliDielectronPID("PID","PID");
890973b8 187 ////////////////////////////////// DATA
188 if(!hasMC) {
189 // TPC
ab5dc7f9 190 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron, -3.,3.0);
191 if(cutDefinition==kQA) pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion, -100.,4.0,0.,0.,kTRUE);
192 // pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton, -100.,3.5,0.,0.,kTRUE);
890973b8 193
194 // TOF
ab5dc7f9 195 //pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-5,5.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
196 pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,5.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
890973b8 197
198 // TRD 1- or 2-dimensonal
199 /* pid->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
200 AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
201 pid->AddCut(AliDielectronPID::kTRDeleEff2D,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
202 AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
203 */
204 }
205
206 ////////////////////////////////// MC
207 if(hasMC) {
208
5ab640ac 209 // TPC
210 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron, -4.,4.0);
211 pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion, -100.,4.0,0.,0.,kTRUE);
212 pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton, -100.,3.5,0.,0.,kTRUE);
213
214 // TOF
215 pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-5,5.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
216
890973b8 217 } //hasMC
218
ab5dc7f9 219 cuts->AddCut(pid);
890973b8 220 /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
221
222
223 // exclude conversion electrons selected by the tender
224 AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
225 noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
2ed1b6ff 226 //cuts->AddCut(noconv);
227
ab5dc7f9 228 // Print
229 // cuts->Print();
230
231 die->GetTrackFilter().GetCuts()->ls();
2ed1b6ff 232}
233
890973b8 234//______________________________________________________________________________________
235void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
236{
237 //
238 // Setup the pair cuts
239 //
240
241 // conversion rejection
77e2c705 242 Double_t gCut;
243 switch(cutDefinition) {
ab5dc7f9 244 case kQA: gCut = 0.05; break;
245 case kQApid: gCut = 0.00; return;
246 default: gCut = 0.05;
77e2c705 247 }
248 AliDielectronVarCuts *gammaCuts = new AliDielectronVarCuts("GammaCuts","GammaCuts");
77e2c705 249 gammaCuts->AddCut(AliDielectronVarManager::kM, 0.0, gCut);
250 gammaCuts->Print();
251 die->GetPairPreFilter().AddCuts(gammaCuts);
890973b8 252
253 // rapidity selection
1c96a71e 254 //AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9");
255 //rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
256 //die->GetPairFilter().AddCuts(rapCut);
890973b8 257
90c1ae2d 258 // minv cut (for better jpsi candidate to mc comparison)
259 AliDielectronVarCuts *minvCut=new AliDielectronVarCuts("PairCut","PairCut");
260 minvCut->AddCut(AliDielectronVarManager::kM,2.92,3,.16);
261 if(!hasMC) {
262 // minvCut->Print();
263 // die->GetPairFilter().AddCuts(minvCut);
264 }
ab5dc7f9 265
266 // gamma selection
267 AliDielectronVarCuts *gamma = new AliDielectronVarCuts("Gamma","Gamma");
268 gamma->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.035); // 0.1
269 gamma->AddCut(AliDielectronVarManager::kCosPointingAngle, TMath::Cos(0.02), 1.0);
270 gamma->AddCut(AliDielectronVarManager::kLegDist, 0.0, 0.25);
271 gamma->AddCut(AliDielectronVarManager::kR, 3.0, 90.0);
272 gamma->AddCut(AliDielectronVarManager::kPsiPair, 0.0, 0.05);
273 gamma->AddCut(AliDielectronVarManager::kChi2NDF, 0.0, 10.0);
274 gamma->AddCut(AliDielectronVarManager::kM, 0.0, 0.05);
275 if(cutDefinition==kQApid) {
276 // gamma->Print();
277 // die->GetPairFilter().AddCuts(gamma);
278 }
279
280}
281
282//______________________________________________________________________________________
283void SetupV0Cuts(AliDielectron *die, Int_t cutDefinition)
284{
285 //
286 // Setup the V0 cuts
287 //
288
289 if(cutDefinition!=kQApid) return;
290
291 // add to cut group
292 TIter next(die->GetTrackFilter().GetCuts());
293 AliAnalysisCuts *cuts;
294 while((cuts = (AliAnalysisCuts*)next())) {
295 if(cuts->IsA() == AliDielectronCutGroup::Class()) break;
296 }
297
298 AliDielectronV0Cuts *gammaV0Cuts = new AliDielectronV0Cuts("IsGamma","IsGamma");
299 gammaV0Cuts->SetPdgCodes(22,11,11);
300 //gammaV0Cuts->SetDefaultPID(13); // TPC+-3.5 TOF+-4
301 gammaV0Cuts->SetDefaultPID(7); // TPC+-10 TOF+-3 required
302 gammaV0Cuts->AddCut(AliDielectronVarManager::kCosPointingAngle, TMath::Cos(0.02), 1.0 );
303 gammaV0Cuts->AddCut(AliDielectronVarManager::kChi2NDF, 0.0, 10.0 );
304 gammaV0Cuts->AddCut(AliDielectronVarManager::kLegDist, 0.0, 0.25);
305 gammaV0Cuts->AddCut(AliDielectronVarManager::kR, 3.0, 90.0 );
306 gammaV0Cuts->AddCut(AliDielectronVarManager::kPsiPair, 0.0, 0.05);
307 gammaV0Cuts->AddCut(AliDielectronVarManager::kM, 0.0, 0.05);
308 // gammaV0Cuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.1 );
309 gammaV0Cuts->AddCut(AliDielectronVarManager::kArmPt, 0.0, 0.05);
310 // gammaV0Cuts->AddCut(AliDielectronVarManager::kArmAlpha, -0.35, 0.35); // not sure if this works fine
311 gammaV0Cuts->SetExcludeTracks(kFALSE); // inclusion
312 gammaV0Cuts->Print();
313
314 // efficiency
315 // const Double_t cutQTG < 0.05;
316 // purity
317 // const Double_t |cutAlphaG| < 0.35; && const Double_t cutQTG < 0.05;
318 // const Double_t |cutAlphaG2|[2] = {0.6, 0.8}; && const Double_t cutQTG2 < 0.04; // high pt gammas
319
320 //////////
321 /* // Hans configuration
322 fMaxEta(1.4),
323 fMinR(10.),
324 fMaxR(180.),
325 fMaxChi2NDF(5.), //100
326 fMaxPsi(.05), //2
327 fMinCosP(0.9997), //0.97
328 fMinDaughterPt(.05),
329 fMinTPCNcls(70), //40
330 fMaxAsym(.06),
331 fMaxNSigEleTPC(4.),
332 fMaxNSigEleTPCLowP(3.), //4.
333 fMinNSigPioTPC(1.),
334 fMinNSigKaoTPC(1.),
335 fMinNSigProTPC(1.),
336 fMaxNSigEleTOF(3.),
337 */
338
339
340
341
342
343
344 if(cuts)
345 ((AliDielectronCutGroup*)cuts)->AddCut(gammaV0Cuts);
346 else
347 die->GetTrackFilter().AddCuts(gammaV0Cuts);
348}
349
350//______________________________________________________________________________________
351void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition)
352{
353 //
354 // Configurate the TPC event plane
355 //
356
357 Double_t gGap = 0.0;
358 AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
359 poi->AddCut(AliDielectronVarManager::kM,2.92,3.20); // particles of interest, jpsi mass window
360 die->GetEventPlanePOIPreFilter().AddCuts(poi);
361
362 // eta gap in tpc event plane
363 //AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap");
364 //etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE);
365 //die->GetEventPlanePreFilter().AddCuts(etaGap);
366 //if(cutDefinition==kSubLS) die->SetLikeSignSubEvents();
367
368 die->SetPreFilterEventPlane();
890973b8 369}
370
371//______________________________________________________________________________________
372void InitHistograms(AliDielectron *die, Int_t cutDefinition)
373{
374 //
375 // Initialise the histograms
376 //
377
378 // booleans for histo selection
ab5dc7f9 379 Bool_t bHistEvtQA=kFALSE, bHistTrackQA=kFALSE, bHistPairQA = kFALSE, bHistPidQA=kFALSE;
890973b8 380 switch (cutDefinition) {
ab5dc7f9 381 case kQA: bHistEvtQA=kTRUE; bHistTrackQA=kTRUE; bHistPairQA=kTRUE; bHistPidQA=kFALSE; break;
382 case kQApid: bHistEvtQA=kFALSE; bHistTrackQA=kFALSE; bHistPairQA=kFALSE; bHistPidQA=kTRUE; break;
890973b8 383 }
384
890973b8 385 //Setup histogram Manager
386 AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
387
890973b8 388 ////// EVENT HISTOS /////
389 if(bHistEvtQA) {
390
391 //add histograms to event class
392 histos->AddClass("Event");
ab5dc7f9 393
394 Int_t binsev[] ={ 125, 100, 100, 100, 100, 100, 55 };
395 Double_t minev[] ={ 0., 0., 0., 0., 0., 0., 0. };
396 Double_t maxev[] ={25000.,20000.,20000.,4000.,4000., 4000., 1.1};
397 UInt_t varev[] ={AliDielectronVarManager::kMultV0,
398 AliDielectronVarManager::kNTrk,
399 AliDielectronVarManager::kRefMult,
400 AliDielectronVarManager::kNacc,
401 AliDielectronVarManager::kRefMultTPConly,
402 AliDielectronVarManager::kNVtxContrib,
403 AliDielectronVarManager::kMatchEffITSTPC };
404 histos->UserSparse("Event", 7, binsev, minev, maxev, varev);
405
5ab640ac 406 histos->UserHistogram("Event","","", 80,0.,80., AliDielectronVarManager::kCentrality);
ab5dc7f9 407
5ab640ac 408 histos->UserHistogram("Event","","", GetRunNumbers(), AliDielectronVarManager::kRunNumber);
34107494 409 histos->UserHistogram("Event","","", GetRunNumbers(), AliDielectronHelper::MakeLinBinning(80,0.,80.),
890973b8 410 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality);
34107494 411 histos->UserProfile("Event","","", AliDielectronVarManager::kCentrality, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
412 histos->UserProfile("Event","","", AliDielectronVarManager::kCentralitySPD, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
413 histos->UserProfile("Event","","", AliDielectronVarManager::kZvPrim, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
414 histos->UserProfile("Event","","", AliDielectronVarManager::kZvPrim, GetRunNumbers(), AliDielectronVarManager::kRunNumber, "s;-10;10");
415 histos->UserProfile("Event","","", AliDielectronVarManager::kZvPrim, AliDielectronHelper::MakeLinBinning(80,0.,80.), AliDielectronVarManager::kCentrality);
0c09cae4 416 histos->UserProfile("Event","","", AliDielectronVarManager::kZvPrim, 250,0.,25000., AliDielectronVarManager::kMultV0A);
417 histos->UserProfile("Event","","", AliDielectronVarManager::kZvPrim, 250,0.,25000., AliDielectronVarManager::kMultV0C);
34107494 418 histos->UserHistogram("Event","","", GetRunNumbers(), AliDielectronHelper::MakeLinBinning(150,-15.,15.),
890973b8 419 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kZvPrim);
5ab640ac 420 histos->UserHistogram("Event","","", 80.,0.,80., 150,-15.,15.,
421 AliDielectronVarManager::kCentrality, AliDielectronVarManager::kZvPrim);
422
2ed1b6ff 423 histos->UserHistogram("Event","","", 300.,0.,6000., 300,0.,6000.,
424 AliDielectronVarManager::kNVtxContrib, AliDielectronVarManager::kNVtxContribTPC);
425 histos->UserHistogram("Event","","", 200.,0.,4000., 200,0.,4000.,
426 AliDielectronVarManager::kNVtxContrib, AliDielectronVarManager::kNacc);
427
428
5ab640ac 429 histos->UserHistogram("Event","","", GetRunNumbers(), AliDielectronHelper::MakeLinBinning(250,0.,25000.),
430 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kMultV0);
431 histos->UserHistogram("Event","","", 80.,0.,80., 250,0.,25000.,
432 AliDielectronVarManager::kCentrality, AliDielectronVarManager::kMultV0);
433 histos->UserProfile("Event","","", AliDielectronVarManager::kMultV0, 80.,0.,80., AliDielectronVarManager::kCentrality);
434 histos->UserProfile("Event","","", AliDielectronVarManager::kMultV0, 80.,0.,80., AliDielectronVarManager::kCentralitySPD);
435 histos->UserProfile("Event","","", AliDielectronVarManager::kMultV0, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
0c09cae4 436 histos->UserHistogram("Event","","", 250,0.,25000., AliDielectronVarManager::kMultV0);
437 histos->UserHistogram("Event","","", 250,0.,25000., AliDielectronVarManager::kMultV0A);
438 histos->UserHistogram("Event","","", 250,0.,25000., AliDielectronVarManager::kMultV0C);
439 histos->UserHistogram("Event","","", 200,0.,20000., 250,0.,25000., AliDielectronVarManager::kNTrk, AliDielectronVarManager::kMultV0 );
440 histos->UserHistogram("Event","","", 200,0.,20000., 250,0.,25000., AliDielectronVarManager::kNTrk, AliDielectronVarManager::kMultV0A);
441 histos->UserHistogram("Event","","", 200,0.,20000., 250,0.,25000., AliDielectronVarManager::kNTrk, AliDielectronVarManager::kMultV0C);
5ab640ac 442
2ed1b6ff 443
444
90c1ae2d 445 histos->UserHistogram("Event","","",
446 AliDielectronHelper::MakeLinBinning(200,0.,20000.),
447 AliDielectronHelper::MakeLinBinning(250,0.,25000.),
448 GetRunNumbers(),
449 AliDielectronVarManager::kNTrk, AliDielectronVarManager::kMultV0A, AliDielectronVarManager::kRunNumber);
450 histos->UserHistogram("Event","","",
451 AliDielectronHelper::MakeLinBinning(200,0.,20000.),
452 AliDielectronHelper::MakeLinBinning(250,0.,25000.),
453 GetRunNumbers(),
454 AliDielectronVarManager::kNTrk, AliDielectronVarManager::kMultV0C, AliDielectronVarManager::kRunNumber);
455
15f4cb18 456 histos->UserHistogram("Event","","", 110,0.,1.1, AliDielectronVarManager::kMatchEffITSTPC);
457 histos->UserHistogram("Event","","", 200,0.,20000., 110,0.,1.1,
458 AliDielectronVarManager::kNTrk, AliDielectronVarManager::kMatchEffITSTPC);
5ab640ac 459 histos->UserHistogram("Event","","", 80.,0.,80., 80.,0.,80., AliDielectronVarManager::kCentrality, AliDielectronVarManager::kCentralitySPD);
460
34107494 461
462 histos->UserHistogram("Event","","", GetRunNumbers(), AliDielectronHelper::MakeLinBinning(100,-2.,+2.),
890973b8 463 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0ArpH2);
34107494 464 histos->UserHistogram("Event","","", GetRunNumbers(), AliDielectronHelper::MakeLinBinning(100,-2.,+2.),
890973b8 465 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0CrpH2);
2ed1b6ff 466 histos->UserHistogram("Event","","", GetRunNumbers(), AliDielectronHelper::MakeLinBinning(100,-2.,+2.),
467 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kTPCrpH2uc);
90c1ae2d 468 histos->UserHistogram("Event","","", 80,0.,80., 100,-2.,+2.,
469 AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0CrpH2);
470 histos->UserHistogram("Event","","", 80,0.,80., 100,-2.,+2.,
471 AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0ArpH2);
2ed1b6ff 472 histos->UserHistogram("Event","","", 80,0.,80., 100,-2.,+2.,
473 AliDielectronVarManager::kCentrality, AliDielectronVarManager::kTPCrpH2uc);
474 histos->UserHistogram("Event","","", 80,0.,80., 100,0.,250.,
475 AliDielectronVarManager::kCentrality, AliDielectronVarManager::kTPCmagH2uc);
890973b8 476 }
477
5ab640ac 478 ////// PAIR HISTOS /////
479 if(bHistPairQA) {
480
481 //add histograms to track class
482 histos->SetReservedWords("Pair");
483 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PM)));
484
485 //add MC signal histograms to track class
0c09cae4 486 if(die->GetMCSignals()) {
487 for (Int_t i=0; i<die->GetMCSignals()->GetEntriesFast(); ++i)
488 histos->AddClass(Form("Pair_%s",die->GetMCSignals()->At(i)->GetName()));
489 }
5ab640ac 490
491 histos->UserHistogram("Pair","","", 20, 0.,10., AliDielectronVarManager::kPt);
492 histos->UserHistogram("Pair","","", 200,-1.,+1., AliDielectronVarManager::kEta);
90c1ae2d 493 histos->UserHistogram("Pair","","", 180,-1.*TMath::Pi(),TMath::Pi(),AliDielectronVarManager::kPhi);
5ab640ac 494 histos->UserHistogram("Pair","","", 180, 0.,TMath::Pi(), AliDielectronVarManager::kOpeningAngle);
495 histos->UserHistogram("Pair","","", 300, 0.,300*0.04, AliDielectronVarManager::kM);
90c1ae2d 496 histos->UserHistogram("Pair","","", 180, 0.,TMath::Pi(), AliDielectronVarManager::kPhivPair);
497 histos->UserHistogram("Pair","","", 200, 0.,1., AliDielectronVarManager::kCosPointingAngle);
498 histos->UserHistogram("Pair","","", 200, 0.,20., AliDielectronVarManager::kR);
499 histos->UserHistogram("Pair","","", 100,-1.,+1., AliDielectronVarManager::kThetaCS);
500
ab5dc7f9 501 histos->UserHistogram("Pair","","", 200,-10.,+10., 125, 0.0, 2.5, AliDielectronVarManager::kArmAlpha, AliDielectronVarManager::kArmPt);
502
90c1ae2d 503 if(hasMC) histos->UserHistogram("Pair","","",10000,-5000.5,4999.5, 300, 0.,300*0.04, AliDielectronVarManager::kPdgCode, AliDielectronVarManager::kM);
5ab640ac 504
505 histos->UserProfile("Pair","","", AliDielectronVarManager::kPt, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
506 histos->UserProfile("Pair","","", AliDielectronVarManager::kEta, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
507 histos->UserProfile("Pair","","", AliDielectronVarManager::kPhi, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
5ab640ac 508 }
509
510 ////// TRACK HISTOS /////
890973b8 511 if(bHistTrackQA) {
512
513 //add histograms to track class
514 histos->SetReservedWords("Track");
ab5dc7f9 515 // all tracks after all cuts
516 histos->AddClass(Form("Track_%s", AliDielectron::PairClassName(AliDielectron::kEv1PM)));
517 // fill legs from OS pairs
518 histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PM)));
519
5ab640ac 520 //add MC signal histograms to track class
0c09cae4 521 if(die->GetMCSignals()) {
522 for (Int_t i=0; i<die->GetMCSignals()->GetEntriesFast(); ++i)
523 histos->AddClass(Form("Track_Legs_%s",die->GetMCSignals()->At(i)->GetName()));
524 }
5ab640ac 525
34107494 526 histos->UserHistogram("Track","","", 400, 0.,20., AliDielectronVarManager::kPt);
527 histos->UserHistogram("Track","","", 200,-1.,+1., AliDielectronVarManager::kEta);
528 histos->UserHistogram("Track","","", 180,0.,TMath::TwoPi(),AliDielectronVarManager::kPhi);
529 histos->UserProfile("Track","","", AliDielectronVarManager::kPt, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
530 histos->UserProfile("Track","","", AliDielectronVarManager::kEta, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
531 histos->UserProfile("Track","","", AliDielectronVarManager::kPhi, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
5ab640ac 532 histos->UserProfile("Track","","", AliDielectronVarManager::kPt, 80,0.,80., AliDielectronVarManager::kCentrality);
533 histos->UserProfile("Track","","", AliDielectronVarManager::kEta, 80,0.,80., AliDielectronVarManager::kCentrality);
534 histos->UserProfile("Track","","", AliDielectronVarManager::kPhi, 80,0.,80., AliDielectronVarManager::kCentrality);
34107494 535
536 histos->UserHistogram("Track","","", 400,-1.,+1., AliDielectronVarManager::kImpactParXY);
537 histos->UserHistogram("Track","","", 600,-3.,+3., AliDielectronVarManager::kImpactParZ);
538 histos->UserProfile("Track","","", AliDielectronVarManager::kImpactParXY,
539 200,-1.,+1., 180,0.,TMath::TwoPi(), AliDielectronVarManager::kEta, AliDielectronVarManager::kPhi);
540 histos->UserProfile("Track","","", AliDielectronVarManager::kImpactParZ,
541 200,-1.,+1., 180,0.,TMath::TwoPi(), AliDielectronVarManager::kEta, AliDielectronVarManager::kPhi);
542 histos->UserProfile("Track","","", AliDielectronVarManager::kImpactParXY, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
543 histos->UserProfile("Track","","", AliDielectronVarManager::kImpactParZ, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
890973b8 544
545
546 // TPC
34107494 547 histos->UserHistogram("Track","","", 160,0.,160., AliDielectronVarManager::kNclsTPC);
548 histos->UserProfile("Track","","", AliDielectronVarManager::kNclsTPC, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
549 histos->UserProfile("Track","","", AliDielectronVarManager::kNclsTPC, 80, 0.,80., AliDielectronVarManager::kCentrality);
90c1ae2d 550 histos->UserProfile("Track","","", AliDielectronVarManager::kNclsTPC, 40, 0.,20., AliDielectronVarManager::kPt);
34107494 551 histos->UserProfile("Track","","", AliDielectronVarManager::kNclsTPC,
552 200,-1.,+1., 180,0.,TMath::TwoPi(), AliDielectronVarManager::kEta, AliDielectronVarManager::kPhi);
553
90c1ae2d 554
34107494 555 histos->UserHistogram("Track","","", 8,0.,8., AliDielectronVarManager::kTPCclsSegments);
556 histos->UserProfile("Track","","", AliDielectronVarManager::kTPCclsSegments, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
557 histos->UserProfile("Track","","", AliDielectronVarManager::kTPCclsSegments, 80, 0.,80., AliDielectronVarManager::kCentrality);
558 histos->UserProfile("Track","", "", AliDielectronVarManager::kTPCclsSegments,
559 200,-1.,+1., 180,0.,TMath::TwoPi(), AliDielectronVarManager::kEta, AliDielectronVarManager::kPhi);
0c09cae4 560
77e2c705 561 histos->UserHistogram("Track","","", 110,0.,1.1, AliDielectronVarManager::kNFclsTPCfCross);
562 histos->UserProfile("Track","","", AliDielectronVarManager::kNFclsTPCfCross, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
563 histos->UserProfile("Track","","", AliDielectronVarManager::kNFclsTPCfCross, 80, 0.,80., AliDielectronVarManager::kCentrality);
564 histos->UserProfile("Track","", "", AliDielectronVarManager::kNFclsTPCfCross,
0c09cae4 565 200,-1.,+1., 180,0.,TMath::TwoPi(), AliDielectronVarManager::kEta, AliDielectronVarManager::kPhi);
566
890973b8 567 // ITS
34107494 568 histos->UserHistogram("Track","","", 7,0.,7., AliDielectronVarManager::kNclsITS);
569 histos->UserProfile("Track","","", AliDielectronVarManager::kNclsITS, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
570 histos->UserProfile("Track","","", AliDielectronVarManager::kNclsITS, 80, 0.,80., AliDielectronVarManager::kCentrality);
90c1ae2d 571 histos->UserProfile("Track","","", AliDielectronVarManager::kNclsITS, 40, 0.,20., AliDielectronVarManager::kPt);
34107494 572 histos->UserProfile("Track","", "", AliDielectronVarManager::kNclsITS,
573 200,-1.,+1., 180,0.,TMath::TwoPi(), AliDielectronVarManager::kEta, AliDielectronVarManager::kPhi);
b863bc83 574
575 histos->UserHistogram("Track","","", 7,0.,7., AliDielectronVarManager::kITSLayerFirstCls);
576 histos->UserProfile("Track","", "", AliDielectronVarManager::kITSLayerFirstCls,
577 200,-1.,+1., 180,0.,TMath::TwoPi(), AliDielectronVarManager::kEta, AliDielectronVarManager::kPhi);
578
579 // TRD
580 histos->UserHistogram("Track","", "", 7, 0., 7., AliDielectronVarManager::kTRDpidQuality);
581 histos->UserHistogram("Track","", "", 105,-1.,20., AliDielectronVarManager::kTRDchi2);
ab5dc7f9 582 // TRD PID
583 // histos->UserHistogram("Track","", "", 100,0.0,5., 100,0.,6., AliDielectronVarManager::kPIn, AliDielectronVarManager::kTRDsignal);
584 histos->UserHistogram("Track","","", 100,0.,1., AliDielectronVarManager::kTRDprobEle);
585 histos->UserHistogram("Track","","", 100,0.,1., AliDielectronVarManager::kTRDprobPio);
586// histos->UserHistogram("Track","","", 100,0.,1., AliDielectronVarManager::kTRDprob2DEle);
587// histos->UserHistogram("Track","","", 100,0.,1., AliDielectronVarManager::kTRDprob2DPio);
77e2c705 588
890973b8 589 // TPC PID
34107494 590 histos->UserProfile("Track","","", AliDielectronVarManager::kTPCnSigmaEle, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
ab5dc7f9 591 // histos->UserHistogram("Track","","", GetRunNumbers(), AliDielectronHelper::MakeLinBinning(200, 0.,200.), AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kTPCSignal);
34107494 592 histos->UserHistogram("Track","","", GetRunNumbers(), AliDielectronHelper::MakeLinBinning(16, 0.,80.), AliDielectronHelper::MakeLinBinning(100, -5.,+5),
890973b8 593 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kTPCnSigmaEle);
34107494 594 histos->UserHistogram("Track","","", GetRunNumbers(), AliDielectronHelper::MakeLinBinning(20, -1.,1.), AliDielectronHelper::MakeLinBinning(100, -5.,+5),
890973b8 595 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kEta, AliDielectronVarManager::kTPCnSigmaEle);
34107494 596 histos->UserHistogram("Track","","", GetRunNumbers(), AliDielectronHelper::MakeLinBinning(18, 0.,TMath::TwoPi()), AliDielectronHelper::MakeLinBinning(100, -5.,+5),
890973b8 597 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kPhi, AliDielectronVarManager::kTPCnSigmaEle);
598
599 // TOF PID
34107494 600 histos->UserHistogram("Track","", "", 100,-10.,+10., AliDielectronVarManager::kTOFnSigmaEle);
5ab640ac 601 histos->UserHistogram("Track","", "", 250,0.0,5., 100,-10.,+10., AliDielectronVarManager::kPIn, AliDielectronVarManager::kTOFnSigmaEle);
34107494 602 histos->UserProfile("Track","","", AliDielectronVarManager::kTOFnSigmaEle, GetRunNumbers(), AliDielectronVarManager::kRunNumber, "h;-10;+10");
603 histos->UserProfile("Track","","", AliDielectronVarManager::kTOFnSigmaEle,
604 GetRunNumbers(), AliDielectronHelper::MakeLinBinning(16, 0.,80.), AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality,"h;-10;+10");
605 histos->UserProfile("Track","","", AliDielectronVarManager::kTOFnSigmaEle,
890973b8 606 AliDielectronHelper::MakeLinBinning(20, -1.,+1.), AliDielectronHelper::MakeLinBinning(18, 0.,TMath::TwoPi()),
607 AliDielectronVarManager::kEta, AliDielectronVarManager::kPhi, "h;-10;+10");
890973b8 608
423cc7ef 609 // MC pdg codes
610 if(hasMC) {
90c1ae2d 611 // histos->UserHistogram("Event","","", 25, 0., 25., AliDielectronVarManager::kNumberOfJPsisPrompt);
423cc7ef 612 histos->UserHistogram("Track","","",10000,-5000.5,4999.5, AliDielectronVarManager::kPdgCodeGrandMother);
613 histos->UserHistogram("Track","","",10000,-5000.5,4999.5, AliDielectronVarManager::kPdgCodeMother);
614 histos->UserHistogram("Track","","",10000,-5000.5,4999.5, AliDielectronVarManager::kPdgCode);
615 }
890973b8 616 }
617
ab5dc7f9 618 // TPC PID
619 if(bHistPidQA) {
620 //add histograms to track class
621 histos->SetReservedWords("Track");
622 //for (Int_t i=0; i<2; ++i) histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
623 histos->AddClass(Form("Track_%s",AliDielectron::PairClassName(AliDielectron::kEv1PM)));
624
625 TObjArray *limits = new TObjArray();
626 limits->Add(AliDielectronHelper::MakeLinBinning(100,-10., 5.));
627 limits->Add(AliDielectronHelper::MakeLinBinning(100, 0., 200.));
628 limits->Add(AliDielectronHelper::MakeLinBinning(100, 0., 4000.));
629 limits->Add(AliDielectronHelper::MakeLinBinning( 50, 0., 10.));
630 limits->Add(AliDielectronHelper::MakeLinBinning( 32, 0., 80.));
631 limits->Add(AliDielectronHelper::MakeLinBinning( 20, -1., 1.));
632 limits->Add(GetRunNumbers());
633
634 UInt_t var[7]={AliDielectronVarManager::kTPCnSigmaEle,
635 AliDielectronVarManager::kTPCsignal,
636 AliDielectronVarManager::kNacc,
637 AliDielectronVarManager::kPIn,
638 AliDielectronVarManager::kCentrality,
639 AliDielectronVarManager::kEta,
640 AliDielectronVarManager::kRunNumber};
641 histos->UserSparse("Track", 7, limits, var);
642
643 }
644
645
890973b8 646 die->SetHistogramManager(histos);
647}
648
f6a71c64 649void InitCF(AliDielectron* die, Int_t cutDefinition)
650{
651 //
652 // Setup the CF Manager
653 //
654
655 AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
656 // event variables
657 cf->AddVariable(AliDielectronVarManager::kMultV0, 125,0.,25000. );
658 cf->AddVariable(AliDielectronVarManager::kNTrk, 100,0.,20000. );
659 cf->AddVariable(AliDielectronVarManager::kNacc, 100,0., 4000. );
660 cf->AddVariable(AliDielectronVarManager::kMatchEffITSTPC, 55,0., 1.1);
661
662 die->SetCFManagerPair(cf);
663}
664
5ab640ac 665void AddMCSignals(AliDielectron *die){
666 //Do we have an MC handler?
667 if (!hasMC) return;
668
669 AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi");
670 inclusiveJpsi->SetLegPDGs(11,-11);
671 inclusiveJpsi->SetMotherPDGs(443,443);
672 inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
673 inclusiveJpsi->SetFillPureMCStep(kTRUE);
674 inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
675 inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
676 die->AddSignalMC(inclusiveJpsi);
677
678 AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi"); // prompt J/psi (not from beauty decays)
679 promptJpsi->SetLegPDGs(11,-11);
680 promptJpsi->SetMotherPDGs(443,443);
681 promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
682 promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
683 promptJpsi->SetFillPureMCStep(kTRUE);
684 promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
685 promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
686 promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
687 promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
688 die->AddSignalMC(promptJpsi);
689
690 AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi");
691 beautyJpsi->SetLegPDGs(11,-11);
692 beautyJpsi->SetMotherPDGs(443,443);
693 beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
694 beautyJpsi->SetGrandMotherPDGs(500,500);
695 beautyJpsi->SetFillPureMCStep(kTRUE);
696 beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
697 beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
698 beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
699 die->AddSignalMC(beautyJpsi);
700
701 AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi"); // embedded J/psi
702 directJpsi->SetLegPDGs(11,-11);
703 directJpsi->SetMotherPDGs(443,443);
704 directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
705 directJpsi->SetFillPureMCStep(kTRUE);
706 directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
707 directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
708 directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
709 directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
710 die->AddSignalMC(directJpsi);
90c1ae2d 711
712 AliDielectronSignalMC* gammaConversion = new AliDielectronSignalMC("gammaConversion","gamma conversions");
713 gammaConversion->SetLegPDGs(11,-11);
714 gammaConversion->SetCheckBothChargesLegs(kTRUE,kTRUE);
715 gammaConversion->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
716 gammaConversion->SetMotherPDGs(22,22);
717 gammaConversion->SetMothersRelation(AliDielectronSignalMC::kSame);
718 die->AddSignalMC(gammaConversion);
719
77e2c705 720 /*
721 AliDielectronSignalMC* gammaConversionHI = new AliDielectronSignalMC("gammaConversionHI","gamma conversions Hijing");
722 gammaConversionHI->SetLegPDGs(11,-11);
723 gammaConversionHI->SetCheckBothChargesLegs(kTRUE,kTRUE);
724 gammaConversionHI->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
725 gammaConversionHI->SetMotherSources(AliDielectronSignalMC::kNoCocktail, AliDielectronSignalMC::kNoCocktail);
726 gammaConversionHI->SetGrandMotherSources(AliDielectronSignalMC::kNoCocktail, AliDielectronSignalMC::kNoCocktail);
727 gammaConversionHI->SetMotherPDGs(22,22);
728 gammaConversionHI->SetMothersRelation(AliDielectronSignalMC::kSame);
729 die->AddSignalMC(gammaConversionHI);
730 */
731
90c1ae2d 732 AliDielectronSignalMC* conversionElePairs = new AliDielectronSignalMC("conversionEle","conversion electron pairs"); // pairs made from conversion (may be also from 2 different conversions)
5ab640ac 733 conversionElePairs->SetLegPDGs(11,-11);
734 conversionElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
735 conversionElePairs->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
736 conversionElePairs->SetMotherPDGs(22,22);
423cc7ef 737 die->AddSignalMC(conversionElePairs);
5ab640ac 738
90c1ae2d 739 AliDielectronSignalMC* inclJpsiElePairs = new AliDielectronSignalMC("inclJpsiEle","Inclusive J/psi electron pairs"); // pairs made from Jpsi electron + any different electron (no real jpsis)
740 inclJpsiElePairs->SetLegPDGs(11,-11);
741 inclJpsiElePairs->SetMotherPDGs(443,0);
742 inclJpsiElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
743 inclJpsiElePairs->SetMothersRelation(AliDielectronSignalMC::kDifferent);
744 die->AddSignalMC(inclJpsiElePairs);
745
5ab640ac 746 // prompt J/psi radiative channel
747 AliDielectronSignalMC* promptJpsiRad = new AliDielectronSignalMC("promptJpsiRad","Prompt J/psi Radiative"); // prompt J/psi (not from beauty decays)
748 promptJpsiRad->SetLegPDGs(11,-11);
749 promptJpsiRad->SetMotherPDGs(443,443);
750 promptJpsiRad->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
751 promptJpsiRad->SetMothersRelation(AliDielectronSignalMC::kSame);
752 promptJpsiRad->SetFillPureMCStep(kTRUE);
753 promptJpsiRad->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
754 promptJpsiRad->SetCheckBothChargesLegs(kTRUE,kTRUE);
755 promptJpsiRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
756 promptJpsiRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
757 promptJpsiRad->SetJpsiRadiative(AliDielectronSignalMC::kIsRadiative);
423cc7ef 758 // die->AddSignalMC(promptJpsiRad);
5ab640ac 759
760 // prompt J/psi Non radiative channel
761 AliDielectronSignalMC* promptJpsiNonRad = new AliDielectronSignalMC("promptJpsiNonRad","Prompt J/psi non-Radiative"); // prompt J/psi (not from beauty decays)
762 promptJpsiNonRad->SetLegPDGs(11,-11);
763 promptJpsiNonRad->SetMotherPDGs(443,443);
764 promptJpsiNonRad->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
765 promptJpsiNonRad->SetMothersRelation(AliDielectronSignalMC::kSame);
766 promptJpsiNonRad->SetFillPureMCStep(kTRUE);
767 promptJpsiNonRad->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
768 promptJpsiNonRad->SetCheckBothChargesLegs(kTRUE,kTRUE);
769 promptJpsiNonRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
770 promptJpsiNonRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
771 promptJpsiNonRad->SetJpsiRadiative(AliDielectronSignalMC::kIsNotRadiative);
423cc7ef 772 // die->AddSignalMC(promptJpsiNonRad);
5ab640ac 773}
774
775
890973b8 776void SetEtaCorrection()
777{
778 if (AliDielectronPID::GetEtaCorrFunction()) return;
779
780 TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root";
781 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
782 if (trainRoot.IsNull()) etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
783 if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
784 Error("ConfigPbPb","Eta map not found: %s",etaMap.Data());
785 return;
786 }
787
788 TFile f(etaMap.Data());
789 if (!f.IsOpen()) return;
790 TList *keys=f.GetListOfKeys();
791
792 for (Int_t i=0; i<keys->GetEntries(); ++i){
793 TString kName=keys->At(i)->GetName();
794 TPRegexp reg(kName);
795 if (reg.MatchB(list)){
796 printf(" Using Eta Correction Function: %s\n",kName.Data());
797 AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
798 }
799 }
800}
801
802TVectorD *GetRunNumbers() {
803
804 Double_t runLHC10h[] = { // all good runs based on RCT 29.Mai
805 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
806 };
807
808 Double_t runLHC11h[] = { // all good runs based on RCT 29.Mai
809 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
810 };
811
812 // selection via environement variable (works only for gsi trains)
813
814
815 if(list.Contains("LHC10h") || list.Contains("LHC11a10")) {
816 Int_t size = (int) (sizeof(runLHC10h)/sizeof(Double_t));
817 TVectorD *vec = new TVectorD(size+1);
818
819 (*vec)[size] = runLHC10h[0] + 1;
820 for (int i = 0; i < size; i++) {
821 (*vec)[i] = runLHC10h[size-1-i];
822 }
823 // vec->Print("");
824 return vec;
825 }
826
827 if( list.Contains("LHC11h") || list.Contains("LHC12a17") ) {
828
829 Int_t size = (int) (sizeof(runLHC11h)/sizeof(Double_t));
830 TVectorD *vec = new TVectorD(size+1);
831
832 (*vec)[size] = runLHC11h[0] + 1;
833 for (int i = 0; i < size; i++) {
834 (*vec)[i] = runLHC11h[size-1-i];
835 }
836 // vec->Print("");
837 return vec;
838 }
839
840 TVectorD *vec = new TVectorD(2);
841 (*vec)[0] = 0;
0c09cae4 842 (*vec)[1] = 1;
890973b8 843 return vec;
844
845}