1 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
2 void AddQAHistsPID(AliDielectron *die);
3 void AddQAHistsEP(AliDielectron *die);
4 void AddQAHistsEff(AliDielectron *die);
5 void AddHistsEleEff(AliDielectron *die);
7 void InitCF(AliDielectron* die, Int_t cutDefinition);
8 void InitHF(AliDielectron* die, Int_t cutDefinition);
10 void SetupEventCuts(AliDielectron *die, ULong64_t triggers, Int_t cutDefinition);
11 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
12 void SetupV0Cuts( AliDielectron *die, Int_t cutDefinition);
13 void SetupPairCuts( AliDielectron *die, Int_t cutDefinition);
15 void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition);
16 void ConfigBgrd( AliDielectron *die, Int_t cutDefinition);
18 void AddMCSignals(AliDielectron *die, Int_t cutDefinition);
19 void SetEtaCorrection(AliDielectron *die);
20 TVectorD *GetRunNumbers2011();
21 TVectorD *GetPDGcodes();
22 TVectorD *GetDeltaPhiBins();
24 TString names=("Event;NoCut;PIDqa;LegEff;Std;SysMC;Flow;avgPt;Rec;TPC;TOF;TRD;TPC-TOF-TRD;NOPID;SysPt;SysEta;SysEle;SysPro;SysSPD;SysMCele");
25 enum { kEvent, // event quantities (mult, ep, trigger, ...)
26 kNoCut, // pure event quantities (mult, ep, trigger, ...)
27 kPIDqa, // post calibration and validation of TPC PID
28 kLegEff, // single electron efficiency calculation
29 kStd, // standard Raa analysis
31 kFlow, // flow calculation
32 kAvgPt, // mean pt and pt^2 analysis
33 kRec, // to calculate partial efficiencies, in particular the geom. acceptance
48 TObjArray *arrNames=names.Tokenize(";");
49 const Int_t nDie=arrNames->GetEntries();
52 TString list = gSystem->Getenv("LIST");
54 AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, Bool_t hasMC=kFALSE, ULong64_t triggers=AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB)
57 // Setup the instance of AliDielectron
61 TString trainRoot = gSystem->Getenv("TRAIN_ROOT");
62 Bool_t isGSItrain = (trainRoot.IsNull()?kFALSE:kTRUE);
65 if( list.IsNull()) list=prod;
66 if( list.Contains("LHC10h") || list.Contains("LHC11h") ) hasMC=kFALSE;
67 if( list.Contains("LHC11a10") || list.Contains("LHC12a17") || list.Contains("LHC13c7")) hasMC=kTRUE;
71 isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
74 TString name=Form("%02d",cutDefinition);
75 if (cutDefinition<arrNames->GetEntriesFast()) name=arrNames->At(cutDefinition)->GetName();
76 printf(" Adding %s%s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?" MC":""),name.Data(),list.Data());
79 AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("%s",name.Data()));
82 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
83 SetupEventCuts(die,triggers,cutDefinition);
84 SetupTrackCuts(die,cutDefinition);
85 SetupV0Cuts(die,cutDefinition);
86 SetupPairCuts(die,cutDefinition);
88 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MISC vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
89 // Monte Carlo Signals
90 AddMCSignals(die, cutDefinition);
91 // PID post calibartion
92 // if(cutDefinition!=kEvent && cutDefinition!=kLegEff) SetEtaCorrection(die);
94 //ConfigBgrd(die,cutDefinition);
95 // tpc event plane configuration
96 //ConfigEvtPlane(die,cutDefinition);
97 // prefilter settings NEW
98 // if(cutDefinition==kNoCut ||cutDefinition==kEvent || cutDefinition==kNoPID || cutDefinition==kPIDqa || cutDefinition==kLegEff)
101 // die->SetPreFilterAllSigns();
102 //die->SetPreFilterUnlikeOnly();
103 // load single electron effieciency map ATTENTION
104 if(cutDefinition==kAvgPt) die->InitLegEffMap("alien:///alice/cern.ch/user/j/jbook/PWGDQ/dielectron/files/effMap.root");
107 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv OUTPUT vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
109 InitHistograms(die,cutDefinition);
110 // histogram grid setup
111 InitHF(die,cutDefinition);
112 // CF container setup
113 InitCF(die,cutDefinition);
121 //______________________________________________________________________________________
122 void SetupEventCuts(AliDielectron *die, ULong64_t triggers, Int_t cutDefinition)
125 // Setup the event cuts
128 // trigger specific centrality cuts (reject trigger inefficiencies)
129 Double_t minCent=0.0, maxCent=100.;
130 if(!die->GetHasMC()) {
132 // case AliVEvent::kCentral: minCent= 0.; maxCent=10.; break; //0-9
133 // case AliVEvent::kSemiCentral: minCent=10.; maxCent=50.; break; //12-53
134 // case AliVEvent::kMB: minCent=10.; maxCent=90.; break;
135 default: minCent= 0.; maxCent=90.; break;
138 // if(cutDefinition >= kEtaGap01) {minCent=20.; maxCent=50.;} // v2 analysis
139 if(cutDefinition == kSysMC) {minCent=0.; maxCent=50.;}
140 if(cutDefinition == kSysMCele) {minCent=0.; maxCent=50.;}
142 // VZERO multiplicity vs. number ob global tracks cut
143 TF1 *fMean = new TF1("fMean", "pol1", 0,25e+3);
144 fMean->SetParameters(691.633, 1.4892);
145 TF1 *fSigma = new TF1("fSigma","[0]+sqrt([1]*x+[2])",0,25e+3);
146 fSigma->SetParameters(-83.6599, 36.7677, 69530.7);
148 AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("vertex","vertex");
149 if(!isESD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny);
150 eventCuts->SetRequireVertex();
151 eventCuts->SetMinVtxContributors(1);
152 if(cutDefinition!=kNoCut) eventCuts->SetVertexZ(-10.,+10.);
153 eventCuts->SetCentralityRange(minCent,maxCent);
154 // eventCuts->SetCutOnV0MultipicityNTrks(fMean, fSigma, 4.0);
155 // eventCuts->SetRunRejection(AliDielectronHelper::MakeArbitraryBinning("170592,170593,170594"));
157 die->GetEventFilter().AddCuts(eventCuts);
161 //______________________________________________________________________________________
162 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
165 // Setup the track cuts
167 Bool_t hasMC=die->GetHasMC();
170 // die->GetTrackFilter().AddCuts(cuts);
172 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv FILTER CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
173 // AOD track filter (needs to be first cut to speed up)
174 AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("filter","filter");
175 // config specific cuts
176 switch(cutDefinition) {
177 case kPIDqa: trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqual); break;
178 default: trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqualSPDany);
180 // trkFilter->SetMinNCrossedRowsOverFindable(0.6);
182 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv TRACK CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
183 AliDielectronVarCuts *varAccCuts = new AliDielectronVarCuts("acc","acc");
184 AliDielectronCutGroup *grpRecCuts = new AliDielectronCutGroup("rec","rec",AliDielectronCutGroup::kCompAND);
185 AliDielectronVarCuts *varRecCuts = new AliDielectronVarCuts("VarRecCuts","VarRecCuts");
186 AliDielectronTrackCuts *trkRecCuts = new AliDielectronTrackCuts("TrkRecCuts","TrkRecCuts");
188 // config specific cuts
189 switch(cutDefinition) {
191 varAccCuts->AddCut(AliDielectronVarManager::kPt, 0.5, 1e30); // 0.85 ATTENTION
192 varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7., 8.0);
204 varAccCuts->AddCut(AliDielectronVarManager::kPt, 0.85, 1e30);
205 varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.8, 0.8);
207 varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7., 8.0);
208 trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
209 //if(hasMC) varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
215 varAccCuts->AddCut(AliDielectronVarManager::kPt, 0.95, 1e30); //0.8
216 varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
217 varRecCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0);
218 trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 7); // ITS-3 = 1+2+4
220 ///////////////////////////////////////////////////////////////////////////////////////////// systematics
222 varAccCuts->AddCut(AliDielectronVarManager::kPt, 1.1, 20./*1e30*/); ///ATTENTION
223 varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.8, 0.8);
224 varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7., 8.0);
225 trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
228 varAccCuts->AddCut(AliDielectronVarManager::kPt, 0.85, 20./*1e30*/);
229 varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9); ////ATTENTION
230 varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7., 8.0);
231 trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
235 varAccCuts->AddCut(AliDielectronVarManager::kPt, 0.85, 20./*1e30*/);
236 varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.8, 0.8);
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*/);
242 varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.8, 0.8);
243 varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7., 8.0);
244 trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 1); // SPD any
247 varAccCuts->AddCut(AliDielectronVarManager::kPt, 0.85, 1e30);
248 varAccCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9); ////ATTENTION
249 varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7., 8.0);
250 trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
254 // standrad reconstruction cuts
255 varRecCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
256 varRecCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
257 varRecCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
258 varRecCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
259 // varRecCuts->AddCut(AliDielectronVarManager::kV0Index0, 0.0);
260 if(cutDefinition!=kPIDqa) trkRecCuts->SetRequireITSRefit(kTRUE);
261 trkRecCuts->SetRequireTPCRefit(kTRUE);
263 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
264 AliDielectronCutGroup *grpPIDCuts = new AliDielectronCutGroup("PID","PID",AliDielectronCutGroup::kCompAND);
265 AliDielectronVarCuts *pidSelCuts = new AliDielectronVarCuts("selPIDCuts","selPIDCuts");
266 pidSelCuts->AddCut(AliDielectronVarManager::kTRDpidQuality, 4.0, 6.0);
267 pidSelCuts->AddCut(AliDielectronVarManager::kTRDchi2, 0.0, 2.0);
268 AliDielectronVarCuts *pidVarCuts = new AliDielectronVarCuts("varPIDCuts","varPIDCuts");
269 AliDielectronVarCuts *pidMCCuts = new AliDielectronVarCuts("mcPIDCuts","mcPIDCuts");
270 AliDielectronPID *pidCuts = new AliDielectronPID("PIDCuts","PIDCuts");
272 switch(cutDefinition) {
274 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-10.,10.);
275 pidCuts->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.95,1.,pidSelCuts,
276 kFALSE, AliDielectronPID::kIfAvailable);
279 pidVarCuts->AddCut(AliDielectronVarManager::kTOFbeta, 0.2, 0.9, kTRUE);
280 pidCuts->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,
281 AliDielectronPID::kIfAvailable);
283 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,4.);
284 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,4.0,0.,0.,kTRUE);
285 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
288 pidCuts->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.95,1.,pidSelCuts,
289 kFALSE, AliDielectronPID::kIfAvailable);
296 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5.,3.);
297 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
298 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
299 // pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.65,3.0,-0.3,+0.3,kFALSE,
300 // AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
301 // pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.4,3.0,-0.1,+0.1,kFALSE,
302 // AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
303 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,4.0,0.,0.,kTRUE);
304 // tof heavy particle exclusion
305 // pidVarCuts->AddCut(AliDielectronVarManager::kTOFbeta, 0.3, 0.7, kTRUE);
306 //pidCuts->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,
307 // AliDielectronPID::kIfAvailable);
310 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.3.,3.);
311 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
312 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
313 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.65,3.0,-0.3,+0.3,kFALSE,
314 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
315 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.4,3.0,-0.1,+0.1,kFALSE,
316 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
317 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,4.0,0.,0.,kTRUE);
318 pidVarCuts->AddCut(AliDielectronVarManager::kTOFbeta, 0.2, 0.9, kTRUE);
319 pidCuts->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,
320 AliDielectronPID::kIfAvailable);
321 pidCuts->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.95,1.,pidSelCuts,
322 kFALSE, AliDielectronPID::kIfAvailable);
324 ///////////////////////////////////////////////////////////////////////////////////////////// systematics
328 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5.,3.);
329 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
330 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
331 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,4.0,0.,0.,kTRUE);
334 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,+0.7.,3.);
335 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,4.0,0.,0.,kTRUE);
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.,3.5,0.,0.,kTRUE);
344 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5.,3.);
345 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
346 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
347 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
350 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5.,3.);
351 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
352 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
353 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,4.0,0.,0.,kTRUE);
358 if(cutDefinition==kPIDqa && hasMC) {
359 pidMCCuts->SetCutType(AliDielectronVarCuts::kAny);//only apply any of the two cuts
360 pidMCCuts->AddCut(AliDielectronVarManager::kPdgCode,-11.5,-10.5 );
361 pidMCCuts->AddCut(AliDielectronVarManager::kPdgCode,10.5,11.5 );
364 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID POST CORRECTION vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
365 // if(cutDefinition!=kEvent) SetEtaCorrection(pidCuts,hasMC);
368 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv TENDER CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
369 // exclude conversion electrons selected by the tender
370 AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
371 noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
373 // activate the cut sets (order might be CPU timewise important)
374 switch(cutDefinition) {
377 if(!isESD) die->GetTrackFilter().AddCuts(trkFilter);
378 die-> GetTrackFilter().AddCuts(varAccCuts);
379 grpRecCuts->AddCut(trkRecCuts);
380 grpRecCuts->AddCut(varRecCuts);
381 die-> GetTrackFilter().AddCuts(grpRecCuts);
382 if(hasMC) grpPIDCuts->AddCut(pidMCCuts);
383 else grpPIDCuts->AddCut(pidCuts);
384 die-> GetTrackFilter().AddCuts(grpPIDCuts);
387 die->GetTrackFilter().AddCuts(varAccCuts);
388 grpRecCuts->AddCut(trkRecCuts);
389 grpRecCuts->AddCut(varRecCuts);
390 die->GetTrackFilter().AddCuts(grpRecCuts);
409 if(!isESD) die->GetTrackFilter().AddCuts(trkFilter);
410 die-> GetTrackFilter().AddCuts(varAccCuts);
411 grpRecCuts->AddCut(trkRecCuts);
412 grpRecCuts->AddCut(varRecCuts);
413 die-> GetTrackFilter().AddCuts(grpRecCuts);
414 grpPIDCuts->AddCut(pidCuts);
415 // grpPIDCuts->AddCut(pidVarCuts);
416 die-> GetTrackFilter().AddCuts(grpPIDCuts);
417 //cuts->AddCut(noconv);
427 //______________________________________________________________________________________
428 void SetupV0Cuts(AliDielectron *die, Int_t cutDefinition)
434 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 if(cutDefinition==kPIDqa && 0) {
460 gammaV0Cuts->AddCut(AliDielectronVarManager::kImpactParXY, 0.0, 1.0, kFALSE);
461 gammaV0Cuts->AddCut(AliDielectronVarManager::kImpactParZ, 0.0, 1.0, kFALSE);
463 // gammaV0Cuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.1, kFALSE);
464 gammaV0Cuts->SetExcludeTracks(bRej);
465 gammaV0Cuts->Print();
467 // const Double_t |cutAlphaG| < 0.35; && const Double_t cutQTG < 0.05;
468 // const Double_t |cutAlphaG2|[2] = {0.6, 0.8}; && const Double_t cutQTG2 < 0.04;
471 // ((AliDielectronCutGroup*)cuts)->AddCut(gammaV0Cuts);
473 die->GetTrackFilter().AddCuts(gammaV0Cuts);
476 //______________________________________________________________________________________
477 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
480 // Setup the pair cuts
482 Bool_t hasMC=die->GetHasMC();
484 // rap and mass rejection
485 Double_t gCut=0.05, yCut=0.9, eCut=0.01;
486 switch(cutDefinition) {
488 case kEvent: yCut=0.0; break;
490 case kFlow: yCut=0.8; break;
491 case kRec: yCut=0.9; break;
493 case kTPC: yCut=0.9; break;
494 case kTOF: yCut=0.9; break;
495 case kTRD: yCut=0.8; break;
496 case kStd: yCut=0.8; break;
497 case kLegEff: return;
498 case kTPCTOFTRD: yCut=0.8; break;
499 case kAvgPt: yCut=0.8; break;
500 case kSysMC: yCut=0.9; break;
501 case kSysMCele: yCut=0.8; break;
502 case kSysEta: yCut=0.9; break;
508 // default: gCut=0.05; // default
512 //if(hasMC) yCut=0.9;
514 // rapidity selection
515 AliDielectronVarCuts *rapCut=new AliDielectronVarCuts(Form("|Y|<%.1f",yCut),Form("|Y|<%.1f",yCut));
516 rapCut->AddCut(AliDielectronVarManager::kY,-1.*yCut,yCut);
517 die->GetPairFilter().AddCuts(rapCut);
520 AliDielectronVarCuts *gammaCuts = new AliDielectronVarCuts("GammaCuts","GammaCuts");
521 gammaCuts->AddCut(AliDielectronVarManager::kM, 0.0, gCut);
522 die->GetPairPreFilter().AddCuts(gammaCuts);
524 // pair efficiency cut
525 // if(cutDefinition==kAvgPt && !hasMC) {
526 // AliDielectronVarCuts *effCut=new AliDielectronVarCuts(Form("(Axe)>%.2f",eCut),Form("(Axe)>%.2f",eCut));
527 // effCut->AddCut(AliDielectronVarManager::kPairEff,0.0,eCut,kTRUE);
528 // die->GetPairFilter().AddCuts(effCut);
531 // random signal rejection
532 AliDielectronCutGroup *grpRNDMCuts = new AliDielectronCutGroup("RNDM","RNDM",AliDielectronCutGroup::kCompOR);
533 AliDielectronVarCuts *exclCutCEN=new AliDielectronVarCuts("exclCEN","exclCEN");
534 exclCutCEN->SetCutType(AliDielectronVarCuts::kAll); // all criteria need to be fullfilled
535 exclCutCEN->AddCut(AliDielectronVarManager::kRndmPair,0.0,1./40);
536 exclCutCEN->AddCut(AliDielectronVarManager::kPdgCode,443);
537 exclCutCEN->AddCut(AliDielectronVarManager::kCentrality,0.,10.);
538 AliDielectronVarCuts *exclCutSEMI=new AliDielectronVarCuts("exclSEMI","exclSEMI");
539 exclCutSEMI->SetCutType(AliDielectronVarCuts::kAll); // all criteria need to be fullfilled
540 exclCutSEMI->AddCut(AliDielectronVarManager::kRndmPair,0.0,1./20);
541 exclCutSEMI->AddCut(AliDielectronVarManager::kPdgCode,443);
542 exclCutSEMI->AddCut(AliDielectronVarManager::kCentrality,10.,90.);
543 AliDielectronVarCuts *inclCut=new AliDielectronVarCuts("incl","incl");
544 inclCut->AddCut(AliDielectronVarManager::kPdgCode,443,443,kTRUE);
545 grpRNDMCuts->AddCut(exclCutCEN);
546 grpRNDMCuts->AddCut(exclCutSEMI);
547 grpRNDMCuts->AddCut(inclCut);
548 if(hasMC && cutDefinition==kStd && 0) die->GetPairFilter().AddCuts(grpRNDMCuts); //ATTENTION
552 //______________________________________________________________________________________
553 void ConfigBgrd(AliDielectron *die, Int_t cutDefinition)
556 // Configurate the background estimators
559 // default no processing of LS
560 // die->SetProcessLS(kFALSE);
563 switch(cutDefinition) {
573 Bool_t hasMC=die->GetHasMC();
574 if(hasMC && cutDefinition!=kAvgPt) return;
576 // add track rotations
577 AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
578 rot->SetIterations(10);
579 rot->SetConeAnglePhi(TMath::Pi());
580 rot->SetStartAnglePhi(TMath::Pi());
581 // die->SetTrackRotator(rot);
584 AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
585 switch(cutDefinition) {
587 // mix->AddVariable(AliDielectronVarManager::kZvPrim, 20, -10., 10.);
588 // mix->AddVariable(AliDielectronVarManager::kCentrality, 36, 0., 90.);
589 // mix->AddVariable(AliDielectronVarManager::kv0ACrpH2, 10, 0., TMath::Pi());
592 mix->AddVariable(AliDielectronVarManager::kZvPrim, "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
593 mix->AddVariable(AliDielectronVarManager::kCentrality, 9, 0.,90.);
594 mix->AddVariable(AliDielectronVarManager::kTPCrpH2, 10, TMath::Pi()/-2, TMath::Pi()/2); // max res: 10%->10bins // 8bins
595 // mix->AddVariable(AliDielectronVarManager::kTPCmagH2, "0.,20.,50.,80.,110.,150.,500.");
598 mix->SetSkipFirstEvent(kTRUE); // needed for flow analysis
599 mix->SetMixType(AliDielectronMixingHandler::kAll);
601 die->SetMixingHandler(mix);
605 //______________________________________________________________________________________
606 void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition)
609 // Configurate the TPC event plane
612 switch(cutDefinition) {
616 // case kRec: // TOTHINK: might be needed when checking efficiencies versus dPhi
621 Bool_t hasMC=die->GetHasMC();
622 if(hasMC && cutDefinition!=kAvgPt) return;
625 // switch(cutDefinition) {
626 // case kEtaGap01: gGap=0.1; break;
627 // case kEtaGap02: gGap=0.2; break;
628 // case kEtaGap03: gGap=0.3; break;
629 // case kEtaGap04: gGap=0.4; break;
630 // case kEtaGap05: gGap=0.5; break;
631 // default: gGap=0.0;
633 // eta gap in tpc event plane
634 // AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap");
635 // etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE);
636 // die->GetEventPlanePreFilter().AddCuts(etaGap);
638 AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
639 poi->AddCut(AliDielectronVarManager::kM,2.92,3.20); // particles of interest, jpsi mass window
640 die->GetEventPlanePOIPreFilter().AddCuts(poi);
642 // die->SetLikeSignSubEvents();
643 die->SetPreFilterEventPlane();
646 //______________________________________________________________________________________
647 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
650 // Initialise the histograms
652 Bool_t hasMC=die->GetHasMC();
654 // booleans for histo selection
655 Bool_t bHistTrackQA=kFALSE, bHistEvts=kFALSE, bHistPair=kFALSE, bHistTrk=kFALSE, bHistPairME=kFALSE, bHistFlow=kFALSE, bHistFlowQA=kFALSE, bHistPID=kFALSE;
656 switch (cutDefinition) {
658 case kEvent: bHistEvts=kTRUE; break;
659 case kPIDqa: bHistTrk=kTRUE; break;
660 case kNoPID: bHistTrk=kTRUE; break;
661 case kRec: /* */ break;
663 case kTOF: //bHistEvts=kTRUE; //bHistFlow=kTRUE;
664 case kTRD: ///bHistEvts=kTRUE; //bHistFlow=kTRUE;
667 case kStd: ///*bHistEvts=kTRUE;*/ bHistPair=kTRUE; break; //bHistPairME=kTRUE;
668 case kTPCTOFTRD: bHistPair=kTRUE; bHistTrk=kTRUE; bHistPID=kTRUE; break; //bHistPairME=kTRUE;
669 case kSysMCele: bHistPair=kTRUE; bHistPID=kFALSE; break; //bHistPairME=kTRUE;
670 case kLegEff: bHistTrk=kTRUE; break;
676 //Setup histogram Manager
677 AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
678 die->SetHistogramManager(histos);
680 //Initialise histogram classes
681 histos->SetReservedWords("Track;Pair");
683 //add histograms to event class
684 histos->AddClass("Event");
685 Int_t maxMixBins = (die->GetMixingHandler() ? die->GetMixingHandler()->GetNumberOfBins() : 0);
686 histos->UserHistogram("Event","","", 100, 0.0, 100.0, AliDielectronVarManager::kCentrality);
687 if(die->GetMixingHandler() && maxMixBins)
688 histos->UserHistogram("Event","","", maxMixBins, 0, maxMixBins, AliDielectronVarManager::kMixingBin);
689 // candidates monitoring
690 histos->UserProfile("Event","","", AliDielectronVarManager::kTracks, GetRunNumbers2011(), AliDielectronVarManager::kRunNumber);
691 histos->UserProfile("Event","","", AliDielectronVarManager::kPairs, GetRunNumbers2011(), AliDielectronVarManager::kRunNumber);
694 //event plane histograms
695 if(cutDefinition==kFlow) {
696 if(!hasMC) AddQAHistsEP(die);
697 histos->UserHistogram("Pair","","", 100,-1*TMath::Pi(),+1*TMath::Pi(), AliDielectronVarManager::kDeltaPhiv0ArpH2);
698 histos->UserHistogram("Pair","","", 100,-1*TMath::Pi(),+1*TMath::Pi(), AliDielectronVarManager::kDeltaPhiv0CrpH2);
699 histos->UserHistogram("Pair","","", 100,-1*TMath::Pi(),+1*TMath::Pi(), AliDielectronVarManager::kDeltaPhiTPCrpH2);
702 ////// EVENT HISTOS /////
704 histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronVarManager::kRunNumber);
705 histos->UserHistogram("Event","","", 300,-15.,15., AliDielectronVarManager::kZvPrim);
706 // histos->UserHistogram("Event","","", 300,0.,15000., AliDielectronVarManager::kRefMult);
707 histos->UserHistogram("Event","","", 300,0.,3000., AliDielectronVarManager::kRefMultTPConly);
709 // histos->UserHistogram("Event","","", 100,0.,100., AliDielectronVarManager::kRefMultTPConly);
710 histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronHelper::MakeLinBinning(3000, 0., 3000.),
711 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kRefMultTPConly);
712 histos->UserHistogram("Event","","", AliDielectronHelper::MakeLinBinning(90, 0., 90.), AliDielectronHelper::MakeLinBinning(3000, 0., 3000.),
713 AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRefMultTPConly);
714 histos->UserProfile( "Event","","", AliDielectronVarManager::kRefMultTPConly, 90, 0., 90., AliDielectronVarManager::kCentrality);
715 histos->UserProfile( "Event","","", AliDielectronVarManager::kMultV0A, 90, 0., 90., AliDielectronVarManager::kCentrality);
716 histos->UserProfile( "Event","","", AliDielectronVarManager::kMultV0C, 90, 0., 90., AliDielectronVarManager::kCentrality);
717 // histos->UserProfile( "Event","","", AliDielectronVarManager::kEqMultV0A, 90, 0., 90., AliDielectronVarManager::kCentrality);
718 // histos->UserProfile( "Event","","", AliDielectronVarManager::kEqMultV0C, 90, 0., 90., AliDielectronVarManager::kCentrality);
719 histos->UserProfile( "Event","","", AliDielectronVarManager::kNVtxContrib, 90, 0., 90., AliDielectronVarManager::kCentrality);
720 histos->UserHistogram("Event","","", 100, 0., 4000., AliDielectronVarManager::kNVtxContribTPC);
722 // event plane histograms
723 if(!hasMC) AddQAHistsEP(die);
724 // trigger histograms
726 histos->UserHistogram("Event","","", 29,0.,29., AliDielectronVarManager::kTriggerInclONL);
727 histos->UserHistogram("Event","","", 29,0.,29., AliDielectronVarManager::kTriggerInclOFF);
728 histos->UserHistogram("Event","","", 29,0.,29., AliDielectronVarManager::kTriggerExclOFF);
729 histos->UserHistogram("Event","","", 100,0.,100.,29,0.,29.,
730 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTriggerInclONL);
731 histos->UserHistogram("Event","","", 100,0.,100.,29,0.,29.,
732 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTriggerExclOFF);
733 histos->UserHistogram("Event","","", 300,0.,3000.,29,0.,29.,
734 AliDielectronVarManager::kRefMultTPConly,AliDielectronVarManager::kTriggerExclOFF);
735 histos->UserHistogram("Event","","", 300,0.,3000.,29,0.,29.,
736 AliDielectronVarManager::kRefMultTPConly,AliDielectronVarManager::kTriggerInclOFF);
741 ///// PAIR HISTOS /////
745 // to fill also mixed event histograms loop until 7 or 10
746 for (Int_t i=1; i<(bHistPairME ? 8 : 2); ++i){
747 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
750 //add MC signal histograms to pair class
751 if(die->GetMCSignals()) {
752 for (Int_t i=0; i<die->GetMCSignals()->GetEntriesFast(); ++i) {
753 histos->AddClass(Form("Pair_%s",die->GetMCSignals()->At(i)->GetName()));
754 histos->AddClass(Form("Pair_%s_MCtruth",die->GetMCSignals()->At(i)->GetName()));
758 ///// Pair classes /////
759 histos->UserHistogram("Pair","","", 375,.0,375*0.04, AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
760 histos->UserHistogram("Pair","","", 100,-1.,1., AliDielectronVarManager::kY);
761 histos->UserHistogram("Pair","","", 400,0,20., AliDielectronVarManager::kPt);
762 histos->UserHistogram("Pair","","", 125,.0,125*0.04, 400,0,20., AliDielectronVarManager::kM,AliDielectronVarManager::kPt);
763 histos->UserHistogram("Pair","","", 100,0.,3.15, AliDielectronVarManager::kOpeningAngle);
764 histos->UserHistogram("Pair","","", 100,0.,20, AliDielectronVarManager::kChi2NDF);
765 histos->UserHistogram("Pair","","", 100,0.,3.15, AliDielectronVarManager::kPsiPair);
766 histos->UserHistogram("Pair","","", 200,0.,100., AliDielectronVarManager::kR);
767 histos->UserHistogram("Pair","","", 50,0.,5., AliDielectronVarManager::kLegDist);
768 histos->UserHistogram("Pair","","", 50,0.,5., AliDielectronVarManager::kLegDistXY);
769 // histos->UserHistogram("Pair","","", 210,-1.05,1.05, 100,0.,2.5,
770 // AliDielectronVarManager::kArmAlpha,AliDielectronVarManager::kArmPt);
771 histos->UserHistogram("Pair","","", 500,-2.5,2.5, AliDielectronVarManager::kImpactParXY);
772 histos->UserHistogram("Pair","","", 600,-3.,3., AliDielectronVarManager::kImpactParZ);
774 if(!hasMC && die->GetMixingHandler() && maxMisBins)
775 histos->UserHistogram("Pair","","", maxMixBins, 0, maxMixBins, AliDielectronVarManager::kMixingBin);
777 histos->UserHistogram("Pair","","", 100,.0,1., AliDielectronVarManager::kRndmPair);
778 // histos->UserHistogram("Pair","","", GetPDGcodes(), AliDielectronVarManager::kPdgCode);
779 // histos->UserHistogram("Pair","","", GetPDGcodes(), AliDielectronVarManager::kPdgCodeMother);
780 // histos->UserHistogram("Pair","","", GetPDGcodes(), AliDielectronVarManager::kPdgCodeGrandMother);
785 ///// TRACK HISTOS /////
788 //legs from pair (fill SE)
789 for (Int_t i=1; i<2; ++i){
790 if(bHistPair) histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
792 //to fill also track info from 2nd event loop until 2
793 // for (Int_t i=0; i<2; ++i) histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
794 if(cutDefinition!=kLegEff)
795 histos->AddClass(Form("Track_%s", AliDielectron::PairClassName(AliDielectron::kEv1PM)));
797 // PID post calibration
798 if(cutDefinition==kPIDqa) AddQAHistsPID(die);
801 // histos->UserHistogram("Track","","", 500,-1.,1., AliDielectronVarManager::kImpactParXY);
802 // histos->UserHistogram("Track","","", 600,-3.,3., AliDielectronVarManager::kImpactParZ);
804 histos->UserHistogram("Track","","", 400,0,20., AliDielectronVarManager::kPt);
805 histos->UserHistogram("Track","","", 200,-1,1, 200,0,6.285, AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
807 // histos->UserHistogram("Track","","", 160,-0.5,159.5, AliDielectronVarManager::kNclsTPC);
808 // histos->UserHistogram("Track","","", 160,-0.5,159.5, AliDielectronVarManager::kTPCsignalN);
809 // histos->UserHistogram("Track","","", 160,-0.5,159.5, AliDielectronVarManager::kNFclsTPCr);
810 // histos->UserHistogram("Track","","", 160,-0.5,159.5, 160,-0.5,159.5, AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
812 histos->UserHistogram("Track","","", 8,-0.5, 7.5, AliDielectronVarManager::kTRDpidQuality);
813 histos->UserHistogram("Track","","", 101,-0.5, 100.5, AliDielectronVarManager::kTRDsignal);
814 histos->UserHistogram("Track","","", 101,-0.5, 100.5, AliDielectronVarManager::kTRDchi2);
816 histos->UserHistogram("Track","","", 400,0.2,20.,200,0.,200., AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
817 histos->UserHistogram("Track","","", 400,0.2,20.,200,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
818 histos->UserHistogram("Track","","", 250,0.2,5.0,300,0.,1.2, AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFbeta,kTRUE);
819 // histos->UserHistogram("Track","","", 100,-1.,+1.,200,-10.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEle);
821 // histos->UserHistogram("Track","","", 100,0.2,10.,100,0.,200.,
822 // AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
823 // histos->UserHistogram("Track","","", 100,0.2,10.,100,-5.,+5.,
824 // AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
825 histos->UserHistogram("Track","","", 100,0.,4000.,100,0.,200.,
826 AliDielectronVarManager::kRefMultTPConly,AliDielectronVarManager::kTPCsignal);
827 histos->UserHistogram("Track","","", 100,0.,4000.,100,-5.,+5.,
828 AliDielectronVarManager::kRefMultTPConly,AliDielectronVarManager::kTPCnSigmaEle);
829 histos->UserHistogram("Track","","", 100,0.,100.,100,0.,200.,
830 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsignal);
831 histos->UserHistogram("Track","","", 100,0.,100.,100,-5.,+5.,
832 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCnSigmaEle);
833 histos->UserHistogram("Track","","", 100,-1.,+1.,100,0.,200.,
834 AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCsignal);
835 histos->UserHistogram("Track","","", 100,-1.,+1.,100,-5.,+5.,
836 AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEle);
837 histos->UserHistogram("Track","","", 100,-1.,+1.,100,-5.,+5.,
838 AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEleRaw);
839 histos->UserHistogram("Track","","", 100,-1.,+1.,100,-5.,+5.,
840 AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaPio);
844 if(cutDefinition==kAvgPt) {
845 // add single electron efficiency histograms
849 ////// MONTE CARLO //////
850 if(cutDefinition==kLegEff) {
852 //add MC signal histograms to track class
853 if(die->GetMCSignals()) {
855 TString className="";
856 for (Int_t i=0; i<die->GetMCSignals()->GetEntriesFast(); ++i) {
857 TString sigMCname = die->GetMCSignals()->At(i)->GetName();
860 // histos->AddClass(Form("Pair_%s_MCtruth", sigMCname.Data()));
861 // histos->AddClass(Form("Track_Legs_%s_MCtruth",sigMCname.Data()));
863 // histos->AddClass(Form("Pair_%s", sigMCname.Data()));
864 // histos->AddClass(Form("Track_Legs_%s", sigMCname.Data()));
866 histos->AddClass(Form("Track_%s_%s",AliDielectron::PairClassName(AliDielectron::kEv1PM),sigMCname.Data()));
867 histos->AddClass(Form("Track_%s_%s_MCtruth",AliDielectron::PairClassName(AliDielectron::kEv1PM),sigMCname.Data()));
868 } //end: loop signals
871 // add single electron histograms
874 // histos->UserHistogram("Track","","", GetPDGcodes(), AliDielectronVarManager::kPdgCode);
875 // histos->UserHistogram("Track","","", GetPDGcodes(), AliDielectronVarManager::kPdgCodeMother);
876 // histos->UserHistogram("Track","","", GetPDGcodes(), AliDielectronVarManager::kPdgCodeGrandMother);
877 // histos->UserHistogram("Track","","", GetPDGcodes(), GetPDGcodes(),
878 // AliDielectronVarManager::kPdgCodeMother, AliDielectronVarManager::kPdgCodeGrandMother);
883 die->SetHistogramManager(histos);
887 TIter nextClass(histos->GetHistogramList());
889 while ( (l=static_cast<THashList*>(nextClass())) ) {
890 //printf(" [D] HistogramManger: Class %s: Histograms: %04d \n", l->GetName(), l->GetEntries());
893 } //end: init histograms
895 void AddQAHistsPID(AliDielectron *die) {
897 // add histograms for PID validation, comparison, post calibration aso.
900 Bool_t hasMC=die->GetHasMC();
901 AliDielectronHistos *histos = die->GetHistoManager();
903 // add MC signal tracks
904 if(hasMC && die->GetMCSignals()) {
905 TString sigMCname = die->GetMCSignals()->Last()->GetName();
906 histos->AddClass(Form("Track_%s_%s",AliDielectron::PairClassName(AliDielectron::kEv1PM),sigMCname.Data()));
910 // for TPC post calibration
912 // arbitrary binning for variables
913 TVectorD *vcen = AliDielectronHelper::MakeLinBinning( 11, 0., 55.);
916 // array of bin limits
917 TObjArray *limits = new TObjArray();
918 limits->Add(AliDielectronHelper::MakeLinBinning( 75,-10., 5.));
919 limits->Add(AliDielectronHelper::MakeLinBinning( 75,-10., 5.));
920 // limits->Add(AliDielectronHelper::MakeLinBinning(100, 0., 200.));
921 // limits->Add(AliDielectronHelper::MakeLinBinning(60, 0., 1.2));
922 limits->Add(AliDielectronHelper::MakeLinBinning( 50, 0., 4000.));
923 limits->Add(AliDielectronHelper::MakeLinBinning( 50, 0., 10.));
924 // limits->Add(vcen);
925 // limits->Add(AliDielectronHelper::MakeLinBinning( 36, 0., 90.));
926 limits->Add(AliDielectronHelper::MakeLinBinning( 20, -1., 1.));
927 limits->Add(GetRunNumbers2011());
928 UInt_t var[]={AliDielectronVarManager::kTPCnSigmaEleRaw, // NOTE: raw nsigma w/o corr
929 AliDielectronVarManager::kTPCnSigmaEle,
930 // AliDielectronVarManager::kTOFbeta,
931 // AliDielectronVarManager::kTPCsignal,
932 AliDielectronVarManager::kRefMultTPConly,
933 AliDielectronVarManager::kPIn,
934 // AliDielectronVarManager::kCentrality,
935 AliDielectronVarManager::kEta,
936 AliDielectronVarManager::kRunNumber
938 // add merged track histogram
939 histos->UserSparse("Track", limits->GetEntriesFast(), limits, var);
941 // run dependence of nisgma electron
942 histos->UserHistogram("Track","","", GetRunNumbers2011(),AliDielectronHelper::MakeLinBinning(100,-5.,+5.),
943 AliDielectronVarManager::kRunNumber,AliDielectronVarManager::kTPCnSigmaEleRaw);
944 histos->UserHistogram("Track","","", GetRunNumbers2011(),AliDielectronHelper::MakeLinBinning(100,-5.,+5.),
945 AliDielectronVarManager::kRunNumber,AliDielectronVarManager::kTPCnSigmaEle);
947 // post calibration check
948 histos->UserHistogram("Track","","", 100,0.2,10.,100,-5.,+5.,
949 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEleRaw,kTRUE);
950 histos->UserHistogram("Track","","", 100,0.2,10.,100,-5.,+5.,
951 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
953 // TPC number of points used for nsigma calculation
954 histos->UserHistogram("Track","","", 160,-0.5,159.5, AliDielectronVarManager::kTPCsignalN);
957 void AddQAHistsEP(AliDielectron *die) {
959 // add histograms for event plane flattening aso.
962 Bool_t hasMC=die->GetHasMC();
963 AliDielectronHistos *histos = die->GetHistoManager();
965 histos->UserHistogram("Event","","", AliDielectronHelper::MakeLinBinning(100,-1.6,1.6), AliDielectronVarManager::kTPCrpH2);
966 histos->UserHistogram("Event","","", AliDielectronHelper::MakeLinBinning(100,-1.6,1.6), AliDielectronVarManager::kTPCrpH2uc);
968 // event plane resolutions
969 TObjArray *limits = new TObjArray();
970 limits->Add(AliDielectronHelper::MakeLinBinning( 18, 0., 90.));
971 // limits->Add(GetRunNumbers2011());
972 limits->Add(AliDielectronHelper::MakeLinBinning(100, -1., 1.));
973 limits->Add(AliDielectronHelper::MakeLinBinning(100, -1., 1.));
974 limits->Add(AliDielectronHelper::MakeLinBinning(100, -1., 1.));
976 UInt_t var[]={AliDielectronVarManager::kCentrality,
977 // AliDielectronVarManager::kRunNumber,
978 AliDielectronVarManager::kv0ATPCDiffH2,
979 AliDielectronVarManager::kv0CTPCDiffH2,
980 AliDielectronVarManager::kv0Av0CDiffH2 };
981 // histos->UserSparse("Event", 4, limits, var);
983 // event plane angles
984 TObjArray *limits2 = new TObjArray();
985 limits2->Add(AliDielectronHelper::MakeLinBinning( 18, 0., 90.));
986 // limits2->Add(GetRunNumbers2011());
987 limits2->Add(AliDielectronHelper::MakeLinBinning(100, -1.6, 1.6));
988 limits2->Add(AliDielectronHelper::MakeLinBinning(100, -1.6, 1.6));
989 limits2->Add(AliDielectronHelper::MakeLinBinning(100, -1.6., 1.6));
991 UInt_t var2[]={AliDielectronVarManager::kCentrality,
992 // AliDielectronVarManager::kRunNumber,
993 AliDielectronVarManager::kv0ArpH2,
994 AliDielectronVarManager::kv0CrpH2,
995 AliDielectronVarManager::kTPCrpH2 };
996 histos->UserSparse("Event", limits2->GetEntriesFast(), limits2, var2);
998 // VZERO event plane angles (sub rings)
999 histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0A0rpH2);
1000 histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0C0rpH2);
1001 histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0A3rpH2);
1002 histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0C3rpH2);
1003 histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0ACrpH2); // combined A+C
1005 // run dependence of the angles
1006 histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronHelper::MakeLinBinning(100,-1.6,1.6),
1007 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0ArpH2);
1008 histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronHelper::MakeLinBinning(100,-1.6,1.6),
1009 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0CrpH2);
1010 histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronHelper::MakeLinBinning(100,-1.6,1.6),
1011 AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kTPCrpH2);
1014 // TPC q vector components
1015 histos->UserHistogram("Event","","", 100,-1500.,1500., AliDielectronVarManager::kTPCxH2);
1016 histos->UserHistogram("Event","","", 100,-1500.,1500., AliDielectronVarManager::kTPCyH2);
1017 // histos->UserHistogram("Event","","", 100, -2., 2., AliDielectronVarManager::kTPCsub1rpH2);
1018 // histos->UserHistogram("Event","","", 100, -2., 2., AliDielectronVarManager::kTPCsub2rpH2);
1019 // histos->UserHistogram("Event","","", 100, -1., 1., AliDielectronVarManager::kTPCsub12DiffH2);
1021 // further event plane resolutions (used in 3 sub event method)
1022 histos->UserProfile("Event","","", AliDielectronVarManager::kv0ATPCDiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
1023 histos->UserProfile("Event","","", AliDielectronVarManager::kv0CTPCDiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
1024 histos->UserProfile("Event","","", AliDielectronVarManager::kv0Av0CDiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
1025 histos->UserProfile("Event","","", AliDielectronVarManager::kTPCsub12DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
1026 histos->UserProfile("Event","","", AliDielectronVarManager::kv0Av0C0DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
1027 histos->UserProfile("Event","","", AliDielectronVarManager::kv0Av0C3DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
1028 histos->UserProfile("Event","","", AliDielectronVarManager::kv0Cv0A0DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
1029 histos->UserProfile("Event","","", AliDielectronVarManager::kv0Cv0A3DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
1030 histos->UserProfile("Event","","", AliDielectronVarManager::kv0A0v0A3DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
1031 histos->UserProfile("Event","","", AliDielectronVarManager::kv0C0v0C3DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
1033 // EP angle correlation (range of phi angle)
1034 // histos->UserHistogram("Event","","", 320,-3.2.,3.2, 320,-3.2.,3.2,
1035 // AliDielectronVarManager::kTPCrpH2,AliDielectronVarManager::kv0ACrpH2);
1037 // EP Qvector magnitudes
1038 histos->UserHistogram("Event","","", 200,0.,200., AliDielectronVarManager::kTPCmagH2);
1039 histos->UserHistogram("Event","","", 200,0.,800., AliDielectronVarManager::kv0ACmagH2);
1040 histos->UserHistogram("Event","","", 200,0.,800., AliDielectronVarManager::kv0AmagH2);
1041 histos->UserHistogram("Event","","", 200,0.,800., AliDielectronVarManager::kv0CmagH2);
1043 // detector effects checks
1044 histos->UserHistogram("Event","","", 10,0.,100., 300,-1.0,1.0,
1045 AliDielectronVarManager::kCentrality, AliDielectronVarManager::kTPCsub12DiffH2Sin);
1048 // histos->UserProfile("Event","","", AliDielectronVarManager::kTPCxH2,
1049 // AliDielectronHelper::MakeLinBinning(9, 0.,90.), GetRunNumbers2011(),
1050 // AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRunNumber);
1051 // histos->UserProfile("Event","","", AliDielectronVarManager::kTPCyH2,
1052 // AliDielectronHelper::MakeLinBinning(9, 0.,90.), GetRunNumbers2011(),
1053 // AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRunNumber);
1057 void AddHistsEleEff(AliDielectron *die) {
1059 // adding histograms for single electron efficiencies
1062 Bool_t hasMC=die->GetHasMC();
1063 AliDielectronHistos *histos = die->GetHistoManager();
1065 // single electron efficiecy
1067 // arbitrary binning for variables
1068 // TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 41, 0.0, 10.25);
1069 // (*vpt)[41] = 20.;
1070 TVectorD *vpt1 = AliDielectronHelper::MakeLinBinning( (int)(( 3. - 0.)/0.10), 0., 3.); //steps of 100MeV
1071 TVectorD *vpt2 = AliDielectronHelper::MakeLinBinning( (int)(( 10.- 3.25)/0.25), 3.25, 10.); //steps of 250MeV
1072 TVectorD *vpt3 = AliDielectronHelper::MakeLinBinning( (int)((100.-20.)/10.0), 20., 100.); //steps of 10GeV
1073 TVectorD *vpt = new TVectorD(vpt1->GetNrows()+vpt2->GetNrows()+vpt3->GetNrows());
1074 for(Int_t i=0; i<vpt1->GetNrows(); i++) (*vpt)[i] = (*vpt1)[i];
1075 for(Int_t i=0; i<vpt2->GetNrows(); i++) (*vpt)[vpt1->GetNrows()+i] = (*vpt2)[i];
1076 for(Int_t i=0; i<vpt3->GetNrows(); i++) (*vpt)[vpt1->GetNrows()+vpt2->GetNrows()+i] = (*vpt3)[i];
1077 delete vpt1; delete vpt2; delete vpt3; //vpt->Print();
1079 // array of bin limits
1080 TObjArray *limEpm = new TObjArray();
1081 // limEpm->Add(AliDielectronHelper::MakeLinBinning( 75,-10., 5.));
1082 limEpm->Add(AliDielectronHelper::MakeLinBinning( 18, 0., 90.));
1084 limEpm->Add(AliDielectronHelper::MakeLinBinning( 20, 0., TMath::TwoPi()));
1085 limEpm->Add(AliDielectronHelper::MakeLinBinning( 20, -1., +1.));
1086 // limEpm->Add(AliDielectronHelper::MakeLinBinning( 1, -1., +1.));
1087 // limEpm->Add(AliDielectronHelper::MakeLinBinning( 1, -1., +1.));
1088 limEpm->Add(GetRunNumbers2011());
1089 limEpm->Add(GetPDGcodes());
1090 limEpm->Add(GetPDGcodes());
1091 UInt_t varEpm[]={//AliDielectronVarManager::kTPCnSigmaEle,
1092 AliDielectronVarManager::kCentrality
1093 ,AliDielectronVarManager::kPt
1094 ,AliDielectronVarManager::kPhi
1095 ,AliDielectronVarManager::kEta
1096 // ,AliDielectronVarManager::kImpactParXY
1097 // ,AliDielectronVarManager::kImpactParZ
1098 ,AliDielectronVarManager::kRunNumber
1099 ,AliDielectronVarManager::kPdgCodeMother
1100 ,AliDielectronVarManager::kPdgCodeGrandMother
1103 if(hasMC) histos->UserSparse("Track", limEpm->GetEntriesFast(), limEpm, varEpm);
1106 histos->UserHistogram("Track","","", 500,-1.,1., AliDielectronVarManager::kImpactParXY);
1107 histos->UserHistogram("Track","","", 600,-3.,3., AliDielectronVarManager::kImpactParZ);
1110 // array of bin limits
1111 TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 21, 0.0, 10.5);
1113 TObjArray *limPair = new TObjArray();
1114 limPair->Add(AliDielectronHelper::MakeLinBinning( 18, 0., 90.));
1115 limPair->Add(AliDielectronHelper::MakeLinBinning( 20, -1., +1.));
1117 // limPair->Add(GetPDGcodes());
1119 AliDielectronVarManager::kCentrality
1120 ,AliDielectronVarManager::kThetaCS
1121 ,AliDielectronVarManager::kPt
1122 // ,AliDielectronVarManager::kPdgCodeMother
1124 // if(hasMC) histos->UserSparse("Pair", limPair->GetEntriesFast(), limPair, varPair); // TAKES 4ever
1129 void AddQAHistsEff(AliDielectron *die) {
1131 // adding histograms for single electron efficiencies
1134 Bool_t hasMC=die->GetHasMC();
1135 AliDielectronHistos *histos = die->GetHistoManager();
1137 // arbitrary binning for variables
1138 TVectorD *vpt1 = AliDielectronHelper::MakeLinBinning( (int)(( 3. - 0.)/0.10), 0., 3.);
1139 TVectorD *vpt2 = AliDielectronHelper::MakeLinBinning( (int)(( 10.- 3.25)/0.25), 3.25, 10.);
1140 TVectorD *vpt3 = AliDielectronHelper::MakeLinBinning( (int)((100.-20.)/10.0), 20., 100.);
1141 TVectorD *vpt = new TVectorD(vpt1->GetNrows()+vpt2->GetNrows()+vpt3->GetNrows());
1142 for(Int_t i=0; i<vpt1->GetNrows(); i++) (*vpt)[i] = (*vpt1)[i];
1143 for(Int_t i=0; i<vpt2->GetNrows(); i++) (*vpt)[vpt1->GetNrows()+i] = (*vpt2)[i];
1144 for(Int_t i=0; i<vpt3->GetNrows(); i++) (*vpt)[vpt1->GetNrows()+vpt2->GetNrows()+i] = (*vpt3)[i];
1145 delete vpt1; delete vpt2; delete vpt3;
1147 // single electron efficiecy
1148 // applied efficiencies in collision data
1149 histos->UserHistogram("Track","","", 101,-0.01,1.0, AliDielectronVarManager::kLegEff);
1150 histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, GetRunNumbers2011(), AliDielectronVarManager::kRunNumber);
1151 histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, 18,0.0,90.0, AliDielectronVarManager::kCentrality);
1152 histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, vpt, AliDielectronVarManager::kPt);
1153 histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, 20,0.0,TMath::TwoPi(), AliDielectronVarManager::kPhi);
1154 histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, 20,-1.,+1., AliDielectronVarManager::kEta);
1155 // histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff,
1156 // vpt, AliDielectronHelper::MakeLinBinning(20,0.0,TMath::TwoPi()),
1157 // AliDielectronVarManager::kPt,AliDielectronVarManager::kPhi);
1159 histos->UserHistogram("Pair","","", 101,-0.01,1.0, AliDielectronVarManager::kPairEff);
1160 histos->UserProfile("Pair","","", AliDielectronVarManager::kPairEff, 125,.0,125*0.04, AliDielectronVarManager::kM);
1161 histos->UserProfile("Pair","","", AliDielectronVarManager::kPairEff, 100,.0,10.0, AliDielectronVarManager::kPt);
1162 histos->UserProfile("Pair","","", AliDielectronVarManager::kPairEff, 18,0.0,90.0, AliDielectronVarManager::kCentrality);
1164 histos->UserHistogram("Pair","","", 125,.0,125*0.04, 101,-0.01,1.0,
1165 AliDielectronVarManager::kM, AliDielectronVarManager::kPairEff);
1166 histos->UserHistogram("Pair","","", 200,0,10., 101,-0.01,1.0,
1167 AliDielectronVarManager::kPt, AliDielectronVarManager::kPairEff);
1169 // array of bin limits
1170 TObjArray *limEpm = new TObjArray();
1171 limEpm->Add(AliDielectronHelper::MakeLinBinning( 125, 0., 125*0.04));
1172 limEpm->Add(AliDielectronHelper::MakeLinBinning( 40, 0., 10.));
1173 limEpm->Add(AliDielectronHelper::MakeLinBinning( 101, -0.01, +1.0));
1175 AliDielectronVarManager::kM
1176 ,AliDielectronVarManager::kPt
1177 ,AliDielectronVarManager::kPairEff
1179 // histos->UserSparse("Pair", limEpm->GetEntriesFast(), limEpm, varEpm);
1182 histos->UserProfile("Pair","","", AliDielectronVarManager::kPt,125,.0,125*0.04, AliDielectronVarManager::kM);
1184 histos->UserHistogram("Pair","","", AliDielectronHelper::MakeLinBinning(125,.0,125*0.04),
1185 AliDielectronVarManager::kM, AliDielectronVarManager::kOneOverPairEff);
1186 histos->UserProfile("Pair", "","", AliDielectronVarManager::kPt,AliDielectronHelper::MakeLinBinning(125,.0,125*0.04),
1187 AliDielectronVarManager::kM, "", AliDielectronVarManager::kOneOverPairEff);
1191 void InitHF(AliDielectron* die, Int_t cutDefinition)
1194 // Setup the HF arrays
1197 switch(cutDefinition) {
1209 Bool_t hasMC=die->GetHasMC();
1210 // booleans for histo selection
1211 Bool_t bHistEff = kFALSE; //ATTENTION
1213 AliDielectronMixingHandler *mixH=die->GetMixingHandler();
1214 Int_t maxMixBins = (mixH ? mixH->GetNumberOfBins() : 0);
1217 AliDielectronHF *hf=new AliDielectronHF(die->GetName(),die->GetTitle());
1218 // define pair types and sources
1219 if(hasMC) hf->SetStepForMCGenerated();
1220 hf->SetPairTypes(AliDielectronHF::kOSandMIX);
1221 if(hasMC && cutDefinition!=kAvgPt) hf->SetPairTypes(AliDielectronHF::kMConly); // only mc truth
1222 // hf->SetPairTypes(AliDielectronHF::kAll); // all pair types
1224 //// define the grid size and granularity /////
1225 hf->AddCutVariable(AliDielectronVarManager::kCentrality, AliDielectronHelper::MakeArbitraryBinning("0.,10.,40.,50.,90."));
1226 hf->AddCutVariable(AliDielectronVarManager::kPt, AliDielectronHelper::MakeArbitraryBinning("0.,1.5,2.,2.5,3.,5.,6.,7.,8.,10.,100."));
1227 hf->AddCutVariable(AliDielectronVarManager::kY, AliDielectronHelper::MakeArbitraryBinning("-0.9,-0.8,0.8,0.9"));
1229 // hf->AddCutVariable(AliDielectronVarManager::kCentrality, 9, 0., 90.);
1230 // TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 21, 0.0, 10.5);
1231 // (*vpt)[21] = 100.;
1232 // hf->AddCutVariable(AliDielectronVarManager::kPt, vpt);
1233 // hf->AddCutVariable(AliDielectronVarManager::kY, 1, -0.8, 0.8);
1234 if(cutDefinition==kAvgPt ) //NEW
1235 hf->AddCutVariable(AliDielectronVarManager::kPairEff, AliDielectronHelper::MakeArbitraryBinning(".0,.01,.02,.03,.04,.05,.1,1."));
1238 hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1239 // for mixed event weighting
1240 // if(mixH) hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(maxMixBins,0,maxMixBins), AliDielectronVarManager::kMixingBin);
1243 if(cutDefinition==kAvgPt) {
1244 hf->UserProfile("Pair", AliDielectronVarManager::kPt,
1245 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1246 // hf->UserProfile("Pair", AliDielectronVarManager::kPtSq,
1247 // AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1249 // hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(125,.0,125*0.04),
1250 // AliDielectronHelper::MakeLinBinning(maxMixBins,0,maxMixBins),
1251 // AliDielectronVarManager::kM, AliDielectronVarManager::kMixingBin);
1252 // hf->UserProfile("Pair", AliDielectronVarManager::kPt,
1253 // AliDielectronHelper::MakeLinBinning(125,.0,125*0.04),
1254 // AliDielectronHelper::MakeLinBinning(maxMixBins,0,maxMixBins),
1255 // AliDielectronVarManager::kM, AliDielectronVarManager::kMixingBin);
1259 if(cutDefinition==kFlow && !hasMC) {
1261 hf->UserProfile("Pair", AliDielectronVarManager::kv0ArpH2FlowV2,
1262 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1263 hf->UserProfile("Pair", AliDielectronVarManager::kv0CrpH2FlowV2,
1264 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1265 hf->UserProfile("Pair", AliDielectronVarManager::kTPCrpH2FlowV2,
1266 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1268 hf->UserProfile("Pair", AliDielectronVarManager::kCosTPCrpH2,
1269 AliDielectronHelper::MakeLinBinning(1,.0,125*0.04), AliDielectronVarManager::kM);
1270 hf->UserProfile("Pair", AliDielectronVarManager::kSinTPCrpH2,
1271 AliDielectronHelper::MakeLinBinning(1,.0,125*0.04), AliDielectronVarManager::kM);
1272 hf->UserProfile("Pair", AliDielectronVarManager::kCosPhiH2,
1273 AliDielectronHelper::MakeLinBinning(1,.0,125*0.04), AliDielectronVarManager::kM);
1274 hf->UserProfile("Pair", AliDielectronVarManager::kSinPhiH2,
1275 AliDielectronHelper::MakeLinBinning(1,.0,125*0.04), AliDielectronVarManager::kM);
1276 hf->UserProfile("Pair", AliDielectronVarManager::kTPCrpH2FlowV2Sin,
1277 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1280 hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, GetDeltaPhiBins());
1281 hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2, GetDeltaPhiBins());
1282 hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiTPCrpH2, GetDeltaPhiBins());
1285 // on the fly efficienies
1286 if(cutDefinition==kAvgPt/* && (!hasMC || 0)*/) {
1287 hf->UserProfile("Pair", AliDielectronVarManager::kPairEff,
1288 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
1289 hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM,
1290 AliDielectronVarManager::kOneOverPairEff);
1291 hf->UserProfile("Pair", AliDielectronVarManager::kPt,
1292 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM,
1293 "", AliDielectronVarManager::kOneOverPairEff);
1294 // hf->UserProfile("Pair", AliDielectronVarManager::kPtSq,
1295 // AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM,
1296 // "", AliDielectronVarManager::kOneOverPairEff);
1300 hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(125,.0,125*0.04),
1301 AliDielectronHelper::MakeLinBinning(maxMixBins,0,maxMixBins),
1302 AliDielectronVarManager::kM, AliDielectronVarManager::kMixingBin,
1303 AliDielectronVarManager::kOneOverPairEff);
1304 hf->UserProfile("Pair", AliDielectronVarManager::kPt,
1305 AliDielectronHelper::MakeLinBinning(125,.0,125*0.04),
1306 AliDielectronHelper::MakeLinBinning(maxMixBins,0,maxMixBins),
1307 AliDielectronVarManager::kM, AliDielectronVarManager::kMixingBin,"",
1308 AliDielectronVarManager::kOneOverPairEff);
1314 //// define the grid size and granularity /////
1315 // event variables //
1316 // hf->AddCutVariable(AliDielectronVarManager::kCentrality, AliDielectronHelper::MakeArbitraryBinning("0,10,50,90")); // flow only
1317 if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kCentrality, 18, 0., 90.);
1318 else hf->AddCutVariable(AliDielectronVarManager::kCentrality, 9, 0., 90.);
1319 // if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers2011() );
1320 // if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kNacc, 3000,0.,3000.);
1321 // if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kNVtxContrib, 20,0.,4000.);
1323 // pair variables //ATTENTION
1324 if(hasMC && 0) hf->AddCutVariable(AliDielectronVarManager::kY, 18, -0.9, 0.9);
1325 // hf->AddCutVariable(AliDielectronVarManager::kPt, 10, 0.0, 10.0);
1327 hf->AddCutVariable(AliDielectronVarManager::kPt, AliDielectronHelper::MakeArbitraryBinning("0,1,2,3,4,5,6,7,8,9,10,100"));
1328 // hf->AddCutVariable(AliDielectronVarManager::kPt, 20, 0.0, 10.0);
1330 hf->AddCutVariable(AliDielectronVarManager::kPt, 50, 0.0, 10.0);
1332 // if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
1333 // if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.);
1335 // flow variables //
1336 // if(!hasMC) hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, GetDeltaPhiBins());
1337 // if(!hasMC) hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2, GetDeltaPhiBins());
1338 if(!hasMC && bHistFlow) hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiTPCrpH2, GetDeltaPhiBins());
1340 // leg variables // NOTE: switched off in HF??
1341 // if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kPt, "0.85, 0.95, 1.1, 100.0", kTRUE, AliDielectronHF::kBinToMax);
1342 // if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kEta,"-0.9,-0.8,0.8,0.9", kTRUE, AliDielectronHF::kSymBin);
1343 // hf->AddCutVariable(AliDielectronVarManager::kY, 1, -0.9, 0.9 );
1344 // hf->AddCutVariable(AliDielectronVarManager::kPt, "0.8, 1.0, 1.1, 1.2, 1.5, 100.0", kTRUE, AliDielectronHF::kBinToMax);
1345 // hf->AddCutVariable(AliDielectronVarManager::kNclsTPC, "70,90,100,120,160", kTRUE, AliDielectronHF::kBinToMax);
1346 // hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaEle,"-4,-3,-2.5,-2,2,2.5,3,4", kTRUE, AliDielectronHF::kSymBin);
1347 //hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaPio,"3.,3.5,4.,100.", kTRUE, AliDielectronHF::kBinToMax);
1348 //hf->AddCutVariable(AliDielectronVarManager::kITSLayerFirstCls,4,0.,4., kFALSE, kTRUE, AliDielectronHF::kBinFromMin);
1349 //hf->AddCutVariable(AliDielectronVarManager::kNclsITS, 5,2.,7., kFALSE, kTRUE, AliDielectronHF::kBinToMax);
1350 //hf->AddCutVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers2011());
1352 die->SetHistogramArray(hf);
1355 void InitCF(AliDielectron* die, Int_t cutDefinition)
1358 // Setup the CF Manager if needed
1361 switch(cutDefinition) {
1367 case kAvgPt: //////////////////NEW
1372 Bool_t hasMC=die->GetHasMC();
1375 AliDielectronMixingHandler *mixH=die->GetMixingHandler();
1376 Int_t maxMixBins = (mixH ? mixH->GetNumberOfBins() : 0);
1379 AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
1382 //cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.0,10.0,15.0,20.0,25.0,30.0,35.0,40.0,50.0");
1383 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.");
1384 // cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers2011() );
1385 if(mixH && maxMixBins) cf->AddVariable(AliDielectronVarManager::kMixingBin, AliDielectronHelper::MakeLinBinning(maxMixBins,0,maxMixBins));
1388 TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 21, 0.0, 10.5);
1390 cf->AddVariable(AliDielectronVarManager::kPt, vpt);
1391 // TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 41, 0.0, 10.25);
1392 // (*vpt)[41] = 100.;
1393 // cf->AddVariable(AliDielectronVarManager::kPt,vpt);
1394 // cf->AddVariable(AliDielectronVarManager::kPt,80,0.0,100*0.25);
1396 // cf->AddVariable(AliDielectronVarManager::kY,"-5,-1,-0.9,-0.8,-0.5,0.5,0.8,0.9,1.0,5");
1397 cf->AddVariable(AliDielectronVarManager::kY,"-0.9,-0.8,-0.7,+0.7,+0.8,+0.9");
1398 // cf->AddVariable(AliDielectronVarManager::kY,18,-0.9,+0.9);
1399 cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
1400 // cf->AddVariable(AliDielectronVarManager::kPairType,1,1,1);
1401 cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
1402 // cf->AddVariable(AliDielectronVarManager::kThetaCS,20,-1.,+1.);
1403 // cf->AddVariable(AliDielectronVarManager::kThetaHE,20,-1.,+1.);
1404 // cf->AddVariable(AliDielectronVarManager::kPhiCS,20,-3.2,+3.2);
1405 // cf->AddVariable(AliDielectronVarManager::kPhiHE,20,-3.2,+3.2);
1406 /// cf->AddVariable(AliDielectronVarManager::kDeltaPhiTPCrpH2,GetDeltaPhiBins());
1408 if(cutDefinition==kAvgPt && 0) { //ATTENTION
1409 cf->AddVariable(AliDielectronVarManager::kPairEff, AliDielectronHelper::MakeArbitraryBinning(".0,.01,.02,.03,.04,.05,.1,1."));
1413 if(cutDefinition==kSysMC) { //ATTENTION
1414 // if(cutDefinition!=kSysMCele && 0) { //ATTENTION
1415 cf->AddVariable(AliDielectronVarManager::kPt,"0.85, 1.1, 100.0",kTRUE);
1416 // cf->AddVariable(AliDielectronVarManager::kNclsTPC,"0, 70, 80, 90, 100, 120, 160",kTRUE);
1417 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);
1418 cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,3,-1.5,1.5,kTRUE);
1419 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,100",kTRUE);
1420 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-1.5,-1.0,-0.6,3.0",kTRUE);
1423 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3.0,-1.5,-1.0,-0.6,3.0",kTRUE);
1427 cf->AddVariable(AliDielectronVarManager::kCentrality, 18,0., 90.);
1428 if(hasMC) cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers2011() );
1429 // if(hasMC) cf->AddVariable(AliDielectronVarManager::kNacc, 3000,0.,3000.);
1430 // if(hasMC) cf->AddVariable(AliDielectronVarManager::kNVtxContrib, 20,0.,4000.);
1433 if(hasMC) cf->AddVariable(AliDielectronVarManager::kPairType,1,1,1);
1434 else cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
1435 cf->AddVariable(AliDielectronVarManager::kM, 125, 0.0, 5.0); //40Mev Steps
1436 if(hasMC) cf->AddVariable(AliDielectronVarManager::kY, 18, -0.9, 0.9);
1437 if(hasMC) cf->AddVariable(AliDielectronVarManager::kPt, 100, 0.0, 20.0);
1438 else cf->AddVariable(AliDielectronVarManager::kPt, AliDielectronHelper::MakeArbitraryBinning("0,1,2,3,4,5,6,7,8,9,10,20"));
1439 // if(hasMC) cf->AddVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
1440 // if(hasMC) cf->AddVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.);
1443 //if(!hasMC) cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, GetDeltaPhiBins());
1444 //if(!hasMC) cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2, GetDeltaPhiBins());
1447 if(hasMC) cf->AddVariable(AliDielectronVarManager::kPt,"0.0, 0.85, 0.95, 1.0, 1.1, 100.0",kTRUE);
1448 if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,-0.8,-0.7, 0.7, 0.8, 0.9", kTRUE);
1449 // cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE);
1450 // cf->AddVariable(AliDielectronVarManager::kNclsITS,"1,2,3,4,5,6",kTRUE);
1451 // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3,-2.5,-2,2,2.5,3",kTRUE);
1452 // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"2.5,3.0,3.5,4.0,4.5,100",kTRUE);
1453 // cf->AddVariable(AliDielectronVarManager::kNclsTPC,"70, 90, 100, 120, 160",kTRUE);
1454 // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,5.0,100",kTRUE);
1455 // cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE); break;
1456 // cf->AddVariable(AliDielectronVarManager::kTRDpidQuality,"3.5, 4.5, 5.5, 6.5",kTRUE);
1457 // if(!hasMC && isESD) cf->AddVariable(AliDielectronVarManager::kTRDchi2,"-1.,0.,2.,4.",kTRUE);
1461 cf->SetStepForMCtruth();
1462 // cf->SetStepForNoCutsMCmotherPid();
1463 // cf->SetStepForAfterAllCuts();
1464 // cf->SetStepsForEachCut();
1465 // cf->SetStepsForSignal();
1466 // cf->SetStepsForBackground();
1467 if(cutDefinition!=kAvgPt) cf->SetStepsForMCtruthOnly();
1470 cf->SetStepsForSignal();
1472 die->SetCFManagerPair(cf);
1475 void AddMCSignals(AliDielectron *die, Int_t cutDefinition){
1476 //Do we have an MC handler?
1477 if (!die->GetHasMC()) return;
1479 AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive");
1480 inclusiveJpsi->SetLegPDGs(11,-11);
1481 inclusiveJpsi->SetMotherPDGs(443,443);
1482 inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
1483 inclusiveJpsi->SetFillPureMCStep(kTRUE);
1484 inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
1485 inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
1487 AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty");
1488 beautyJpsi->SetLegPDGs(11,-11);
1489 beautyJpsi->SetMotherPDGs(443,443);
1490 beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
1491 beautyJpsi->SetGrandMotherPDGs(500,500);
1492 beautyJpsi->SetFillPureMCStep(kTRUE);
1493 beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
1494 beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
1495 beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
1497 AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt"); // prompt J/psi (not from beauty decays)
1498 promptJpsi->SetLegPDGs(11,-11);
1499 promptJpsi->SetMotherPDGs(443,443);
1500 promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
1501 promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
1502 promptJpsi->SetFillPureMCStep(kTRUE);
1503 promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1504 promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
1505 promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
1506 promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
1508 // prompt J/psi radiative channel
1509 AliDielectronSignalMC* promptJpsiRad = new AliDielectronSignalMC("promptJpsiRad","PromptRadiative"); // prompt J/psi (not from beauty decays)
1510 promptJpsiRad->SetLegPDGs(11,-11);
1511 promptJpsiRad->SetMotherPDGs(443,443);
1512 promptJpsiRad->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
1513 promptJpsiRad->SetMothersRelation(AliDielectronSignalMC::kSame);
1514 promptJpsiRad->SetFillPureMCStep(kTRUE);
1515 promptJpsiRad->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1516 promptJpsiRad->SetCheckBothChargesLegs(kTRUE,kTRUE);
1517 promptJpsiRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
1518 promptJpsiRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
1519 promptJpsiRad->SetJpsiRadiative(AliDielectronSignalMC::kIsRadiative);
1521 // prompt J/psi Non radiative channel
1522 AliDielectronSignalMC* promptJpsiNonRad = new AliDielectronSignalMC("promptJpsiNonRad","PromptNonRadiative"); // prompt J/psi (not from beauty decays)
1523 promptJpsiNonRad->SetLegPDGs(11,-11);
1524 promptJpsiNonRad->SetMotherPDGs(443,443);
1525 promptJpsiNonRad->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
1526 promptJpsiNonRad->SetMothersRelation(AliDielectronSignalMC::kSame);
1527 promptJpsiNonRad->SetFillPureMCStep(kTRUE);
1528 promptJpsiNonRad->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1529 promptJpsiNonRad->SetCheckBothChargesLegs(kTRUE,kTRUE);
1530 promptJpsiNonRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
1531 promptJpsiNonRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
1532 promptJpsiNonRad->SetJpsiRadiative(AliDielectronSignalMC::kIsNotRadiative);
1534 AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct"); // embedded J/psi
1535 directJpsi->SetLegPDGs(11,-11);
1536 directJpsi->SetMotherPDGs(443,443);
1537 directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
1538 directJpsi->SetFillPureMCStep(kTRUE);
1539 directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1540 directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
1541 directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
1542 directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
1544 AliDielectronSignalMC* gammaConversion = new AliDielectronSignalMC("gammaConversion","gamma conversions");
1545 gammaConversion->SetLegPDGs(11,-11);
1546 gammaConversion->SetCheckBothChargesLegs(kTRUE,kTRUE);
1547 gammaConversion->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
1548 gammaConversion->SetMotherPDGs(22,22);
1549 gammaConversion->SetMothersRelation(AliDielectronSignalMC::kSame);
1552 AliDielectronSignalMC* electrons = new AliDielectronSignalMC("electrons","electrons");
1553 electrons->SetLegPDGs(11,1); //dummy second leg (never MCtrue)
1554 electrons->SetCheckBothChargesLegs(kTRUE,kTRUE);
1555 electrons->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1556 // electrons->SetGrandMotherPDGs(500,500,kTRUE,kTRUE); // exclude non-prompt jpsi eletrons
1557 electrons->SetFillPureMCStep(kTRUE);
1558 // electrons->SetMothersRelation(AliDielectronSignalMC::kSame);
1560 AliDielectronSignalMC* directElec = new AliDielectronSignalMC("directElec","directElec");
1561 directElec->SetLegPDGs(11,1); //NEW
1562 // directElec->SetMothersRelation(AliDielectronSignalMC::kSame);
1563 // directElec->SetGrandMotherPDGs(-1103,-1103);
1564 directElec->SetFillPureMCStep(kTRUE);
1565 directElec->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1566 directElec->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
1567 directElec->SetCheckBothChargesLegs(kTRUE,kTRUE);
1569 directElec->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
1570 directElec->SetGrandMotherPDGs(902,902,kTRUE,kTRUE); // exclude open charm,beauty hadrons
1573 AliDielectronSignalMC* elecPrim = new AliDielectronSignalMC("elecPrim","elecPrim");
1574 elecPrim->SetLegPDGs(11,1); //dummy second leg (never MCtrue)
1575 elecPrim->SetCheckBothChargesLegs(kTRUE,kTRUE);
1576 elecPrim->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1577 elecPrim->SetCheckBothChargesMothers(kTRUE,kTRUE);
1578 elecPrim->SetMotherPDGs(902,902,kTRUE,kTRUE); // exclude open charm,beauty hadrons
1579 elecPrim->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
1580 elecPrim->SetGrandMotherPDGs(902,902,kTRUE,kTRUE); // exclude open charm,beauty hadrons
1581 elecPrim->SetFillPureMCStep(kTRUE);
1583 // add direct di lepton resonances
1585 AliDielectronSignalMC* directP[7];
1587 Int_t pdg[] = {111, 113, 221, 223, 331, 333, 443};
1588 for(Int_t i=0; i<7; i++) {
1589 ap = TDatabasePDG::Instance()->GetParticle(pdg[i]);
1590 directP[i] = new AliDielectronSignalMC(Form("direct%s",ap->GetName()),Form("direct%s",ap->GetName()));
1591 directP[i]->SetLegPDGs(11,-11);
1592 directP[i]->SetMotherPDGs(pdg[i],pdg[i]);
1593 directP[i]->SetMothersRelation(AliDielectronSignalMC::kSame);
1594 directP[i]->SetFillPureMCStep(kTRUE);
1595 directP[i]->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1596 directP[i]->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
1597 // directP[i]->SetCheckBothChargesLegs(kTRUE,kTRUE);
1598 // directP[i]->SetCheckBothChargesMothers(kTRUE,kTRUE);
1603 AliDielectronSignalMC* eleHijing = new AliDielectronSignalMC("eleHijing","eleHijing");
1604 eleHijing->SetLegPDGs(11,1); //dummy second leg (never MCtrue)
1605 eleHijing->SetCheckBothChargesLegs(kTRUE,kTRUE);
1606 eleHijing->SetLegSources(AliDielectronSignalMC::kNoCocktail, AliDielectronSignalMC::kNoCocktail);
1607 eleHijing->SetFillPureMCStep(kTRUE);
1610 AliDielectronSignalMC* electrons = new AliDielectronSignalMC("electrons","electrons");
1611 electrons->SetLegPDGs(11,-11); //dummy second leg (never MCtrue)
1612 electrons->SetCheckBothChargesLegs(kTRUE,kTRUE);
1613 electrons->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
1614 // electrons->SetMotherPDGs(111,111,kTRUE,kTRUE); // not from pi0
1615 // electrons->SetMothersRelation(AliDielectronSignalMC::kSame);
1616 electrons->SetFillPureMCStep(kTRUE);
1620 switch(cutDefinition) {
1623 //die->AddSignalMC(directElec);
1626 die->AddSignalMC(inclusiveJpsi);
1627 die->AddSignalMC(directJpsi);
1630 die->AddSignalMC(inclusiveJpsi);
1631 // die->AddSignalMC(beautyJpsi);
1632 //die->AddSignalMC(promptJpsi);
1633 //die->AddSignalMC(promptJpsiRad);
1634 //die->AddSignalMC(promptJpsiNonRad);
1635 die->AddSignalMC(directJpsi);
1636 // die->AddSignalMC(gammaConversion);
1639 die->AddSignalMC(inclusiveJpsi);
1640 // die->AddSignalMC(directJpsi);
1643 // die->AddSignalMC(directJpsi);
1644 // die->AddSignalMC(inclusiveJpsi);
1645 // die->AddSignalMC(electrons);
1646 // die->AddSignalMC(elecPrim);
1647 die->AddSignalMC(directElec);
1648 //for(Int_t i=0; i<7; i++) die->AddSignalMC(directP[i]);
1651 die->AddSignalMC(directJpsi);
1658 void SetEtaCorrection(AliDielectron *die) {
1661 // if(cutDefinition==kLegEff) return;
1662 // if (pid->GetCentroidCorrFunction()) return;
1663 Bool_t hasMC=die->GetHasMC();
1664 Bool_t hasTuneOnData=kFALSE;
1665 // ((AliAnalysisTaskPIDResponse*)AliAnalysisManager::GetAnalysisManager()->GetTasks()->At(0))->GetTuneOnData();
1666 printf("tune on data switched: %d \n",hasTuneOnData);
1667 // printf("name task at 0: %s \n",AliAnalysisManager::GetAnalysisManager()->GetTasks()->At(0)->GetName());
1668 // printf("input event %p \n", AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
1669 // printf("pid response %p \n",((AliInputEventHandler*)AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler())->GetPIDResponse());
1670 // printf("pid response task %p \n",AliAnalysisManager::GetAnalysisManager()->GetTasks()->At(0));
1671 // AliAnalysisManager::GetAnalysisManager()->GetTasks()->At(0)->Dump();;
1673 // AliAnalysisManager* man = AliAnalysisManager::GetAnalysisManager();
1674 // AliInputEventHandler* inputHandler = dynamic_cast<AliInputEventHandler*>(man->GetInputEventHandler());
1675 // AliPIDResponse* pidResponse = inputHandler->GetPIDResponse();
1676 // if(pidResponse) hasTuneOnData = pidResponse->IsTunedOnData();
1677 // printf("man %p inp %p pid %p ====> %d \n",man,inputHandler,pidResponse,hasTuneOnData);
1679 TF2 *fCntrdCorr=0x0;
1681 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv DATA vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
1682 // either data or MC with tune on data option
1683 if( !hasMC /*|| hasTuneOnData*/ ) {
1684 // 2-dimensional eta correction for the centroid of electron sigmas
1685 fCntrdCorr = new TF2("fCntrdCorr",
1686 "[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",
1687 // 0.0, 3000.0, -0.9, +0.9);
1688 0.0, 90.0, -0.9, +0.9);
1689 // fCntrdCorr->SetParameters(0.723106, 0.23958, -6.31221, -0.687976, 15.912, 0.579609, -11.6901, -0.000354381); //Nacc dep.
1690 fCntrdCorr->SetParameters(+0.149002, +0.214644 , -6.034930, -0.529588, +14.97902, +0.402640, -10.890027, +0.011248); //Cent
1692 // 1-dimensional eta correction for the width of electron sigmas
1693 fWdthCorr = new TF1("fWdthCorr", "pol2", 0.0, 90.0);
1694 // fWdthCorr->SetParameters(1.06108, 0.000217804,-5.80291e-08); //Nacc dep.
1695 fWdthCorr->SetParameters(+1.290755, -0.005261, +0.000021); //Cent dep.
1697 // apply corrections
1698 // die->SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kNacc,AliDielectronVarManager::kEta);
1699 // die->SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kNacc);
1700 die->SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kEta);
1701 die->SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kCentrality);
1702 printf(" DATA PID correction loaded!!!\n");
1705 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MONTE CARLO vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
1706 // 2-dimensional eta correction for the centroid and width of electron sigmas
1707 fCntrdCorr = new TF2("fCntrdCorr",
1708 "[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",
1709 0.0, 3000.0, -0.9, +0.9);
1710 fCntrdCorr->SetParameters(+0.293718,
1717 -0.000103); //TPCrefMult dep.
1718 fWdthCorr = new TF2("fWdthCorr",
1719 "[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",
1720 0.0, 3000.0, -0.9, +0.9);
1721 fWdthCorr->SetParameters(+0.917840,
1728 +0.000036); //TPCrefMult dep.
1730 // apply corrections
1731 die->SetCentroidCorrFunction(fCntrdCorr,
1732 AliDielectronVarManager::kRefMultTPConly,
1733 AliDielectronVarManager::kEta);
1734 die->SetWidthCorrFunction(fWdthCorr,
1735 AliDielectronVarManager::kRefMultTPConly,
1736 AliDielectronVarManager::kEta);
1738 // 2-dimensional eta correction for the centroid of electron sigmas
1739 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",
1740 0.0, 3000.0, -0.9, +0.9);
1741 fCntrdCorr->SetParameters(+0.378611, -0.070831, -3.076778, +0.121977, +8.576097, +0.113009, -5.001368, -0.000181);
1742 // 1-dimensional eta correction for the width of electron sigmas
1743 fWdthCorr = new TF1("fWdthCorr", "pol1", 0.0, 3000.0);
1744 fWdthCorr->SetParameters(+0.881894, +0.000053);
1746 // apply corrections
1747 die->SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kNacc,AliDielectronVarManager::kEta);
1748 die->SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kNacc);
1749 // die->SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kEta);
1750 // die->SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kCentrality);
1752 printf(" MC PID correction loaded!!!\n");
1758 TVectorD *GetRunNumbers2011() {
1760 Double_t runLHC10h[] = { // all good runs based on RCT 29.Mai
1761 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
1763 Double_t runLHC11h[] = { // all good runs based on RCT 29.Mai
1764 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,
1768 if(list.Contains("LHC10h") || list.Contains("LHC11a10")) {
1769 if( list.Contains("LHC11h") || list.Contains("LHC12a17") ) {
1771 Int_t size = (int) (sizeof(runLHC11h)/sizeof(Double_t));
1772 TVectorD *vec = new TVectorD(size,runLHC11h);
1777 TVectorD *GetPDGcodes() {
1779 // array of pdgcodes stored in TDatabasePDG
1781 TDatabasePDG *pdg = new TDatabasePDG();
1782 pdg->ReadPDGTable();
1783 TGraph *gr = new TGraph();
1784 TIter next(pdg->ParticleList());
1787 while ((p = (TParticlePDG *)next())) {
1788 if(TMath::Abs(p->PdgCode()) < 1e+6) {
1789 // printf("%s -> %d \n",p->GetName(),p->PdgCode());
1790 gr->SetPoint(i++, p->PdgCode(),1.);
1794 TVectorD *vec = new TVectorD(gr->GetN(), gr->GetX());
1802 TVectorD *GetDeltaPhiBins() {
1804 // for in and out of event plane bins
1806 Double_t pi = TMath::Pi();
1807 TVectorD *deltaPhi = new TVectorD(6);
1808 (*deltaPhi)[0] = -1. *pi;
1809 (*deltaPhi)[1] = -3./4. *pi;
1810 (*deltaPhi)[2] = -1./4. *pi;
1811 (*deltaPhi)[3] = +1./4. *pi;
1812 (*deltaPhi)[4] = +3./4. *pi;
1813 (*deltaPhi)[5] = +1. *pi;