1 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
2 void AddQAHistsPID(AliDielectron *die);
3 void AddQAHistsEP(AliDielectron *die);
4 void AddHistsEleEff(AliDielectron *die);
6 void InitCF(AliDielectron* die, Int_t cutDefinition);
7 void InitHF(AliDielectron* die, Int_t cutDefinition);
9 void SetupEventCuts(AliDielectron *die, ULong64_t triggers, Int_t cutDefinition);
10 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
11 void SetupV0Cuts( AliDielectron *die, Int_t cutDefinition);
12 void SetupPairCuts( AliDielectron *die, Int_t cutDefinition);
14 void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition);
15 void ConfigBgrd( AliDielectron *die, Int_t cutDefinition);
17 void AddMCSignals(AliDielectron *die, Int_t cutDefinition);
18 void SetEtaCorrection(AliDielectron *die);
19 TVectorD *GetRunNumbers2011();
20 TVectorD *GetPDGcodes();
21 TVectorD *GetDeltaPhiBins();
23 TString names=("Event;PIDqa;Flow;avgPt;Rec;TPC;TOF;TRD;Ionut;TPC-TOF-TRD;NOPID;LegEff;SysPt;SysEta;SysEle;SysPro;SysSPD;SysMC;SysMCele");
24 enum { kEvent, kPIDqa, kFlow, kAvgPt, kRec, kTPC, kTOF, kTRD, kIonut, kTPCTOFTRD, kNoPID, kLegEff, kSysPt, kSysEta, kSysEle, kSysPro, kSysSPD, kSysMC,kSysMCele, kPIDQA };
26 TObjArray *arrNames=names.Tokenize(";");
27 const Int_t nDie=arrNames->GetEntries();
30 TString list = gSystem->Getenv("LIST");
32 AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, Bool_t hasMC=kFALSE, ULong64_t triggers=AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB)
35 // Setup the instance of AliDielectron
39 TString trainRoot = gSystem->Getenv("TRAIN_ROOT");
40 Bool_t isGSItrain = (trainRoot.IsNull()?kFALSE:kTRUE);
43 if( list.IsNull()) list=prod;
44 if( list.Contains("LHC10h") || list.Contains("LHC11h") ) hasMC=kFALSE;
45 if( list.Contains("LHC11a10") || list.Contains("LHC12a17") || list.Contains("LHC13c7")) hasMC=kTRUE;
49 isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
51 // switch configurations ON and OFF
52 if(hasMC) { // MONTE CARLO
53 switch(cutDefinition) {
54 case kEvent: /* */ break; // event quantities (mult, ep, trigger, ...)
55 // case kPIDqa: /* */ break; // post calibration and validation of TPC PID
56 // case kRec: /* */ break; // to calculate partial efficiencies, in particular the geom. acceptance
57 // case kLegEff: /* */ break; // single electron efficiency calculation
58 case kAvgPt: /* */ break; // mean pt analysis
59 // case kTPC: /* */ break;
60 // case kTOF: /* */ break;
61 // case kTRD: /* */ break;
62 // case kIonut: /* */ break;
63 // case kSysMC: /* */ break;
64 // case kSysMCele: /* */ break;
65 // case kNoPID: /* */ break;
68 } else { // COLLISION DATA
69 switch(cutDefinition) {
70 case kEvent: /* */ break; // event quantities (mult, ep, trigger, ...)
71 //case kPIDqa: /* */ break; // for post calibration and validation of TPC PID
72 // case kFlow: /* */ break; // flow calculation
73 // case kNoPID: /* */ break;
74 // case kTPC: /* */ break;
75 // case kTOF: /* */ break;
76 // case kTRD: /* */ break;
77 // case kIonut: /* */ break;
78 // case kTPCTOFTRD: /* */ break;
79 case kAvgPt: /* */ break;
80 // case kSysPt: /* */ break;
81 // case kSysEta: /* */ break;
82 // case kSysEle: /* */ break;
83 // case kSysPro: /* */ break;
84 // case kSysSPD: /* */ break;
90 TString name=Form("%02d",cutDefinition);
91 if (cutDefinition<arrNames->GetEntriesFast()) name=arrNames->At(cutDefinition)->GetName();
92 printf(" Adding %s%s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?" MC":""),name.Data(),list.Data());
95 AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("%s",name.Data()));
98 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
99 SetupEventCuts(die,triggers,cutDefinition);
100 SetupTrackCuts(die,cutDefinition);
101 SetupV0Cuts(die,cutDefinition);
102 SetupPairCuts(die,cutDefinition);
104 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MISC vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
105 // Monte Carlo Signals
106 if(hasMC) AddMCSignals(die, cutDefinition);
107 // PID post calibartion
108 if(cutDefinition!=kEvent) SetEtaCorrection(die); ///////////////////ATTENTION
111 ConfigBgrd(die,cutDefinition);
112 // tpc event plane configuration
114 ConfigEvtPlane(die,cutDefinition);
115 // prefilter settings
116 if(cutDefinition==kEvent || cutDefinition==kNoPID || cutDefinition==kPIDqa || cutDefinition==kLegEff)
119 die->SetPreFilterAllSigns();
120 //die->SetPreFilterUnlikeOnly();
121 // load single electron effieciency map ATTENTION
122 if(!hasMC && 0) AliDielectronVarManager::InitEffMap("/home/aliceexp/jbook/gsi-train-trunk/jbook_jpsi/effMap.root");
123 if(cutDefinition==kAvgPt) AliDielectronVarManager::InitEffMap("/sw/alice/gsi-svn/testtrain/effMap.root");
125 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv OUTPUT vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
127 InitHistograms(die,cutDefinition);
128 // histogram grid setup
129 InitHF(die,cutDefinition);
130 // CF container setup
131 InitCF(die,cutDefinition);
139 //______________________________________________________________________________________
140 void SetupEventCuts(AliDielectron *die, ULong64_t triggers, Int_t cutDefinition)
143 // Setup the event cuts
146 // trigger specific centrality cuts (reject trigger inefficiencies)
147 Double_t minCent=0.0, maxCent=100.;
148 if(!die->GetHasMC()) {
150 // case AliVEvent::kCentral: minCent= 0.; maxCent=10.; break; //0-9
151 // case AliVEvent::kSemiCentral: minCent=10.; maxCent=50.; break; //12-53
152 // case AliVEvent::kMB: minCent=10.; maxCent=90.; break;
153 default: minCent= 0.; maxCent=90.; break;
156 // if(cutDefinition >= kEtaGap01) {minCent=20.; maxCent=50.;} // v2 analysis
157 if(cutDefinition == kSysMC) {minCent=0.; maxCent=50.;}
158 if(cutDefinition == kSysMCele) {minCent=0.; maxCent=50.;}
160 // VZERO multiplicity vs. number ob global tracks cut
161 TF1 *fMean = new TF1("fMean", "pol1", 0,25e+3);
162 fMean->SetParameters(691.633, 1.4892);
163 TF1 *fSigma = new TF1("fSigma","[0]+sqrt([1]*x+[2])",0,25e+3);
164 fSigma->SetParameters(-83.6599, 36.7677, 69530.7);
166 AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("vertex","vertex");
167 if(!isESD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny);
168 eventCuts->SetRequireVertex();
169 eventCuts->SetMinVtxContributors(1);
170 eventCuts->SetVertexZ(-10.,+10.);
171 eventCuts->SetCentralityRange(minCent,maxCent);
172 // eventCuts->SetCutOnV0MultipicityNTrks(fMean, fSigma, 4.0);
173 // eventCuts->SetRunRejection(AliDielectronHelper::MakeArbitraryBinning("170592,170593,170594"));
175 die->GetEventFilter().AddCuts(eventCuts);
179 //______________________________________________________________________________________
180 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
183 // Setup the track cuts
185 Bool_t hasMC=die->GetHasMC();
188 // die->GetTrackFilter().AddCuts(cuts);
190 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv FILTER CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
191 // AOD track filter (needs to be first cut to speed up)
192 AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("TrkFilter","TrkFilter");
193 trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqual);
194 // trkFilter->SetMinNCrossedRowsOverFindable(0.6);
196 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv TRACK CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
197 AliDielectronVarCuts *varAccCuts = new AliDielectronVarCuts("acc","acc");
198 AliDielectronCutGroup *grpRecCuts = new AliDielectronCutGroup("rec","rec",AliDielectronCutGroup::kCompAND);
199 AliDielectronVarCuts *varRecCuts = new AliDielectronVarCuts("VarRecCuts","VarRecCuts");
200 AliDielectronTrackCuts *trkRecCuts = new AliDielectronTrackCuts("TrkRecCuts","TrkRecCuts");
202 // config specific cuts
203 switch(cutDefinition) {
205 varAccCuts->AddCut(AliDielectronVarManager::kPt, 0.85, 1e30);
206 varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7., 8.0);
217 varAccCuts->AddCut(AliDielectronVarManager::kPt, 0.85, 1e30); ///ATTENTION
218 varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.8, 0.8); ////ATTENTION
220 varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7., 8.0);
221 trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
222 //if(hasMC) varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
228 varAccCuts->AddCut(AliDielectronVarManager::kPt, 0.95, 1e30); //0.8
229 varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
230 varRecCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0);
231 trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 7); // ITS-3 = 1+2+4
233 ///////////////////////////////////////////////////////////////////////////////////////////// systematics
235 varAccCuts->AddCut(AliDielectronVarManager::kPt, 1.1, 20./*1e30*/); ///ATTENTION
236 varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.8, 0.8); ////ATTENTION
237 varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7., 8.0);
238 trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
241 varAccCuts->AddCut(AliDielectronVarManager::kPt, 0.85, 20./*1e30*/); ///ATTENTION
242 varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9); ////ATTENTION
243 varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7., 8.0);
244 trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
248 varAccCuts->AddCut(AliDielectronVarManager::kPt, 0.85, 20./*1e30*/); ///ATTENTION
249 varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.8, 0.8); ////ATTENTION
250 varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7., 8.0);
251 trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
254 varAccCuts->AddCut(AliDielectronVarManager::kPt, 0.85, 20./*1e30*/); ///ATTENTION
255 varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.8, 0.8); ////ATTENTION
256 varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7., 8.0);
257 trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 1); // SPD any
260 varAccCuts->AddCut(AliDielectronVarManager::kPt, 0.85, 20./*1e30*/); ///ATTENTION
261 varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9); ////ATTENTION
262 varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7., 8.0);
263 trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
267 // standrad reconstruction cuts
268 varRecCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
269 varRecCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
270 varRecCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
271 varRecCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
272 // varRecCuts->AddCut(AliDielectronVarManager::kV0Index0, 0.0);
273 trkRecCuts->SetRequireITSRefit(kTRUE);
274 trkRecCuts->SetRequireTPCRefit(kTRUE);
276 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
277 AliDielectronCutGroup *grpPIDCuts = new AliDielectronCutGroup("PID","PID",AliDielectronCutGroup::kCompAND);
278 AliDielectronVarCuts *pidSelCuts = new AliDielectronVarCuts("selPIDCuts","selPIDCuts");
279 pidSelCuts->AddCut(AliDielectronVarManager::kTRDpidQuality, 4.0, 6.0);
280 pidSelCuts->AddCut(AliDielectronVarManager::kTRDchi2, 0.0, 2.0);
281 AliDielectronVarCuts *pidVarCuts = new AliDielectronVarCuts("varPIDCuts","varPIDCuts");
282 AliDielectronVarCuts *pidMCCuts = new AliDielectronVarCuts("mcPIDCuts","mcPIDCuts");
283 AliDielectronPID *pidCuts = new AliDielectronPID("PIDCuts","PIDCuts");
285 switch(cutDefinition) {
287 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-10.,10.);
290 pidVarCuts->AddCut(AliDielectronVarManager::kTOFbeta, 0.2, 0.9, kTRUE);
291 pidCuts->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,
292 AliDielectronPID::kIfAvailable);
294 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,4.);
295 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,4.0,0.,0.,kTRUE);
296 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
299 pidCuts->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.95,1.,pidSelCuts,
300 kFALSE, AliDielectronPID::kIfAvailable);
306 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5.,3.);
307 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
308 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
309 // pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.65,3.0,-0.3,+0.3,kFALSE,
310 // AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
311 // pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.4,3.0,-0.1,+0.1,kFALSE,
312 // AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
313 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,4.0,0.,0.,kTRUE);
314 // tof heavy particle exclusion
315 // pidVarCuts->AddCut(AliDielectronVarManager::kTOFbeta, 0.3, 0.7, kTRUE);
316 //pidCuts->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,
317 // AliDielectronPID::kIfAvailable);
320 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.3.,3.);
321 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
322 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
323 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.65,3.0,-0.3,+0.3,kFALSE,
324 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
325 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.4,3.0,-0.1,+0.1,kFALSE,
326 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
327 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,4.0,0.,0.,kTRUE);
328 pidVarCuts->AddCut(AliDielectronVarManager::kTOFbeta, 0.2, 0.9, kTRUE);
329 pidCuts->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,
330 AliDielectronPID::kIfAvailable);
331 pidCuts->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.95,1.,pidSelCuts,
332 kFALSE, AliDielectronPID::kIfAvailable);
334 ///////////////////////////////////////////////////////////////////////////////////////////// systematics
338 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5.,3.);
339 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
340 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
341 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,4.0,0.,0.,kTRUE);
344 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,+0.7.,3.);
345 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,4.0,0.,0.,kTRUE);
348 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5.,3.);
349 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
350 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
351 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
354 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5.,3.);
355 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
356 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
357 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
360 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5.,3.);
361 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
362 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
363 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,4.0,0.,0.,kTRUE);
368 if(cutDefinition==kLegEff && 0) {
369 pidMCCuts->SetCutType(AliDielectronVarCuts::kAny);//only apply any of the two cuts
370 pidMCCuts->AddCut(AliDielectronVarManager::kPdgCode,-11.5,-10.5 );
371 pidMCCuts->AddCut(AliDielectronVarManager::kPdgCode,10.5,11.5 );
375 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv TENDER CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
376 // exclude conversion electrons selected by the tender
377 AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
378 noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
380 // activate the cut sets (order might be CPU timewise important)
381 switch(cutDefinition) {
384 die->GetTrackFilter().AddCuts(varAccCuts);
385 grpRecCuts->AddCut(trkRecCuts);
386 grpRecCuts->AddCut(varRecCuts);
387 die->GetTrackFilter().AddCuts(grpRecCuts);
388 /// NOTE should be changed to get ride of itsfirst but what about the pt cut?????????
389 // die->GetTrackFilter().AddCuts(varRecCuts);
392 die->GetTrackFilter().AddCuts(varAccCuts);
393 grpRecCuts->AddCut(trkRecCuts);
394 grpRecCuts->AddCut(varRecCuts);
395 die->GetTrackFilter().AddCuts(grpRecCuts);
413 die->GetTrackFilter().AddCuts(varAccCuts);
414 grpRecCuts->AddCut(trkRecCuts);
415 grpRecCuts->AddCut(varRecCuts);
416 die->GetTrackFilter().AddCuts(grpRecCuts);
417 grpPIDCuts->AddCut(pidCuts);
418 grpPIDCuts->AddCut(pidVarCuts);
419 grpPIDCuts->AddCut(pidMCCuts);
420 die->GetTrackFilter().AddCuts(grpPIDCuts);
421 // if(!isESD) cuts->AddCut(trkFilter);
422 //cuts->AddCut(noconv);
428 //______________________________________________________________________________________
429 void SetupV0Cuts(AliDielectron *die, Int_t cutDefinition)
435 switch(cutDefinition) {
437 case kLegEff: return;
442 if(cutDefinition==kPIDqa) {
447 AliDielectronV0Cuts *gammaV0Cuts = new AliDielectronV0Cuts("V0","V0");
448 gammaV0Cuts->SetV0finder(AliDielectronV0Cuts::kOnTheFly);
449 gammaV0Cuts->SetPdgCodes(22,11,11);
450 gammaV0Cuts->SetDefaultPID(defPID);
451 gammaV0Cuts->AddCut(AliDielectronVarManager::kCosPointingAngle, TMath::Cos(0.05), 1.0, kFALSE); //0.02 -- 0.05
452 gammaV0Cuts->AddCut(AliDielectronVarManager::kArmPt, 0.0, 0.05, kFALSE);
453 gammaV0Cuts->AddCut(AliDielectronVarManager::kArmAlpha, -0.35, 0.35, kFALSE);
454 gammaV0Cuts->AddCut(AliDielectronVarManager::kM, 0.0, 0.1, kFALSE); //0.05 -- 0.1
455 gammaV0Cuts->AddCut(AliDielectronVarManager::kChi2NDF, 0.0, 10.0, kFALSE);
456 gammaV0Cuts->AddCut(AliDielectronVarManager::kLegDist, 0.0, 0.25, kFALSE);
457 gammaV0Cuts->AddCut(AliDielectronVarManager::kR, 3.0, 90.0, kFALSE);
458 gammaV0Cuts->AddCut(AliDielectronVarManager::kPsiPair, 0.0, 0.2, kFALSE); //0.05 -- 0.2
459 // gammaV0Cuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.1, kFALSE);
460 gammaV0Cuts->SetExcludeTracks(bRej);
461 gammaV0Cuts->Print();
463 // const Double_t |cutAlphaG| < 0.35; && const Double_t cutQTG < 0.05;
464 // const Double_t |cutAlphaG2|[2] = {0.6, 0.8}; && const Double_t cutQTG2 < 0.04;
467 // ((AliDielectronCutGroup*)cuts)->AddCut(gammaV0Cuts);
469 die->GetTrackFilter().AddCuts(gammaV0Cuts);
472 //______________________________________________________________________________________
473 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
476 // Setup the pair cuts
478 Bool_t hasMC=die->GetHasMC();
480 // rap and mass rejection
481 Double_t gCut=0.05, yCut=0.9, eCut=0.01;
482 switch(cutDefinition) {
483 case kEvent: yCut=0.0; break;
485 case kFlow: yCut=0.8; break;
486 case kRec: yCut=0.9; break;
488 case kTPC: yCut=0.9; break;
489 case kTOF: yCut=0.9; break;
490 case kTRD: yCut=0.8; break;
491 case kIonut: yCut=0.8; break;
492 case kLegEff: return;
493 case kTPCTOFTRD: yCut=0.8; break;
494 case kAvgPt: yCut=0.8; break;
495 case kSysMC: yCut=0.9; break;
496 case kSysMCele: yCut=0.8; break;
497 case kSysEta: yCut=0.9; break;
503 // default: gCut=0.05; // default
507 //if(hasMC) yCut=0.9;
509 // rapidity selection
510 AliDielectronVarCuts *rapCut=new AliDielectronVarCuts(Form("|Y|<%.1f",yCut),Form("|Y|<%.1f",yCut));
511 rapCut->AddCut(AliDielectronVarManager::kY,-1.*yCut,yCut);
512 die->GetPairFilter().AddCuts(rapCut);
515 AliDielectronVarCuts *gammaCuts = new AliDielectronVarCuts("GammaCuts","GammaCuts");
516 gammaCuts->AddCut(AliDielectronVarManager::kM, 0.0, gCut);
517 die->GetPairPreFilter().AddCuts(gammaCuts);
519 // pair efficiency cut
520 if(cutDefinition==kAvgPt && !hasMC) {
521 AliDielectronVarCuts *effCut=new AliDielectronVarCuts(Form("(Axe)>%.2f",eCut),Form("(Axe)>%.2f",eCut));
522 effCut->AddCut(AliDielectronVarManager::kPairEff,0.0,eCut,kTRUE);
523 die->GetPairFilter().AddCuts(effCut);
526 // random signal rejection
527 AliDielectronCutGroup *grpRNDMCuts = new AliDielectronCutGroup("RNDM","RNDM",AliDielectronCutGroup::kCompOR);
528 AliDielectronVarCuts *exclCutCEN=new AliDielectronVarCuts("exclCEN","exclCEN");
529 exclCutCEN->SetCutType(AliDielectronVarCuts::kAll); // all criteria need to be fullfilled
530 exclCutCEN->AddCut(AliDielectronVarManager::kRndmPair,0.0,1./40);
531 exclCutCEN->AddCut(AliDielectronVarManager::kPdgCode,443);
532 exclCutCEN->AddCut(AliDielectronVarManager::kCentrality,0.,10.);
533 AliDielectronVarCuts *exclCutSEMI=new AliDielectronVarCuts("exclSEMI","exclSEMI");
534 exclCutSEMI->SetCutType(AliDielectronVarCuts::kAll); // all criteria need to be fullfilled
535 exclCutSEMI->AddCut(AliDielectronVarManager::kRndmPair,0.0,1./20);
536 exclCutSEMI->AddCut(AliDielectronVarManager::kPdgCode,443);
537 exclCutSEMI->AddCut(AliDielectronVarManager::kCentrality,10.,90.);
538 AliDielectronVarCuts *inclCut=new AliDielectronVarCuts("incl","incl");
539 inclCut->AddCut(AliDielectronVarManager::kPdgCode,443,443,kTRUE);
540 grpRNDMCuts->AddCut(exclCutCEN);
541 grpRNDMCuts->AddCut(exclCutSEMI);
542 grpRNDMCuts->AddCut(inclCut);
543 if(hasMC && cutDefinition==kIonut && 0) die->GetPairFilter().AddCuts(grpRNDMCuts); //ATTENTION
547 //______________________________________________________________________________________
548 void ConfigBgrd(AliDielectron *die, Int_t cutDefinition)
551 // Configurate the background estimators
555 switch(cutDefinition) {
564 // add track rotations
565 AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
566 rot->SetIterations(10);
567 rot->SetConeAnglePhi(TMath::Pi());
568 rot->SetStartAnglePhi(TMath::Pi());
569 // die->SetTrackRotator(rot);
572 AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
573 switch(cutDefinition) {
575 // mix->AddVariable(AliDielectronVarManager::kZvPrim, 20, -10., 10.);
576 // mix->AddVariable(AliDielectronVarManager::kCentrality, 36, 0., 90.);
577 // mix->AddVariable(AliDielectronVarManager::kv0ACrpH2, 10, 0., TMath::Pi());
580 mix->AddVariable(AliDielectronVarManager::kZvPrim, "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
581 mix->AddVariable(AliDielectronVarManager::kCentrality, 9, 0.,90.);
582 mix->AddVariable(AliDielectronVarManager::kTPCrpH2, 10, TMath::Pi()/-2, TMath::Pi()/2); // max res: 10%->10bins // 8bins
583 // mix->AddVariable(AliDielectronVarManager::kTPCmagH2, "0.,20.,50.,80.,110.,150.,500.");
586 mix->SetSkipFirstEvent(kTRUE); // needed for flow analysis
587 mix->SetMixType(AliDielectronMixingHandler::kAll);
589 die->SetMixingHandler(mix);
593 //______________________________________________________________________________________
594 void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition)
597 // Configurate the TPC event plane
600 switch(cutDefinition) {
604 // case kRec: // TOTHINK: might be needed when checking efficiencies versus dPhi
610 // switch(cutDefinition) {
611 // case kEtaGap01: gGap=0.1; break;
612 // case kEtaGap02: gGap=0.2; break;
613 // case kEtaGap03: gGap=0.3; break;
614 // case kEtaGap04: gGap=0.4; break;
615 // case kEtaGap05: gGap=0.5; break;
616 // default: gGap=0.0;
618 // eta gap in tpc event plane
619 // AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap");
620 // etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE);
621 // die->GetEventPlanePreFilter().AddCuts(etaGap);
623 AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
624 poi->AddCut(AliDielectronVarManager::kM,2.92,3.20); // particles of interest, jpsi mass window
625 die->GetEventPlanePOIPreFilter().AddCuts(poi);
627 // die->SetLikeSignSubEvents();
628 die->SetPreFilterEventPlane();
631 //______________________________________________________________________________________
632 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
635 // Initialise the histograms
637 Bool_t hasMC=die->GetHasMC();
639 // booleans for histo selection
640 Bool_t bHistTrackQA=kFALSE, bHistEvts=kFALSE, bHistPair=kFALSE, bHistTrk=kFALSE, bHistPairME=kFALSE, bHistFlow=kFALSE, bHistFlowQA=kFALSE, bHistPID=kFALSE;
641 switch (cutDefinition) {
642 case kEvent: bHistEvts=kTRUE; break;
643 case kPIDqa: bHistTrk=kTRUE; break;
644 case kNoPID: bHistTrk=kTRUE; break;
645 case kRec: /* */ break;
647 case kTOF: //bHistEvts=kTRUE; //bHistFlow=kTRUE;
648 case kTRD: ///bHistEvts=kTRUE; //bHistFlow=kTRUE;
650 case kIonut: ///*bHistEvts=kTRUE;*/ bHistPair=kTRUE; break; //bHistPairME=kTRUE;
651 case kTPCTOFTRD: bHistPair=kTRUE; bHistTrk=kTRUE; bHistPID=kTRUE; break; //bHistPairME=kTRUE;
652 case kSysMCele: bHistPair=kTRUE; bHistPID=kFALSE; break; //bHistPairME=kTRUE;
658 //Setup histogram Manager
659 AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
660 die->SetHistogramManager(histos);
662 //Initialise histogram classes
663 histos->SetReservedWords("Track;Pair");
665 //add histograms to event class
666 histos->AddClass("Event");
667 Int_t maxMixBins = (die->GetMixingHandler() ? die->GetMixingHandler()->GetNumberOfBins() : 0);
668 histos->UserHistogram("Event","","", 100, 0.0, 100.0, AliDielectronVarManager::kCentrality);
669 if(die->GetMixingHandler() )
670 histos->UserHistogram("Event","","", maxMixBins, 0, maxMixBins, AliDielectronVarManager::kMixingBin);
671 // candidates monitoring
672 histos->UserProfile("Event","","", AliDielectronVarManager::kTracks, GetRunNumbers2011(), AliDielectronVarManager::kRunNumber);
673 histos->UserProfile("Event","","", AliDielectronVarManager::kPairs, GetRunNumbers2011(), AliDielectronVarManager::kRunNumber);
676 //event plane histograms
677 if(cutDefinition==kFlow) {
678 if(!hasMC) AddQAHistsEP(die);
679 histos->UserHistogram("Pair","","", 100,-1*TMath::Pi(),+1*TMath::Pi(), AliDielectronVarManager::kDeltaPhiv0ArpH2);
680 histos->UserHistogram("Pair","","", 100,-1*TMath::Pi(),+1*TMath::Pi(), AliDielectronVarManager::kDeltaPhiv0CrpH2);
681 histos->UserHistogram("Pair","","", 100,-1*TMath::Pi(),+1*TMath::Pi(), AliDielectronVarManager::kDeltaPhiTPCrpH2);
684 ////// EVENT HISTOS /////
686 histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronVarManager::kRunNumber);
687 histos->UserHistogram("Event","","", 300,-15.,15., AliDielectronVarManager::kZvPrim);
688 // histos->UserHistogram("Event","","", 300,0.,15000., AliDielectronVarManager::kRefMult);
689 histos->UserHistogram("Event","","", 300,0.,3000., AliDielectronVarManager::kRefMultTPConly);
691 // histos->UserHistogram("Event","","", 100,0.,100., AliDielectronVarManager::kRefMultTPConly);
692 histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronHelper::MakeLinBinning(3000, 0., 3000.),
693 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kRefMultTPConly);
694 histos->UserHistogram("Event","","", AliDielectronHelper::MakeLinBinning(90, 0., 90.), AliDielectronHelper::MakeLinBinning(3000, 0., 3000.),
695 AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRefMultTPConly);
696 histos->UserProfile( "Event","","", AliDielectronVarManager::kRefMultTPConly, 90, 0., 90., AliDielectronVarManager::kCentrality);
697 histos->UserProfile( "Event","","", AliDielectronVarManager::kNVtxContrib, 90, 0., 90., AliDielectronVarManager::kCentrality);
699 // event plane histograms
700 if(!hasMC) AddQAHistsEP(die);
701 // trigger histograms
703 histos->UserHistogram("Event","","", 29,0.,29., AliDielectronVarManager::kTriggerInclONL);
704 histos->UserHistogram("Event","","", 29,0.,29., AliDielectronVarManager::kTriggerInclOFF);
705 histos->UserHistogram("Event","","", 29,0.,29., AliDielectronVarManager::kTriggerExclOFF);
706 histos->UserHistogram("Event","","", 100,0.,100.,29,0.,29.,
707 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTriggerInclONL);
708 histos->UserHistogram("Event","","", 100,0.,100.,29,0.,29.,
709 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTriggerExclOFF);
710 histos->UserHistogram("Event","","", 300,0.,3000.,29,0.,29.,
711 AliDielectronVarManager::kRefMultTPConly,AliDielectronVarManager::kTriggerExclOFF);
712 histos->UserHistogram("Event","","", 300,0.,3000.,29,0.,29.,
713 AliDielectronVarManager::kRefMultTPConly,AliDielectronVarManager::kTriggerInclOFF);
718 ///// PAIR HISTOS /////
722 // to fill also mixed event histograms loop until 7 or 10
723 for (Int_t i=0; i<(bHistPairME ? 8 : 3); ++i){
724 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
726 //add MC signal histograms to pair class
727 if(die->GetMCSignals()) {
728 for (Int_t i=0; i<die->GetMCSignals()->GetEntriesFast(); ++i) {
729 histos->AddClass(Form("Pair_%s",die->GetMCSignals()->At(i)->GetName()));
730 // histos->AddClass(Form("Pair_%s_MCtruth",die->GetMCSignals()->At(i)->GetName()));
734 ///// Pair classes /////
735 histos->UserHistogram("Pair","","", 125,.0,125*0.04, AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
736 histos->UserHistogram("Pair","","", 100,-1.,1., AliDielectronVarManager::kY);
737 histos->UserHistogram("Pair","","", 400,0,20., AliDielectronVarManager::kPt);
738 histos->UserHistogram("Pair","","", 100,0.,3.15, AliDielectronVarManager::kOpeningAngle);
739 histos->UserHistogram("Pair","","", 100,0.,20, AliDielectronVarManager::kChi2NDF);
740 histos->UserHistogram("Pair","","", 100,0.,3.15, AliDielectronVarManager::kPsiPair);
741 histos->UserHistogram("Pair","","", 200,0.,100., AliDielectronVarManager::kR);
742 histos->UserHistogram("Pair","","", 50,0.,5., AliDielectronVarManager::kLegDist);
743 histos->UserHistogram("Pair","","", 50,0.,5., AliDielectronVarManager::kLegDistXY);
744 histos->UserHistogram("Pair","","", 210,-1.05,1.05, 100,0.,2.5,
745 AliDielectronVarManager::kArmAlpha,AliDielectronVarManager::kArmPt);
747 if(!hasMC && die->GetMixingHandler() )
748 histos->UserHistogram("Pair","","", maxMixBins, 0, maxMixBins, AliDielectronVarManager::kMixingBin);
750 histos->UserHistogram("Pair","","", 100,.0,1., AliDielectronVarManager::kRndmPair);
751 // histos->UserHistogram("Pair","","", GetPDGcodes(), AliDielectronVarManager::kPdgCode);
752 // histos->UserHistogram("Pair","","", GetPDGcodes(), AliDielectronVarManager::kPdgCodeMother);
753 // histos->UserHistogram("Pair","","", GetPDGcodes(), AliDielectronVarManager::kPdgCodeGrandMother);
758 ///// TRACK HISTOS /////
761 //legs from pair (fill SE)
762 for (Int_t i=1; i<2; ++i){
763 if(bHistPair) histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
765 //to fill also track info from 2nd event loop until 2
766 // for (Int_t i=0; i<2; ++i) histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
767 histos->AddClass(Form("Track_%s", AliDielectron::PairClassName(AliDielectron::kEv1PM)));
769 // PID post calibration
770 if(cutDefinition==kPIDqa) AddQAHistsPID(die);
773 // histos->UserHistogram("Track","","", 500,-1.,1., AliDielectronVarManager::kImpactParXY);
774 // histos->UserHistogram("Track","","", 600,-3.,3., AliDielectronVarManager::kImpactParZ);
776 histos->UserHistogram("Track","","", 400,0,20., AliDielectronVarManager::kPt);
777 histos->UserHistogram("Track","","", 200,-1,1, 200,0,6.285, AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
779 // histos->UserHistogram("Track","","", 160,-0.5,159.5, AliDielectronVarManager::kNclsTPC);
780 // histos->UserHistogram("Track","","", 160,-0.5,159.5, AliDielectronVarManager::kTPCsignalN);
781 // histos->UserHistogram("Track","","", 160,-0.5,159.5, AliDielectronVarManager::kNFclsTPCr);
782 // histos->UserHistogram("Track","","", 160,-0.5,159.5, 160,-0.5,159.5, AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
784 histos->UserHistogram("Track","","", 8,-0.5, 7.5, AliDielectronVarManager::kTRDpidQuality);
786 histos->UserHistogram("Track","","", 400,0.2,20.,200,0.,200., AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
787 histos->UserHistogram("Track","","", 400,0.2,20.,200,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
788 histos->UserHistogram("Track","","", 250,0.0,5.0,300,0.,1.2, AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFbeta,kTRUE);
789 histos->UserHistogram("Track","","", 100,-1.,+1.,200,-10.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
791 histos->UserHistogram("Track","","", 100,0.2,10.,100,0.,200.,
792 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
793 histos->UserHistogram("Track","","", 100,0.2,10.,100,-5.,+5.,
794 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
795 histos->UserHistogram("Track","","", 100,0.,4000.,100,0.,200.,
796 AliDielectronVarManager::kRefMultTPConly,AliDielectronVarManager::kTPCsignal);
797 histos->UserHistogram("Track","","", 100,0.,4000.,100,-5.,+5.,
798 AliDielectronVarManager::kRefMultTPConly,AliDielectronVarManager::kTPCnSigmaEle);
799 histos->UserHistogram("Track","","", 100,0.,100.,100,0.,200.,
800 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsignal);
801 histos->UserHistogram("Track","","", 100,0.,100.,100,-5.,+5.,
802 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCnSigmaEle);
803 histos->UserHistogram("Track","","", 100,-1.,+1.,100,0.,200.,
804 AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCsignal);
805 histos->UserHistogram("Track","","", 100,-1.,+1.,100,-5.,+5.,
806 AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEle);
807 histos->UserHistogram("Track","","", 100,-1.,+1.,100,-5.,+5.,
808 AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEleRaw);
812 if(!hasMC && cutDefinition==kAvgPt) {
813 // add single electron efficiency histograms
817 ////// MONTE CARLO //////
818 if(cutDefinition==kLegEff) {
820 //add MC signal histograms to track class
821 if(die->GetMCSignals()) {
823 TString className="";
824 for (Int_t i=0; i<die->GetMCSignals()->GetEntriesFast(); ++i) {
825 TString sigMCname = die->GetMCSignals()->At(i)->GetName();
828 // histos->AddClass(Form("Pair_%s_MCtruth", sigMCname.Data()));
829 // histos->AddClass(Form("Track_Legs_%s_MCtruth",sigMCname.Data()));
831 // histos->AddClass(Form("Pair_%s", sigMCname.Data()));
832 // histos->AddClass(Form("Track_Legs_%s", sigMCname.Data()));
834 histos->AddClass(Form("Track_%s_%s",AliDielectron::PairClassName(AliDielectron::kEv1PM),sigMCname.Data()));
835 histos->AddClass(Form("Track_%s_%s_MCtruth",AliDielectron::PairClassName(AliDielectron::kEv1PM),sigMCname.Data()));
836 } //end: loop signals
839 // add single electron histograms
842 // histos->UserHistogram("Track","","", GetPDGcodes(), AliDielectronVarManager::kPdgCode);
843 // histos->UserHistogram("Track","","", GetPDGcodes(), AliDielectronVarManager::kPdgCodeMother);
844 // histos->UserHistogram("Track","","", GetPDGcodes(), AliDielectronVarManager::kPdgCodeGrandMother);
845 // histos->UserHistogram("Track","","", GetPDGcodes(), GetPDGcodes(),
846 // AliDielectronVarManager::kPdgCodeMother, AliDielectronVarManager::kPdgCodeGrandMother);
851 die->SetHistogramManager(histos);
855 TIter nextClass(histos->GetHistogramList());
857 while ( (l=static_cast<THashList*>(nextClass())) ) {
858 //printf(" [D] HistogramManger: Class %s: Histograms: %04d \n", l->GetName(), l->GetEntries());
861 } //end: init histograms
863 void AddQAHistsPID(AliDielectron *die) {
865 // add histograms for PID validation, comparison, post calibration aso.
868 Bool_t hasMC=die->GetHasMC();
869 AliDielectronHistos *histos = die->GetHistoManager();
871 // add MC signal tracks
872 if(hasMC && die->GetMCSignals()) {
873 TString sigMCname = die->GetMCSignals()->Last()->GetName();
874 histos->AddClass(Form("Track_%s_%s",AliDielectron::PairClassName(AliDielectron::kEv1PM),sigMCname.Data()));
878 // for TPC post calibration
880 // arbitrary binning for variables
881 TVectorD *vcen = AliDielectronHelper::MakeLinBinning( 11, 0., 55.);
884 // array of bin limits
885 TObjArray *limits = new TObjArray();
886 limits->Add(AliDielectronHelper::MakeLinBinning( 75,-10., 5.));
887 limits->Add(AliDielectronHelper::MakeLinBinning( 75,-10., 5.));
888 // limits->Add(AliDielectronHelper::MakeLinBinning(100, 0., 200.));
889 // limits->Add(AliDielectronHelper::MakeLinBinning(60, 0., 1.2));
890 limits->Add(AliDielectronHelper::MakeLinBinning( 50, 0., 4000.));
891 limits->Add(AliDielectronHelper::MakeLinBinning( 50, 0., 10.));
892 // limits->Add(vcen);
893 // limits->Add(AliDielectronHelper::MakeLinBinning( 36, 0., 90.));
894 limits->Add(AliDielectronHelper::MakeLinBinning( 20, -1., 1.));
895 limits->Add(GetRunNumbers2011());
896 UInt_t var[]={AliDielectronVarManager::kTPCnSigmaEleRaw, // NOTE: raw nsigma w/o corr
897 AliDielectronVarManager::kTPCnSigmaEle,
898 // AliDielectronVarManager::kTOFbeta,
899 // AliDielectronVarManager::kTPCsignal,
900 AliDielectronVarManager::kRefMultTPConly,
901 AliDielectronVarManager::kPIn,
902 // AliDielectronVarManager::kCentrality,
903 AliDielectronVarManager::kEta,
904 AliDielectronVarManager::kRunNumber
906 // add merged track histogram
907 histos->UserSparse("Track", limits->GetEntriesFast(), limits, var);
909 // run dependence of nisgma electron
910 histos->UserHistogram("Track","","", GetRunNumbers2011(),AliDielectronHelper::MakeLinBinning(100,-5.,+5.),
911 AliDielectronVarManager::kRunNumber,AliDielectronVarManager::kTPCnSigmaEleRaw);
912 histos->UserHistogram("Track","","", GetRunNumbers2011(),AliDielectronHelper::MakeLinBinning(100,-5.,+5.),
913 AliDielectronVarManager::kRunNumber,AliDielectronVarManager::kTPCnSigmaEle);
915 // post calibration check
916 histos->UserHistogram("Track","","", 100,0.2,10.,100,-5.,+5.,
917 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEleRaw,kTRUE);
918 histos->UserHistogram("Track","","", 100,0.2,10.,100,-5.,+5.,
919 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
921 // TPC number of points used for nsigma calculation
922 histos->UserHistogram("Track","","", 160,-0.5,159.5, AliDielectronVarManager::kTPCsignalN);
925 void AddQAHistsEP(AliDielectron *die) {
927 // add histograms for event plane flattening aso.
930 Bool_t hasMC=die->GetHasMC();
931 AliDielectronHistos *histos = die->GetHistoManager();
933 // event plane resolutions
934 TObjArray *limits = new TObjArray();
935 limits->Add(AliDielectronHelper::MakeLinBinning( 18, 0., 90.));
936 // limits->Add(GetRunNumbers2011());
937 limits->Add(AliDielectronHelper::MakeLinBinning(100, -1., 1.));
938 limits->Add(AliDielectronHelper::MakeLinBinning(100, -1., 1.));
939 limits->Add(AliDielectronHelper::MakeLinBinning(100, -1., 1.));
941 UInt_t var[]={AliDielectronVarManager::kCentrality,
942 // AliDielectronVarManager::kRunNumber,
943 AliDielectronVarManager::kv0ATPCDiffH2,
944 AliDielectronVarManager::kv0CTPCDiffH2,
945 AliDielectronVarManager::kv0Av0CDiffH2 };
946 // histos->UserSparse("Event", 4, limits, var);
948 // event plane angles
949 TObjArray *limits2 = new TObjArray();
950 limits2->Add(AliDielectronHelper::MakeLinBinning( 18, 0., 90.));
951 // limits2->Add(GetRunNumbers2011());
952 limits2->Add(AliDielectronHelper::MakeLinBinning(100, -1.6, 1.6));
953 limits2->Add(AliDielectronHelper::MakeLinBinning(100, -1.6, 1.6));
954 limits2->Add(AliDielectronHelper::MakeLinBinning(100, -1.6., 1.6));
956 UInt_t var2[]={AliDielectronVarManager::kCentrality,
957 // AliDielectronVarManager::kRunNumber,
958 AliDielectronVarManager::kv0ArpH2,
959 AliDielectronVarManager::kv0CrpH2,
960 AliDielectronVarManager::kTPCrpH2 };
961 histos->UserSparse("Event", limits2->GetEntriesFast(), limits2, var2);
963 // VZERO event plane angles (sub rings)
964 histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0A0rpH2);
965 histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0C0rpH2);
966 histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0A3rpH2);
967 histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0C3rpH2);
968 histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0ACrpH2); // combined A+C
970 // run dependence of the angles
971 histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronHelper::MakeLinBinning(100,-1.6,1.6),
972 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0ArpH2);
973 histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronHelper::MakeLinBinning(100,-1.6,1.6),
974 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0CrpH2);
975 histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronHelper::MakeLinBinning(100,-1.6,1.6),
976 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kTPCrpH2);
979 // TPC q vector components
980 histos->UserHistogram("Event","","", 100,-1500.,1500., AliDielectronVarManager::kTPCxH2);
981 histos->UserHistogram("Event","","", 100,-1500.,1500., AliDielectronVarManager::kTPCyH2);
982 // histos->UserHistogram("Event","","", 100, -2., 2., AliDielectronVarManager::kTPCsub1rpH2);
983 // histos->UserHistogram("Event","","", 100, -2., 2., AliDielectronVarManager::kTPCsub2rpH2);
984 // histos->UserHistogram("Event","","", 100, -1., 1., AliDielectronVarManager::kTPCsub12DiffH2);
986 // further event plane resolutions (used in 3 sub event method)
987 histos->UserProfile("Event","","", AliDielectronVarManager::kv0ATPCDiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
988 histos->UserProfile("Event","","", AliDielectronVarManager::kv0CTPCDiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
989 histos->UserProfile("Event","","", AliDielectronVarManager::kv0Av0CDiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
990 histos->UserProfile("Event","","", AliDielectronVarManager::kTPCsub12DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
991 histos->UserProfile("Event","","", AliDielectronVarManager::kv0Av0C0DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
992 histos->UserProfile("Event","","", AliDielectronVarManager::kv0Av0C3DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
993 histos->UserProfile("Event","","", AliDielectronVarManager::kv0Cv0A0DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
994 histos->UserProfile("Event","","", AliDielectronVarManager::kv0Cv0A3DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
995 histos->UserProfile("Event","","", AliDielectronVarManager::kv0A0v0A3DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
996 histos->UserProfile("Event","","", AliDielectronVarManager::kv0C0v0C3DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
998 // EP angle correlation (range of phi angle)
999 // histos->UserHistogram("Event","","", 320,-3.2.,3.2, 320,-3.2.,3.2,
1000 // AliDielectronVarManager::kTPCrpH2,AliDielectronVarManager::kv0ACrpH2);
1002 // EP Qvector magnitudes
1003 histos->UserHistogram("Event","","", 200,0.,200., AliDielectronVarManager::kTPCmagH2);
1004 histos->UserHistogram("Event","","", 200,0.,800., AliDielectronVarManager::kv0ACmagH2);
1005 histos->UserHistogram("Event","","", 200,0.,800., AliDielectronVarManager::kv0AmagH2);
1006 histos->UserHistogram("Event","","", 200,0.,800., AliDielectronVarManager::kv0CmagH2);
1008 // detector effects checks
1009 histos->UserHistogram("Event","","", 10,0.,100., 300,-1.0,1.0,
1010 AliDielectronVarManager::kCentrality, AliDielectronVarManager::kTPCsub12DiffH2Sin);
1013 // histos->UserProfile("Event","","", AliDielectronVarManager::kTPCxH2,
1014 // AliDielectronHelper::MakeLinBinning(9, 0.,90.), GetRunNumbers2011(),
1015 // AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRunNumber);
1016 // histos->UserProfile("Event","","", AliDielectronVarManager::kTPCyH2,
1017 // AliDielectronHelper::MakeLinBinning(9, 0.,90.), GetRunNumbers2011(),
1018 // AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRunNumber);
1022 void AddHistsEleEff(AliDielectron *die) {
1024 // adding histograms for single electron efficiencies
1027 Bool_t hasMC=die->GetHasMC();
1028 AliDielectronHistos *histos = die->GetHistoManager();
1030 // applied efficiencies in collision data
1032 histos->UserHistogram("Track","","", 101,-0.01,1.0, AliDielectronVarManager::kLegEff);
1033 histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, 18,0.0,90.0, AliDielectronVarManager::kCentrality);
1034 histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, 100,0.0,20.0, AliDielectronVarManager::kPt);
1035 histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, 20,0.0,TMath::TwoPi(), AliDielectronVarManager::kPhi);
1036 histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, 20,-1.,+1., AliDielectronVarManager::kEta);
1038 histos->UserHistogram("Pair","","", 101,-0.01,1.0, AliDielectronVarManager::kPairEff);
1039 histos->UserProfile("Pair","","", AliDielectronVarManager::kPairEff, 125,.0,125*0.04, AliDielectronVarManager::kM);
1040 histos->UserProfile("Pair","","", AliDielectronVarManager::kPairEff, 100,.0,10.0, AliDielectronVarManager::kPt);
1041 histos->UserProfile("Pair","","", AliDielectronVarManager::kPairEff, 18,0.0,90.0, AliDielectronVarManager::kCentrality);
1043 histos->UserHistogram("Pair","","", 125,.0,125*0.04, 101,-0.01,1.0,
1044 AliDielectronVarManager::kM, AliDielectronVarManager::kPairEff);
1046 histos->UserProfile("Pair","","", AliDielectronVarManager::kPt,125,.0,125*0.04, AliDielectronVarManager::kM);
1048 histos->UserHistogram("Pair","","", AliDielectronHelper::MakeLinBinning(125,.0,125*0.04),
1049 AliDielectronVarManager::kM, AliDielectronVarManager::kOneOverPairEff);
1050 histos->UserProfile("Pair", "","", AliDielectronVarManager::kPt,AliDielectronHelper::MakeLinBinning(125,.0,125*0.04),
1051 AliDielectronVarManager::kM, "", AliDielectronVarManager::kOneOverPairEff);
1054 // single electron efficiecy
1056 // arbitrary binning for variables
1057 // TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 41, 0.0, 10.25);
1058 // (*vpt)[41] = 20.;
1059 TVectorD *vpt1 = AliDielectronHelper::MakeLinBinning( (int)(( 3. - 0.)/0.10), 0., 3.); //steps of 100MeV
1060 TVectorD *vpt2 = AliDielectronHelper::MakeLinBinning( (int)(( 10.- 3.25)/0.25), 3.25, 10.); //steps of 250MeV
1061 TVectorD *vpt3 = AliDielectronHelper::MakeLinBinning( (int)((100.-20.)/10.0), 20., 100.); //steps of 10GeV
1062 TVectorD *vpt = new TVectorD(vpt1->GetNrows()+vpt2->GetNrows()+vpt3->GetNrows());
1063 for(Int_t i=0; i<vpt1->GetNrows(); i++) (*vpt)[i] = (*vpt1)[i];
1064 for(Int_t i=0; i<vpt2->GetNrows(); i++) (*vpt)[vpt1->GetNrows()+i] = (*vpt2)[i];
1065 for(Int_t i=0; i<vpt3->GetNrows(); i++) (*vpt)[vpt1->GetNrows()+vpt2->GetNrows()+i] = (*vpt3)[i];
1068 // array of bin limits
1069 TObjArray *limEpm = new TObjArray();
1070 // limEpm->Add(AliDielectronHelper::MakeLinBinning( 75,-10., 5.));
1071 limEpm->Add(AliDielectronHelper::MakeLinBinning( 18, 0., 90.));
1073 // limEpm->Add(AliDielectronHelper::MakeLinBinning( 20, 0., TMath::TwoPi()));
1074 limEpm->Add(AliDielectronHelper::MakeLinBinning( 20, -1., +1.));
1075 limEpm->Add(AliDielectronHelper::MakeLinBinning( 1, -1., +1.));
1076 limEpm->Add(AliDielectronHelper::MakeLinBinning( 1, -1., +1.));
1077 limEpm->Add(GetRunNumbers2011());
1078 limEpm->Add(GetPDGcodes());
1079 // limEpm->Add(GetPDGcodes());
1080 UInt_t varEpm[]={//AliDielectronVarManager::kTPCnSigmaEle,
1081 AliDielectronVarManager::kCentrality
1082 ,AliDielectronVarManager::kPt
1083 // ,AliDielectronVarManager::kPhi
1084 ,AliDielectronVarManager::kEta
1085 ,AliDielectronVarManager::kImpactParXY
1086 ,AliDielectronVarManager::kImpactParZ
1087 ,AliDielectronVarManager::kRunNumber
1088 ,AliDielectronVarManager::kPdgCodeMother
1089 // ,AliDielectronVarManager::kPdgCodeGrandMother
1092 if(hasMC) histos->UserSparse("Track", limEpm->GetEntriesFast(), limEpm, varEpm);
1094 histos->UserHistogram("Track","","", 500,-1.,1., AliDielectronVarManager::kImpactParXY);
1095 histos->UserHistogram("Track","","", 600,-3.,3., AliDielectronVarManager::kImpactParZ);
1098 // array of bin limits
1099 TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 21, 0.0, 10.5);
1101 TObjArray *limPair = new TObjArray();
1102 limPair->Add(AliDielectronHelper::MakeLinBinning( 18, 0., 90.));
1103 limPair->Add(AliDielectronHelper::MakeLinBinning( 20, -1., +1.));
1105 // limPair->Add(GetPDGcodes());
1107 AliDielectronVarManager::kCentrality
1108 ,AliDielectronVarManager::kThetaCS
1109 ,AliDielectronVarManager::kPt
1110 // ,AliDielectronVarManager::kPdgCodeMother
1112 // if(hasMC) histos->UserSparse("Pair", limPair->GetEntriesFast(), limPair, varPair); // TAKES 4ever
1116 void InitHF(AliDielectron* die, Int_t cutDefinition)
1119 // Setup the HF arrays
1122 switch(cutDefinition) {
1132 Bool_t hasMC=die->GetHasMC();
1133 // booleans for histo selection
1134 Bool_t bHistEff = kFALSE; //ATTENTION
1136 AliDielectronMixingHandler *mixH=die->GetMixingHandler();
1137 Int_t maxMixBins = (mixH ? mixH->GetNumberOfBins() : 0);
1140 AliDielectronHF *hf=new AliDielectronHF(die->GetName(),die->GetTitle());
1141 // define pair types and sources
1142 if(hasMC) hf->SetStepForMCGenerated();
1143 hf->SetPairTypes(AliDielectronHF::kOSandMIX);
1144 // hf->SetPairTypes(AliDielectronHF::kMConly); // only mc truth
1145 // hf->SetPairTypes(AliDielectronHF::kAll); // all pair types
1147 //// define the grid size and granularity /////
1148 hf->AddCutVariable(AliDielectronVarManager::kCentrality, 9, 0., 90.);
1149 TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 21, 0.0, 10.5);
1151 hf->AddCutVariable(AliDielectronVarManager::kPt, vpt);
1152 hf->AddCutVariable(AliDielectronVarManager::kY, 1, -0.8, 0.8);
1155 hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1156 // for mixed event weighting
1157 // if(mixH) hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(maxMixBins,0,maxMixBins), AliDielectronVarManager::kMixingBin);
1160 if(cutDefinition==kAvgPt) {
1161 hf->AddCutVariable(AliDielectronVarManager::kPairEff, AliDielectronHelper::MakeArbitraryBinning(".0,.01,.02,.03,.05,.1,1."));
1162 hf->UserProfile("Pair", AliDielectronVarManager::kPt,
1163 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1164 hf->UserProfile("Pair", AliDielectronVarManager::kPtSq,
1165 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1169 if(cutDefinition==kFlow && !hasMC) {
1171 hf->UserProfile("Pair", AliDielectronVarManager::kv0ArpH2FlowV2,
1172 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1173 hf->UserProfile("Pair", AliDielectronVarManager::kv0CrpH2FlowV2,
1174 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1175 hf->UserProfile("Pair", AliDielectronVarManager::kTPCrpH2FlowV2,
1176 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1178 hf->UserProfile("Pair", AliDielectronVarManager::kCosTPCrpH2,
1179 AliDielectronHelper::MakeLinBinning(1,.0,125*0.04), AliDielectronVarManager::kM);
1180 hf->UserProfile("Pair", AliDielectronVarManager::kSinTPCrpH2,
1181 AliDielectronHelper::MakeLinBinning(1,.0,125*0.04), AliDielectronVarManager::kM);
1182 hf->UserProfile("Pair", AliDielectronVarManager::kCosPhiH2,
1183 AliDielectronHelper::MakeLinBinning(1,.0,125*0.04), AliDielectronVarManager::kM);
1184 hf->UserProfile("Pair", AliDielectronVarManager::kSinPhiH2,
1185 AliDielectronHelper::MakeLinBinning(1,.0,125*0.04), AliDielectronVarManager::kM);
1186 hf->UserProfile("Pair", AliDielectronVarManager::kTPCrpH2FlowV2Sin,
1187 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1190 hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, GetDeltaPhiBins());
1191 hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2, GetDeltaPhiBins());
1192 hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiTPCrpH2, GetDeltaPhiBins());
1195 // on the fly efficienies
1196 if(cutDefinition==kAvgPt && (!hasMC || 0)) {
1197 hf->UserProfile("Pair", AliDielectronVarManager::kPairEff,
1198 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1199 hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM,
1200 AliDielectronVarManager::kOneOverPairEff);
1202 hf->UserProfile("Pair", AliDielectronVarManager::kPt,
1203 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM,
1204 "", AliDielectronVarManager::kOneOverPairEff);
1205 hf->UserProfile("Pair", AliDielectronVarManager::kPtSq,
1206 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM,
1207 "", AliDielectronVarManager::kOneOverPairEff);
1212 //// define the grid size and granularity /////
1213 // event variables //
1214 // hf->AddCutVariable(AliDielectronVarManager::kCentrality, AliDielectronHelper::MakeArbitraryBinning("0,10,50,90")); // flow only
1215 if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kCentrality, 18, 0., 90.);
1216 else hf->AddCutVariable(AliDielectronVarManager::kCentrality, 9, 0., 90.);
1217 // if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers2011() );
1218 // if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kNacc, 3000,0.,3000.);
1219 // if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kNVtxContrib, 20,0.,4000.);
1221 // pair variables //ATTENTION
1222 if(hasMC && 0) hf->AddCutVariable(AliDielectronVarManager::kY, 18, -0.9, 0.9);
1223 // hf->AddCutVariable(AliDielectronVarManager::kPt, 10, 0.0, 10.0);
1225 hf->AddCutVariable(AliDielectronVarManager::kPt, AliDielectronHelper::MakeArbitraryBinning("0,1,2,3,4,5,6,7,8,9,10,100"));
1226 // hf->AddCutVariable(AliDielectronVarManager::kPt, 20, 0.0, 10.0);
1228 hf->AddCutVariable(AliDielectronVarManager::kPt, 50, 0.0, 10.0);
1230 // if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
1231 // if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.);
1233 // flow variables //
1234 // if(!hasMC) hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, GetDeltaPhiBins());
1235 // if(!hasMC) hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2, GetDeltaPhiBins());
1236 if(!hasMC && bHistFlow) hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiTPCrpH2, GetDeltaPhiBins());
1238 // leg variables // NOTE: switched off in HF??
1239 // if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kPt, "0.85, 0.95, 1.1, 100.0", kTRUE, AliDielectronHF::kBinToMax);
1240 // if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kEta,"-0.9,-0.8,0.8,0.9", kTRUE, AliDielectronHF::kSymBin);
1241 // hf->AddCutVariable(AliDielectronVarManager::kY, 1, -0.9, 0.9 );
1242 // hf->AddCutVariable(AliDielectronVarManager::kPt, "0.8, 1.0, 1.1, 1.2, 1.5, 100.0", kTRUE, AliDielectronHF::kBinToMax);
1243 // hf->AddCutVariable(AliDielectronVarManager::kNclsTPC, "70,90,100,120,160", kTRUE, AliDielectronHF::kBinToMax);
1244 // hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaEle,"-4,-3,-2.5,-2,2,2.5,3,4", kTRUE, AliDielectronHF::kSymBin);
1245 //hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaPio,"3.,3.5,4.,100.", kTRUE, AliDielectronHF::kBinToMax);
1246 //hf->AddCutVariable(AliDielectronVarManager::kITSLayerFirstCls,4,0.,4., kFALSE, kTRUE, AliDielectronHF::kBinFromMin);
1247 //hf->AddCutVariable(AliDielectronVarManager::kNclsITS, 5,2.,7., kFALSE, kTRUE, AliDielectronHF::kBinToMax);
1248 //hf->AddCutVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers2011());
1250 die->SetHistogramArray(hf);
1253 void InitCF(AliDielectron* die, Int_t cutDefinition)
1256 // Setup the CF Manager if needed
1259 switch(cutDefinition) {
1268 Bool_t hasMC=die->GetHasMC();
1271 AliDielectronMixingHandler *mixH=die->GetMixingHandler();
1272 Int_t maxMixBins = (mixH ? mixH->GetNumberOfBins() : 0);
1275 AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
1278 //cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.0,10.0,15.0,20.0,25.0,30.0,35.0,40.0,50.0");
1279 cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.0,10.0,15.0,20.0,25.0,30.0,35.0,40.0,50.0,60.0,70.0,80.,90.");
1280 // cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers2011() );
1281 if(mixH) cf->AddVariable(AliDielectronVarManager::kMixingBin, AliDielectronHelper::MakeLinBinning(maxMixBins,0,maxMixBins));
1284 TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 21, 0.0, 10.5);
1286 cf->AddVariable(AliDielectronVarManager::kPt, vpt);
1287 // TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 41, 0.0, 10.25);
1288 // (*vpt)[41] = 100.;
1289 // cf->AddVariable(AliDielectronVarManager::kPt,vpt);
1290 // cf->AddVariable(AliDielectronVarManager::kPt,80,0.0,100*0.25);
1292 // cf->AddVariable(AliDielectronVarManager::kY,"-5,-1,-0.9,-0.8,-0.5,0.5,0.8,0.9,1.0,5");
1293 cf->AddVariable(AliDielectronVarManager::kY,"-0.9,-0.8,-0.7,+0.7,+0.8,+0.9");
1294 // cf->AddVariable(AliDielectronVarManager::kY,18,-0.9,+0.9);
1295 cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
1296 // cf->AddVariable(AliDielectronVarManager::kPairType,1,1,1);
1297 cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
1298 // cf->AddVariable(AliDielectronVarManager::kThetaCS,20,-1.,+1.);
1299 // cf->AddVariable(AliDielectronVarManager::kThetaHE,20,-1.,+1.);
1300 // cf->AddVariable(AliDielectronVarManager::kPhiCS,20,-3.2,+3.2);
1301 // cf->AddVariable(AliDielectronVarManager::kPhiHE,20,-3.2,+3.2);
1302 cf->AddVariable(AliDielectronVarManager::kDeltaPhiTPCrpH2,GetDeltaPhiBins());
1304 if(cutDefinition!=kSysMCele && 0) { //ATTENTION
1305 cf->AddVariable(AliDielectronVarManager::kPt,"0.85, 1.1, 100.0",kTRUE);
1306 // cf->AddVariable(AliDielectronVarManager::kNclsTPC,"0, 70, 80, 90, 100, 120, 160",kTRUE);
1307 cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,-0.85,-0.8,-0.75,-0.70,0.70,0.75,0.8,0.85,0.9",kTRUE);
1308 cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,3,-1.5,1.5,kTRUE);
1309 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,100",kTRUE);
1310 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-1.5,-1.0,-0.6,3.0",kTRUE);
1313 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3.0,-1.5,-1.0,-0.6,3.0",kTRUE);
1317 cf->AddVariable(AliDielectronVarManager::kCentrality, 18,0., 90.);
1318 if(hasMC) cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers2011() );
1319 // if(hasMC) cf->AddVariable(AliDielectronVarManager::kNacc, 3000,0.,3000.);
1320 // if(hasMC) cf->AddVariable(AliDielectronVarManager::kNVtxContrib, 20,0.,4000.);
1323 if(hasMC) cf->AddVariable(AliDielectronVarManager::kPairType,1,1,1);
1324 else cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
1325 cf->AddVariable(AliDielectronVarManager::kM, 125, 0.0, 5.0); //40Mev Steps
1326 if(hasMC) cf->AddVariable(AliDielectronVarManager::kY, 18, -0.9, 0.9);
1327 if(hasMC) cf->AddVariable(AliDielectronVarManager::kPt, 100, 0.0, 20.0);
1328 else cf->AddVariable(AliDielectronVarManager::kPt, AliDielectronHelper::MakeArbitraryBinning("0,1,2,3,4,5,6,7,8,9,10,20"));
1329 // if(hasMC) cf->AddVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
1330 // if(hasMC) cf->AddVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.);
1333 //if(!hasMC) cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, GetDeltaPhiBins());
1334 //if(!hasMC) cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2, GetDeltaPhiBins());
1337 if(hasMC) cf->AddVariable(AliDielectronVarManager::kPt,"0.0, 0.85, 0.95, 1.0, 1.1, 100.0",kTRUE);
1338 if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,-0.8,-0.7, 0.7, 0.8, 0.9", kTRUE);
1339 // cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE);
1340 // cf->AddVariable(AliDielectronVarManager::kNclsITS,"1,2,3,4,5,6",kTRUE);
1341 // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3,-2.5,-2,2,2.5,3",kTRUE);
1342 // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"2.5,3.0,3.5,4.0,4.5,100",kTRUE);
1343 // cf->AddVariable(AliDielectronVarManager::kNclsTPC,"70, 90, 100, 120, 160",kTRUE);
1344 // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,5.0,100",kTRUE);
1345 // cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE); break;
1346 // cf->AddVariable(AliDielectronVarManager::kTRDpidQuality,"3.5, 4.5, 5.5, 6.5",kTRUE);
1347 // if(!hasMC && isESD) cf->AddVariable(AliDielectronVarManager::kTRDchi2,"-1.,0.,2.,4.",kTRUE);
1351 cf->SetStepForMCtruth();
1352 // cf->SetStepForNoCutsMCmotherPid();
1353 // cf->SetStepForAfterAllCuts();
1354 // cf->SetStepsForEachCut();
1355 // cf->SetStepsForSignal();
1356 // cf->SetStepsForBackground();
1357 //cf->SetStepsForMCtruthOnly();
1360 cf->SetStepsForSignal();
1362 die->SetCFManagerPair(cf);
1365 void AddMCSignals(AliDielectron *die, Int_t cutDefinition){
1366 //Do we have an MC handler?
1367 if (!die->GetHasMC()) return;
1369 AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive");
1370 inclusiveJpsi->SetLegPDGs(11,-11);
1371 inclusiveJpsi->SetMotherPDGs(443,443);
1372 inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
1373 inclusiveJpsi->SetFillPureMCStep(kTRUE);
1374 inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
1375 inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
1377 AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty");
1378 beautyJpsi->SetLegPDGs(11,-11);
1379 beautyJpsi->SetMotherPDGs(443,443);
1380 beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
1381 beautyJpsi->SetGrandMotherPDGs(500,500);
1382 beautyJpsi->SetFillPureMCStep(kTRUE);
1383 beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
1384 beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
1385 beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
1387 AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt"); // prompt J/psi (not from beauty decays)
1388 promptJpsi->SetLegPDGs(11,-11);
1389 promptJpsi->SetMotherPDGs(443,443);
1390 promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
1391 promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
1392 promptJpsi->SetFillPureMCStep(kTRUE);
1393 promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1394 promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
1395 promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
1396 promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
1398 // prompt J/psi radiative channel
1399 AliDielectronSignalMC* promptJpsiRad = new AliDielectronSignalMC("promptJpsiRad","PromptRadiative"); // prompt J/psi (not from beauty decays)
1400 promptJpsiRad->SetLegPDGs(11,-11);
1401 promptJpsiRad->SetMotherPDGs(443,443);
1402 promptJpsiRad->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
1403 promptJpsiRad->SetMothersRelation(AliDielectronSignalMC::kSame);
1404 promptJpsiRad->SetFillPureMCStep(kTRUE);
1405 promptJpsiRad->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1406 promptJpsiRad->SetCheckBothChargesLegs(kTRUE,kTRUE);
1407 promptJpsiRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
1408 promptJpsiRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
1409 promptJpsiRad->SetJpsiRadiative(AliDielectronSignalMC::kIsRadiative);
1411 // prompt J/psi Non radiative channel
1412 AliDielectronSignalMC* promptJpsiNonRad = new AliDielectronSignalMC("promptJpsiNonRad","PromptNonRadiative"); // prompt J/psi (not from beauty decays)
1413 promptJpsiNonRad->SetLegPDGs(11,-11);
1414 promptJpsiNonRad->SetMotherPDGs(443,443);
1415 promptJpsiNonRad->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
1416 promptJpsiNonRad->SetMothersRelation(AliDielectronSignalMC::kSame);
1417 promptJpsiNonRad->SetFillPureMCStep(kTRUE);
1418 promptJpsiNonRad->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1419 promptJpsiNonRad->SetCheckBothChargesLegs(kTRUE,kTRUE);
1420 promptJpsiNonRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
1421 promptJpsiNonRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
1422 promptJpsiNonRad->SetJpsiRadiative(AliDielectronSignalMC::kIsNotRadiative);
1424 AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct"); // embedded J/psi
1425 directJpsi->SetLegPDGs(11,-11);
1426 directJpsi->SetMotherPDGs(443,443);
1427 directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
1428 directJpsi->SetFillPureMCStep(kTRUE);
1429 directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1430 directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
1431 directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
1432 directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
1434 AliDielectronSignalMC* gammaConversion = new AliDielectronSignalMC("gammaConversion","gamma conversions");
1435 gammaConversion->SetLegPDGs(11,-11);
1436 gammaConversion->SetCheckBothChargesLegs(kTRUE,kTRUE);
1437 gammaConversion->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
1438 gammaConversion->SetMotherPDGs(22,22);
1439 gammaConversion->SetMothersRelation(AliDielectronSignalMC::kSame);
1442 AliDielectronSignalMC* electrons = new AliDielectronSignalMC("electrons","electrons");
1443 electrons->SetLegPDGs(11,1); //dummy second leg (never MCtrue)
1444 electrons->SetCheckBothChargesLegs(kTRUE,kTRUE);
1445 electrons->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1446 // electrons->SetGrandMotherPDGs(500,500,kTRUE,kTRUE); // exclude non-prompt jpsi eletrons
1447 electrons->SetFillPureMCStep(kTRUE);
1448 // electrons->SetMothersRelation(AliDielectronSignalMC::kSame);
1450 AliDielectronSignalMC* directElec = new AliDielectronSignalMC("directElec","directElec");
1451 directElec->SetLegPDGs(11,11); //dummy second leg (never MCtrue)
1452 directElec->SetCheckBothChargesLegs(kTRUE,kTRUE);
1453 directElec->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1454 // directElec->SetGrandMotherPDGs(-1103,-1103);
1455 directElec->SetFillPureMCStep(kTRUE);
1456 directElec->SetMothersRelation(AliDielectronSignalMC::kSame);
1457 directElec->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
1460 AliDielectronSignalMC* elecPrim = new AliDielectronSignalMC("elecPrim","elecPrim");
1461 elecPrim->SetLegPDGs(11,1); //dummy second leg (never MCtrue)
1462 elecPrim->SetCheckBothChargesLegs(kTRUE,kTRUE);
1463 elecPrim->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1464 elecPrim->SetCheckBothChargesMothers(kTRUE,kTRUE);
1465 elecPrim->SetMotherPDGs(902,902,kTRUE,kTRUE); // exclude non-prompt jpsi eletrons
1466 elecPrim->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
1467 elecPrim->SetGrandMotherPDGs(902,902,kTRUE,kTRUE); // exclude non-prompt jpsi eletrons
1468 elecPrim->SetFillPureMCStep(kTRUE);
1470 // add direct di lepton resonances
1472 AliDielectronSignalMC* directP[7];
1474 Int_t pdg[] = {111, 113, 221, 223, 331, 333, 443};
1475 for(Int_t i=0; i<7; i++) {
1476 ap = TDatabasePDG::Instance()->GetParticle(pdg[i]);
1477 directP[i] = new AliDielectronSignalMC(Form("direct%s",ap->GetName()),Form("direct%s",ap->GetName()));
1478 directP[i]->SetLegPDGs(11,-11);
1479 directP[i]->SetMotherPDGs(pdg[i],pdg[i]);
1480 directP[i]->SetMothersRelation(AliDielectronSignalMC::kSame);
1481 directP[i]->SetFillPureMCStep(kTRUE);
1482 directP[i]->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1483 directP[i]->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
1484 // directP[i]->SetCheckBothChargesLegs(kTRUE,kTRUE);
1485 // directP[i]->SetCheckBothChargesMothers(kTRUE,kTRUE);
1490 AliDielectronSignalMC* eleHijing = new AliDielectronSignalMC("eleHijing","eleHijing");
1491 eleHijing->SetLegPDGs(11,1); //dummy second leg (never MCtrue)
1492 eleHijing->SetCheckBothChargesLegs(kTRUE,kTRUE);
1493 eleHijing->SetLegSources(AliDielectronSignalMC::kNoCocktail, AliDielectronSignalMC::kNoCocktail);
1494 eleHijing->SetFillPureMCStep(kTRUE);
1497 AliDielectronSignalMC* electrons = new AliDielectronSignalMC("electrons","electrons");
1498 electrons->SetLegPDGs(11,-11); //dummy second leg (never MCtrue)
1499 electrons->SetCheckBothChargesLegs(kTRUE,kTRUE);
1500 electrons->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1501 // electrons->SetMotherPDGs(111,111,kTRUE,kTRUE); // not from pi0
1502 // electrons->SetMothersRelation(AliDielectronSignalMC::kSame);
1503 electrons->SetFillPureMCStep(kTRUE);
1507 switch(cutDefinition) {
1509 die->AddSignalMC(directElec);
1512 die->AddSignalMC(inclusiveJpsi);
1513 die->AddSignalMC(directJpsi);
1516 die->AddSignalMC(inclusiveJpsi);
1517 // die->AddSignalMC(beautyJpsi);
1518 //die->AddSignalMC(promptJpsi);
1519 //die->AddSignalMC(promptJpsiRad);
1520 //die->AddSignalMC(promptJpsiNonRad);
1521 die->AddSignalMC(directJpsi);
1522 // die->AddSignalMC(gammaConversion);
1525 // die->AddSignalMC(directJpsi);
1526 // die->AddSignalMC(inclusiveJpsi);
1527 // die->AddSignalMC(electrons);
1528 // die->AddSignalMC(elecPrim);
1529 die->AddSignalMC(directElec);
1530 //for(Int_t i=0; i<7; i++) die->AddSignalMC(directP[i]);
1533 die->AddSignalMC(directJpsi);
1540 void SetEtaCorrection(AliDielectron *die) {
1542 if (AliDielectronPID::GetCentroidCorrFunction()) return;
1544 TF2 *fCntrdCorr=0x0;
1546 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv DATA vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
1547 // either data or MC with tune on data option
1548 if( !die->GetHasMC() || ((AliPIDResponse*)AliAnalysisManager::GetAnalysisManager()->GetTasks()->At(0))->IsTunedOnData()) {
1549 // 2-dimensional eta correction for the centroid of electron sigmas
1550 fCntrdCorr = new TF2("fCntrdCorr", "[0] + [1]*y + [2]*y*y + [3]*TMath::Power(y,3) + [4]*TMath::Power(y,4) + [5]*TMath::Power(y,5) + [6]*TMath::Power(y,6) + [7]*x",
1551 // 0.0, 3000.0, -0.9, +0.9);
1552 0.0, 90.0, -0.9, +0.9);
1553 // fCntrdCorr->SetParameters(0.723106, 0.23958, -6.31221, -0.687976, 15.912, 0.579609, -11.6901, -0.000354381); //Nacc dep.
1554 fCntrdCorr->SetParameters(+0.149002, +0.214644 , -6.034930, -0.529588, +14.97902, +0.402640, -10.890027, +0.011248); //Cent dep.
1556 // 1-dimensional eta correction for the width of electron sigmas
1557 fWdthCorr = new TF1("fWdthCorr", "pol2", 0.0, 90.0);
1558 // fWdthCorr->SetParameters(1.06108, 0.000217804,-5.80291e-08); //Nacc dep.
1559 fWdthCorr->SetParameters(+1.290755, -0.005261, +0.000021); //Cent dep.
1561 // apply corrections
1562 // AliDielectronPID::SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kNacc,AliDielectronVarManager::kEta);
1563 // AliDielectronPID::SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kNacc);
1564 AliDielectronPID::SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kEta);
1565 AliDielectronPID::SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kCentrality);
1566 printf(" DATA PID correction loaded!!!\n");
1569 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MONTE CARLO vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
1570 // 2-dimensional eta correction for the centroid of electron sigmas
1571 fCntrdCorr = new TF2("fCntrdCorr", "[0] + [1]*y + [2]*y*y + [3]*TMath::Power(y,3) + [4]*TMath::Power(y,4) + [5]*TMath::Power(y,5) + [6]*TMath::Power(y,6) + [7]*x",
1572 0.0, 3000.0, -0.9, +0.9);
1573 fCntrdCorr->SetParameters(+0.378611, -0.070831, -3.076778, +0.121977, +8.576097, +0.113009, -5.001368, -0.000181);
1574 // 1-dimensional eta correction for the width of electron sigmas
1575 fWdthCorr = new TF1("fWdthCorr", "pol1", 0.0, 3000.0);
1576 fWdthCorr->SetParameters(+0.881894, +0.000053);
1578 // apply corrections
1579 AliDielectronPID::SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kNacc,AliDielectronVarManager::kEta);
1580 AliDielectronPID::SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kNacc);
1581 // AliDielectronPID::SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kEta);
1582 // AliDielectronPID::SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kCentrality);
1588 TVectorD *GetRunNumbers2011() {
1590 Double_t runLHC10h[] = { // all good runs based on RCT 29.Mai
1591 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
1593 Double_t runLHC11h[] = { // all good runs based on RCT 29.Mai
1594 167915, 167920, 167985, 167987, 167988, 168069, 168076, 168105, 168107, 168108, 168115, 168310, 168311, 168322, 168325, 168341, 168342, 168361, 168362, 168458, 168460, 168464, 168467, 168511, 168512, 168514, 168777, 168826, 168988, 168992, 169035, 169040, 169044, 169045, 169091, 169094, 169099, 169138, 169144, 169145, 169148, 169156, 169160, 169167, 169238, 169411, 169415, 169417, 169418, 169419, 169420, 169475, 169498, 169504, 169506, 169512, 169515, 169550, 169553, 169554, 169555, 169557, 169586, 169587, 169588, 169590, 169591, 169835, 169837, 169838, 169846, 169855, 169858, 169859, 169923, 169965, 170027, 170040, 170081, 170083, 170084, 170085, 170088, 170089, 170091, 170155, 170159, 170163, 170193, 170203, 170204, 170207, 170228, 170230, 170268, 170269, 170270, 170306, 170308, 170309, 170311, 170312, 170313, 170315, 170387, 170388, 170572, 170593,
1598 if(list.Contains("LHC10h") || list.Contains("LHC11a10")) {
1599 if( list.Contains("LHC11h") || list.Contains("LHC12a17") ) {
1601 Int_t size = (int) (sizeof(runLHC11h)/sizeof(Double_t));
1602 TVectorD *vec = new TVectorD(size,runLHC11h);
1607 TVectorD *GetPDGcodes() {
1609 // array of pdgcodes stored in TDatabasePDG
1611 TDatabasePDG *pdg = new TDatabasePDG();
1612 pdg->ReadPDGTable();
1613 TGraph *gr = new TGraph();
1614 TIter next(pdg->ParticleList());
1617 while ((p = (TParticlePDG *)next())) {
1618 if(TMath::Abs(p->PdgCode()) < 1e+6) {
1619 // printf("%s -> %d \n",p->GetName(),p->PdgCode());
1620 gr->SetPoint(i++, p->PdgCode(),1.);
1624 TVectorD *vec = new TVectorD(gr->GetN(), gr->GetX());
1632 TVectorD *GetDeltaPhiBins() {
1634 // for in and out of event plane bins
1636 Double_t pi = TMath::Pi();
1637 TVectorD *deltaPhi = new TVectorD(6);
1638 (*deltaPhi)[0] = -1. *pi;
1639 (*deltaPhi)[1] = -3./4. *pi;
1640 (*deltaPhi)[2] = -1./4. *pi;
1641 (*deltaPhi)[3] = +1./4. *pi;
1642 (*deltaPhi)[4] = +3./4. *pi;
1643 (*deltaPhi)[5] = +1. *pi;