1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: Pedro Gonz??lez, Pedro Ladr??n de Guevara, Ernesto L??pez Torres, *
5 * Eulogio Serradilla, Ana Marin, Friederike Bock *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
17 // Analysis task for pi0->e+e-gamma (Dalitz decay)
18 // Analysis task for chic->JPsi+gamma
22 #include "TParticle.h"
24 #include "TMCProcess.h"
25 #include "TDatabasePDG.h"
28 #include "TDirectory.h"
32 #include "THnSparse.h"
35 #include "AliAnalysisManager.h"
36 #include "AliESDInputHandler.h"
37 #include "AliESDtrack.h"
38 #include "AliMCEvent.h"
40 #include "AliMCEventHandler.h"
43 #include "AliESDtrackCuts.h"
44 #include "AliESDpidCuts.h"
45 #include "AliMCEvent.h"
47 #include "AliESDEvent.h"
48 #include "AliESDpid.h"
49 #include "AliKFParticle.h"
50 #include "AliMCEventHandler.h"
51 #include "AliKFVertex.h"
52 #include "AliTriggerAnalysis.h"
53 #include "AliCentrality.h"
54 #include "AliMultiplicity.h"
55 #include "AliAnalysisTaskGammaConvDalitzV1.h"
58 ClassImp( AliAnalysisTaskGammaConvDalitzV1 )
60 //-----------------------------------------------------------------------------------------------
61 AliAnalysisTaskGammaConvDalitzV1::AliAnalysisTaskGammaConvDalitzV1():
77 fSelectorElectronIndex(0),
78 fSelectorPositronIndex(0),
80 fGoodVirtualGammas(NULL),
84 fCutElectronArray(NULL),
87 fConversionCuts(NULL),
88 hESDConvGammaPt(NULL),
89 hESDConvGammaEta(NULL),
90 hESDConvGammaZR(NULL),
91 hESDDalitzElectronPt(NULL),
92 hESDDalitzPositronPt(NULL),
93 hESDDalitzElectronPhi(NULL),
94 hESDDalitzPositronPhi(NULL),
95 hESDDalitzElectronAfterPt(NULL),
96 hESDDalitzPositronAfterPt(NULL),
97 hESDDalitzElectronAfterEta(NULL),
98 hESDDalitzPositronAfterEta(NULL),
99 hESDDalitzElectronAfterPhi(NULL),
100 hESDDalitzPositronAfterPhi(NULL),
101 hESDDalitzElectronAfterNClsITS(NULL),
102 hESDDalitzPositronAfterNClsITS(NULL),
103 hESDDalitzElectronAfterNFindClsTPC(NULL),
104 hESDDalitzPositronAfterNFindClsTPC(NULL),
105 hESDDalitzElectronAfterNClsTPC(NULL),
106 hESDDalitzPositronAfterNClsTPC(NULL),
107 hESDDalitzElectronAfterNCrossedRowsTPC(NULL),
108 hESDDalitzPositronAfterNCrossedRowsTPC(NULL),
109 hESDDalitzPosEleAfterDCAxy(NULL),
110 hESDDalitzPosEleAfterDCAz(NULL),
111 hESDDalitzElectronAfterTPCdEdxVsP(NULL),
112 hESDDalitzPositronAfterTPCdEdxVsP(NULL),
113 hESDDalitzElectronAfterTPCdEdxSignalVsP(NULL),
114 hESDDalitzPositronAfterTPCdEdxSignalVsP(NULL),
115 hESDDalitzElectronAfterTPCdEdxVsEta(NULL),
116 hESDDalitzPositronAfterTPCdEdxVsEta(NULL),
117 hESDDalitzElectronAfterTPCdEdxVsPhi(NULL),
118 hESDDalitzPositronAfterTPCdEdxVsPhi(NULL),
120 hESDEposEnegPsiPairDPhi(NULL),
121 hESDEposEnegInvMassPt(NULL),
122 hESDEposEnegAfterMassCutInvMassPi0Pt(NULL),
123 hESDEposEnegInvMassPi0Pt(NULL),
124 hESDEposEnegLikeSignBackInvMassPt(NULL),
125 hESDMotherInvMassPt(NULL),
126 hESDPi0MotherInvMassPt(NULL),
127 hESDPi0MotherDiffInvMassPt(NULL),
128 hESDPi0MotherDiffLimInvMassPt(NULL),
129 sESDMotherInvMassPtZM(NULL),
130 hESDMotherBackInvMassPt(NULL),
131 sESDMotherBackInvMassPtZM(NULL),
133 hMCConvGammaPt(NULL),
134 hMCConvGammaRSPt(NULL),
135 hMCAllPositronsPt(NULL),
136 hMCAllElectronsPt(NULL),
137 hMCConvGammaEta(NULL),
138 hMCAllPositronsEta(NULL),
139 hMCAllElectronsEta(NULL),
140 hMCPi0DalitzGammaPt(NULL),
141 hMCPi0DalitzElectronPt(NULL),
142 hMCPi0DalitzPositronPt(NULL),
150 hMCChiCInAccPt(NULL),
151 hMCPi0EposEnegInvMassPt(NULL),
152 hMCEtaEposEnegInvMassPt(NULL),
153 hESDEposEnegTruePi0DalitzInvMassPt(NULL),
154 hESDEposEnegTruePrimPi0DalitzInvMass(NULL),
155 hESDEposEnegTruePi0DalitzPsiPairDPhi(NULL),
156 hESDEposEnegTrueEtaDalitzInvMassPt(NULL),
157 hESDEposEnegTruePrimEtaDalitzInvMass(NULL),
158 hESDEposEnegTrueEtaDalitzPsiPairDPhi(NULL),
159 hESDEposEnegTruePhotonInvMassPt(NULL),
160 hESDEposEnegTrueInvMassPt(NULL),
161 hESDEposEnegTruePhotonPsiPairDPhi(NULL),
162 hESDEposEnegTruePhotonPsiPairDPhiPtCut(NULL),
163 hESDEposEnegTrueJPsiInvMassPt(NULL),
164 hESDTrueMotherChiCInvMassPt(NULL),
165 hESDTrueMotherChiCDiffInvMassPt(NULL),
166 hESDTrueMotherInvMassPt(NULL),
167 hESDTrueMotherDalitzInvMassPt(NULL),
168 hESDTrueMotherPi0GGInvMassPt(NULL),
169 hESDTruePrimaryMotherPi0GGInvMassPt(NULL),
170 hESDTrueSecondaryMotherPi0GGInvMassPt(NULL),
171 hESDTruePrimaryMotherInvMassMCPt(NULL),
172 hESDTruePrimaryMotherInvMassPt(NULL),
173 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
174 hESDTruePrimaryPi0DalitzESDPtMCPt(NULL),
175 hESDTrueSecondaryMotherInvMassPt(NULL),
176 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
177 hESDTrueBckGGInvMassPt(NULL),
178 hESDTrueBckContInvMassPt(NULL),
179 hESDTrueMotherGGInvMassPt(NULL),
180 hESDTrueConvGammaPt(NULL),
181 hESDTruePositronPt(NULL),
182 hESDTrueElectronPt(NULL),
183 hESDTrueSecConvGammaPt(NULL),
184 hESDTrueSecPositronPt(NULL),
185 hESDTrueSecElectronPt(NULL),
186 hESDTruePi0DalitzConvGammaPt(NULL),
187 hESDTruePi0DalitzPositronPt(NULL),
188 hESDTruePi0DalitzElectronPt(NULL),
189 hESDTruePi0DalitzSecConvGammaPt(NULL),
190 hESDTruePi0DalitzSecPositronPt(NULL),
191 hESDTruePi0DalitzSecElectronPt(NULL),
193 hNGoodESDTracks(NULL),
194 hNGoodESDTracksVsNGoodGammas(NULL),
195 hNGoodESDTracksVsNGoodVGammas(NULL),
209 fNumberOfESDTracks(0),
210 fNumberOfESDTrackskBoth(0),
212 fMoveParticleAccordingToVertex(kFALSE),
214 fDoMesonAnalysis(kTRUE),
215 fDoChicAnalysis(kFALSE),
217 fSetProductionVertextoVGamma(kTRUE),
218 fIsFromMBHeader(kTRUE),
224 //-----------------------------------------------------------------------------------------------
225 AliAnalysisTaskGammaConvDalitzV1::AliAnalysisTaskGammaConvDalitzV1( const char* name ):
226 AliAnalysisTaskSE(name),
242 fSelectorElectronIndex(0),
243 fSelectorPositronIndex(0),
245 fGoodVirtualGammas(NULL),
246 fGoodElectrons(NULL),
247 fGoodPositrons(NULL),
248 fCutGammaArray(NULL),
249 fCutElectronArray(NULL),
250 fCutMesonArray(NULL),
252 fConversionCuts(NULL),
253 hESDConvGammaPt(NULL),
254 hESDConvGammaEta(NULL),
255 hESDConvGammaZR(NULL),
256 hESDDalitzElectronPt(NULL),
257 hESDDalitzPositronPt(NULL),
258 hESDDalitzElectronPhi(NULL),
259 hESDDalitzPositronPhi(NULL),
260 hESDDalitzElectronAfterPt(NULL),
261 hESDDalitzPositronAfterPt(NULL),
262 hESDDalitzElectronAfterEta(NULL),
263 hESDDalitzPositronAfterEta(NULL),
264 hESDDalitzElectronAfterPhi(NULL),
265 hESDDalitzPositronAfterPhi(NULL),
266 hESDDalitzElectronAfterNClsITS(NULL),
267 hESDDalitzPositronAfterNClsITS(NULL),
268 hESDDalitzElectronAfterNFindClsTPC(NULL),
269 hESDDalitzPositronAfterNFindClsTPC(NULL),
270 hESDDalitzElectronAfterNClsTPC(NULL),
271 hESDDalitzPositronAfterNClsTPC(NULL),
272 hESDDalitzElectronAfterNCrossedRowsTPC(NULL),
273 hESDDalitzPositronAfterNCrossedRowsTPC(NULL),
274 hESDDalitzPosEleAfterDCAxy(NULL),
275 hESDDalitzPosEleAfterDCAz(NULL),
276 hESDDalitzElectronAfterTPCdEdxVsP(NULL),
277 hESDDalitzPositronAfterTPCdEdxVsP(NULL),
278 hESDDalitzElectronAfterTPCdEdxSignalVsP(NULL),
279 hESDDalitzPositronAfterTPCdEdxSignalVsP(NULL),
280 hESDDalitzElectronAfterTPCdEdxVsEta(NULL),
281 hESDDalitzPositronAfterTPCdEdxVsEta(NULL),
282 hESDDalitzElectronAfterTPCdEdxVsPhi(NULL),
283 hESDDalitzPositronAfterTPCdEdxVsPhi(NULL),
285 hESDEposEnegPsiPairDPhi(NULL),
286 hESDEposEnegInvMassPt(NULL),
287 hESDEposEnegAfterMassCutInvMassPi0Pt(NULL),
288 hESDEposEnegInvMassPi0Pt(NULL),
289 hESDEposEnegLikeSignBackInvMassPt(NULL),
290 hESDMotherInvMassPt(NULL),
291 hESDPi0MotherInvMassPt(NULL),
292 hESDPi0MotherDiffInvMassPt(NULL),
293 hESDPi0MotherDiffLimInvMassPt(NULL),
294 sESDMotherInvMassPtZM(NULL),
295 hESDMotherBackInvMassPt(NULL),
296 sESDMotherBackInvMassPtZM(NULL),
298 hMCConvGammaPt(NULL),
299 hMCConvGammaRSPt(NULL),
300 hMCAllPositronsPt(NULL),
301 hMCAllElectronsPt(NULL),
302 hMCConvGammaEta(NULL),
303 hMCAllPositronsEta(NULL),
304 hMCAllElectronsEta(NULL),
305 hMCPi0DalitzGammaPt(NULL),
306 hMCPi0DalitzElectronPt(NULL),
307 hMCPi0DalitzPositronPt(NULL),
315 hMCChiCInAccPt(NULL),
316 hMCPi0EposEnegInvMassPt(NULL),
317 hMCEtaEposEnegInvMassPt(NULL),
318 hESDEposEnegTruePi0DalitzInvMassPt(NULL),
319 hESDEposEnegTruePrimPi0DalitzInvMass(NULL),
320 hESDEposEnegTruePi0DalitzPsiPairDPhi(NULL),
321 hESDEposEnegTrueEtaDalitzInvMassPt(NULL),
322 hESDEposEnegTruePrimEtaDalitzInvMass(NULL),
323 hESDEposEnegTrueEtaDalitzPsiPairDPhi(NULL),
324 hESDEposEnegTruePhotonInvMassPt(NULL),
325 hESDEposEnegTrueInvMassPt(NULL),
326 hESDEposEnegTruePhotonPsiPairDPhi(NULL),
327 hESDEposEnegTruePhotonPsiPairDPhiPtCut(NULL),
328 hESDEposEnegTrueJPsiInvMassPt(NULL),
329 hESDTrueMotherChiCInvMassPt(NULL),
330 hESDTrueMotherChiCDiffInvMassPt(NULL),
331 hESDTrueMotherInvMassPt(NULL),
332 hESDTrueMotherDalitzInvMassPt(NULL),
333 hESDTrueMotherPi0GGInvMassPt(NULL),
334 hESDTruePrimaryMotherPi0GGInvMassPt(NULL),
335 hESDTrueSecondaryMotherPi0GGInvMassPt(NULL),
336 hESDTruePrimaryMotherInvMassMCPt(NULL),
337 hESDTruePrimaryMotherInvMassPt(NULL),
338 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
339 hESDTruePrimaryPi0DalitzESDPtMCPt(NULL),
340 hESDTrueSecondaryMotherInvMassPt(NULL),
341 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
342 hESDTrueBckGGInvMassPt(NULL),
343 hESDTrueBckContInvMassPt(NULL),
344 hESDTrueMotherGGInvMassPt(NULL),
345 hESDTrueConvGammaPt(NULL),
346 hESDTruePositronPt(NULL),
347 hESDTrueElectronPt(NULL),
348 hESDTrueSecConvGammaPt(NULL),
349 hESDTrueSecPositronPt(NULL),
350 hESDTrueSecElectronPt(NULL),
351 hESDTruePi0DalitzConvGammaPt(NULL),
352 hESDTruePi0DalitzPositronPt(NULL),
353 hESDTruePi0DalitzElectronPt(NULL),
354 hESDTruePi0DalitzSecConvGammaPt(NULL),
355 hESDTruePi0DalitzSecPositronPt(NULL),
356 hESDTruePi0DalitzSecElectronPt(NULL),
358 hNGoodESDTracks(NULL),
359 hNGoodESDTracksVsNGoodGammas(NULL),
360 hNGoodESDTracksVsNGoodVGammas(NULL),
374 fNumberOfESDTracks(0),
375 fNumberOfESDTrackskBoth(0),
377 fMoveParticleAccordingToVertex(kFALSE),
379 fDoMesonAnalysis(kTRUE),
380 fDoChicAnalysis(kFALSE),
382 fSetProductionVertextoVGamma(kTRUE),
383 fIsFromMBHeader(kTRUE),
386 DefineOutput(1, TList::Class());
389 //-----------------------------------------------------------------------------------------------
390 AliAnalysisTaskGammaConvDalitzV1::~AliAnalysisTaskGammaConvDalitzV1()
393 // virtual destructor
396 cout<<"Destructor"<<endl;
402 if(fGoodVirtualGammas){
403 delete fGoodVirtualGammas;
419 delete[] fGammasPool;
423 //___________________________________________________________
424 void AliAnalysisTaskGammaConvDalitzV1::InitBack(){
426 const Int_t nDim = 4;
427 Int_t nBins[nDim] = {800,250,7,4};
428 Double_t xMin[nDim] = {0,0, 0,0};
429 Double_t xMax[nDim] = {0.8,25,7,4};
431 sESDMotherInvMassPtZM = new THnSparseF*[fnCuts];
432 sESDMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
434 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
435 //fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
436 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
437 //if (((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->DoBGCalculation()){
440 TString cutstringElectron = ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
441 TString cutstringMeson = ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
442 TString cutstringGamma = ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
446 Int_t collisionSystem = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(0,1));
447 Int_t centMin = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(1,1));
448 Int_t centMax = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(2,1));
450 if(collisionSystem == 1 || collisionSystem == 2 ||
451 collisionSystem == 5 || collisionSystem == 8 ||
452 collisionSystem == 9){
453 centMin = centMin*10;
454 centMax = centMax*10;
456 else if(collisionSystem == 3 || collisionSystem == 6){
460 else if(collisionSystem == 4 || collisionSystem == 7){
461 centMin = ((centMin*5)+45);
462 centMax = ((centMax*5)+45);
466 fBackList[iCut] = new TList();
467 fBackList[iCut]->SetName(Form("%s_%s_%s Back histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
468 fBackList[iCut]->SetOwner(kTRUE);
469 fCutFolder[iCut]->Add(fBackList[iCut]);
471 sESDMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
472 fBackList[iCut]->Add(sESDMotherBackInvMassPtZM[iCut]);
474 fMotherList[iCut] = new TList();
475 fMotherList[iCut]->SetName(Form("%s_%s_%s Mother histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
476 fMotherList[iCut]->SetOwner(kTRUE);
477 fCutFolder[iCut]->Add(fMotherList[iCut]);
479 sESDMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
480 fMotherList[iCut]->Add(sESDMotherInvMassPtZM[iCut]);
483 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
484 collisionSystem,centMin,centMax,
485 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->NumberOfRotationEvents(),
486 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->UseTrackMultiplicity());
488 if( ( (AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetBKGMethod() == 3 ){
489 fGammasPool[iCut] = new TList();
496 //______________________________________________________________________
497 void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
500 // Create ouput objects
503 // Create the output container
504 if(fOutputContainer != NULL){
505 delete fOutputContainer;
506 fOutputContainer = NULL;
508 if(fOutputContainer == NULL){
509 fOutputContainer = new TList();
510 fOutputContainer->SetOwner(kTRUE);
513 fGoodGammas = new TList();
514 //fGoodGammas->SetOwner(kTRUE);
517 fGoodVirtualGammas = new TList();
518 //fGoodVirtualGammas->SetOwner(kTRUE);
522 fGammasPool = new TList*[fnCuts];
523 fCutFolder = new TList*[fnCuts];
524 fESDList = new TList*[fnCuts];
525 fBackList = new TList*[fnCuts];
526 fMotherList = new TList*[fnCuts];
527 //fQAFolder = new TList*[fnCuts];
528 hNEvents = new TH1I*[fnCuts];
529 hNGoodESDTracks = new TH1I*[fnCuts];
530 hNV0Tracks = new TH1I*[fnCuts];
531 hEtaShift = new TProfile*[fnCuts];
532 hESDConvGammaPt = new TH1F*[fnCuts];
533 hESDConvGammaEta = new TH1F*[fnCuts];
535 hESDDalitzElectronPt = new TH1F*[fnCuts];
536 hESDDalitzPositronPt = new TH1F*[fnCuts];
537 hESDDalitzElectronPhi = new TH1F*[fnCuts];
538 hESDDalitzPositronPhi = new TH1F*[fnCuts];
542 fQAFolder = new TList*[fnCuts];
544 hNGoodESDTracksVsNGoodGammas = new TH2F*[fnCuts];
545 hNGoodESDTracksVsNGoodVGammas = new TH2F*[fnCuts];
546 hESDDalitzElectronAfterPt = new TH1F*[fnCuts];
547 hESDDalitzPositronAfterPt = new TH1F*[fnCuts];
548 hESDDalitzElectronAfterEta = new TH1F*[fnCuts];
549 hESDDalitzPositronAfterEta = new TH1F*[fnCuts];
550 hESDDalitzElectronAfterPhi = new TH1F*[fnCuts];
551 hESDDalitzPositronAfterPhi = new TH1F*[fnCuts];
552 hESDDalitzElectronAfterNClsITS = new TH1F*[fnCuts];
553 hESDDalitzPositronAfterNClsITS = new TH1F*[fnCuts];
554 hESDDalitzElectronAfterNFindClsTPC = new TH2F*[fnCuts];
555 hESDDalitzPositronAfterNFindClsTPC = new TH2F*[fnCuts];
556 hESDDalitzElectronAfterNClsTPC = new TH2F*[fnCuts];
557 hESDDalitzPositronAfterNClsTPC = new TH2F*[fnCuts];
558 hESDDalitzElectronAfterNCrossedRowsTPC = new TH2F*[fnCuts];
559 hESDDalitzPositronAfterNCrossedRowsTPC = new TH2F*[fnCuts];
560 hESDDalitzPosEleAfterDCAxy = new TH2F*[fnCuts];
561 hESDDalitzPosEleAfterDCAz = new TH2F*[fnCuts];
562 hESDDalitzElectronAfterTPCdEdxVsP = new TH2F*[fnCuts];
563 hESDDalitzPositronAfterTPCdEdxVsP = new TH2F*[fnCuts];
564 hESDDalitzElectronAfterTPCdEdxSignalVsP = new TH2F*[fnCuts];
565 hESDDalitzPositronAfterTPCdEdxSignalVsP = new TH2F*[fnCuts];
566 hESDDalitzElectronAfterTPCdEdxVsEta = new TH2F*[fnCuts];
567 hESDDalitzPositronAfterTPCdEdxVsEta = new TH2F*[fnCuts];
568 hESDDalitzElectronAfterTPCdEdxVsPhi = new TH2F*[fnCuts];
569 hESDDalitzPositronAfterTPCdEdxVsPhi = new TH2F*[fnCuts];
570 hESDMotherPhi = new TH1F*[fnCuts];
571 hESDEposEnegPsiPairDPhi = new TH2F*[fnCuts];
572 hESDEposEnegInvMassPt = new TH2F*[fnCuts];
573 hESDEposEnegAfterMassCutInvMassPi0Pt = new TH2F*[fnCuts];
574 hESDEposEnegInvMassPi0Pt = new TH2F*[fnCuts];
575 hESDEposEnegLikeSignBackInvMassPt = new TH2F*[fnCuts];
576 hESDConvGammaZR = new TH2F*[fnCuts];
582 hESDMotherInvMassPt = new TH2F*[fnCuts];
584 if(fDoChicAnalysis) {
585 hESDPi0MotherInvMassPt = new TH2F*[fnCuts];
586 hESDPi0MotherDiffInvMassPt = new TH2F*[fnCuts];
587 hESDPi0MotherDiffLimInvMassPt = new TH2F*[fnCuts];
591 hESDMotherBackInvMassPt = new TH2F*[fnCuts];
594 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
597 TString cutstringElectron =((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
598 TString cutstringMeson= ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
599 TString cutstringGamma = ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
601 fCutFolder[iCut] = new TList();
602 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s_%s",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
603 fCutFolder[iCut]->SetOwner(kTRUE);
604 fOutputContainer->Add(fCutFolder[iCut]);
606 fESDList[iCut] = new TList();
607 fESDList[iCut]->SetName(Form("%s_%s_%s ESD histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
608 fESDList[iCut]->SetOwner(kTRUE);
611 hNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
612 hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
613 hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
614 hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
615 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
616 hNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
617 hNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
618 hNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
619 hNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
620 hNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
621 fESDList[iCut]->Add(hNEvents[iCut]);
625 if(fIsHeavyIon) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",3000,0,3000);
626 else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
627 fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
630 if(fIsHeavyIon == 1) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
631 else if(fIsHeavyIon == 2) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2500,0,2500);
632 else hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",1500,0,1500);
633 fESDList[iCut]->Add(hNV0Tracks[iCut]);
636 hEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
637 fESDList[iCut]->Add(hEtaShift[iCut]);
639 hESDConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
640 fESDList[iCut]->Add(hESDConvGammaPt[iCut]);
642 hESDConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",600,-1.5,1.5);
643 fESDList[iCut]->Add(hESDConvGammaEta[iCut]);
645 hESDDalitzElectronPt[iCut] = new TH1F("ESD_DalitzElectron_Pt","ESD_DalitzElectron_Pt",1000,0,25);
646 fESDList[iCut]->Add(hESDDalitzElectronPt[iCut]);
648 hESDDalitzPositronPt[iCut] = new TH1F("ESD_DalitzPositron_Pt","ESD_DalitzPositron_Pt",1000,0,25);
649 fESDList[iCut]->Add(hESDDalitzPositronPt[iCut]);
652 hESDDalitzElectronPhi[iCut] = new TH1F("ESD_DalitzElectron_Phi","ESD_DalitzElectron_Phi",360,0,2*TMath::Pi());
653 fESDList[iCut]->Add(hESDDalitzElectronPhi[iCut]);
655 hESDDalitzPositronPhi[iCut] = new TH1F("ESD_DalitzPositron_Phi","ESD_DalitzPositron_Phi",360,0,2*TMath::Pi());
656 fESDList[iCut]->Add(hESDDalitzPositronPhi[iCut]);
662 fQAFolder[iCut] = new TList();
663 fQAFolder[iCut]->SetName(Form("%s_%s_%s QA histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
664 fQAFolder[iCut]->SetOwner(kTRUE);
668 //const Int_t kDCABins=62;
669 //Double_t binsDCADummy[63]={-3.0,-2.7,-2.4,-2.1,-1.8,-1.5,-1.2,-0.9,-0.6,-0.3,-0.25,-0.2,-0.19,-0.18,-0.17,-0.16,-0.15,-0.14,-0.13,-0.12,-0.11,-0.10,-0.09,-0.08,-0.07,-0.06,-0.05,-0.04,-0.03,-0.02,-0.01,0.0,0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.19,0.2,0.25,0.3,0.6,0.9,1.2,1.5,1.8,2.1,2.4,2.7,3.0};
671 const Int_t kPtBins=110;
672 Double_t binsPtDummy[kPtBins+1];
673 const Int_t kPBins = 109;
674 Double_t binsPDummy[kPBins+1];
678 for(Int_t i=1;i<kPtBins+1;i++)
680 if(binsPtDummy[i-1]+0.05<1.01)
681 binsPtDummy[i]=binsPtDummy[i-1]+0.05;
683 binsPtDummy[i]=binsPtDummy[i-1]+0.1;
686 for(Int_t i=1; i<kPBins+1;i++){
688 if( binsPDummy[i-1]+0.05<1.01)
689 binsPDummy[i] = binsPDummy[i-1]+0.05;
691 binsPDummy[i] = binsPDummy[i-1]+0.1;
695 hNGoodESDTracksVsNGoodGammas[iCut] = new TH2F("hNGoodESDTracksVsNGoodGammas","hNGoodESDTracksVsNGoodGammas",200,-0.5,199.5,100,-0.5,99.5);
696 fQAFolder[iCut]->Add(hNGoodESDTracksVsNGoodGammas[iCut]);
698 hNGoodESDTracksVsNGoodVGammas[iCut] = new TH2F("hNGoodESDTracksVsNVGoodVGammas","hNGoodESDTracksVsNGoodVGammas",200,-0.5,199.5,100,-0.5,99.5);
699 fQAFolder[iCut]->Add(hNGoodESDTracksVsNGoodVGammas[iCut]);
701 hESDConvGammaZR[iCut]= new TH2F("ESD_ConvGamma_ConversionPoint_ZR","ESD_ConvGamma_ConversionPoint_ZR",1200,-150,150,480,0,120);
702 fQAFolder[iCut]->Add(hESDConvGammaZR[iCut]);
704 hESDDalitzElectronAfterPt[iCut] = new TH1F("ESD_DalitzElectron_After_Pt","ESD_DalitzElectron_After_Pt",1000,0,25);
705 fQAFolder[iCut]->Add(hESDDalitzElectronAfterPt[iCut]);
707 hESDDalitzPositronAfterPt[iCut] = new TH1F("ESD_DalitzPositron_After_Pt","ESD_DalitzPositron_After_Pt",1000,0,25);
708 fQAFolder[iCut]->Add(hESDDalitzPositronAfterPt[iCut]);
710 hESDDalitzElectronAfterEta[iCut] = new TH1F("ESD_DalitzElectron_After_Eta","ESD_DalitzElectron_After_Eta",600,-1.5,1.5);
711 fQAFolder[iCut]->Add(hESDDalitzElectronAfterEta[iCut]);
713 hESDDalitzPositronAfterEta[iCut] = new TH1F("ESD_DalitzPositron_After_Eta","ESD_DalitzElectron_After_Eta",600,-1.5,1.5);
714 fQAFolder[iCut]->Add(hESDDalitzPositronAfterEta[iCut]);
717 hESDDalitzElectronAfterPhi[iCut] = new TH1F("ESD_DalitzElectron_After_Phi","ESD_DalitzElectron_After_Phi",360,0,2*TMath::Pi());
718 fQAFolder[iCut]->Add(hESDDalitzElectronAfterPhi[iCut]);
720 hESDDalitzPositronAfterPhi[iCut] = new TH1F("ESD_DalitzPositron_After_Phi","ESD_DalitzPositron_After_Phi",360,0,2*TMath::Pi());
721 fQAFolder[iCut]->Add(hESDDalitzPositronAfterPhi[iCut]);
723 hESDDalitzElectronAfterNClsITS[iCut] = new TH1F("ESD_DalitzElectron_After_NClsITS","ESD_DalitzElectron_After_NClsITS",7,0.,7.);
724 fQAFolder[iCut]->Add(hESDDalitzElectronAfterNClsITS[iCut]);
726 hESDDalitzPositronAfterNClsITS[iCut] = new TH1F("ESD_DalitzPositron_After_NClsITS","ESD_DalitzPositron_After_NClsITS",7,0.,7.);
727 fQAFolder[iCut]->Add(hESDDalitzPositronAfterNClsITS[iCut]);
730 hESDDalitzElectronAfterNFindClsTPC[iCut] = new TH2F("ESD_DalitzElectron_After_NFindClsTPC","ESD_DalitzElectron_After_NFindClsTPC",60,0,1.5,kPtBins,binsPtDummy);
731 fQAFolder[iCut]->Add(hESDDalitzElectronAfterNFindClsTPC[iCut]);
733 hESDDalitzPositronAfterNFindClsTPC[iCut] = new TH2F("ESD_DalitzPositron_After_NFindClsTPC","ESD_DalitzPositron_After_NFindClsTPC",60,0,1.5,kPtBins,binsPtDummy);
734 fQAFolder[iCut]->Add(hESDDalitzPositronAfterNFindClsTPC[iCut]);
737 hESDDalitzElectronAfterNClsTPC[iCut] = new TH2F("ESD_DalitzElectron_After_NClsTPC","ESD_DalitzElectron_After_NClsTPC",200,0,200,kPtBins,binsPtDummy);
738 fQAFolder[iCut]->Add(hESDDalitzElectronAfterNClsTPC[iCut]);
740 hESDDalitzPositronAfterNClsTPC[iCut] = new TH2F("ESD_DalitzPositron_After_NClsTPC","ESD_DalitzPositron_After_NClsTPC",200,0,200,kPtBins,binsPtDummy);
741 fQAFolder[iCut]->Add(hESDDalitzPositronAfterNClsTPC[iCut]);
743 hESDDalitzPositronAfterNCrossedRowsTPC[iCut] = new TH2F("ESD_DalitzPositron_After_NCrossedRowsTPC","ESD_DalitzPositron_After_NCrossedRowsTPC",165,-0.5,164.5,kPtBins,binsPtDummy);
744 fQAFolder[iCut]->Add(hESDDalitzPositronAfterNCrossedRowsTPC[iCut]);
746 hESDDalitzElectronAfterNCrossedRowsTPC[iCut] = new TH2F("ESD_DalitzElectron_After_NCrossedRowsTPC","ESD_DalitzElectron_After_NCrossedRowsTPC",165,-0.5,164.5,kPtBins,binsPtDummy);
747 fQAFolder[iCut]->Add(hESDDalitzElectronAfterNCrossedRowsTPC[iCut]);
749 hESDDalitzPosEleAfterDCAxy[iCut] = new TH2F("ESD_DalitzPosEle_After_DCAxy","ESD_DalitzPosEle_After_DCAxy",124,-0.62,0.62,kPtBins,binsPtDummy);
750 fQAFolder[iCut]->Add(hESDDalitzPosEleAfterDCAxy[iCut]);
752 hESDDalitzPosEleAfterDCAz[iCut] = new TH2F("ESD_DalitzPosEle_After_DCAz","ESD_DalitzPosEle_After_DCAz",200,-1.0,1.0,kPtBins,binsPtDummy);
753 fQAFolder[iCut]->Add(hESDDalitzPosEleAfterDCAz[iCut]);
755 hESDDalitzElectronAfterTPCdEdxVsP[iCut] = new TH2F("ESD_DalitzElectron_After_TPCdEdxVsP","ESD_DalitzElectron_After_TPCdEdxVsP_After_TPCdEdx",kPBins,binsPDummy,200,-10,10);
756 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxVsP[iCut]);
758 hESDDalitzPositronAfterTPCdEdxVsP[iCut] = new TH2F("ESD_DalitzPositron_After_TPCdEdxVsP","ESD_DalitzPositron_After_TPCdEdxVsP",kPBins,binsPDummy,200,-10,10);
759 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxVsP[iCut]);
761 hESDDalitzElectronAfterTPCdEdxSignalVsP[iCut] =new TH2F("ESD_DalitzElectron_After_TPCdEdxSignalVsP","ESD_DalitzElectron_After_TPCdEdxSignalVsP" ,kPBins,binsPDummy,200,0.0,200);
762 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxSignalVsP[iCut]);
764 hESDDalitzPositronAfterTPCdEdxSignalVsP[iCut] =new TH2F("ESD_DalitzPositron_After_TPCdEdxSignalVsP","ESD_DalitzPositron_After_TPCdEdxSignalVsP" ,kPBins,binsPDummy,200,0.0,200);
765 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxSignalVsP[iCut]);
767 hESDDalitzElectronAfterTPCdEdxVsEta[iCut] = new TH2F("ESD_DalitzElectron_After_TPCdEdxVsEta","ESD_DalitzElectron_After_TPCdEdxVsEta",140,-1.4,1.4,200,-10,10);
768 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxVsEta[iCut]);
770 hESDDalitzPositronAfterTPCdEdxVsEta[iCut] = new TH2F("ESD_DalitzPositron_After_TPCdEdxVsEta","ESD_DalitzPositron_After_TPCdEdxVsEta",140,-1.4,1.4,200,-10,10);
771 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxVsEta[iCut]);
773 hESDDalitzElectronAfterTPCdEdxVsPhi[iCut] = new TH2F("ESD_DalitzElectron_After_TPCdEdxVsPhi","ESD_DalitzElectron_After_TPCdEdxVsPhi",180,0,2*TMath::Pi(),200,-10,10);
774 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxVsPhi[iCut]);
776 hESDDalitzPositronAfterTPCdEdxVsPhi[iCut] = new TH2F("ESD_DalitzPositron_After_TPCdEdxVsPhi","ESD_DalitzPositron_After_TPCdEdxVsPhi",180,0,2*TMath::Pi(),200,-10,10);
777 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxVsPhi[iCut]);
779 hESDMotherPhi[iCut] = new TH1F("ESD_DalitzMother_Phi","ESD_DalitzMother_Phi",360,0,2*TMath::Pi());
780 fQAFolder[iCut]->Add(hESDMotherPhi[iCut]);
782 hESDEposEnegPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_PsiPair_DPhi","ESD_EposEneg_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
783 fQAFolder[iCut]->Add(hESDEposEnegPsiPairDPhi[iCut]);
785 hESDEposEnegInvMassPt[iCut] = new TH2F("ESD_EposEneg_InvMassPt","ESD_EposEneg_InvMassPt",4000,0.0,2.0,100,0.,10.);
786 fQAFolder[iCut]->Add(hESDEposEnegInvMassPt[iCut]);
788 hESDEposEnegAfterMassCutInvMassPi0Pt[iCut] = new TH2F("ESD_EposEneg_AfterMassCut_InvMassPi0Pt","ESD_EposEneg_AfterMassCut_InvMassPi0Pt",4000,0.0,2.0,100,0.,10.);
789 fQAFolder[iCut]->Add(hESDEposEnegAfterMassCutInvMassPi0Pt[iCut]);
792 hESDEposEnegInvMassPi0Pt[iCut] = new TH2F("ESD_EposEneg_InvMassPi0Pt","ESD_EposEneg_InvMassPi0Pt",1000,0.0,0.5,100,0.,10.);
793 fQAFolder[iCut]->Add(hESDEposEnegInvMassPi0Pt[iCut]);
797 hESDEposEnegLikeSignBackInvMassPt[iCut] = new TH2F("ESD_EposEneg_LikeSignBack_InvMassPt","ESD_EposEneg_LikeSignBack_InvMassPt",4000,0.0,2.,100,0.,10.);
798 fQAFolder[iCut]->Add(hESDEposEnegLikeSignBackInvMassPt[iCut]);
801 TAxis *AxisAfter = hESDDalitzElectronAfterTPCdEdxVsP[iCut]->GetXaxis();
802 Int_t bins = AxisAfter->GetNbins();
803 Double_t from = AxisAfter->GetXmin();
804 Double_t to = AxisAfter->GetXmax();
805 Double_t *newBins = new Double_t[bins+1];
807 Double_t factor = TMath::Power(to/from, 1./bins);
808 for(Int_t i=1; i<=bins; ++i) newBins[i] = factor * newBins[i-1];
810 AxisAfter->Set(bins, newBins);
811 AxisAfter = hESDDalitzElectronAfterTPCdEdxSignalVsP[iCut]->GetXaxis();
812 AxisAfter->Set(bins, newBins);
814 AxisAfter = hESDDalitzPositronAfterTPCdEdxVsP[iCut]->GetXaxis();
815 AxisAfter->Set(bins, newBins);
817 AxisAfter = hESDDalitzPositronAfterTPCdEdxSignalVsP[iCut]->GetXaxis();
818 AxisAfter->Set(bins,newBins);
827 fCutFolder[iCut]->Add(fQAFolder[iCut]);
837 hESDMotherInvMassPt[iCut] = new TH2F("ESD_DalitzMother_InvMass_Pt","ESD_DalitzMother_InvMass_Pt",800,0,0.8,250,0,25);
838 fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
841 if( fDoChicAnalysis) {
843 hESDPi0MotherInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_InvMass_Pt","ESD_Pi0Mother_InvMass_Pt",4000,0,4,250,0,25);
844 fESDList[iCut]->Add(hESDPi0MotherInvMassPt[iCut]);
846 hESDPi0MotherDiffInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_DiffInvMass_Pt","ESD_Pi0Mother_DiffInvMass_Pt",2000,0,2,250,0,25);
847 fESDList[iCut]->Add(hESDPi0MotherDiffInvMassPt[iCut]);
849 hESDPi0MotherDiffLimInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_DiffLimInvMass_Pt","ESD_Pi0Mother_DiffLimInvMass_Pt",2000,0,2,250,0,25);
850 fESDList[iCut]->Add(hESDPi0MotherDiffLimInvMassPt[iCut]);
855 hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_DalitzBackground_InvMass_Pt","ESD_DalitzBackground_InvMass_Pt",800,0,0.8,250,0,25);
856 fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
860 fCutFolder[iCut]->Add(fESDList[iCut]);
867 InitBack(); // Init Background Handler
873 fMCList = new TList*[fnCuts];
875 fTrueList = new TList*[fnCuts];
876 hESDTrueConvGammaPt = new TH1F*[fnCuts];
877 hESDTruePositronPt = new TH1F*[fnCuts];
878 hESDTrueElectronPt = new TH1F*[fnCuts];
879 hESDTrueSecConvGammaPt = new TH1F*[fnCuts];
880 hESDTrueSecPositronPt = new TH1F*[fnCuts];
881 hESDTrueSecElectronPt = new TH1F*[fnCuts];
882 hESDTruePi0DalitzConvGammaPt = new TH1F*[fnCuts];
883 hESDTruePi0DalitzPositronPt = new TH1F*[fnCuts];
884 hESDTruePi0DalitzElectronPt = new TH1F*[fnCuts];
885 hESDTruePi0DalitzSecConvGammaPt = new TH1F*[fnCuts];
886 hESDTruePi0DalitzSecPositronPt = new TH1F*[fnCuts];
887 hESDTruePi0DalitzSecElectronPt = new TH1F*[fnCuts];
888 //if(fDoMesonAnalysis){
889 hMCAllGammaPt = new TH1F*[fnCuts];
890 hMCConvGammaPt = new TH1F*[fnCuts];
891 hMCConvGammaRSPt = new TH1F*[fnCuts];
892 hMCAllPositronsPt = new TH1F*[fnCuts];
893 hMCAllElectronsPt = new TH1F*[fnCuts];
897 hMCConvGammaEta = new TH1F*[fnCuts];
898 hMCAllPositronsEta = new TH1F*[fnCuts];
899 hMCAllElectronsEta = new TH1F*[fnCuts];
902 hMCPi0DalitzGammaPt = new TH1F*[fnCuts];
903 hMCPi0DalitzElectronPt = new TH1F*[fnCuts];
904 hMCPi0DalitzPositronPt = new TH1F*[fnCuts];
906 hMCPi0Pt = new TH1F*[fnCuts];
907 hMCPi0GGPt = new TH1F*[fnCuts];
908 hMCEtaPt = new TH1F*[fnCuts];
909 hMCEtaGGPt = new TH1F*[fnCuts];
910 hMCPi0InAccPt = new TH1F*[fnCuts];
911 hMCEtaInAccPt = new TH1F*[fnCuts];
912 hMCChiCPt = new TH1F*[fnCuts];
913 hMCChiCInAccPt = new TH1F*[fnCuts];
918 hMCPi0EposEnegInvMassPt = new TH2F*[fnCuts];
919 hMCEtaEposEnegInvMassPt = new TH2F*[fnCuts];
921 hESDEposEnegTruePi0DalitzInvMassPt = new TH2F*[fnCuts];
922 hESDEposEnegTruePrimPi0DalitzInvMass = new TH1F*[fnCuts];
923 hESDEposEnegTruePi0DalitzPsiPairDPhi = new TH2F*[fnCuts];
924 hESDEposEnegTrueEtaDalitzInvMassPt = new TH2F*[fnCuts];
925 hESDEposEnegTruePrimEtaDalitzInvMass = new TH1F*[fnCuts];
926 hESDEposEnegTrueEtaDalitzPsiPairDPhi = new TH2F*[fnCuts];
927 hESDEposEnegTruePhotonInvMassPt = new TH2F*[fnCuts];
928 hESDEposEnegTrueInvMassPt = new TH2F*[fnCuts];
929 hESDEposEnegTruePhotonPsiPairDPhi = new TH2F*[fnCuts];
930 hESDEposEnegTruePhotonPsiPairDPhiPtCut = new TH2F*[fnCuts];
931 hESDEposEnegTrueJPsiInvMassPt = new TH2F*[fnCuts];
935 if( fDoChicAnalysis ){
936 hESDTrueMotherChiCInvMassPt = new TH2F*[fnCuts];
937 hESDTrueMotherChiCDiffInvMassPt = new TH2F*[fnCuts];
941 hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
942 hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
943 hESDTrueMotherPi0GGInvMassPt = new TH2F*[fnCuts];
944 hESDTruePrimaryMotherPi0GGInvMassPt = new TH2F*[fnCuts];
945 hESDTrueSecondaryMotherPi0GGInvMassPt = new TH2F*[fnCuts];
946 hESDTruePrimaryPi0DalitzESDPtMCPt = new TH2F*[fnCuts];
947 hESDTruePrimaryMotherInvMassMCPt = new TH2F*[fnCuts];
948 hESDTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
949 hESDTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
950 hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
951 hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
952 hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
953 hESDTrueBckContInvMassPt = new TH2F*[fnCuts];
954 hESDTrueMotherGGInvMassPt = new TH2F*[fnCuts];
957 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
958 TString cutstringElectron =((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
959 TString cutstringMeson= ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
960 TString cutstringGamma = ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
962 fMCList[iCut] = new TList();
963 fMCList[iCut]->SetName(Form("%s_%s_%s MC histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
964 fMCList[iCut]->SetOwner(kTRUE);
965 fCutFolder[iCut]->Add(fMCList[iCut]);
968 hMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
969 fMCList[iCut]->Add(hMCAllGammaPt[iCut]);
971 hMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
972 fMCList[iCut]->Add(hMCConvGammaPt[iCut]);
975 hMCConvGammaRSPt[iCut] = new TH1F("MC_ConvGamma_RS_Pt","MC_ConvGamma_RS_Pt",250,0,25);
976 fMCList[iCut]->Add(hMCConvGammaRSPt[iCut]);
979 hMCAllPositronsPt[iCut] = new TH1F("MC_AllPositrons_Pt","MC_AllPositrons_Pt",1000,0,25);
980 fMCList[iCut]->Add(hMCAllPositronsPt[iCut]);
982 hMCAllElectronsPt[iCut] = new TH1F("MC_AllElectrons_Pt","MC_AllElectrons_Pt",1000,0,25);
983 fMCList[iCut]->Add(hMCAllElectronsPt[iCut]);
985 hMCPi0DalitzGammaPt[iCut] = new TH1F("MC_Pi0DalitzGamma_Pt","MC_Pi0DalitzGamma_Pt",250,0,25);
986 hMCPi0DalitzGammaPt[iCut]->Sumw2();
987 fMCList[iCut]->Add(hMCPi0DalitzGammaPt[iCut]);
991 hMCConvGammaEta[iCut] = new TH1F("MC_ConvGamma_Eta","MC_ConvGamma_Eta",600,-1.5,1.5);
992 fMCList[iCut]->Add(hMCConvGammaEta[iCut]);
994 hMCAllPositronsEta[iCut] = new TH1F("MC_AllPositrons_Eta","MC_AllPositrons_Eta",600,-1.5,1.5);
995 fMCList[iCut]->Add(hMCAllPositronsEta[iCut]);
997 hMCAllElectronsEta[iCut] = new TH1F("MC_AllElectrons_Eta","MC_AllElectrons_Eta",600,-1.5,1.5);
998 fMCList[iCut]->Add(hMCAllElectronsEta[iCut]);
1004 hMCPi0DalitzPositronPt[iCut] = new TH1F("MC_Pi0DalitzPositron_Pt","MC_Pi0DalitzPositron_Pt",1000,0,25);
1005 hMCPi0DalitzPositronPt[iCut]->Sumw2();
1006 fMCList[iCut]->Add(hMCPi0DalitzPositronPt[iCut]);
1008 hMCPi0DalitzElectronPt[iCut] = new TH1F("MC_Pi0DalitzElectron_Pt","MC_Pi0DalitzElectron_Pt",1000,0,25);
1009 hMCPi0DalitzElectronPt[iCut]->Sumw2();
1010 fMCList[iCut]->Add(hMCPi0DalitzElectronPt[iCut]);
1013 hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
1014 hMCPi0Pt[iCut]->Sumw2();
1015 fMCList[iCut]->Add(hMCPi0Pt[iCut]);
1017 hMCPi0GGPt[iCut] = new TH1F("MC_Pi0_GG_Pt","MC_Pi0_GG_Pt",250,0,25);
1018 hMCPi0GGPt[iCut]->Sumw2();
1019 fMCList[iCut]->Add(hMCPi0GGPt[iCut]);
1021 hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
1022 hMCEtaPt[iCut]->Sumw2();
1023 fMCList[iCut]->Add(hMCEtaPt[iCut]);
1025 hMCEtaGGPt[iCut] = new TH1F("MC_Eta_GG_Pt","MC_Eta_GG_Pt",250,0,25);
1026 hMCEtaGGPt[iCut]->Sumw2();
1027 fMCList[iCut]->Add(hMCEtaGGPt[iCut]);
1029 hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0DalitzInAcc_Pt","MC_Pi0DalitzInAcc_Pt",250,0,25);
1030 hMCPi0InAccPt[iCut]->Sumw2();
1031 fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
1033 hMCEtaInAccPt[iCut] = new TH1F("MC_EtaDalitzInAcc_Pt","MC_EtaDalitzInAcc_Pt",250,0,25);
1034 hMCEtaInAccPt[iCut]->Sumw2();
1035 fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
1039 hMCChiCPt[iCut] = new TH1F("MC_ChiC_Pt","MC_ChiC_Pt",250,0,25);
1040 fMCList[iCut]->Add(hMCChiCPt[iCut]);
1042 hMCChiCInAccPt[iCut] = new TH1F("MC_ChiCInAcc_Pt","MC_ChiCInAcc_Pt",250,0,25);
1043 fMCList[iCut]->Add(hMCChiCInAccPt[iCut]);
1047 hMCPi0EposEnegInvMassPt[iCut] = new TH2F("MC_Pi0EposEneg_InvMassPt","MC_Pi0EposEneg_InvMassPt",1000,0.0,0.5,100,0.,10.);
1048 fMCList[iCut]->Add(hMCPi0EposEnegInvMassPt[iCut]);
1050 hMCEtaEposEnegInvMassPt[iCut] = new TH2F("MC_EtaEposEneg_InvMassPt","MC_EtaEposEneg_InvMassPt",1400,0.,0.7,100,0.,10.);
1051 fMCList[iCut]->Add(hMCEtaEposEnegInvMassPt[iCut]);
1059 fTrueList[iCut] = new TList();
1060 fTrueList[iCut]->SetName(Form("%s_%s_%s True histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
1061 fTrueList[iCut]->SetOwner(kTRUE);
1062 fCutFolder[iCut]->Add(fTrueList[iCut]);
1067 hESDEposEnegTruePi0DalitzInvMassPt[iCut] = new TH2F("ESD_EposEneg_TruePi0Dalitz_InvMassPt","ESD_EposEneg_TruePi0Dalitz_InvMassPt",1000,0.0,0.5,100,0.,10.);
1068 fTrueList[iCut]->Add(hESDEposEnegTruePi0DalitzInvMassPt[iCut]);
1070 hESDEposEnegTruePrimPi0DalitzInvMass[iCut] = new TH1F("ESD_EposEneg_TruePrimPi0Dalitz_InvMass","ESD_EposEneg_TruePrimPi0Dalitz_InvMass",500,0.,0.5);
1071 fTrueList[iCut]->Add(hESDEposEnegTruePrimPi0DalitzInvMass[iCut]);
1073 hESDEposEnegTruePi0DalitzPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TruePi0Dalitz_PsiPair_DPhi","ESD_EposEneg_TruePi0Dalitz_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
1074 fTrueList[iCut]->Add(hESDEposEnegTruePi0DalitzPsiPairDPhi[iCut]);
1077 hESDEposEnegTrueEtaDalitzInvMassPt[iCut] = new TH2F("ESD_EposEneg_TrueEtaDalitz_InvMassPt","ESD_EposEneg_TrueEtaDalitz_InvMassPt",700,0.,0.7,100,0.,10.);
1078 fTrueList[iCut]->Add(hESDEposEnegTrueEtaDalitzInvMassPt[iCut]);
1080 hESDEposEnegTruePrimEtaDalitzInvMass[iCut] = new TH1F("ESD_EposEneg_TruePrimEtaDalitz_InvMass","ESD_EposEneg_TruePrimEtaDalitz_InvMass",700,0.,0.7);
1081 fTrueList[iCut]->Add(hESDEposEnegTruePrimEtaDalitzInvMass[iCut]);
1083 hESDEposEnegTrueEtaDalitzPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TrueEtaDalitz_PsiPair_DPhi","ESD_EposEneg_TrueEtaDalitz_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
1084 fTrueList[iCut]->Add(hESDEposEnegTrueEtaDalitzPsiPairDPhi[iCut]);
1086 hESDEposEnegTruePhotonInvMassPt[iCut] = new TH2F("ESD_EposEneg_TruePhoton_InvMassPt","ESD_EposEneg_TruePhoton_InvMassPt",500,0.,0.5,100,0.,10.);
1087 fTrueList[iCut]->Add(hESDEposEnegTruePhotonInvMassPt[iCut]);
1089 hESDEposEnegTrueInvMassPt[iCut] = new TH2F("ESD_EposEneg_True_InvMassPt","ESD_EposEneg_True_InvMassPt",5000,0.,5.,100,0.,10.);
1090 fTrueList[iCut]->Add(hESDEposEnegTrueInvMassPt[iCut]);
1092 hESDEposEnegTruePhotonPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TruePhoton_PsiPair_DPhi","ESD_EposEneg_TruePhoton_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
1093 fTrueList[iCut]->Add(hESDEposEnegTruePhotonPsiPairDPhi[iCut]);
1095 hESDEposEnegTruePhotonPsiPairDPhiPtCut[iCut] = new TH2F("ESD_EposEneg_TruePhoton_PsiPair_DPhi_PtCut","ESD_EposEneg_TruePhoton_PsiPair_DPhi_PtCut", 100, -1.0,1.0,100,-1.0,1.0 );
1096 fTrueList[iCut]->Add(hESDEposEnegTruePhotonPsiPairDPhiPtCut[iCut]);
1100 hESDEposEnegTrueJPsiInvMassPt[iCut] = new TH2F("ESD_EposEneg_TrueJPsi_InvMassPt","ESD_EposEneg_TrueJPsi_InvMassPt",5000,0.,5.,100,0.,10.);
1101 fTrueList[iCut]->Add(hESDEposEnegTrueJPsiInvMassPt[iCut]);
1112 hESDTruePositronPt[iCut] = new TH1F("ESD_TruePositron_Pt","ESD_TruePositron_Pt",1000,0,25);
1113 fTrueList[iCut]->Add(hESDTruePositronPt[iCut]);
1115 hESDTrueElectronPt[iCut] = new TH1F("ESD_TrueElectron_Pt","ESD_TrueElectron_Pt",1000,0,25);
1116 fTrueList[iCut]->Add(hESDTrueElectronPt[iCut]);
1118 hESDTrueSecPositronPt[iCut] = new TH1F("ESD_TrueSecPositron_Pt","ESD_TrueSecPositron_Pt",1000,0,25);
1119 fTrueList[iCut]->Add(hESDTrueSecPositronPt[iCut]);
1121 hESDTrueSecElectronPt[iCut] = new TH1F("ESD_TrueSecElectron_Pt","ESD_TrueSecElectron_Pt",1000,0,25);
1122 fTrueList[iCut]->Add(hESDTrueSecElectronPt[iCut]);
1124 hESDTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
1125 fTrueList[iCut]->Add(hESDTrueConvGammaPt[iCut]);
1127 hESDTrueSecConvGammaPt[iCut] = new TH1F("ESD_TrueSecConvGamma_Pt","ESD_TrueSecConvGamma_Pt",250,0,25);
1128 fTrueList[iCut]->Add(hESDTrueSecConvGammaPt[iCut]);
1130 hESDTruePi0DalitzConvGammaPt[iCut] = new TH1F("ESD_TruePi0DalitzConvGamma_Pt","ESD_TruePi0DalitzConvGamma_Pt",250,0,25);
1131 fTrueList[iCut]->Add(hESDTruePi0DalitzConvGammaPt[iCut]);
1133 hESDTruePi0DalitzElectronPt[iCut] = new TH1F("ESD_TruePi0DalitzElectron_Pt","ESD_TruePi0DalitzElectron_Pt",1000,0,25);
1134 fTrueList[iCut]->Add(hESDTruePi0DalitzElectronPt[iCut]);
1136 hESDTruePi0DalitzPositronPt[iCut] = new TH1F("ESD_TruePi0DalitzPositron_Pt","ESD_TruePi0DalitzPositron_Pt",1000,0,25);
1137 fTrueList[iCut]->Add(hESDTruePi0DalitzPositronPt[iCut]);
1139 hESDTruePi0DalitzSecConvGammaPt[iCut] = new TH1F("ESD_TruePi0DalitzSecConvGamma_Pt","ESD_TruePi0DalitzSecConvGamma_Pt",250,0,25);
1140 fTrueList[iCut]->Add(hESDTruePi0DalitzSecConvGammaPt[iCut]);
1142 hESDTruePi0DalitzSecElectronPt[iCut] = new TH1F("ESD_TruePi0DalitzSecElectron_Pt","ESD_TruePi0DalitzSecElectron_Pt",1000,0,25);
1143 fTrueList[iCut]->Add(hESDTruePi0DalitzSecElectronPt[iCut]);
1145 hESDTruePi0DalitzSecPositronPt[iCut] = new TH1F("ESD_TruePi0DalitzSecPositron_Pt","ESD_TruePi0DalitzSecPositron_Pt",1000,0,25);
1146 fTrueList[iCut]->Add(hESDTruePi0DalitzSecPositronPt[iCut]);
1148 if( fDoChicAnalysis) {
1150 hESDTrueMotherChiCInvMassPt[iCut] = new TH2F("ESD_TrueMotherChiC_InvMass_Pt","ESD_TrueMotherChiC_InvMass_Pt",4000,0,4,250,0,25);
1151 fTrueList[iCut]->Add(hESDTrueMotherChiCInvMassPt[iCut]);
1153 hESDTrueMotherChiCDiffInvMassPt[iCut] = new TH2F("ESD_TrueMotherChiCDiff_InvMass_Pt","ESD_TrueMotherChiCDiff_InvMass_Pt",2000,0,2,250,0,25);
1154 fTrueList[iCut]->Add(hESDTrueMotherChiCDiffInvMassPt[iCut]);
1158 hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
1159 hESDTrueMotherInvMassPt[iCut]->Sumw2();
1160 fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
1162 hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueMother_Dalitz_InvMass_Pt","ESD_TrueMother_Dalitz_InvMass_Pt",800,0,0.8,250,0,25);
1163 hESDTrueMotherDalitzInvMassPt[iCut]->Sumw2();
1164 fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);
1170 hESDTrueMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TrueMotherPi0GG_InvMass_Pt","ESD_TrueMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
1171 hESDTrueMotherPi0GGInvMassPt[iCut]->Sumw2();
1172 fTrueList[iCut]->Add(hESDTrueMotherPi0GGInvMassPt[iCut]);
1174 hESDTruePrimaryMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMotherPi0GG_InvMass_Pt","ESD_TruePrimaryMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
1175 hESDTruePrimaryMotherPi0GGInvMassPt[iCut]->Sumw2();
1176 fTrueList[iCut]->Add(hESDTruePrimaryMotherPi0GGInvMassPt[iCut]);
1178 hESDTrueSecondaryMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryMotherPi0GG_InvMass_Pt","ESD_TrueSecondaryMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
1179 hESDTrueSecondaryMotherPi0GGInvMassPt[iCut]->Sumw2();
1180 fTrueList[iCut]->Add(hESDTrueSecondaryMotherPi0GGInvMassPt[iCut]);
1182 hESDTruePrimaryPi0DalitzESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryPi0Dalitz_ESDPt_MCPt","ESD_TruePrimaryPi0Dalitz_ESDPt_MCPt",250,0,25,250,0,25);
1183 hESDTruePrimaryPi0DalitzESDPtMCPt[iCut]->Sumw2();
1184 fTrueList[iCut]->Add(hESDTruePrimaryPi0DalitzESDPtMCPt[iCut]);
1185 hESDTruePrimaryMotherInvMassMCPt[iCut] = new TH2F("ESD_TruePrimaryMother_InvMass_MCPt","ESD_TrueDalitzPrimaryMother_InvMass_MCPt",800,0,0.8,250,0,25);
1186 hESDTruePrimaryMotherInvMassMCPt[iCut]->Sumw2();
1187 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassMCPt[iCut]);
1188 hESDTruePrimaryMotherInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMother_InvMass_Pt","ESD_TruePrimaryMother_InvMass_Pt",800,0,0.8,250,0,25);
1189 hESDTruePrimaryMotherInvMassPt[iCut]->Sumw2();
1190 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassPt[iCut]);
1191 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMotherW0Weighting_InvMass_Pt","ESD_TruePrimaryMotherW0Weighting_InvMass_Pt",800,0,0.8,250,0,25);
1192 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
1193 fTrueList[iCut]->Add(hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]);
1195 hESDTrueSecondaryMotherInvMassPt[iCut] = new TH2F("ESD_TrueDalitzSecondaryMother_InvMass_Pt","ESD_TrueDalitzSecondaryMother_InvMass_Pt",800,0,0.8,250,0,25);
1196 hESDTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
1197 fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
1198 // hESDTrueSecondaryMotherFromK0sInvMassPt[iCut] = new TH2F("ESD_TrueDalitzSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueDalitzSecondaryMotherFromK0s_InvMass_Pt",1000,0,1,250,0,25);
1199 // fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
1200 hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueDalitzBckGG_InvMass_Pt","ESD_TrueDalitzBckGG_InvMass_Pt",800,0,0.8,250,0,25);
1201 fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
1202 hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueDalitzBckCont_InvMass_Pt","ESD_TrueDalitzBckCont_InvMass_Pt",800,0,0.8,250,0,25);
1203 fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
1204 // hESDTrueMotherGGInvMassPt[iCut] = new TH2F("ESD_TrueGammaGamma_InvMass_Pt","ESD_TrueGammaGamma_InvMass_Pt",1000,0,1,250,0,25);
1205 // fTrueList[iCut]->Add(hESDTrueMotherGGInvMassPt[iCut]);
1210 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
1211 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
1214 if((AliConversionCuts*)fV0Reader->GetConversionCuts())
1215 if(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
1216 fOutputContainer->Add(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
1220 fElecSelector=(AliDalitzElectronSelector*)AliAnalysisManager::GetAnalysisManager()->GetTask("ElectronSelector");
1221 if(!fElecSelector){printf("Error: No ElectronSelector");return;} // GetV0Reader
1223 if( fElecSelector ){
1225 if ( ((AliDalitzElectronCuts*)fElecSelector->GetDalitzElectronCuts())->GetCutHistograms() ){
1226 fOutputContainer->Add( ((AliDalitzElectronCuts*)fElecSelector->GetDalitzElectronCuts())->GetCutHistograms() );
1230 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
1232 if( fCutElectronArray ){
1233 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutHistograms() ) {
1234 fCutFolder[iCut]->Add( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutHistograms() );
1238 if( fCutMesonArray ) {
1239 if( ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutHistograms() ) {
1240 fCutFolder[iCut]->Add( ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutHistograms());
1244 if( fCutGammaArray ) {
1245 if( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutHistograms() ) {
1246 fCutFolder[iCut]->Add( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutHistograms() );
1251 PostData(1, fOutputContainer);
1255 //______________________________________________________________________
1256 void AliAnalysisTaskGammaConvDalitzV1::UserExec(Option_t *)
1260 // Execute analysis for current event
1263 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
1264 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
1267 Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
1269 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
1270 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1271 hNEvents[iCut]->Fill(eventQuality);
1277 fElecSelector=(AliDalitzElectronSelector*)AliAnalysisManager::GetAnalysisManager()->GetTask("ElectronSelector");
1278 if(!fElecSelector){printf("Error: No ElectronSelector");return;} // GetV0Reader
1281 if(fIsMC) fMCEvent = MCEvent();
1282 fESDEvent = (AliESDEvent*)InputEvent();
1283 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
1284 fSelectorElectronIndex = fElecSelector->GetReconstructedElectronsIndex(); // Electrons from default Cut
1285 fSelectorPositronIndex = fElecSelector->GetReconstructedPositronsIndex(); // Positrons from default Cut
1287 CountESDTracks(); // Estimate Event Multiplicity
1288 fNumberOfESDTracks = fV0Reader->GetNumberOfPrimaryTracks();
1289 //AddTaskContainers(); //Add conatiner
1291 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1294 fNVirtualGammas = 0;
1296 Int_t eventNotAccepted =
1297 ((AliConversionCuts*)fCutGammaArray->At(iCut))
1298 ->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
1300 if(eventNotAccepted){
1301 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
1302 hNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
1306 if(eventQuality != 0){// Event Not Accepted
1307 // cout << "event rejected due to: " <<eventQuality << endl;
1308 hNEvents[iCut]->Fill(eventQuality);
1312 hNEvents[iCut]->Fill(eventQuality);
1314 hNGoodESDTracks[iCut]->Fill(fNumberOfESDTracks);
1316 if(((AliConversionCuts*)fCutGammaArray->At(iCut))->IsHeavyIon() == 2) hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A());
1317 else hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
1320 if(fMCEvent){ // Process MC Particle
1324 fMCStack = fMCEvent->Stack();
1326 if(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetSignalRejection() != 0){
1327 ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetSignalRejection(),
1328 ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetAcceptedHeader(),
1332 ProcessMCParticles();
1335 ProcessPhotonCandidates(); // Process this cuts gammas
1336 ProcessElectronCandidates(); // Process this cuts gammas
1338 if(((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->UseMCPSmearing() && fMCEvent){
1340 fUnsmearedPx = new Double_t[fGoodGammas->GetEntries()]; // Store unsmeared Momenta
1341 fUnsmearedPy = new Double_t[fGoodGammas->GetEntries()];
1342 fUnsmearedPz = new Double_t[fGoodGammas->GetEntries()];
1343 fUnsmearedE = new Double_t[fGoodGammas->GetEntries()];
1345 for(Int_t gamma=0;gamma<fGoodGammas->GetEntries();gamma++){ // Smear the AODPhotons in MC
1347 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->Px();
1348 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->Py();
1349 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->Pz();
1350 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->E();
1351 ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGoodGammas->At(gamma)));
1356 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetUseVPhotonMCPmearing() && ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->UseMCPSmearing() && fMCEvent){
1358 // cout<<"Entro virtual photon smearing"<<endl;
1360 fUnsmearedVPx = new Double_t[fGoodVirtualGammas->GetEntries()]; // Store unsmeared Momenta
1361 fUnsmearedVPy = new Double_t[fGoodVirtualGammas->GetEntries()];
1362 fUnsmearedVPz = new Double_t[fGoodVirtualGammas->GetEntries()];
1363 fUnsmearedVE = new Double_t[fGoodVirtualGammas->GetEntries()];
1365 for(Int_t Vgamma=0;Vgamma<fGoodVirtualGammas->GetEntries();Vgamma++){ // Smear the AODPhotons in MC
1367 fUnsmearedVPx[Vgamma] = ((AliAODConversionPhoton*)fGoodVirtualGammas->At(Vgamma))->Px();
1368 fUnsmearedVPy[Vgamma] = ((AliAODConversionPhoton*)fGoodVirtualGammas->At(Vgamma))->Py();
1369 fUnsmearedVPz[Vgamma] = ((AliAODConversionPhoton*)fGoodVirtualGammas->At(Vgamma))->Pz();
1370 fUnsmearedVE[Vgamma] = ((AliAODConversionPhoton*)fGoodVirtualGammas->At(Vgamma))->E();
1371 ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->SmearVirtualPhoton(dynamic_cast<AliAODConversionPhoton*>(fGoodVirtualGammas->At(Vgamma)));
1376 ProcessVirtualGammasCandidates();
1377 CalculatePi0DalitzCandidates();
1378 CalculateBackground();
1379 UpdateEventByEventData();
1383 hNGoodESDTracksVsNGoodGammas[iCut]->Fill(fNumberOfESDTrackskBoth,fGoodGammas->GetEntries());
1384 hNGoodESDTracksVsNGoodVGammas[iCut]->Fill(fNumberOfESDTrackskBoth,fNVirtualGammas);
1390 if(((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->UseMCPSmearing() && fMCEvent){
1392 for(Int_t gamma=0;gamma<fGoodGammas->GetEntries();gamma++){ // Smear the AODPhotons in MC
1393 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
1394 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetPy(fUnsmearedPy[gamma]);
1395 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetPz(fUnsmearedPz[gamma]);
1396 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetE(fUnsmearedE[gamma]);
1398 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
1399 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
1400 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
1401 delete[] fUnsmearedE; fUnsmearedE = 0x0;
1405 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetUseVPhotonMCPmearing() && ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->UseMCPSmearing() && fMCEvent){
1407 for(Int_t Vgamma=0;Vgamma<fGoodVirtualGammas->GetEntries();Vgamma++){ // Smear the AODPhotons in MC
1408 ((AliAODConversionPhoton*)fGoodVirtualGammas->At(Vgamma))->SetPx(fUnsmearedVPx[Vgamma]); // Reset Unsmeared Momenta
1409 ((AliAODConversionPhoton*)fGoodVirtualGammas->At(Vgamma))->SetPy(fUnsmearedVPy[Vgamma]);
1410 ((AliAODConversionPhoton*)fGoodVirtualGammas->At(Vgamma))->SetPz(fUnsmearedVPz[Vgamma]);
1411 ((AliAODConversionPhoton*)fGoodVirtualGammas->At(Vgamma))->SetE(fUnsmearedVE[Vgamma]);
1414 //cout<<"Entro virtual photon smearing2"<<endl;
1416 delete[] fUnsmearedVPx; fUnsmearedVPx = 0x0;
1417 delete[] fUnsmearedVPy; fUnsmearedVPy = 0x0;
1418 delete[] fUnsmearedVPz; fUnsmearedVPz = 0x0;
1419 delete[] fUnsmearedVE; fUnsmearedVE = 0x0;
1425 fGoodGammas->Clear(); // delete this cuts good gammas
1426 fGoodVirtualGammas->Clear(); // delete this cuts good gammas
1429 fSelectorElectronIndex.clear();
1430 fSelectorPositronIndex.clear();
1432 PostData( 1, fOutputContainer );
1435 Bool_t AliAnalysisTaskGammaConvDalitzV1::Notify()
1437 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
1440 if( !((AliConversionCuts*)fCutGammaArray->At(iCut))->GetDoEtaShift() ){
1442 /*if (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() != 0.){
1443 printf("Error: Gamma Conversion Dalitz Task %s :: Eta Shift not requested but set to %f, reset to 00. \n\n",
1444 (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift());
1445 ((AliConversionCuts*)fCutGammaArray->At(iCut))->SetEtaShift(0.);
1446 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift(0.);
1450 hEtaShift[iCut]->Fill(0.,0.);
1451 continue; // No Eta Shift requested, continue
1455 if( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
1456 ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
1457 ((AliConversionCuts*)fCutGammaArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1458 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() );
1459 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift()));
1463 printf(" Gamma Conversion Dalitz Task %s :: Eta Shift Manually Set to %f \n\n",
1464 (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift());
1465 ((AliConversionCuts*)fCutGammaArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1466 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() );
1467 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift()));
1475 void AliAnalysisTaskGammaConvDalitzV1::Terminate(const Option_t *)
1481 //________________________________________________________________________
1482 void AliAnalysisTaskGammaConvDalitzV1::ProcessPhotonCandidates()
1485 TList *GoodGammasStepOne = new TList();
1486 TList *GoodGammasStepTwo = new TList();
1487 // Loop over Photon Candidates allocated by ReaderV1
1489 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
1490 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
1491 if(!PhotonCandidate) continue;
1493 fIsFromMBHeader = kTRUE;
1495 if( fMCEvent && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0 ){
1497 Int_t isPosFromMBHeader
1498 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1499 if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
1501 Int_t isNegFromMBHeader
1502 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
1503 if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
1505 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1509 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fESDEvent)) continue;
1511 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut() &&
1512 !((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){ // if no post reader loop is required add to events good gammas
1514 fGoodGammas->Add(PhotonCandidate);
1516 if(fIsFromMBHeader){
1517 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1518 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1519 if( fDoMesonQA ) hESDConvGammaZR[fiCut]->Fill(PhotonCandidate->GetConversionZ(),PhotonCandidate->GetConversionRadius());
1523 ProcessTruePhotonCandidates(PhotonCandidate);
1526 else if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
1527 ((AliConversionCuts*)fCutGammaArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
1529 GoodGammasStepOne->Add(PhotonCandidate);
1531 else if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut() &&
1532 ((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
1533 GoodGammasStepTwo->Add(PhotonCandidate);
1538 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut()){
1539 for(Int_t i = 0;i<GoodGammasStepOne->GetEntries();i++){
1540 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GoodGammasStepOne->At(i);
1541 if(!PhotonCandidate) continue;
1544 fIsFromMBHeader = kTRUE;
1545 if(fMCEvent && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0){
1546 Int_t isPosFromMBHeader
1547 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack,fInputEvent);
1548 Int_t isNegFromMBHeader
1549 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
1550 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1554 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GoodGammasStepOne->GetEntries())) continue;
1555 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
1556 fGoodGammas->Add(PhotonCandidate);
1558 if(fIsFromMBHeader){
1559 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1560 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1561 if( fDoMesonQA )hESDConvGammaZR[fiCut]->Fill(PhotonCandidate->GetConversionZ(),PhotonCandidate->GetConversionRadius());
1565 ProcessTruePhotonCandidates(PhotonCandidate);
1568 else GoodGammasStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
1571 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){
1572 for(Int_t i = 0;i<GoodGammasStepTwo->GetEntries();i++){
1573 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GoodGammasStepTwo->At(i);
1574 if(!PhotonCandidate) continue;
1576 if(fMCEvent && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0){
1577 Int_t isPosFromMBHeader
1578 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack,fInputEvent);
1579 Int_t isNegFromMBHeader
1580 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
1581 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1584 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GoodGammasStepTwo,i)) continue;
1585 fGoodGammas->Add(PhotonCandidate); // Add gamma to current cut TList
1587 if(fIsFromMBHeader){
1588 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt()); // Differences to old V0Reader in p_t due to conversion KF->TLorentzVector
1589 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1590 if(fDoMesonQA)hESDConvGammaZR[fiCut]->Fill(PhotonCandidate->GetConversionZ(),PhotonCandidate->GetConversionRadius());
1594 ProcessTruePhotonCandidates(PhotonCandidate);
1599 delete GoodGammasStepOne;
1600 GoodGammasStepOne = 0x0;
1601 delete GoodGammasStepTwo;
1602 GoodGammasStepTwo = 0x0;
1605 //________________________________________________________________________
1606 void AliAnalysisTaskGammaConvDalitzV1::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1608 // Process True Photons
1609 AliStack *MCStack = fMCEvent->Stack();
1610 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(MCStack);
1611 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(MCStack);
1613 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1614 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){ // Not Same Mother == Combinatorial Bck
1618 else if (posDaughter->GetMother(0) == -1){
1622 if(TMath::Abs(posDaughter->GetPdgCode())!=11 || TMath::Abs(negDaughter->GetPdgCode())!=11) return; //One Particle is not electron
1623 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
1624 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
1626 TParticle *Photon = TruePhotonCandidate->GetMCParticle(MCStack);
1627 if(Photon->GetPdgCode() != 22) return; // Mother is no Photon
1631 Int_t labelGamma = TruePhotonCandidate->GetMCParticleLabel(MCStack);
1633 if( labelGamma < MCStack->GetNprimary() ){
1634 if( fIsFromMBHeader ){
1635 hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1639 if( fIsFromMBHeader){
1640 hESDTrueSecConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1644 if( IsPi0DalitzDaughter(labelGamma) == kTRUE ) {
1645 if( labelGamma < MCStack->GetNprimary() ) {
1646 if( fIsFromMBHeader ){
1647 hESDTruePi0DalitzConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1651 if( fIsFromMBHeader ) {
1652 hESDTruePi0DalitzSecConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1659 //________________________________________________________________________
1660 void AliAnalysisTaskGammaConvDalitzV1::ProcessVirtualGammasCandidates(){
1663 Double_t magField = fInputEvent->GetMagneticField();
1666 if( magField < 0.0 ){
1673 AliStack *MCStack = 0x0;
1677 MCStack = fMCEvent->Stack();
1682 for(Int_t virtualGammaIndex=0; virtualGammaIndex < fGoodVirtualGammas->GetEntries(); virtualGammaIndex++ ){
1685 AliAODConversionPhoton *Vgamma=dynamic_cast<AliAODConversionPhoton*>(fGoodVirtualGammas->At(virtualGammaIndex));
1689 AliESDtrack* positronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelPositive() );
1690 AliESDtrack* electronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelNegative() );
1693 Bool_t isPhoton = kFALSE;
1694 Bool_t isPi0Dalitz = kFALSE;
1695 Bool_t isEtaDalitz = kFALSE;
1696 Bool_t isJPsi = kFALSE;
1697 Bool_t isTrueEposENeg = kFALSE;
1698 Bool_t isMotherPrimary = kFALSE;
1700 Double_t psiPair = GetPsiPair(positronVgamma,electronVgamma);
1701 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronVgamma->GetConstrainedParam()->Phi()-positronVgamma->GetConstrainedParam()->Phi());
1709 hESDEposEnegPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1710 hESDEposEnegInvMassPt[fiCut]->Fill(Vgamma->GetMass(),Vgamma->Pt());
1713 cout<<"GetMass() "<<Vgamma->GetMass()<<" M "<<Vgamma->M()<<endl;
1720 Int_t virtualGammaMCLabel = Vgamma->GetMCParticleLabel(MCStack);
1722 TParticle * negativeMC = 0x0;
1723 TParticle * positiveMC = 0x0;
1724 TParticle * mcVgamma = 0x0;
1726 if( virtualGammaMCLabel != -1 ){
1728 mcVgamma = (TParticle*)MCStack->Particle(virtualGammaMCLabel);
1734 negativeMC = (TParticle*)Vgamma->GetNegativeMCDaughter(MCStack);
1735 positiveMC = (TParticle*)Vgamma->GetPositiveMCDaughter(MCStack);
1738 if( negativeMC && positiveMC ) {
1740 if( positiveMC->GetPdgCode() == ::kPositron && negativeMC->GetPdgCode() == ::kElectron )
1741 isTrueEposENeg = kTRUE;
1743 if( positiveMC->GetMother(0) > -1 && positiveMC->GetMother(0) < fMCStack->GetNprimary() )
1744 isMotherPrimary = kTRUE;
1750 // Check if it is a true photon
1751 if(mcVgamma->GetPdgCode() == 22){
1753 }else if(mcVgamma->GetPdgCode() == 443){
1756 else if( IsDalitz( mcVgamma ) ){
1757 if ( mcVgamma->GetPdgCode() == 111 ) isPi0Dalitz = kTRUE;
1758 else if( mcVgamma->GetPdgCode() == 221 ) isEtaDalitz = kTRUE;
1763 hESDEposEnegTruePhotonInvMassPt[fiCut]->Fill(Vgamma->M(),Vgamma->Pt());
1765 hESDEposEnegTruePhotonPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1766 if( Vgamma->Pt() > 1.5 ){
1767 hESDEposEnegTruePhotonPsiPairDPhiPtCut[fiCut]->Fill(deltaPhi,psiPair);
1771 hESDEposEnegTrueJPsiInvMassPt[fiCut]->Fill(Vgamma->M(),Vgamma->Pt());
1773 else if(isPi0Dalitz){
1774 hESDEposEnegTruePi0DalitzInvMassPt[fiCut]->Fill(Vgamma->M(),Vgamma->Pt());
1775 hESDEposEnegTruePi0DalitzPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1776 if( isMotherPrimary ) hESDEposEnegTruePrimPi0DalitzInvMass[fiCut]->Fill( Vgamma->M() );
1778 else if(isEtaDalitz){
1779 hESDEposEnegTrueEtaDalitzInvMassPt[fiCut]->Fill(Vgamma->M(),Vgamma->Pt());
1780 hESDEposEnegTrueEtaDalitzPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1781 if( isMotherPrimary ) hESDEposEnegTruePrimEtaDalitzInvMass[fiCut]->Fill( Vgamma->M() );
1784 if( isTrueEposENeg ) hESDEposEnegTrueInvMassPt[fiCut]->Fill(Vgamma->M(), Vgamma->Pt());
1795 //________________________________________________________________________
1796 void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
1798 Double_t magField = fInputEvent->GetMagneticField();
1801 if( magField < 0.0 ){
1809 vector<Int_t> lGoodElectronIndexPrev(0);
1810 vector<Int_t> lGoodPositronIndexPrev(0);
1815 for(UInt_t i = 0; i < fSelectorElectronIndex.size(); i++){
1817 AliESDtrack* electronCandidate = fESDEvent->GetTrack(fSelectorElectronIndex[i]);
1821 Int_t labelelectron = TMath::Abs( electronCandidate->GetLabel() );
1822 Int_t isMCFromMBHeader = -1;
1823 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0) {
1825 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(labelelectron,fMCStack,fInputEvent);
1826 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
1830 if(! ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelected(electronCandidate) ) continue;
1832 lGoodElectronIndexPrev.push_back( fSelectorElectronIndex[i] );
1833 hESDDalitzElectronPt[fiCut]->Fill(electronCandidate->Pt());
1834 hESDDalitzElectronPhi[fiCut]->Fill(electronCandidate->Phi());
1839 Int_t labelelectron = TMath::Abs( electronCandidate->GetLabel() );
1840 if( labelelectron < fMCStack->GetNtrack() ){
1841 TParticle* electron = fMCStack->Particle(labelelectron);
1842 if( electron->GetPdgCode() == 11 ){
1843 if( labelelectron < fMCStack->GetNprimary() ){
1844 hESDTrueElectronPt[fiCut]->Fill(electronCandidate->Pt()); //primary electron
1847 hESDTrueSecElectronPt[fiCut]->Fill(electronCandidate->Pt()); //secondary electron
1849 if( IsPi0DalitzDaughter(labelelectron) == kTRUE ) {
1850 if( labelelectron < fMCStack->GetNprimary() ) {
1851 hESDTruePi0DalitzElectronPt[fiCut]->Fill(electronCandidate->Pt());
1854 hESDTruePi0DalitzSecElectronPt[fiCut]->Fill(electronCandidate->Pt());
1864 for(UInt_t i = 0; i < fSelectorPositronIndex.size(); i++){
1866 AliESDtrack* positronCandidate = fESDEvent->GetTrack( fSelectorPositronIndex[i] );
1870 Int_t labelpositron = TMath::Abs( positronCandidate->GetLabel() );
1871 Int_t isMCFromMBHeader = -1;
1873 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0) {
1875 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(labelpositron,fMCStack,fInputEvent);
1876 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
1883 if(! ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelected(positronCandidate) ) continue;
1885 lGoodPositronIndexPrev.push_back( fSelectorPositronIndex[i] );
1886 hESDDalitzPositronPt[fiCut]->Fill( positronCandidate->Pt() );
1887 hESDDalitzPositronPhi[fiCut]->Fill( positronCandidate->Phi() );
1892 Int_t labelpositron = TMath::Abs( positronCandidate->GetLabel() );
1894 if( labelpositron < fMCStack->GetNtrack() ) {
1895 TParticle* positron = fMCStack->Particle(labelpositron);
1896 if( positron->GetPdgCode() == -11 ){
1897 if( labelpositron < fMCStack->GetNprimary() ){
1898 hESDTruePositronPt[fiCut]->Fill(positronCandidate->Pt());
1901 hESDTrueSecPositronPt[fiCut]->Fill(positronCandidate->Pt());
1903 if( IsPi0DalitzDaughter(labelpositron) == kTRUE ) {
1904 if( labelpositron < fMCStack->GetNprimary() ){
1905 hESDTruePi0DalitzPositronPt[fiCut]->Fill(positronCandidate->Pt());
1908 hESDTruePi0DalitzSecPositronPt[fiCut]->Fill(positronCandidate->Pt());
1917 vector<Bool_t> lElectronPsiIndex(lGoodElectronIndexPrev.size(), kTRUE);
1918 vector<Bool_t> lPositronPsiIndex(lGoodPositronIndexPrev.size(), kTRUE);
1921 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->DoPsiPairCut() == kTRUE ){
1923 for( UInt_t i = 0; i < lGoodElectronIndexPrev.size(); i++ ) {
1925 AliESDtrack *electronCandidate = fESDEvent->GetTrack(lGoodElectronIndexPrev[i]);
1927 for(UInt_t j = 0; j < lGoodPositronIndexPrev.size(); j++){
1928 AliESDtrack *positronCandidate = fESDEvent->GetTrack(lGoodPositronIndexPrev[j]);
1929 Double_t psiPair = GetPsiPair(positronCandidate,electronCandidate);
1930 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->GetConstrainedParam()->Phi()-positronCandidate->GetConstrainedParam()->Phi());
1932 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->IsFromGammaConversion(psiPair,deltaPhi ) ){
1933 lElectronPsiIndex[i] = kFALSE;
1934 lPositronPsiIndex[j] = kFALSE;
1941 vector<Int_t> lGoodElectronIndex(0);
1942 vector<Int_t> lGoodPositronIndex(0);
1945 for( UInt_t i = 0; i < lGoodElectronIndexPrev.size(); i++ ) {
1947 if( lElectronPsiIndex[i] == kTRUE )
1948 lGoodElectronIndex.push_back( lGoodElectronIndexPrev[i] );
1951 for( UInt_t i = 0; i < lGoodPositronIndexPrev.size(); i++ ) {
1953 if( lPositronPsiIndex[i] == kTRUE )
1954 lGoodPositronIndex.push_back( lGoodPositronIndexPrev[i] );
1961 for(UInt_t i = 0; i < lGoodElectronIndex.size(); i++){
1965 AliESDtrack *electronCandidate = fESDEvent->GetTrack(lGoodElectronIndex[i]);
1967 AliKFParticle electronCandidateKF( *electronCandidate->GetConstrainedParam(), ::kElectron );
1969 for(UInt_t j = 0; j < lGoodPositronIndex.size(); j++){
1972 AliESDtrack *positronCandidate = fESDEvent->GetTrack(lGoodPositronIndex[j]);
1973 AliKFParticle positronCandidateKF( *positronCandidate->GetConstrainedParam(), ::kPositron );
1977 AliKFConversionPhoton* virtualPhoton = NULL;
1978 virtualPhoton = new AliKFConversionPhoton(electronCandidateKF,positronCandidateKF);
1980 if( fSetProductionVertextoVGamma == kTRUE ){
1982 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
1983 primaryVertexImproved+=*virtualPhoton;
1984 virtualPhoton->SetProductionVertex(primaryVertexImproved);
1988 virtualPhoton->SetTrackLabels( lGoodPositronIndex[j], lGoodElectronIndex[i]);
1993 Int_t labeln=TMath::Abs(electronCandidate->GetLabel());
1994 Int_t labelp=TMath::Abs(positronCandidate->GetLabel());
1995 TParticle *fNegativeMCParticle = fMCStack->Particle(labeln);
1996 TParticle *fPositiveMCParticle = fMCStack->Particle(labelp);
1999 if( fPositiveMCParticle && fNegativeMCParticle) {
2001 virtualPhoton->SetMCLabelPositive(labelp);
2002 virtualPhoton->SetMCLabelNegative(labeln);
2009 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton); //To Apply PsiPairCut
2012 fGoodVirtualGammas->Add( vphoton );
2013 delete virtualPhoton;
2020 //Computing mixing event
2024 for(UInt_t i = 0; i < lGoodElectronIndex.size(); i++){
2027 AliESDtrack *electronCandidate1 = fESDEvent->GetTrack(lGoodElectronIndex[i]);
2029 AliKFParticle electronCandidate1KF( *electronCandidate1->GetConstrainedParam(), ::kElectron );
2032 for(UInt_t j = i+1; j < lGoodElectronIndex.size(); j++){
2036 AliESDtrack *electronCandidate2 = fESDEvent->GetTrack(lGoodElectronIndex[j]);
2038 AliKFParticle electronCandidate2KF( *electronCandidate2->GetConstrainedParam(), ::kElectron );
2040 AliKFConversionPhoton* virtualPhoton = new AliKFConversionPhoton(electronCandidate1KF,electronCandidate2KF);
2042 //AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
2043 //primaryVertexImproved+=*virtualPhoton;
2044 //virtualPhoton->SetProductionVertex(primaryVertexImproved);
2047 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton);
2048 hESDEposEnegLikeSignBackInvMassPt[fiCut]->Fill(vphoton->M(),vphoton->Pt());
2050 delete virtualPhoton;
2052 virtualPhoton = 0x0;
2058 for(UInt_t i = 0; i < lGoodPositronIndex.size(); i++){
2063 AliESDtrack *positronCandidate1 = fESDEvent->GetTrack(lGoodPositronIndex[i]);
2065 AliKFParticle positronCandidate1KF( *positronCandidate1->GetConstrainedParam(), ::kPositron );
2068 for(UInt_t j = i+1; j < lGoodPositronIndex.size(); j++){
2071 AliESDtrack *positronCandidate2 = fESDEvent->GetTrack(lGoodPositronIndex[j]);
2073 AliKFParticle positronCandidate2KF( *positronCandidate2->GetConstrainedParam(), ::kPositron );
2075 AliKFConversionPhoton* virtualPhoton = new AliKFConversionPhoton(positronCandidate1KF,positronCandidate2KF);
2076 //AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
2077 //primaryVertexImproved+=*virtualPhoton;
2078 //virtualPhoton->SetProductionVertex(primaryVertexImproved);
2080 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton);
2081 hESDEposEnegLikeSignBackInvMassPt[fiCut]->Fill(vphoton->M(),vphoton->Pt());
2085 delete virtualPhoton;
2087 virtualPhoton = 0x0;
2095 //________________________________________________________________________
2096 void AliAnalysisTaskGammaConvDalitzV1::CalculatePi0DalitzCandidates(){
2098 // Conversion Gammas
2103 if( fGoodGammas->GetEntries() > 0 && fGoodVirtualGammas->GetEntries() > 0 ){
2105 vector<Bool_t> lGoodVirtualGamma(fGoodVirtualGammas->GetEntries(), kFALSE);
2107 for(Int_t GammaIndex=0; GammaIndex<fGoodGammas->GetEntries(); GammaIndex++){
2109 AliAODConversionPhoton *gamma=dynamic_cast<AliAODConversionPhoton*>(fGoodGammas->At(GammaIndex));
2110 if (gamma==NULL) continue;
2111 for(Int_t virtualGammaIndex=0;virtualGammaIndex<fGoodVirtualGammas->GetEntries();virtualGammaIndex++){
2113 AliAODConversionPhoton *Vgamma=dynamic_cast<AliAODConversionPhoton*>(fGoodVirtualGammas->At(virtualGammaIndex));
2114 if (Vgamma==NULL) continue;
2115 //Check for same Electron ID
2116 if(gamma->GetTrackLabelPositive() == Vgamma->GetTrackLabelPositive() ||
2117 gamma->GetTrackLabelNegative() == Vgamma->GetTrackLabelNegative() ||
2118 gamma->GetTrackLabelNegative() == Vgamma->GetTrackLabelPositive() ||
2119 gamma->GetTrackLabelPositive() == Vgamma->GetTrackLabelNegative() ) continue;
2121 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma,Vgamma);
2122 pi0cand->SetLabels(GammaIndex,virtualGammaIndex);
2125 if( ( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift())) ){
2127 //cout<< "Meson Accepted "<<endl;
2129 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fESDEvent->GetPrimaryVertex()->GetZ());
2131 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity() ){
2132 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
2134 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGoodGammas->GetEntries());
2139 hESDEposEnegInvMassPi0Pt[fiCut]->Fill( Vgamma->M(), pi0cand->Pt() );
2141 if( pi0cand->M() > 0.1 && pi0cand->M() < 0.145 ){
2143 hESDEposEnegAfterMassCutInvMassPi0Pt[fiCut]->Fill(Vgamma->M(),pi0cand->Pt());
2148 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
2151 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( pi0cand->Pt() , Vgamma->M() ) == kTRUE ){
2153 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
2155 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
2156 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
2161 hESDMotherPhi[fiCut]->Fill(pi0cand->Phi());
2163 if( lGoodVirtualGamma[virtualGammaIndex] == kFALSE ) {
2165 FillElectronQAHistos(Vgamma);
2167 lGoodVirtualGamma[virtualGammaIndex] = kTRUE;
2174 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
2175 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
2176 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
2181 hESDMotherPhi[fiCut]->Fill(pi0cand->Phi());
2183 if( lGoodVirtualGamma[virtualGammaIndex] == kFALSE ) {
2185 FillElectronQAHistos(Vgamma);
2187 lGoodVirtualGamma[virtualGammaIndex] = kTRUE;
2194 if( fDoChicAnalysis) {
2196 hESDPi0MotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
2198 Double_t diffMass = pi0cand->M() - Vgamma->M();
2200 hESDPi0MotherDiffInvMassPt[fiCut]->Fill( diffMass , pi0cand->Pt() );
2202 if( Vgamma->M() > 2.5 && Vgamma->M() < 3.4){
2203 hESDPi0MotherDiffLimInvMassPt[fiCut]->Fill( diffMass , pi0cand->Pt() );
2208 ProcessTrueMesonCandidates(pi0cand,gamma,Vgamma);
2218 //________________________________________________________________________
2219 void AliAnalysisTaskGammaConvDalitzV1::CalculateBackground(){
2221 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fESDEvent->GetPrimaryVertex()->GetZ());
2226 method = ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetBKGMethod();
2229 if(((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity()){
2230 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
2232 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGoodGammas->GetEntries());
2235 if( method == 1 || method == 2 ) {
2237 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
2239 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity() ) {
2241 for(Int_t nEventsInBG=0;nEventsInBG<fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2243 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2245 if(fMoveParticleAccordingToVertex == kTRUE && method == 1){
2246 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2249 for(Int_t iCurrent=0;iCurrent<fGoodVirtualGammas->GetEntries();iCurrent++){
2250 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualGammas->At(iCurrent));
2252 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2253 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2255 if(fMoveParticleAccordingToVertex == kTRUE && method == 1 ){
2256 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2259 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2262 if( ( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE, ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
2263 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
2265 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.M() ) == kTRUE ){
2267 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2268 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2269 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2273 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2274 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2275 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2278 delete backgroundCandidate;
2279 backgroundCandidate = 0x0;
2285 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2286 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2287 if(previousEventV0s){
2288 if(fMoveParticleAccordingToVertex == kTRUE && method == 1){
2289 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2291 for(Int_t iCurrent=0;iCurrent<fGoodVirtualGammas->GetEntries();iCurrent++){
2293 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualGammas->At(iCurrent));
2295 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2297 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2299 if(fMoveParticleAccordingToVertex == kTRUE && method ==1){
2300 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2303 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2305 if((((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
2307 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
2309 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.M() ) == kTRUE ){
2312 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2313 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2314 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2318 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2319 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2320 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2323 delete backgroundCandidate;
2324 backgroundCandidate = 0x0;
2332 else if( method == 3 ){
2334 for(Int_t iCurrent=0;iCurrent<fGoodVirtualGammas->GetEntries();iCurrent++){
2336 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualGammas->At(iCurrent));
2338 for(Int_t iPrevious=0;iPrevious<fGammasPool[fiCut]->GetEntries();iPrevious++){
2340 AliAODConversionPhoton previousGoodV0 = *(AliAODConversionPhoton*)((fGammasPool[fiCut]->At(iPrevious) ));
2343 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2346 if((((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE, ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
2348 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
2350 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.M() ) == kTRUE ){
2353 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2354 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2355 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2361 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2362 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2363 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2367 delete backgroundCandidate;
2368 backgroundCandidate = 0x0;
2374 //________________________________________________________________________
2375 void AliAnalysisTaskGammaConvDalitzV1::UpdateEventByEventData(){
2376 //see header file for documentation
2380 method = ( (AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetBKGMethod();
2387 if(fGoodGammas->GetEntries() > 0 ){
2389 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity() ){
2390 fBGHandler[fiCut]->AddEvent(fGoodGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fNumberOfESDTracks);
2393 else{ // means we use #V0s for multiplicity
2394 fBGHandler[fiCut]->AddEvent(fGoodGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fGoodGammas->GetEntries());
2399 else if ( method == 2 ){
2401 if(fGoodVirtualGammas->GetEntries() > 0 ){
2402 if(((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity()){
2403 fBGHandler[fiCut]->AddEvent(fGoodVirtualGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fNumberOfESDTracks);
2405 else{ // means we use #V0s for multiplicity
2406 fBGHandler[fiCut]->AddEvent(fGoodVirtualGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fGoodVirtualGammas->GetEntries());
2410 else if ( method == 3 ) {
2414 for(Int_t index = 0; index < fGoodGammas->GetEntries(); index++){
2417 if ( fGammasPool[fiCut]->GetEntries() > ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->NumberOfRotationEvents() ){
2418 fGammasPool[fiCut]->RemoveLast();
2420 fGammasPool[fiCut]->AddFirst( new AliAODConversionPhoton(*(AliAODConversionPhoton*)(fGoodGammas->At(index)) ) );
2425 //______________________________________________________________________
2426 void AliAnalysisTaskGammaConvDalitzV1::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate, AliAODConversionPhoton *TrueVirtualGammaCandidate)
2429 // Process True Mesons
2431 AliStack *MCStack = fMCEvent->Stack();
2433 if( TrueGammaCandidate->GetV0Index()<fESDEvent->GetNumberOfV0s() ){
2436 //cout<<"Entro True Meson"<<endl;
2439 Bool_t isTruePi0 = kFALSE;
2440 Bool_t isTrueEta = kFALSE;
2441 Bool_t massCutAccept = kFALSE;
2442 //Bool_t isTrueChiC = kFALSE;
2443 Int_t gammaMCLabel = TrueGammaCandidate->GetMCParticleLabel(MCStack);
2444 Int_t gammaMotherLabel = -1;
2447 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
2449 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( Pi0Candidate->Pt() , TrueVirtualGammaCandidate->M() ) == kTRUE ){
2451 massCutAccept = kTRUE;
2455 massCutAccept = kTRUE;
2462 if(gammaMCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2465 // Daughters Gamma 0
2466 TParticle * negativeMC = (TParticle*)TrueGammaCandidate->GetNegativeMCDaughter(MCStack);
2467 TParticle * positiveMC = (TParticle*)TrueGammaCandidate->GetPositiveMCDaughter(MCStack);
2468 TParticle * gammaMC = (TParticle*)MCStack->Particle(gammaMCLabel);
2471 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2473 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
2475 if(gammaMC->GetPdgCode() == 22){ // ... with Gamma Mother
2476 gammaMotherLabel=gammaMC->GetFirstMother();
2483 Int_t virtualGammaMCLabel = TrueVirtualGammaCandidate->GetMCParticleLabel(MCStack);
2484 Int_t virtualGammaMotherLabel = -1;
2485 Int_t virtualGamma = 1;
2486 Int_t virtualGammaGrandMotherLabel =-1;
2489 if(virtualGammaMCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2490 // Daughters Gamma 1
2491 TParticle * negativeMC = (TParticle*)TrueVirtualGammaCandidate->GetNegativeMCDaughter(MCStack);
2492 TParticle * positiveMC = (TParticle*)TrueVirtualGammaCandidate->GetPositiveMCDaughter(MCStack);
2493 TParticle * virtualGammaMotherMC = (TParticle*)MCStack->Particle(virtualGammaMCLabel);
2495 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2497 if( virtualGammaMotherMC->GetPdgCode() != 22 ){
2498 virtualGammaMotherLabel=virtualGammaMCLabel;
2499 if(virtualGammaMotherMC->GetPdgCode() == 443){
2500 virtualGammaGrandMotherLabel=virtualGammaMotherMC->GetFirstMother();
2504 else if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
2505 virtualGammaMotherLabel=virtualGammaMotherMC->GetFirstMother();
2506 virtualGamma = 0; //no virtual gamma
2512 if(gammaMotherLabel >= 0 && ( gammaMotherLabel == virtualGammaMotherLabel) ){
2514 if(((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->GetPdgCode() == 111){
2518 if(((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->GetPdgCode() == 221){
2525 if( fDoChicAnalysis) {
2526 if(gammaMotherLabel>=0 && ( gammaMotherLabel == virtualGammaGrandMotherLabel) ){
2527 if(((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 445 ||
2528 ((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 10443 ||
2529 ((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 20443 ){
2531 hESDTrueMotherChiCInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2532 hESDTrueMotherChiCDiffInvMassPt[fiCut]->Fill(Pi0Candidate->M()-TrueVirtualGammaCandidate->M(),Pi0Candidate->Pt());
2537 if( ( isTruePi0 || isTrueEta) && massCutAccept ){ // True Pion or Eta
2539 if ( virtualGamma == 1 ) { //True Dalitz
2541 Float_t weighted= 1;
2543 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2544 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
2545 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
2546 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
2551 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2552 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill( TrueVirtualGammaCandidate->M(),Pi0Candidate->Pt(),weighted);
2554 if(gammaMotherLabel < MCStack->GetNprimary()){ // Only primary pi0 for efficiency calculation
2557 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill( Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2558 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill( Pi0Candidate->M(), Pi0Candidate->Pt() );
2560 hESDTruePrimaryMotherInvMassMCPt[fiCut]->Fill(Pi0Candidate->M(),((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->Pt(),weighted);
2561 if(isTruePi0){ // Only primaries for unfolding
2562 hESDTruePrimaryPi0DalitzESDPtMCPt[fiCut]->Fill(Pi0Candidate->Pt(),((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->Pt(),weighted);
2565 else { // Secondary Meson
2566 Float_t weightedSec= 1;
2568 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2569 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetMother(0);
2570 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(gammaMotherLabel)->GetPdgCode()==310){
2571 weightedSec= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, fMCStack, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
2575 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2580 else if ( virtualGamma == 0 ){
2582 Float_t weighted= 1;
2584 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2585 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
2586 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
2587 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
2592 hESDTrueMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted); // Pi0 from GG
2594 if( gammaMotherLabel < MCStack->GetNprimary() ){
2595 hESDTruePrimaryMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2599 Float_t weightedSec= 1;
2601 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2602 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetMother(0);
2603 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(gammaMotherLabel)->GetPdgCode()==310){
2604 weightedSec= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, fMCStack, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
2607 hESDTrueSecondaryMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2612 if(!isTruePi0 && !isTrueEta && massCutAccept ){ // Background
2613 if(gammaMotherLabel>-1 && virtualGammaMotherLabel>-1 && virtualGamma == 0){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2614 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2615 } else { // No photon or without mother
2616 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2623 //________________________________________________________________________
2624 void AliAnalysisTaskGammaConvDalitzV1::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
2625 //see header file for documentation
2627 Double_t dx = vertex->fX - fESDEvent->GetPrimaryVertex()->GetX();
2628 Double_t dy = vertex->fY - fESDEvent->GetPrimaryVertex()->GetY();
2629 Double_t dz = vertex->fZ - fESDEvent->GetPrimaryVertex()->GetZ();
2631 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
2632 particle->SetConversionPoint(movedPlace);
2636 //________________________________________________________________________
2637 void AliAnalysisTaskGammaConvDalitzV1::CountESDTracks(){
2639 // Using standard function for setting Cuts
2640 Bool_t selectPrimaries=kTRUE;
2641 AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
2642 EsdTrackCuts->SetMaxDCAToVertexZ(2);
2643 EsdTrackCuts->SetEtaRange(-0.8, 0.8);
2644 EsdTrackCuts->SetPtRange(0.15);
2645 EsdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kBoth);
2647 fNumberOfESDTrackskBoth = 0;
2648 for(Int_t iTracks = 0; iTracks < fESDEvent->GetNumberOfTracks(); iTracks++){
2649 AliESDtrack* curTrack = fESDEvent->GetTrack(iTracks);
2650 if(!curTrack) continue;
2651 if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTrackskBoth++;
2653 delete EsdTrackCuts;
2659 //_____________________________________________________________________________
2660 void AliAnalysisTaskGammaConvDalitzV1::ProcessMCParticles()
2663 // Loop over all primary MC particle
2665 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
2668 TParticle* particle = (TParticle *)fMCStack->Particle(i);
2669 if (!particle) continue;
2672 Bool_t mcIsFromMB = kTRUE;
2673 Int_t isMCFromMBHeader = -1;
2675 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0) {
2677 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i,fMCStack,fInputEvent);
2678 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
2679 if(isMCFromMBHeader != 2) mcIsFromMB = kFALSE;
2682 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
2683 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
2686 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
2687 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
2688 if(fDoMesonQA) hMCConvGammaEta[fiCut]->Fill( particle->Eta());
2691 hMCConvGammaRSPt[fiCut]->Fill(particle->Pt());
2693 } // Converted MC Gamma
2695 if(((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(i,fMCStack)){
2696 if( particle->GetPdgCode() == -11) {
2697 hMCAllPositronsPt[fiCut]->Fill(particle->Pt()); // All positrons
2698 if(fDoMesonQA) hMCAllPositronsEta[fiCut]->Fill( particle->Eta() );
2700 if( particle->GetPdgCode() == 11){
2701 hMCAllElectronsPt[fiCut]->Fill(particle->Pt()); // All electrons
2702 if (fDoMesonQA) hMCAllElectronsEta[fiCut]->Fill(particle->Eta()); // All electrons
2707 if(((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMC( particle,fMCStack,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift() ) ){
2709 Float_t weighted= 1;
2711 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2712 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2713 if (particle->Pt()>0.005){
2714 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
2719 if(particle->GetPdgCode() == 111)hMCPi0GGPt[fiCut]->Fill( particle->Pt() , weighted); // All MC Pi0 GG decay
2720 if(particle->GetPdgCode() == 221)hMCEtaGGPt[fiCut]->Fill( particle->Pt() , weighted); // All MC Eta GG decay
2724 Int_t labelgamma = -1;
2725 Int_t labelelectron = -1;
2726 Int_t labelpositron = -1;
2729 if( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMCDalitz(particle,fMCStack,labelelectron,labelpositron,labelgamma,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()) )
2733 Float_t weighted= 1;
2734 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2735 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack,fInputEvent)){
2736 if (particle->Pt()>0.005){
2737 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
2741 if(particle->GetPdgCode() == 111)hMCPi0Pt[fiCut]->Fill(particle->Pt(), weighted); // All MC Pi0
2742 if(particle->GetPdgCode() == 221)hMCEtaPt[fiCut]->Fill(particle->Pt(), weighted); // All MC Eta
2744 // Check the acceptance for gamma and electrons
2747 TParticle *gamma = fMCStack->Particle(labelgamma);
2748 TParticle *electron = fMCStack->Particle(labelelectron);
2749 TParticle *positron = fMCStack->Particle(labelpositron);
2752 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC(gamma,fMCStack,kFALSE) &&
2753 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelelectron,fMCStack) &&
2754 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelpositron,fMCStack) ) {
2756 Double_t massDalitz = -1;
2760 TLorentzVector TLVEpos,TLVEneg,TLVDalitz;
2761 Double_t electronMass = TDatabasePDG::Instance()->GetParticle( ::kElectron )->Mass();
2763 TLVEpos.SetXYZM(positron->Px(),positron->Py(),positron->Pz(),electronMass);
2764 TLVEneg.SetXYZM(electron->Px(),electron->Py(),electron->Pz(),electronMass);
2765 TLVDalitz = TLVEpos + TLVEneg ;
2766 massDalitz = TLVDalitz.M();
2772 if(particle->GetPdgCode() == 111){
2774 hMCPi0InAccPt[fiCut]->Fill(particle->Pt() , weighted); // MC Pi0Dalitz with gamma and e+e- in acc
2775 hMCPi0DalitzGammaPt[fiCut]->Fill( gamma->Pt() );
2776 hMCPi0DalitzPositronPt[fiCut]->Fill( positron->Pt() );
2777 hMCPi0DalitzElectronPt[fiCut]->Fill( electron->Pt() );
2779 if ( fDoMesonQA )hMCPi0EposEnegInvMassPt[fiCut]->Fill(massDalitz,particle->Pt());
2783 if(particle->GetPdgCode() == 221){
2784 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(), weighted ); // MC EtaDalitz with gamma and e+e- in acc
2785 if( fDoMesonQA ) hMCEtaEposEnegInvMassPt[fiCut]->Fill( massDalitz, particle->Pt());
2791 Int_t labelgammaChiC=-1;
2792 Int_t labelpositronChiC=-1;
2793 Int_t labelelectronChiC=-1;
2795 if(((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMCChiC(particle,fMCStack,labelelectronChiC,labelpositronChiC,labelgammaChiC,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift())){
2797 hMCChiCPt[fiCut]->Fill(particle->Pt()); // All MC ChiC
2798 TParticle * gammaChiC =fMCStack->Particle(labelgammaChiC);
2800 if( ((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC( gammaChiC,fMCStack,kFALSE) &&
2801 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelelectronChiC,fMCStack) &&
2802 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelpositronChiC,fMCStack) ){
2803 hMCChiCInAccPt[fiCut]->Fill(particle->Pt()); // All MC ChiC
2808 //_____________________________________________________________________________
2809 Bool_t AliAnalysisTaskGammaConvDalitzV1::IsDalitz(TParticle *fMCMother) const
2812 if( fMCMother->GetNDaughters() != 3 ) return kFALSE;
2813 if( fMCMother->GetPdgCode() != 111 && fMCMother->GetPdgCode() != 221 ) return kFALSE;
2816 TParticle *positron = 0x0;
2817 TParticle *electron = 0x0;
2818 TParticle *gamma = 0x0;
2820 for(Int_t index= fMCMother->GetFirstDaughter();index<= fMCMother->GetLastDaughter();index++){
2822 TParticle* temp = (TParticle*)fMCStack->Particle( index );
2824 switch( temp->GetPdgCode() ) {
2837 if( positron && electron && gamma) return kTRUE;
2841 //_____________________________________________________________________________________
2842 Bool_t AliAnalysisTaskGammaConvDalitzV1::IsPi0DalitzDaughter( Int_t label ) const
2845 // Returns true if the particle comes from Pi0 -> e+ e- gamma
2848 Int_t motherLabel = fMCStack->Particle( label )->GetMother(0);
2850 if( motherLabel < 0 || motherLabel >= fMCStack->GetNtrack() ) return kFALSE;
2852 TParticle* mother = fMCStack->Particle( motherLabel );
2854 if( mother->GetPdgCode() != 111 ) return kFALSE;
2856 if( IsDalitz( mother ) ) return kTRUE;
2864 void AliAnalysisTaskGammaConvDalitzV1::FillElectronQAHistos(AliAODConversionPhoton *Vgamma) const
2868 AliESDtrack *positronVgamma = 0;
2869 AliESDtrack *electronVgamma = 0;
2871 Double_t clsToFPos = -1.0;
2872 Double_t clsToFNeg = -1.0;
2875 Double_t NumClsITSPos = -1.0;
2876 Double_t NumClsITSNeg = -1.0;
2877 Double_t NumClsTPCPos = -1.0;
2878 Double_t NumClsTPCNeg = -1.0;
2879 Double_t nCrossedRowsTPCPos = -1.0;
2880 Double_t nCrossedRowsTPCNeg = -1.0;
2884 Float_t dcaToVertexXYPos = -1.0;
2885 Float_t dcaToVertexZPos = -1.0;
2886 Float_t dcaToVertexXYNeg = -1.0;
2887 Float_t dcaToVertexZNeg = -1.0;
2889 Double_t nSigmaPosTPC = -999.;
2890 Double_t nSigmaNegTPC = -999.;
2892 positronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelPositive() );
2893 electronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelNegative() );
2894 clsToFPos = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetNFindableClustersTPC(positronVgamma);
2895 clsToFNeg = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetNFindableClustersTPC(electronVgamma);
2897 nSigmaPosTPC = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(positronVgamma, AliPID::kElectron) ;
2898 nSigmaNegTPC = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(electronVgamma, AliPID::kElectron) ;
2902 NumClsITSPos = positronVgamma->GetNcls(0); //Get number of ITS clusters
2903 NumClsITSNeg = electronVgamma->GetNcls(0);
2904 NumClsTPCPos = positronVgamma->GetNcls(1); //Get number of TPC clusters
2905 NumClsTPCNeg = electronVgamma->GetNcls(1);
2907 nCrossedRowsTPCPos = positronVgamma->GetTPCCrossedRows();
2908 nCrossedRowsTPCNeg = electronVgamma->GetTPCCrossedRows();
2915 positronVgamma->GetImpactParameters(bPos,bCovPos);
2917 if (bCovPos[0]<=0 || bCovPos[2]<=0) {
2918 AliDebug(1, "Estimated b resolution lower or equal zero!");
2919 bCovPos[0]=0; bCovPos[2]=0;
2924 positronVgamma->GetImpactParameters(bNeg,bCovNeg);
2926 if (bCovNeg[0]<=0 || bCovNeg[2]<=0) {
2927 AliDebug(1, "Estimated b resolution lower or equal zero!");
2928 bCovNeg[0]=0; bCovNeg[2]=0;
2931 dcaToVertexXYPos = bPos[0];
2932 dcaToVertexZPos = bPos[1];
2933 dcaToVertexXYNeg = bNeg[0];
2934 dcaToVertexZNeg = bNeg[1];
2936 hESDDalitzElectronAfterPt[fiCut]->Fill( electronVgamma->Pt() );
2937 hESDDalitzPositronAfterPt[fiCut]->Fill( positronVgamma->Pt() );
2939 hESDDalitzElectronAfterEta[fiCut]->Fill( electronVgamma->Eta() );
2940 hESDDalitzPositronAfterEta[fiCut]->Fill( positronVgamma->Eta() );
2942 hESDDalitzElectronAfterPhi[fiCut]->Fill( electronVgamma->Phi() );
2943 hESDDalitzPositronAfterPhi[fiCut]->Fill( positronVgamma->Phi() );
2945 hESDDalitzElectronAfterNFindClsTPC[fiCut]->Fill(clsToFNeg,electronVgamma->Pt());
2946 hESDDalitzPositronAfterNFindClsTPC[fiCut]->Fill(clsToFPos,positronVgamma->Pt());
2948 hESDDalitzElectronAfterNClsTPC[fiCut]->Fill( NumClsTPCNeg,electronVgamma->Pt());
2949 hESDDalitzPositronAfterNClsTPC[fiCut]->Fill( NumClsTPCPos,positronVgamma->Pt());
2951 hESDDalitzElectronAfterNCrossedRowsTPC[fiCut]->Fill( nCrossedRowsTPCNeg, electronVgamma->Pt() );
2952 hESDDalitzPositronAfterNCrossedRowsTPC[fiCut]->Fill( nCrossedRowsTPCPos, positronVgamma->Pt() );
2954 hESDDalitzElectronAfterNClsITS[fiCut]->Fill( NumClsITSNeg);
2955 hESDDalitzPositronAfterNClsITS[fiCut]->Fill( NumClsITSPos);
2957 hESDDalitzPosEleAfterDCAxy[fiCut]->Fill( dcaToVertexXYNeg, electronVgamma->Pt() );
2958 hESDDalitzPosEleAfterDCAz[fiCut]->Fill( dcaToVertexZNeg, electronVgamma->Pt() );
2959 hESDDalitzPosEleAfterDCAxy[fiCut]->Fill( dcaToVertexXYPos, positronVgamma->Pt() );
2960 hESDDalitzPosEleAfterDCAz[fiCut]->Fill( dcaToVertexZPos, positronVgamma->Pt() );
2962 hESDDalitzElectronAfterTPCdEdxVsP[fiCut]->Fill( electronVgamma->P(),nSigmaNegTPC);
2963 hESDDalitzPositronAfterTPCdEdxVsP[fiCut]->Fill( positronVgamma->P(), nSigmaPosTPC);
2965 hESDDalitzElectronAfterTPCdEdxVsEta[fiCut]->Fill( electronVgamma->Eta(),nSigmaNegTPC);
2966 hESDDalitzPositronAfterTPCdEdxVsEta[fiCut]->Fill( positronVgamma->Eta(),nSigmaPosTPC);
2968 hESDDalitzElectronAfterTPCdEdxVsPhi[fiCut]->Fill( electronVgamma->Phi(),nSigmaNegTPC);
2969 hESDDalitzPositronAfterTPCdEdxVsPhi[fiCut]->Fill( positronVgamma->Phi(),nSigmaPosTPC);
2972 hESDDalitzElectronAfterTPCdEdxSignalVsP[fiCut]->Fill( electronVgamma->P(), TMath::Abs(electronVgamma->GetTPCsignal()));
2973 hESDDalitzPositronAfterTPCdEdxSignalVsP[fiCut]->Fill( positronVgamma->P(), TMath::Abs(positronVgamma->GetTPCsignal()));
2980 //_____________________________________________________________________________
2981 Double_t AliAnalysisTaskGammaConvDalitzV1::GetPsiPair( const AliESDtrack *trackPos, const AliESDtrack *trackNeg ) const
2984 // This angle is a measure for the contribution of the opening in polar
2985 // direction ?0 to the opening angle ? Pair
2987 // Ref. Measurement of photons via conversion pairs with the PHENIX experiment at RHIC
2988 // Mas ter Thesis. Thorsten Dahms. 2005
2989 // https://twiki.cern.ch/twiki/pub/ALICE/GammaPhysicsPublications/tdahms_thesis.pdf
2993 if( trackPos->GetConstrainedPxPyPz(momPos) == 0 ) trackPos->GetPxPyPz( momPos );
2994 if( trackNeg->GetConstrainedPxPyPz(momNeg) == 0 ) trackNeg->GetPxPyPz( momNeg );
2996 TVector3 posDaughter;
2997 TVector3 negDaughter;
2999 posDaughter.SetXYZ( momPos[0], momPos[1], momPos[2] );
3000 negDaughter.SetXYZ( momNeg[0], momNeg[1], momNeg[2] );
3002 Double_t deltaTheta = negDaughter.Theta() - posDaughter.Theta();
3003 Double_t openingAngle = posDaughter.Angle( negDaughter ); //TMath::ACos( posDaughter.Dot(negDaughter)/(negDaughter.Mag()*posDaughter.Mag()) );
3005 if( openingAngle < 1e-20 ) return 0.;
3007 Double_t psiAngle = TMath::ASin( deltaTheta/openingAngle );