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 hESDEposEnegLikeSignBackInvMassPt(NULL),
123 hESDMotherInvMassPt(NULL),
124 hESDPi0MotherInvMassPt(NULL),
125 hESDPi0MotherDiffInvMassPt(NULL),
126 hESDPi0MotherDiffLimInvMassPt(NULL),
127 sESDMotherInvMassPtZM(NULL),
128 hESDMotherBackInvMassPt(NULL),
129 sESDMotherBackInvMassPtZM(NULL),
131 hMCConvGammaPt(NULL),
132 hMCConvGammaRSPt(NULL),
133 hMCAllPositronsPt(NULL),
134 hMCAllElectronsPt(NULL),
135 hMCPi0DalitzGammaPt(NULL),
136 hMCPi0DalitzElectronPt(NULL),
137 hMCPi0DalitzPositronPt(NULL),
145 hMCChiCInAccPt(NULL),
146 hMCPi0EposEnegInvMassPt(NULL),
147 hMCEtaEposEnegInvMassPt(NULL),
148 hESDEposEnegTruePi0DalitzInvMassPt(NULL),
149 hESDEposEnegTruePi0DalitzPsiPairDPhi(NULL),
150 hESDEposEnegTrueEtaDalitzInvMassPt(NULL),
151 hESDEposEnegTrueEtaDalitzPsiPairDPhi(NULL),
152 hESDEposEnegTruePhotonInvMassPt(NULL),
153 hESDEposEnegTrueInvMassPt(NULL),
154 hESDEposEnegTruePhotonPsiPairDPhi(NULL),
155 hESDEposEnegTrueJPsiInvMassPt(NULL),
156 hESDTrueMotherChiCInvMassPt(NULL),
157 hESDTrueMotherChiCDiffInvMassPt(NULL),
158 hESDTrueMotherInvMassPt(NULL),
159 hESDTrueMotherDalitzInvMassPt(NULL),
160 hESDTrueMotherPi0GGInvMassPt(NULL),
161 hESDTruePrimaryMotherPi0GGInvMassPt(NULL),
162 hESDTrueSecondaryMotherPi0GGInvMassPt(NULL),
163 hESDTruePrimaryMotherInvMassMCPt(NULL),
164 hESDTruePrimaryMotherInvMassPt(NULL),
165 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
166 hESDTruePrimaryPi0DalitzESDPtMCPt(NULL),
167 hESDTrueSecondaryMotherInvMassPt(NULL),
168 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
169 hESDTrueBckGGInvMassPt(NULL),
170 hESDTrueBckContInvMassPt(NULL),
171 hESDTrueMotherGGInvMassPt(NULL),
172 hESDTrueConvGammaPt(NULL),
173 hESDTruePositronPt(NULL),
174 hESDTrueElectronPt(NULL),
175 hESDTrueSecConvGammaPt(NULL),
176 hESDTrueSecPositronPt(NULL),
177 hESDTrueSecElectronPt(NULL),
178 hESDTruePi0DalitzConvGammaPt(NULL),
179 hESDTruePi0DalitzPositronPt(NULL),
180 hESDTruePi0DalitzElectronPt(NULL),
181 hESDTruePi0DalitzSecConvGammaPt(NULL),
182 hESDTruePi0DalitzSecPositronPt(NULL),
183 hESDTruePi0DalitzSecElectronPt(NULL),
185 hNGoodESDTracks(NULL),
194 fNumberOfESDTracks(0),
195 fMoveParticleAccordingToVertex(kFALSE),
197 fDoMesonAnalysis(kTRUE),
198 fDoChicAnalysis(kFALSE),
200 fIsFromMBHeader(kTRUE),
206 //-----------------------------------------------------------------------------------------------
207 AliAnalysisTaskGammaConvDalitzV1::AliAnalysisTaskGammaConvDalitzV1( const char* name ):
208 AliAnalysisTaskSE(name),
224 fSelectorElectronIndex(0),
225 fSelectorPositronIndex(0),
227 fGoodVirtualGammas(NULL),
228 fGoodElectrons(NULL),
229 fGoodPositrons(NULL),
230 fCutGammaArray(NULL),
231 fCutElectronArray(NULL),
232 fCutMesonArray(NULL),
234 fConversionCuts(NULL),
235 hESDConvGammaPt(NULL),
236 hESDConvGammaEta(NULL),
237 hESDConvGammaZR(NULL),
238 hESDDalitzElectronPt(NULL),
239 hESDDalitzPositronPt(NULL),
240 hESDDalitzElectronPhi(NULL),
241 hESDDalitzPositronPhi(NULL),
242 hESDDalitzElectronAfterPt(NULL),
243 hESDDalitzPositronAfterPt(NULL),
244 hESDDalitzElectronAfterEta(NULL),
245 hESDDalitzPositronAfterEta(NULL),
246 hESDDalitzElectronAfterPhi(NULL),
247 hESDDalitzPositronAfterPhi(NULL),
248 hESDDalitzElectronAfterNClsITS(NULL),
249 hESDDalitzPositronAfterNClsITS(NULL),
250 hESDDalitzElectronAfterNFindClsTPC(NULL),
251 hESDDalitzPositronAfterNFindClsTPC(NULL),
252 hESDDalitzElectronAfterNClsTPC(NULL),
253 hESDDalitzPositronAfterNClsTPC(NULL),
254 hESDDalitzElectronAfterNCrossedRowsTPC(NULL),
255 hESDDalitzPositronAfterNCrossedRowsTPC(NULL),
256 hESDDalitzPosEleAfterDCAxy(NULL),
257 hESDDalitzPosEleAfterDCAz(NULL),
258 hESDDalitzElectronAfterTPCdEdxVsP(NULL),
259 hESDDalitzPositronAfterTPCdEdxVsP(NULL),
260 hESDDalitzElectronAfterTPCdEdxSignalVsP(NULL),
261 hESDDalitzPositronAfterTPCdEdxSignalVsP(NULL),
262 hESDDalitzElectronAfterTPCdEdxVsEta(NULL),
263 hESDDalitzPositronAfterTPCdEdxVsEta(NULL),
264 hESDDalitzElectronAfterTPCdEdxVsPhi(NULL),
265 hESDDalitzPositronAfterTPCdEdxVsPhi(NULL),
267 hESDEposEnegPsiPairDPhi(NULL),
268 hESDEposEnegInvMassPt(NULL),
269 hESDEposEnegLikeSignBackInvMassPt(NULL),
270 hESDMotherInvMassPt(NULL),
271 hESDPi0MotherInvMassPt(NULL),
272 hESDPi0MotherDiffInvMassPt(NULL),
273 hESDPi0MotherDiffLimInvMassPt(NULL),
274 sESDMotherInvMassPtZM(NULL),
275 hESDMotherBackInvMassPt(NULL),
276 sESDMotherBackInvMassPtZM(NULL),
278 hMCConvGammaPt(NULL),
279 hMCConvGammaRSPt(NULL),
280 hMCAllPositronsPt(NULL),
281 hMCAllElectronsPt(NULL),
282 hMCPi0DalitzGammaPt(NULL),
283 hMCPi0DalitzElectronPt(NULL),
284 hMCPi0DalitzPositronPt(NULL),
292 hMCChiCInAccPt(NULL),
293 hMCPi0EposEnegInvMassPt(NULL),
294 hMCEtaEposEnegInvMassPt(NULL),
295 hESDEposEnegTruePi0DalitzInvMassPt(NULL),
296 hESDEposEnegTruePi0DalitzPsiPairDPhi(NULL),
297 hESDEposEnegTrueEtaDalitzInvMassPt(NULL),
298 hESDEposEnegTrueEtaDalitzPsiPairDPhi(NULL),
299 hESDEposEnegTruePhotonInvMassPt(NULL),
300 hESDEposEnegTrueInvMassPt(NULL),
301 hESDEposEnegTruePhotonPsiPairDPhi(NULL),
302 hESDEposEnegTrueJPsiInvMassPt(NULL),
303 hESDTrueMotherChiCInvMassPt(NULL),
304 hESDTrueMotherChiCDiffInvMassPt(NULL),
305 hESDTrueMotherInvMassPt(NULL),
306 hESDTrueMotherDalitzInvMassPt(NULL),
307 hESDTrueMotherPi0GGInvMassPt(NULL),
308 hESDTruePrimaryMotherPi0GGInvMassPt(NULL),
309 hESDTrueSecondaryMotherPi0GGInvMassPt(NULL),
310 hESDTruePrimaryMotherInvMassMCPt(NULL),
311 hESDTruePrimaryMotherInvMassPt(NULL),
312 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
313 hESDTruePrimaryPi0DalitzESDPtMCPt(NULL),
314 hESDTrueSecondaryMotherInvMassPt(NULL),
315 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
316 hESDTrueBckGGInvMassPt(NULL),
317 hESDTrueBckContInvMassPt(NULL),
318 hESDTrueMotherGGInvMassPt(NULL),
319 hESDTrueConvGammaPt(NULL),
320 hESDTruePositronPt(NULL),
321 hESDTrueElectronPt(NULL),
322 hESDTrueSecConvGammaPt(NULL),
323 hESDTrueSecPositronPt(NULL),
324 hESDTrueSecElectronPt(NULL),
325 hESDTruePi0DalitzConvGammaPt(NULL),
326 hESDTruePi0DalitzPositronPt(NULL),
327 hESDTruePi0DalitzElectronPt(NULL),
328 hESDTruePi0DalitzSecConvGammaPt(NULL),
329 hESDTruePi0DalitzSecPositronPt(NULL),
330 hESDTruePi0DalitzSecElectronPt(NULL),
332 hNGoodESDTracks(NULL),
341 fNumberOfESDTracks(0),
342 fMoveParticleAccordingToVertex(kFALSE),
344 fDoMesonAnalysis(kTRUE),
345 fDoChicAnalysis(kFALSE),
347 fIsFromMBHeader(kTRUE),
350 DefineOutput(1, TList::Class());
353 //-----------------------------------------------------------------------------------------------
354 AliAnalysisTaskGammaConvDalitzV1::~AliAnalysisTaskGammaConvDalitzV1()
357 // virtual destructor
359 cout<<"Destructor"<<endl;
365 if(fGoodVirtualGammas){
366 delete fGoodVirtualGammas;
382 delete[] fGammasPool;
386 //___________________________________________________________
387 void AliAnalysisTaskGammaConvDalitzV1::InitBack(){
389 const Int_t nDim = 4;
390 Int_t nBins[nDim] = {800,250,7,4};
391 Double_t xMin[nDim] = {0,0, 0,0};
392 Double_t xMax[nDim] = {0.8,25,7,4};
394 sESDMotherInvMassPtZM = new THnSparseF*[fnCuts];
395 sESDMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
397 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
398 //fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
399 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
400 //if (((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->DoBGCalculation()){
403 TString cutstringElectron = ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
404 TString cutstringMeson = ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
405 TString cutstringGamma = ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
409 Int_t collisionSystem = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(0,1));
410 Int_t centMin = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(1,1));
411 Int_t centMax = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(2,1));
413 if(collisionSystem == 1 || collisionSystem == 2 ||
414 collisionSystem == 5 || collisionSystem == 8 ||
415 collisionSystem == 9){
416 centMin = centMin*10;
417 centMax = centMax*10;
419 else if(collisionSystem == 3 || collisionSystem == 6){
423 else if(collisionSystem == 4 || collisionSystem == 7){
424 centMin = ((centMin*5)+45);
425 centMax = ((centMax*5)+45);
429 fBackList[iCut] = new TList();
430 fBackList[iCut]->SetName(Form("%s_%s_%s Back histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
431 fBackList[iCut]->SetOwner(kTRUE);
432 fCutFolder[iCut]->Add(fBackList[iCut]);
434 sESDMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
435 fBackList[iCut]->Add(sESDMotherBackInvMassPtZM[iCut]);
437 fMotherList[iCut] = new TList();
438 fMotherList[iCut]->SetName(Form("%s_%s_%s Mother histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
439 fMotherList[iCut]->SetOwner(kTRUE);
440 fCutFolder[iCut]->Add(fMotherList[iCut]);
442 sESDMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
443 fMotherList[iCut]->Add(sESDMotherInvMassPtZM[iCut]);
446 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
447 collisionSystem,centMin,centMax,
448 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->NumberOfRotationEvents(),
449 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->UseTrackMultiplicity());
451 if( ( (AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetBKGMethod() == 3 ){
452 fGammasPool[iCut] = new TList();
459 //______________________________________________________________________
460 void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
463 // Create ouput objects
466 // Create the output container
467 if(fOutputContainer != NULL){
468 delete fOutputContainer;
469 fOutputContainer = NULL;
471 if(fOutputContainer == NULL){
472 fOutputContainer = new TList();
473 fOutputContainer->SetOwner(kTRUE);
476 fGoodGammas = new TList();
477 //fGoodGammas->SetOwner(kTRUE);
480 fGoodVirtualGammas = new TList();
481 //fGoodVirtualGammas->SetOwner(kTRUE);
485 fGammasPool = new TList*[fnCuts];
486 fCutFolder = new TList*[fnCuts];
487 fESDList = new TList*[fnCuts];
488 fBackList = new TList*[fnCuts];
489 fMotherList = new TList*[fnCuts];
490 //fQAFolder = new TList*[fnCuts];
491 hNEvents = new TH1I*[fnCuts];
492 hNGoodESDTracks = new TH1I*[fnCuts];
493 hEtaShift = new TProfile*[fnCuts];
494 hESDConvGammaPt = new TH1F*[fnCuts];
495 hESDConvGammaEta = new TH1F*[fnCuts];
497 hESDDalitzElectronPt = new TH1F*[fnCuts];
498 hESDDalitzPositronPt = new TH1F*[fnCuts];
499 hESDDalitzElectronPhi = new TH1F*[fnCuts];
500 hESDDalitzPositronPhi = new TH1F*[fnCuts];
504 fQAFolder = new TList*[fnCuts];
506 hESDDalitzElectronAfterPt = new TH1F*[fnCuts];
507 hESDDalitzPositronAfterPt = new TH1F*[fnCuts];
508 hESDDalitzElectronAfterEta = new TH1F*[fnCuts];
509 hESDDalitzPositronAfterEta = new TH1F*[fnCuts];
510 hESDDalitzElectronAfterPhi = new TH1F*[fnCuts];
511 hESDDalitzPositronAfterPhi = new TH1F*[fnCuts];
512 hESDDalitzElectronAfterNClsITS = new TH1F*[fnCuts];
513 hESDDalitzPositronAfterNClsITS = new TH1F*[fnCuts];
514 hESDDalitzElectronAfterNFindClsTPC = new TH2F*[fnCuts];
515 hESDDalitzPositronAfterNFindClsTPC = new TH2F*[fnCuts];
516 hESDDalitzElectronAfterNClsTPC = new TH2F*[fnCuts];
517 hESDDalitzPositronAfterNClsTPC = new TH2F*[fnCuts];
518 hESDDalitzElectronAfterNCrossedRowsTPC = new TH2F*[fnCuts];
519 hESDDalitzPositronAfterNCrossedRowsTPC = new TH2F*[fnCuts];
520 hESDDalitzPosEleAfterDCAxy = new TH2F*[fnCuts];
521 hESDDalitzPosEleAfterDCAz = new TH2F*[fnCuts];
522 hESDDalitzElectronAfterTPCdEdxVsP = new TH2F*[fnCuts];
523 hESDDalitzPositronAfterTPCdEdxVsP = new TH2F*[fnCuts];
524 hESDDalitzElectronAfterTPCdEdxSignalVsP = new TH2F*[fnCuts];
525 hESDDalitzPositronAfterTPCdEdxSignalVsP = new TH2F*[fnCuts];
526 hESDDalitzElectronAfterTPCdEdxVsEta = new TH2F*[fnCuts];
527 hESDDalitzPositronAfterTPCdEdxVsEta = new TH2F*[fnCuts];
528 hESDDalitzElectronAfterTPCdEdxVsPhi = new TH2F*[fnCuts];
529 hESDDalitzPositronAfterTPCdEdxVsPhi = new TH2F*[fnCuts];
530 hESDMotherPhi = new TH1F*[fnCuts];
531 hESDEposEnegPsiPairDPhi = new TH2F*[fnCuts];
532 hESDEposEnegInvMassPt = new TH2F*[fnCuts];
533 hESDEposEnegLikeSignBackInvMassPt = new TH2F*[fnCuts];
534 hESDConvGammaZR = new TH2F*[fnCuts];
540 hESDMotherInvMassPt = new TH2F*[fnCuts];
542 if(fDoChicAnalysis) {
543 hESDPi0MotherInvMassPt = new TH2F*[fnCuts];
544 hESDPi0MotherDiffInvMassPt = new TH2F*[fnCuts];
545 hESDPi0MotherDiffLimInvMassPt = new TH2F*[fnCuts];
549 hESDMotherBackInvMassPt = new TH2F*[fnCuts];
552 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
555 TString cutstringElectron =((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
556 TString cutstringMeson= ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
557 TString cutstringGamma = ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
559 fCutFolder[iCut] = new TList();
560 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s_%s",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
561 fCutFolder[iCut]->SetOwner(kTRUE);
562 fOutputContainer->Add(fCutFolder[iCut]);
564 fESDList[iCut] = new TList();
565 fESDList[iCut]->SetName(Form("%s_%s_%s ESD histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
566 fESDList[iCut]->SetOwner(kTRUE);
569 hNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
570 hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
571 hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
572 hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
573 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
574 hNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
575 hNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
576 hNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
577 hNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
578 hNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
579 fESDList[iCut]->Add(hNEvents[iCut]);
583 if(fIsHeavyIon) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",3000,0,3000);
584 else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
585 fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
587 hEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
588 fESDList[iCut]->Add(hEtaShift[iCut]);
590 hESDConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
591 fESDList[iCut]->Add(hESDConvGammaPt[iCut]);
593 hESDConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",600,-1.5,1.5);
594 fESDList[iCut]->Add(hESDConvGammaEta[iCut]);
596 hESDDalitzElectronPt[iCut] = new TH1F("ESD_DalitzElectron_Pt","ESD_DalitzElectron_Pt",1000,0,25);
597 fESDList[iCut]->Add(hESDDalitzElectronPt[iCut]);
599 hESDDalitzPositronPt[iCut] = new TH1F("ESD_DalitzPositron_Pt","ESD_DalitzPositron_Pt",1000,0,25);
600 fESDList[iCut]->Add(hESDDalitzPositronPt[iCut]);
603 hESDDalitzElectronPhi[iCut] = new TH1F("ESD_DalitzElectron_Phi","ESD_DalitzElectron_Phi",360,0,2*TMath::Pi());
604 fESDList[iCut]->Add(hESDDalitzElectronPhi[iCut]);
606 hESDDalitzPositronPhi[iCut] = new TH1F("ESD_DalitzPositron_Phi","ESD_DalitzPositron_Phi",360,0,2*TMath::Pi());
607 fESDList[iCut]->Add(hESDDalitzPositronPhi[iCut]);
613 fQAFolder[iCut] = new TList();
614 fQAFolder[iCut]->SetName(Form("%s_%s_%s QA histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
615 fQAFolder[iCut]->SetOwner(kTRUE);
619 const Int_t kDCABins=62;
620 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};
622 const Int_t kPtBins=110;
623 Double_t binsPtDummy[kPtBins+1];
624 const Int_t kPBins = 109;
625 Double_t binsPDummy[kPBins+1];
629 for(Int_t i=1;i<kPtBins+1;i++)
631 if(binsPtDummy[i-1]+0.05<1.01)
632 binsPtDummy[i]=binsPtDummy[i-1]+0.05;
634 binsPtDummy[i]=binsPtDummy[i-1]+0.1;
637 for(Int_t i=1; i<kPBins+1;i++){
639 if( binsPDummy[i-1]+0.05<1.01)
640 binsPDummy[i] = binsPDummy[i-1]+0.05;
642 binsPDummy[i] = binsPDummy[i-1]+0.1;
648 hESDConvGammaZR[iCut]= new TH2F("ESD_ConvGamma_ConversionPoint_ZR","ESD_ConvGamma_ConversionPoint_ZR",1200,-150,150,480,0,120);
649 fQAFolder[iCut]->Add(hESDConvGammaZR[iCut]);
651 hESDDalitzElectronAfterPt[iCut] = new TH1F("ESD_DalitzElectron_After_Pt","ESD_DalitzElectron_After_Pt",1000,0,25);
652 fQAFolder[iCut]->Add(hESDDalitzElectronAfterPt[iCut]);
654 hESDDalitzPositronAfterPt[iCut] = new TH1F("ESD_DalitzPositron_After_Pt","ESD_DalitzPositron_After_Pt",1000,0,25);
655 fQAFolder[iCut]->Add(hESDDalitzPositronAfterPt[iCut]);
657 hESDDalitzElectronAfterEta[iCut] = new TH1F("ESD_DalitzElectron_After_Eta","ESD_DalitzElectron_After_Eta",600,-1.5,1.5);
658 fQAFolder[iCut]->Add(hESDDalitzElectronAfterEta[iCut]);
660 hESDDalitzPositronAfterEta[iCut] = new TH1F("ESD_DalitzPositron_After_Eta","ESD_DalitzElectron_After_Eta",600,-1.5,1.5);
661 fQAFolder[iCut]->Add(hESDDalitzPositronAfterEta[iCut]);
664 hESDDalitzElectronAfterPhi[iCut] = new TH1F("ESD_DalitzElectron_After_Phi","ESD_DalitzElectron_After_Phi",360,0,2*TMath::Pi());
665 fQAFolder[iCut]->Add(hESDDalitzElectronAfterPhi[iCut]);
667 hESDDalitzPositronAfterPhi[iCut] = new TH1F("ESD_DalitzPositron_After_Phi","ESD_DalitzPositron_After_Phi",360,0,2*TMath::Pi());
668 fQAFolder[iCut]->Add(hESDDalitzPositronAfterPhi[iCut]);
670 hESDDalitzElectronAfterNClsITS[iCut] = new TH1F("ESD_DalitzElectron_After_NClsITS","ESD_DalitzElectron_After_NClsITS",7,0.,7.);
671 fQAFolder[iCut]->Add(hESDDalitzElectronAfterNClsITS[iCut]);
673 hESDDalitzPositronAfterNClsITS[iCut] = new TH1F("ESD_DalitzPositron_After_NClsITS","ESD_DalitzPositron_After_NClsITS",7,0.,7.);
674 fQAFolder[iCut]->Add(hESDDalitzPositronAfterNClsITS[iCut]);
677 hESDDalitzElectronAfterNFindClsTPC[iCut] = new TH2F("ESD_DalitzElectron_After_NFindClsTPC","ESD_DalitzElectron_After_NFindClsTPC",60,0,1.5,kPtBins,binsPtDummy);
678 fQAFolder[iCut]->Add(hESDDalitzElectronAfterNFindClsTPC[iCut]);
680 hESDDalitzPositronAfterNFindClsTPC[iCut] = new TH2F("ESD_DalitzPositron_After_NFindClsTPC","ESD_DalitzPositron_After_NFindClsTPC",60,0,1.5,kPtBins,binsPtDummy);
681 fQAFolder[iCut]->Add(hESDDalitzPositronAfterNFindClsTPC[iCut]);
684 hESDDalitzElectronAfterNClsTPC[iCut] = new TH2F("ESD_DalitzElectron_After_NClsTPC","ESD_DalitzElectron_After_NClsTPC",200,0,200,kPtBins,binsPtDummy);
685 fQAFolder[iCut]->Add(hESDDalitzElectronAfterNClsTPC[iCut]);
687 hESDDalitzPositronAfterNClsTPC[iCut] = new TH2F("ESD_DalitzPositron_After_NClsTPC","ESD_DalitzPositron_After_NClsTPC",200,0,200,kPtBins,binsPtDummy);
688 fQAFolder[iCut]->Add(hESDDalitzPositronAfterNClsTPC[iCut]);
690 hESDDalitzPositronAfterNCrossedRowsTPC[iCut] = new TH2F("ESD_DalitzPositron_After_NCrossedRowsTPC","ESD_DalitzPositron_After_NCrossedRowsTPC",165,-0.5,164.5,kPtBins,binsPtDummy);
691 fQAFolder[iCut]->Add(hESDDalitzPositronAfterNCrossedRowsTPC[iCut]);
693 hESDDalitzElectronAfterNCrossedRowsTPC[iCut] = new TH2F("ESD_DalitzElectron_After_NCrossedRowsTPC","ESD_DalitzElectron_After_NCrossedRowsTPC",165,-0.5,164.5,kPtBins,binsPtDummy);
694 fQAFolder[iCut]->Add(hESDDalitzElectronAfterNCrossedRowsTPC[iCut]);
696 hESDDalitzPosEleAfterDCAxy[iCut] = new TH2F("ESD_DalitzPosEle_After_DCAxy","ESD_DalitzPosEle_After_DCAxy",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
697 fQAFolder[iCut]->Add(hESDDalitzPosEleAfterDCAxy[iCut]);
699 hESDDalitzPosEleAfterDCAz[iCut] = new TH2F("ESD_DalitzPosEle_After_DCAz","ESD_DalitzPosEle_After_DCAz",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
700 fQAFolder[iCut]->Add(hESDDalitzPosEleAfterDCAz[iCut]);
702 hESDDalitzElectronAfterTPCdEdxVsP[iCut] = new TH2F("ESD_DalitzElectron_After_TPCdEdxVsP","ESD_DalitzElectron_After_TPCdEdxVsP_After_TPCdEdx",kPBins,binsPDummy,200,-10,10);
703 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxVsP[iCut]);
705 hESDDalitzPositronAfterTPCdEdxVsP[iCut] = new TH2F("ESD_DalitzPositron_After_TPCdEdxVsP","ESD_DalitzPositron_After_TPCdEdxVsP",kPBins,binsPDummy,200,-10,10);
706 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxVsP[iCut]);
708 hESDDalitzElectronAfterTPCdEdxSignalVsP[iCut] =new TH2F("ESD_DalitzElectron_After_TPCdEdxSignalVsP","ESD_DalitzElectron_After_TPCdEdxSignalVsP" ,kPBins,binsPDummy,200,0.0,200);
709 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxSignalVsP[iCut]);
711 hESDDalitzPositronAfterTPCdEdxSignalVsP[iCut] =new TH2F("ESD_DalitzPositron_After_TPCdEdxSignalVsP","ESD_DalitzPositron_After_TPCdEdxSignalVsP" ,kPBins,binsPDummy,200,0.0,200);
712 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxSignalVsP[iCut]);
714 hESDDalitzElectronAfterTPCdEdxVsEta[iCut] = new TH2F("ESD_DalitzElectron_After_TPCdEdxVsEta","ESD_DalitzElectron_After_TPCdEdxVsEta",140,-1.4,1.4,200,-10,10);
715 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxVsEta[iCut]);
717 hESDDalitzPositronAfterTPCdEdxVsEta[iCut] = new TH2F("ESD_DalitzPositron_After_TPCdEdxVsEta","ESD_DalitzPositron_After_TPCdEdxVsEta",140,-1.4,1.4,200,-10,10);
718 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxVsEta[iCut]);
720 hESDDalitzElectronAfterTPCdEdxVsPhi[iCut] = new TH2F("ESD_DalitzElectron_After_TPCdEdxVsPhi","ESD_DalitzElectron_After_TPCdEdxVsPhi",180,0,2*TMath::Pi(),200,-10,10);
721 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxVsPhi[iCut]);
723 hESDDalitzPositronAfterTPCdEdxVsPhi[iCut] = new TH2F("ESD_DalitzPositron_After_TPCdEdxVsPhi","ESD_DalitzPositron_After_TPCdEdxVsPhi",180,0,2*TMath::Pi(),200,-10,10);
724 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxVsPhi[iCut]);
726 hESDMotherPhi[iCut] = new TH1F("ESD_DalitzMother_Phi","ESD_DalitzMother_Phi",360,0,2*TMath::Pi());
727 fQAFolder[iCut]->Add(hESDMotherPhi[iCut]);
729 hESDEposEnegPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_PsiPair_DPhi","ESD_EposEneg_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
730 fQAFolder[iCut]->Add(hESDEposEnegPsiPairDPhi[iCut]);
732 hESDEposEnegInvMassPt[iCut] = new TH2F("ESD_EposEneg_InvMassPt","ESD_EposEneg_InvMassPt",5000,0.,5.,100,0.,10.);
733 fQAFolder[iCut]->Add(hESDEposEnegInvMassPt[iCut]);
735 hESDEposEnegLikeSignBackInvMassPt[iCut] = new TH2F("ESD_EposEneg_LikeSignBack_InvMassPt","ESD_EposEneg_LikeSignBack_InvMassPt",5000,0.,5.,100,0.,10.);
736 fQAFolder[iCut]->Add(hESDEposEnegLikeSignBackInvMassPt[iCut]);
739 TAxis *AxisAfter = hESDDalitzElectronAfterTPCdEdxVsP[iCut]->GetXaxis();
740 Int_t bins = AxisAfter->GetNbins();
741 Double_t from = AxisAfter->GetXmin();
742 Double_t to = AxisAfter->GetXmax();
743 Double_t *newBins = new Double_t[bins+1];
745 Double_t factor = TMath::Power(to/from, 1./bins);
746 for(Int_t i=1; i<=bins; ++i) newBins[i] = factor * newBins[i-1];
748 AxisAfter->Set(bins, newBins);
749 AxisAfter = hESDDalitzElectronAfterTPCdEdxSignalVsP[iCut]->GetXaxis();
750 AxisAfter->Set(bins, newBins);
752 AxisAfter = hESDDalitzPositronAfterTPCdEdxVsP[iCut]->GetXaxis();
753 AxisAfter->Set(bins, newBins);
755 AxisAfter = hESDDalitzPositronAfterTPCdEdxSignalVsP[iCut]->GetXaxis();
756 AxisAfter->Set(bins,newBins);
762 fCutFolder[iCut]->Add(fQAFolder[iCut]);
772 hESDMotherInvMassPt[iCut] = new TH2F("ESD_DalitzMother_InvMass_Pt","ESD_DalitzMother_InvMass_Pt",800,0,0.8,250,0,25);
773 fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
776 if( fDoChicAnalysis) {
778 hESDPi0MotherInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_InvMass_Pt","ESD_Pi0Mother_InvMass_Pt",4000,0,4,250,0,25);
779 fESDList[iCut]->Add(hESDPi0MotherInvMassPt[iCut]);
781 hESDPi0MotherDiffInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_DiffInvMass_Pt","ESD_Pi0Mother_DiffInvMass_Pt",2000,0,2,250,0,25);
782 fESDList[iCut]->Add(hESDPi0MotherDiffInvMassPt[iCut]);
784 hESDPi0MotherDiffLimInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_DiffLimInvMass_Pt","ESD_Pi0Mother_DiffLimInvMass_Pt",2000,0,2,250,0,25);
785 fESDList[iCut]->Add(hESDPi0MotherDiffLimInvMassPt[iCut]);
790 hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_DalitzBackground_InvMass_Pt","ESD_DalitzBackground_InvMass_Pt",800,0,0.8,250,0,25);
791 fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
795 fCutFolder[iCut]->Add(fESDList[iCut]);
802 InitBack(); // Init Background Handler
808 fMCList = new TList*[fnCuts];
810 fTrueList = new TList*[fnCuts];
811 hESDTrueConvGammaPt = new TH1F*[fnCuts];
812 hESDTruePositronPt = new TH1F*[fnCuts];
813 hESDTrueElectronPt = new TH1F*[fnCuts];
814 hESDTrueSecConvGammaPt = new TH1F*[fnCuts];
815 hESDTrueSecPositronPt = new TH1F*[fnCuts];
816 hESDTrueSecElectronPt = new TH1F*[fnCuts];
817 hESDTruePi0DalitzConvGammaPt = new TH1F*[fnCuts];
818 hESDTruePi0DalitzPositronPt = new TH1F*[fnCuts];
819 hESDTruePi0DalitzElectronPt = new TH1F*[fnCuts];
820 hESDTruePi0DalitzSecConvGammaPt = new TH1F*[fnCuts];
821 hESDTruePi0DalitzSecPositronPt = new TH1F*[fnCuts];
822 hESDTruePi0DalitzSecElectronPt = new TH1F*[fnCuts];
823 //if(fDoMesonAnalysis){
824 hMCAllGammaPt = new TH1F*[fnCuts];
825 hMCConvGammaPt = new TH1F*[fnCuts];
826 hMCConvGammaRSPt = new TH1F*[fnCuts];
827 hMCAllPositronsPt = new TH1F*[fnCuts];
828 hMCAllElectronsPt = new TH1F*[fnCuts];
829 hMCPi0DalitzGammaPt = new TH1F*[fnCuts];
830 hMCPi0DalitzElectronPt = new TH1F*[fnCuts];
831 hMCPi0DalitzPositronPt = new TH1F*[fnCuts];
833 hMCPi0Pt = new TH1F*[fnCuts];
834 hMCPi0GGPt = new TH1F*[fnCuts];
835 hMCEtaPt = new TH1F*[fnCuts];
836 hMCEtaGGPt = new TH1F*[fnCuts];
837 hMCPi0InAccPt = new TH1F*[fnCuts];
838 hMCEtaInAccPt = new TH1F*[fnCuts];
839 hMCChiCPt = new TH1F*[fnCuts];
840 hMCChiCInAccPt = new TH1F*[fnCuts];
845 hMCPi0EposEnegInvMassPt = new TH2F*[fnCuts];
846 hMCEtaEposEnegInvMassPt = new TH2F*[fnCuts];
848 hESDEposEnegTruePi0DalitzInvMassPt = new TH2F*[fnCuts];
849 hESDEposEnegTruePi0DalitzPsiPairDPhi = new TH2F*[fnCuts];
850 hESDEposEnegTrueEtaDalitzInvMassPt = new TH2F*[fnCuts];
851 hESDEposEnegTrueEtaDalitzPsiPairDPhi = new TH2F*[fnCuts];
852 hESDEposEnegTruePhotonInvMassPt = new TH2F*[fnCuts];
853 hESDEposEnegTrueInvMassPt = new TH2F*[fnCuts];
854 hESDEposEnegTruePhotonPsiPairDPhi = new TH2F*[fnCuts];
855 hESDEposEnegTrueJPsiInvMassPt = new TH2F*[fnCuts];
859 if( fDoChicAnalysis ){
860 hESDTrueMotherChiCInvMassPt = new TH2F*[fnCuts];
861 hESDTrueMotherChiCDiffInvMassPt = new TH2F*[fnCuts];
865 hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
866 hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
867 hESDTrueMotherPi0GGInvMassPt = new TH2F*[fnCuts];
868 hESDTruePrimaryMotherPi0GGInvMassPt = new TH2F*[fnCuts];
869 hESDTrueSecondaryMotherPi0GGInvMassPt = new TH2F*[fnCuts];
870 hESDTruePrimaryPi0DalitzESDPtMCPt = new TH2F*[fnCuts];
871 hESDTruePrimaryMotherInvMassMCPt = new TH2F*[fnCuts];
872 hESDTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
873 hESDTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
874 hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
875 hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
876 hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
877 hESDTrueBckContInvMassPt = new TH2F*[fnCuts];
878 hESDTrueMotherGGInvMassPt = new TH2F*[fnCuts];
881 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
882 TString cutstringElectron =((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
883 TString cutstringMeson= ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
884 TString cutstringGamma = ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
886 fMCList[iCut] = new TList();
887 fMCList[iCut]->SetName(Form("%s_%s_%s MC histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
888 fMCList[iCut]->SetOwner(kTRUE);
889 fCutFolder[iCut]->Add(fMCList[iCut]);
892 hMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
893 fMCList[iCut]->Add(hMCAllGammaPt[iCut]);
895 hMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
896 fMCList[iCut]->Add(hMCConvGammaPt[iCut]);
898 hMCConvGammaRSPt[iCut] = new TH1F("MC_ConvGamma_RS_Pt","MC_ConvGamma_RS_Pt",250,0,25);
899 fMCList[iCut]->Add(hMCConvGammaRSPt[iCut]);
902 hMCAllPositronsPt[iCut] = new TH1F("MC_AllPositrons_Pt","MC_AllPositrons_Pt",1000,0,25);
903 fMCList[iCut]->Add(hMCAllPositronsPt[iCut]);
905 hMCAllElectronsPt[iCut] = new TH1F("MC_AllElectrons_Pt","MC_AllElectrons_Pt",1000,0,25);
906 fMCList[iCut]->Add(hMCAllElectronsPt[iCut]);
908 hMCPi0DalitzGammaPt[iCut] = new TH1F("MC_Pi0DalitzGamma_Pt","MC_Pi0DalitzGamma_Pt",250,0,25);
909 hMCPi0DalitzGammaPt[iCut]->Sumw2();
910 fMCList[iCut]->Add(hMCPi0DalitzGammaPt[iCut]);
912 hMCPi0DalitzPositronPt[iCut] = new TH1F("MC_Pi0DalitzPositron_Pt","MC_Pi0DalitzPositron_Pt",1000,0,25);
913 hMCPi0DalitzPositronPt[iCut]->Sumw2();
914 fMCList[iCut]->Add(hMCPi0DalitzPositronPt[iCut]);
916 hMCPi0DalitzElectronPt[iCut] = new TH1F("MC_Pi0DalitzElectron_Pt","MC_Pi0DalitzElectron_Pt",1000,0,25);
917 hMCPi0DalitzElectronPt[iCut]->Sumw2();
918 fMCList[iCut]->Add(hMCPi0DalitzElectronPt[iCut]);
921 hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
922 hMCPi0Pt[iCut]->Sumw2();
923 fMCList[iCut]->Add(hMCPi0Pt[iCut]);
925 hMCPi0GGPt[iCut] = new TH1F("MC_Pi0_GG_Pt","MC_Pi0_GG_Pt",250,0,25);
926 hMCPi0GGPt[iCut]->Sumw2();
927 fMCList[iCut]->Add(hMCPi0GGPt[iCut]);
929 hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
930 hMCEtaPt[iCut]->Sumw2();
931 fMCList[iCut]->Add(hMCEtaPt[iCut]);
933 hMCEtaGGPt[iCut] = new TH1F("MC_Eta_GG_Pt","MC_Eta_GG_Pt",250,0,25);
934 hMCEtaGGPt[iCut]->Sumw2();
935 fMCList[iCut]->Add(hMCEtaGGPt[iCut]);
937 hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0DalitzInAcc_Pt","MC_Pi0DalitzInAcc_Pt",250,0,25);
938 hMCPi0InAccPt[iCut]->Sumw2();
939 fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
941 hMCEtaInAccPt[iCut] = new TH1F("MC_EtaDalitzInAcc_Pt","MC_EtaDalitzInAcc_Pt",250,0,25);
942 hMCEtaInAccPt[iCut]->Sumw2();
943 fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
947 hMCChiCPt[iCut] = new TH1F("MC_ChiC_Pt","MC_ChiC_Pt",250,0,25);
948 fMCList[iCut]->Add(hMCChiCPt[iCut]);
950 hMCChiCInAccPt[iCut] = new TH1F("MC_ChiCInAcc_Pt","MC_ChiCInAcc_Pt",250,0,25);
951 fMCList[iCut]->Add(hMCChiCInAccPt[iCut]);
955 hMCPi0EposEnegInvMassPt[iCut] = new TH2F("MC_Pi0EposEneg_InvMassPt","MC_Pi0EposEneg_InvMassPt",500,0.,0.5,100,0.,10.);
956 fMCList[iCut]->Add(hMCPi0EposEnegInvMassPt[iCut]);
958 hMCEtaEposEnegInvMassPt[iCut] = new TH2F("MC_EtaEposEneg_InvMassPt","MC_EtaEposEneg_InvMassPt",800,0.,0.8,100,0.,10.);
959 fMCList[iCut]->Add(hMCEtaEposEnegInvMassPt[iCut]);
965 fTrueList[iCut] = new TList();
966 fTrueList[iCut]->SetName(Form("%s_%s_%s True histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
967 fTrueList[iCut]->SetOwner(kTRUE);
968 fCutFolder[iCut]->Add(fTrueList[iCut]);
973 hESDEposEnegTruePi0DalitzInvMassPt[iCut] = new TH2F("ESD_EposEneg_TruePi0Dalitz_InvMassPt","ESD_EposEneg_TruePi0Dalitz_InvMassPt",500,0.,0.5,100,0.,10.);
974 fTrueList[iCut]->Add(hESDEposEnegTruePi0DalitzInvMassPt[iCut]);
976 hESDEposEnegTruePi0DalitzPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TruePi0Dalitz_PsiPair_DPhi","ESD_EposEneg_TruePi0Dalitz_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
977 fTrueList[iCut]->Add(hESDEposEnegTruePi0DalitzPsiPairDPhi[iCut]);
980 hESDEposEnegTrueEtaDalitzInvMassPt[iCut] = new TH2F("ESD_EposEneg_TrueEtaDalitz_InvMassPt","ESD_EposEneg_TrueEtaDalitz_InvMassPt",800,0.,0.8,100,0.,10.);
981 fTrueList[iCut]->Add(hESDEposEnegTrueEtaDalitzInvMassPt[iCut]);
983 hESDEposEnegTrueEtaDalitzPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TrueEtaDalitz_PsiPair_DPhi","ESD_EposEneg_TrueEtaDalitz_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
984 fTrueList[iCut]->Add(hESDEposEnegTrueEtaDalitzPsiPairDPhi[iCut]);
986 hESDEposEnegTruePhotonInvMassPt[iCut] = new TH2F("ESD_EposEneg_TruePhoton_InvMassPt","ESD_EposEneg_TruePhoton_InvMassPt",500,0.,0.5,100,0.,10.);
987 fTrueList[iCut]->Add(hESDEposEnegTruePhotonInvMassPt[iCut]);
989 hESDEposEnegTrueInvMassPt[iCut] = new TH2F("ESD_EposEneg_True_InvMassPt","ESD_EposEneg_True_InvMassPt",5000,0.,5.,100,0.,10.);
990 fTrueList[iCut]->Add(hESDEposEnegTrueInvMassPt[iCut]);
992 hESDEposEnegTruePhotonPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TruePhoton_PsiPair_DPhi","ESD_EposEneg_TruePhoton_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
993 fTrueList[iCut]->Add(hESDEposEnegTruePhotonPsiPairDPhi[iCut]);
995 hESDEposEnegTrueJPsiInvMassPt[iCut] = new TH2F("ESD_EposEneg_TrueJPsi_InvMassPt","ESD_EposEneg_TrueJPsi_InvMassPt",5000,0.,5.,100,0.,10.);
996 fTrueList[iCut]->Add(hESDEposEnegTrueJPsiInvMassPt[iCut]);
1003 hESDTruePositronPt[iCut] = new TH1F("ESD_TruePositron_Pt","ESD_TruePositron_Pt",1000,0,25);
1004 fTrueList[iCut]->Add(hESDTruePositronPt[iCut]);
1006 hESDTrueElectronPt[iCut] = new TH1F("ESD_TrueElectron_Pt","ESD_TrueElectron_Pt",1000,0,25);
1007 fTrueList[iCut]->Add(hESDTrueElectronPt[iCut]);
1009 hESDTrueSecPositronPt[iCut] = new TH1F("ESD_TrueSecPositron_Pt","ESD_TrueSecPositron_Pt",1000,0,25);
1010 fTrueList[iCut]->Add(hESDTrueSecPositronPt[iCut]);
1012 hESDTrueSecElectronPt[iCut] = new TH1F("ESD_TrueSecElectron_Pt","ESD_TrueSecElectron_Pt",1000,0,25);
1013 fTrueList[iCut]->Add(hESDTrueSecElectronPt[iCut]);
1015 hESDTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
1016 fTrueList[iCut]->Add(hESDTrueConvGammaPt[iCut]);
1018 hESDTrueSecConvGammaPt[iCut] = new TH1F("ESD_TrueSecConvGamma_Pt","ESD_TrueSecConvGamma_Pt",250,0,25);
1019 fTrueList[iCut]->Add(hESDTrueSecConvGammaPt[iCut]);
1021 hESDTruePi0DalitzConvGammaPt[iCut] = new TH1F("ESD_TruePi0DalitzConvGamma_Pt","ESD_TruePi0DalitzConvGamma_Pt",250,0,25);
1022 fTrueList[iCut]->Add(hESDTruePi0DalitzConvGammaPt[iCut]);
1024 hESDTruePi0DalitzElectronPt[iCut] = new TH1F("ESD_TruePi0DalitzElectron_Pt","ESD_TruePi0DalitzElectron_Pt",1000,0,25);
1025 fTrueList[iCut]->Add(hESDTruePi0DalitzElectronPt[iCut]);
1027 hESDTruePi0DalitzPositronPt[iCut] = new TH1F("ESD_TruePi0DalitzPositron_Pt","ESD_TruePi0DalitzPositron_Pt",1000,0,25);
1028 fTrueList[iCut]->Add(hESDTruePi0DalitzPositronPt[iCut]);
1030 hESDTruePi0DalitzSecConvGammaPt[iCut] = new TH1F("ESD_TruePi0DalitzSecConvGamma_Pt","ESD_TruePi0DalitzSecConvGamma_Pt",250,0,25);
1031 fTrueList[iCut]->Add(hESDTruePi0DalitzSecConvGammaPt[iCut]);
1033 hESDTruePi0DalitzSecElectronPt[iCut] = new TH1F("ESD_TruePi0DalitzSecElectron_Pt","ESD_TruePi0DalitzSecElectron_Pt",1000,0,25);
1034 fTrueList[iCut]->Add(hESDTruePi0DalitzSecElectronPt[iCut]);
1036 hESDTruePi0DalitzSecPositronPt[iCut] = new TH1F("ESD_TruePi0DalitzSecPositron_Pt","ESD_TruePi0DalitzSecPositron_Pt",1000,0,25);
1037 fTrueList[iCut]->Add(hESDTruePi0DalitzSecPositronPt[iCut]);
1039 if( fDoChicAnalysis) {
1041 hESDTrueMotherChiCInvMassPt[iCut] = new TH2F("ESD_TrueMotherChiC_InvMass_Pt","ESD_TrueMotherChiC_InvMass_Pt",4000,0,4,250,0,25);
1042 fTrueList[iCut]->Add(hESDTrueMotherChiCInvMassPt[iCut]);
1044 hESDTrueMotherChiCDiffInvMassPt[iCut] = new TH2F("ESD_TrueMotherChiCDiff_InvMass_Pt","ESD_TrueMotherChiCDiff_InvMass_Pt",2000,0,2,250,0,25);
1045 fTrueList[iCut]->Add(hESDTrueMotherChiCDiffInvMassPt[iCut]);
1049 hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
1050 hESDTrueMotherInvMassPt[iCut]->Sumw2();
1051 fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
1053 hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueMother_Dalitz_InvMass_Pt","ESD_TrueMother_Dalitz_InvMass_Pt",800,0,0.8,250,0,25);
1054 hESDTrueMotherDalitzInvMassPt[iCut]->Sumw2();
1055 fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);
1061 hESDTrueMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TrueMotherPi0GG_InvMass_Pt","ESD_TrueMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
1062 hESDTrueMotherPi0GGInvMassPt[iCut]->Sumw2();
1063 fTrueList[iCut]->Add(hESDTrueMotherPi0GGInvMassPt[iCut]);
1065 hESDTruePrimaryMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMotherPi0GG_InvMass_Pt","ESD_TruePrimaryMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
1066 hESDTruePrimaryMotherPi0GGInvMassPt[iCut]->Sumw2();
1067 fTrueList[iCut]->Add(hESDTruePrimaryMotherPi0GGInvMassPt[iCut]);
1069 hESDTrueSecondaryMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryMotherPi0GG_InvMass_Pt","ESD_TrueSecondaryMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
1070 hESDTrueSecondaryMotherPi0GGInvMassPt[iCut]->Sumw2();
1071 fTrueList[iCut]->Add(hESDTrueSecondaryMotherPi0GGInvMassPt[iCut]);
1073 hESDTruePrimaryPi0DalitzESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryPi0Dalitz_ESDPt_MCPt","ESD_TruePrimaryPi0Dalitz_ESDPt_MCPt",250,0,25,250,0,25);
1074 hESDTruePrimaryPi0DalitzESDPtMCPt[iCut]->Sumw2();
1075 fTrueList[iCut]->Add(hESDTruePrimaryPi0DalitzESDPtMCPt[iCut]);
1076 hESDTruePrimaryMotherInvMassMCPt[iCut] = new TH2F("ESD_TruePrimaryMother_InvMass_MCPt","ESD_TrueDalitzPrimaryMother_InvMass_MCPt",800,0,0.8,250,0,25);
1077 hESDTruePrimaryMotherInvMassMCPt[iCut]->Sumw2();
1078 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassMCPt[iCut]);
1079 hESDTruePrimaryMotherInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMother_InvMass_Pt","ESD_TruePrimaryMother_InvMass_Pt",800,0,0.8,250,0,25);
1080 hESDTruePrimaryMotherInvMassPt[iCut]->Sumw2();
1081 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassPt[iCut]);
1082 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMotherW0Weighting_InvMass_Pt","ESD_TruePrimaryMotherW0Weighting_InvMass_Pt",800,0,0.8,250,0,25);
1083 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
1084 fTrueList[iCut]->Add(hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]);
1086 hESDTrueSecondaryMotherInvMassPt[iCut] = new TH2F("ESD_TrueDalitzSecondaryMother_InvMass_Pt","ESD_TrueDalitzSecondaryMother_InvMass_Pt",800,0,0.8,250,0,25);
1087 hESDTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
1088 fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
1089 // hESDTrueSecondaryMotherFromK0sInvMassPt[iCut] = new TH2F("ESD_TrueDalitzSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueDalitzSecondaryMotherFromK0s_InvMass_Pt",1000,0,1,250,0,25);
1090 // fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
1091 hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueDalitzBckGG_InvMass_Pt","ESD_TrueDalitzBckGG_InvMass_Pt",800,0,0.8,250,0,25);
1092 fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
1093 hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueDalitzBckCont_InvMass_Pt","ESD_TrueDalitzBckCont_InvMass_Pt",800,0,0.8,250,0,25);
1094 fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
1095 // hESDTrueMotherGGInvMassPt[iCut] = new TH2F("ESD_TrueGammaGamma_InvMass_Pt","ESD_TrueGammaGamma_InvMass_Pt",1000,0,1,250,0,25);
1096 // fTrueList[iCut]->Add(hESDTrueMotherGGInvMassPt[iCut]);
1101 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
1102 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
1105 if((AliConversionCuts*)fV0Reader->GetConversionCuts())
1106 if(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
1107 fOutputContainer->Add(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
1111 fElecSelector=(AliDalitzElectronSelector*)AliAnalysisManager::GetAnalysisManager()->GetTask("ElectronSelector");
1112 if(!fElecSelector){printf("Error: No ElectronSelector");return;} // GetV0Reader
1114 if( fElecSelector ){
1116 if ( ((AliDalitzElectronCuts*)fElecSelector->GetDalitzElectronCuts())->GetCutHistograms() ){
1117 fOutputContainer->Add( ((AliDalitzElectronCuts*)fElecSelector->GetDalitzElectronCuts())->GetCutHistograms() );
1121 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
1123 if( fCutElectronArray ){
1124 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutHistograms() ) {
1125 fCutFolder[iCut]->Add( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutHistograms() );
1129 if( fCutMesonArray ) {
1130 if( ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutHistograms() ) {
1131 fCutFolder[iCut]->Add( ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutHistograms());
1135 if( fCutGammaArray ) {
1136 if( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutHistograms() ) {
1137 fCutFolder[iCut]->Add( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutHistograms() );
1142 PostData(1, fOutputContainer);
1146 //______________________________________________________________________
1147 void AliAnalysisTaskGammaConvDalitzV1::UserExec(Option_t *)
1151 // Execute analysis for current event
1154 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
1155 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
1158 Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
1160 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
1161 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1162 hNEvents[iCut]->Fill(eventQuality);
1168 fElecSelector=(AliDalitzElectronSelector*)AliAnalysisManager::GetAnalysisManager()->GetTask("ElectronSelector");
1169 if(!fElecSelector){printf("Error: No ElectronSelector");return;} // GetV0Reader
1172 if(fIsMC) fMCEvent = MCEvent();
1173 fESDEvent = (AliESDEvent*)InputEvent();
1174 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
1175 fSelectorElectronIndex = fElecSelector->GetReconstructedElectronsIndex(); // Electrons from default Cut
1176 fSelectorPositronIndex = fElecSelector->GetReconstructedPositronsIndex(); // Positrons from default Cut
1178 //CountESDTracks(); // Estimate Event Multiplicity
1179 fNumberOfESDTracks = fV0Reader->GetNumberOfPrimaryTracks();
1180 //AddTaskContainers(); //Add conatiner
1182 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1185 Int_t eventNotAccepted =
1186 ((AliConversionCuts*)fCutGammaArray->At(iCut))
1187 ->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
1189 if(eventNotAccepted){
1190 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
1191 hNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
1195 if(eventQuality != 0){// Event Not Accepted
1196 // cout << "event rejected due to: " <<eventQuality << endl;
1197 hNEvents[iCut]->Fill(eventQuality);
1201 hNEvents[iCut]->Fill(eventQuality);
1203 hNGoodESDTracks[iCut]->Fill(fNumberOfESDTracks);
1205 if(fMCEvent){ // Process MC Particle
1209 fMCStack = fMCEvent->Stack();
1211 if(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetSignalRejection() != 0){
1212 ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetSignalRejection(),
1213 ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetAcceptedHeader(),
1217 ProcessMCParticles();
1220 ProcessPhotonCandidates(); // Process this cuts gammas
1221 ProcessElectronCandidates(); // Process this cuts gammas
1223 if(((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->UseMCPSmearing() && fMCEvent){
1225 fUnsmearedPx = new Double_t[fGoodGammas->GetEntries()]; // Store unsmeared Momenta
1226 fUnsmearedPy = new Double_t[fGoodGammas->GetEntries()];
1227 fUnsmearedPz = new Double_t[fGoodGammas->GetEntries()];
1228 fUnsmearedE = new Double_t[fGoodGammas->GetEntries()];
1230 for(Int_t gamma=0;gamma<fGoodGammas->GetEntries();gamma++){ // Smear the AODPhotons in MC
1232 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->Px();
1233 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->Py();
1234 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->Pz();
1235 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->E();
1236 ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGoodGammas->At(gamma)));
1242 CalculatePi0DalitzCandidates();
1243 CalculateBackground();
1244 UpdateEventByEventData();
1247 if(((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->UseMCPSmearing() && fMCEvent){
1249 for(Int_t gamma=0;gamma<fGoodGammas->GetEntries();gamma++){ // Smear the AODPhotons in MC
1250 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
1251 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetPy(fUnsmearedPy[gamma]);
1252 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetPz(fUnsmearedPz[gamma]);
1253 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetE(fUnsmearedE[gamma]);
1255 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
1256 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
1257 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
1258 delete[] fUnsmearedE; fUnsmearedE = 0x0;
1263 fGoodGammas->Clear(); // delete this cuts good gammas
1264 fGoodVirtualGammas->Clear(); // delete this cuts good gammas
1267 fSelectorElectronIndex.clear();
1268 fSelectorPositronIndex.clear();
1270 PostData( 1, fOutputContainer );
1273 Bool_t AliAnalysisTaskGammaConvDalitzV1::Notify()
1275 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
1278 if( !((AliConversionCuts*)fCutGammaArray->At(iCut))->GetDoEtaShift() ){
1280 /*if (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() != 0.){
1281 printf("Error: Gamma Conversion Dalitz Task %s :: Eta Shift not requested but set to %f, reset to 00. \n\n",
1282 (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift());
1283 ((AliConversionCuts*)fCutGammaArray->At(iCut))->SetEtaShift(0.);
1284 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift(0.);
1288 hEtaShift[iCut]->Fill(0.,0.);
1289 continue; // No Eta Shift requested, continue
1293 if( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
1294 ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
1295 ((AliConversionCuts*)fCutGammaArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1296 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() );
1297 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift()));
1301 printf(" Gamma Conversion Dalitz Task %s :: Eta Shift Manually Set to %f \n\n",
1302 (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift());
1303 ((AliConversionCuts*)fCutGammaArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1304 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() );
1305 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift()));
1313 void AliAnalysisTaskGammaConvDalitzV1::Terminate(const Option_t *)
1319 //________________________________________________________________________
1320 void AliAnalysisTaskGammaConvDalitzV1::ProcessPhotonCandidates()
1323 TList *GoodGammasStepOne = new TList();
1324 TList *GoodGammasStepTwo = new TList();
1325 // Loop over Photon Candidates allocated by ReaderV1
1327 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
1328 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
1329 if(!PhotonCandidate) continue;
1331 fIsFromMBHeader = kTRUE;
1333 if( fMCEvent && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0 ){
1335 Int_t isPosFromMBHeader
1336 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1337 if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
1339 Int_t isNegFromMBHeader
1340 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
1341 if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
1343 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1347 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fESDEvent)) continue;
1349 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut() &&
1350 !((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){ // if no post reader loop is required add to events good gammas
1352 fGoodGammas->Add(PhotonCandidate);
1354 if(fIsFromMBHeader){
1355 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1356 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1357 if( fDoMesonQA ) hESDConvGammaZR[fiCut]->Fill(PhotonCandidate->GetConversionZ(),PhotonCandidate->GetConversionRadius());
1361 ProcessTruePhotonCandidates(PhotonCandidate);
1364 else if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
1365 ((AliConversionCuts*)fCutGammaArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
1367 GoodGammasStepOne->Add(PhotonCandidate);
1369 else if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut() &&
1370 ((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
1371 GoodGammasStepTwo->Add(PhotonCandidate);
1376 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut()){
1377 for(Int_t i = 0;i<GoodGammasStepOne->GetEntries();i++){
1378 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GoodGammasStepOne->At(i);
1379 if(!PhotonCandidate) continue;
1382 fIsFromMBHeader = kTRUE;
1383 if(fMCEvent && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0){
1384 Int_t isPosFromMBHeader
1385 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack,fInputEvent);
1386 Int_t isNegFromMBHeader
1387 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
1388 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1392 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GoodGammasStepOne->GetEntries())) continue;
1393 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
1394 fGoodGammas->Add(PhotonCandidate);
1396 if(fIsFromMBHeader){
1397 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1398 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1399 if( fDoMesonQA )hESDConvGammaZR[fiCut]->Fill(PhotonCandidate->GetConversionZ(),PhotonCandidate->GetConversionRadius());
1403 ProcessTruePhotonCandidates(PhotonCandidate);
1406 else GoodGammasStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
1409 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){
1410 for(Int_t i = 0;i<GoodGammasStepTwo->GetEntries();i++){
1411 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GoodGammasStepTwo->At(i);
1412 if(!PhotonCandidate) continue;
1414 if(fMCEvent && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0){
1415 Int_t isPosFromMBHeader
1416 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack,fInputEvent);
1417 Int_t isNegFromMBHeader
1418 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
1419 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1422 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GoodGammasStepTwo,i)) continue;
1423 fGoodGammas->Add(PhotonCandidate); // Add gamma to current cut TList
1425 if(fIsFromMBHeader){
1426 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt()); // Differences to old V0Reader in p_t due to conversion KF->TLorentzVector
1427 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1428 if(fDoMesonQA)hESDConvGammaZR[fiCut]->Fill(PhotonCandidate->GetConversionZ(),PhotonCandidate->GetConversionRadius());
1432 ProcessTruePhotonCandidates(PhotonCandidate);
1437 delete GoodGammasStepOne;
1438 GoodGammasStepOne = 0x0;
1439 delete GoodGammasStepTwo;
1440 GoodGammasStepTwo = 0x0;
1443 //________________________________________________________________________
1444 void AliAnalysisTaskGammaConvDalitzV1::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1446 // Process True Photons
1447 AliStack *MCStack = fMCEvent->Stack();
1448 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(MCStack);
1449 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(MCStack);
1451 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1452 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){ // Not Same Mother == Combinatorial Bck
1456 else if (posDaughter->GetMother(0) == -1){
1460 if(TMath::Abs(posDaughter->GetPdgCode())!=11 || TMath::Abs(negDaughter->GetPdgCode())!=11) return; //One Particle is not electron
1461 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
1462 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
1464 TParticle *Photon = TruePhotonCandidate->GetMCParticle(MCStack);
1465 if(Photon->GetPdgCode() != 22) return; // Mother is no Photon
1469 Int_t labelGamma = TruePhotonCandidate->GetMCParticleLabel(MCStack);
1471 if( labelGamma < MCStack->GetNprimary() ){
1472 if( fIsFromMBHeader ){
1473 hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1477 if( fIsFromMBHeader){
1478 hESDTrueSecConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1482 if( IsPi0DalitzDaughter(labelGamma) == kTRUE ) {
1483 if( labelGamma < MCStack->GetNprimary() ) {
1484 if( fIsFromMBHeader ){
1485 hESDTruePi0DalitzConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1489 if( fIsFromMBHeader ) {
1490 hESDTruePi0DalitzSecConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1498 //________________________________________________________________________
1499 void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
1501 Double_t magField = fInputEvent->GetMagneticField();
1504 if( magField < 0.0 ){
1512 vector<Int_t> lGoodElectronIndexPrev(0);
1513 vector<Int_t> lGoodPositronIndexPrev(0);
1518 for(UInt_t i = 0; i < fSelectorElectronIndex.size(); i++){
1520 AliESDtrack* electronCandidate = fESDEvent->GetTrack(fSelectorElectronIndex[i]);
1524 Int_t labelelectron = TMath::Abs( electronCandidate->GetLabel() );
1525 Int_t isMCFromMBHeader = -1;
1526 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0) {
1528 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(labelelectron,fMCStack,fInputEvent);
1529 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
1533 if(! ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelected(electronCandidate) ) continue;
1535 lGoodElectronIndexPrev.push_back( fSelectorElectronIndex[i] );
1536 hESDDalitzElectronPt[fiCut]->Fill(electronCandidate->Pt());
1537 hESDDalitzElectronPhi[fiCut]->Fill(electronCandidate->Phi());
1542 Int_t labelelectron = TMath::Abs( electronCandidate->GetLabel() );
1543 if( labelelectron < fMCStack->GetNtrack() ){
1544 TParticle* electron = fMCStack->Particle(labelelectron);
1545 if( electron->GetPdgCode() == 11 ){
1546 if( labelelectron < fMCStack->GetNprimary() ){
1547 hESDTrueElectronPt[fiCut]->Fill(electronCandidate->Pt()); //primary electron
1550 hESDTrueSecElectronPt[fiCut]->Fill(electronCandidate->Pt()); //secondary electron
1552 if( IsPi0DalitzDaughter(labelelectron) == kTRUE ) {
1553 if( labelelectron < fMCStack->GetNprimary() ) {
1554 hESDTruePi0DalitzElectronPt[fiCut]->Fill(electronCandidate->Pt());
1557 hESDTruePi0DalitzSecElectronPt[fiCut]->Fill(electronCandidate->Pt());
1567 for(UInt_t i = 0; i < fSelectorPositronIndex.size(); i++){
1569 AliESDtrack* positronCandidate = fESDEvent->GetTrack( fSelectorPositronIndex[i] );
1573 Int_t labelpositron = TMath::Abs( positronCandidate->GetLabel() );
1574 Int_t isMCFromMBHeader = -1;
1576 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0) {
1578 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(labelpositron,fMCStack,fInputEvent);
1579 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
1586 if(! ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelected(positronCandidate) ) continue;
1588 lGoodPositronIndexPrev.push_back( fSelectorPositronIndex[i] );
1589 hESDDalitzPositronPt[fiCut]->Fill( positronCandidate->Pt() );
1590 hESDDalitzPositronPhi[fiCut]->Fill( positronCandidate->Phi() );
1595 Int_t labelpositron = TMath::Abs( positronCandidate->GetLabel() );
1597 if( labelpositron < fMCStack->GetNtrack() ) {
1598 TParticle* positron = fMCStack->Particle(labelpositron);
1599 if( positron->GetPdgCode() == -11 ){
1600 if( labelpositron < fMCStack->GetNprimary() ){
1601 hESDTruePositronPt[fiCut]->Fill(positronCandidate->Pt());
1604 hESDTrueSecPositronPt[fiCut]->Fill(positronCandidate->Pt());
1606 if( IsPi0DalitzDaughter(labelpositron) == kTRUE ) {
1607 if( labelpositron < fMCStack->GetNprimary() ){
1608 hESDTruePi0DalitzPositronPt[fiCut]->Fill(positronCandidate->Pt());
1611 hESDTruePi0DalitzSecPositronPt[fiCut]->Fill(positronCandidate->Pt());
1620 vector<Bool_t> lElectronPsiIndex(lGoodElectronIndexPrev.size(), kTRUE);
1621 vector<Bool_t> lPositronPsiIndex(lGoodPositronIndexPrev.size(), kTRUE);
1624 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->DoPsiPairCut() == kTRUE ){
1626 for( UInt_t i = 0; i < lGoodElectronIndexPrev.size(); i++ ) {
1628 AliESDtrack *electronCandidate = fESDEvent->GetTrack(lGoodElectronIndexPrev[i]);
1630 for(UInt_t j = 0; j < lGoodPositronIndexPrev.size(); j++){
1631 AliESDtrack *positronCandidate = fESDEvent->GetTrack(lGoodPositronIndexPrev[j]);
1632 Double_t psiPair = GetPsiPair(positronCandidate,electronCandidate);
1633 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->GetConstrainedParam()->Phi()-positronCandidate->GetConstrainedParam()->Phi());
1635 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->IsFromGammaConversion(psiPair,deltaPhi ) ){
1636 lElectronPsiIndex[i] = kFALSE;
1637 lPositronPsiIndex[j] = kFALSE;
1644 vector<Int_t> lGoodElectronIndex(0);
1645 vector<Int_t> lGoodPositronIndex(0);
1648 for( UInt_t i = 0; i < lGoodElectronIndexPrev.size(); i++ ) {
1650 if( lElectronPsiIndex[i] == kTRUE )
1651 lGoodElectronIndex.push_back( lGoodElectronIndexPrev[i] );
1654 for( UInt_t i = 0; i < lGoodPositronIndexPrev.size(); i++ ) {
1656 if( lPositronPsiIndex[i] == kTRUE )
1657 lGoodPositronIndex.push_back( lGoodPositronIndexPrev[i] );
1664 for(UInt_t i = 0; i < lGoodElectronIndex.size(); i++){
1666 //if( lElectronPsiIndex[i] == kFALSE ) continue;
1669 AliESDtrack *electronCandidate = fESDEvent->GetTrack(lGoodElectronIndex[i]);
1671 AliKFParticle electronCandidateKF( *electronCandidate->GetConstrainedParam(), ::kElectron );
1673 for(UInt_t j = 0; j < lGoodPositronIndex.size(); j++){
1675 //if( lPositronPsiIndex[j] == kFALSE ) continue;
1677 AliESDtrack *positronCandidate = fESDEvent->GetTrack(lGoodPositronIndex[j]);
1678 AliKFParticle positronCandidateKF( *positronCandidate->GetConstrainedParam(), ::kPositron );
1679 Bool_t isPhoton = kFALSE;
1680 Bool_t isPi0Dalitz = kFALSE;
1681 Bool_t isEtaDalitz = kFALSE;
1682 Bool_t isJPsi = kFALSE;
1683 Bool_t isTrueEposENeg = kFALSE;
1685 Double_t psiPair = GetPsiPair(positronCandidate,electronCandidate);
1686 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->GetConstrainedParam()->Phi()-positronCandidate->GetConstrainedParam()->Phi());
1689 AliKFConversionPhoton* virtualPhoton = NULL;
1690 virtualPhoton = new AliKFConversionPhoton(electronCandidateKF,positronCandidateKF);
1693 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
1694 primaryVertexImproved+=*virtualPhoton;
1695 virtualPhoton->SetProductionVertex(primaryVertexImproved);
1697 virtualPhoton->SetTrackLabels( lGoodPositronIndex[j], lGoodElectronIndex[i]);
1702 Int_t labeln=TMath::Abs(electronCandidate->GetLabel());
1703 Int_t labelp=TMath::Abs(positronCandidate->GetLabel());
1704 TParticle *fNegativeMCParticle = fMCStack->Particle(labeln);
1705 TParticle *fPositiveMCParticle = fMCStack->Particle(labelp);
1707 if( fPositiveMCParticle && fNegativeMCParticle) {
1708 virtualPhoton->SetMCLabelPositive(labelp);
1709 virtualPhoton->SetMCLabelNegative(labeln);
1711 if( fPositiveMCParticle->GetPdgCode() == ::kPositron && fNegativeMCParticle->GetPdgCode() == ::kElectron ) isTrueEposENeg = kTRUE;
1719 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton); //To Apply PsiPairCut
1725 TParticle *mcVgamma=virtualPhoton->GetMCParticle(fMCStack);
1728 // Check if it is a true photon
1729 if(mcVgamma->GetPdgCode() == 22){
1731 }else if(mcVgamma->GetPdgCode() == 443){
1734 else if( IsDalitz( mcVgamma ) ){
1735 if ( mcVgamma->GetPdgCode() == 111 ) isPi0Dalitz = kTRUE;
1736 else if( mcVgamma->GetPdgCode() == 221 ) isEtaDalitz = kTRUE;
1741 hESDEposEnegTruePhotonInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1742 hESDEposEnegTruePhotonPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1745 hESDEposEnegTrueJPsiInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1747 else if(isPi0Dalitz){
1748 hESDEposEnegTruePi0DalitzInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1749 hESDEposEnegTruePi0DalitzPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1751 else if(isEtaDalitz){
1752 hESDEposEnegTrueEtaDalitzInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1753 hESDEposEnegTrueEtaDalitzPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1756 if( isTrueEposENeg ) hESDEposEnegTrueInvMassPt[fiCut]->Fill(vphoton->GetMass(), vphoton->Pt());
1765 hESDEposEnegPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1766 hESDEposEnegInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1770 if( ! fDoChicAnalysis ) {
1772 if ( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
1774 Double_t MassCutMax = 1000.0;
1775 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutLowPt() >= ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutHighPt() ){
1776 MassCutMax = ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutLowPt();
1779 MassCutMax = ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutHighPt();
1782 Bool_t DoMassMinCut = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->DoMassMinCut();
1783 Double_t MassMinCut = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetMassMinCut();
1785 if( vphoton->GetMass() > MassCutMax || ( DoMassMinCut && vphoton->GetMass() < MassMinCut ) ) {
1790 delete virtualPhoton;
1791 virtualPhoton = 0x0;
1800 fGoodVirtualGammas->Add( vphoton );
1801 delete virtualPhoton;
1808 //Computing mixing event
1812 for(UInt_t i = 0; i < lGoodElectronIndex.size(); i++){
1814 //if( lElectronPsiIndex[i] == kFALSE ) continue;
1816 AliESDtrack *electronCandidate1 = fESDEvent->GetTrack(lGoodElectronIndex[i]);
1818 AliKFParticle electronCandidate1KF( *electronCandidate1->GetConstrainedParam(), ::kElectron );
1821 for(UInt_t j = i+1; j < lGoodElectronIndex.size(); j++){
1823 //if( lElectronPsiIndex[j] == kFALSE ) continue;
1826 AliESDtrack *electronCandidate2 = fESDEvent->GetTrack(lGoodElectronIndex[j]);
1828 AliKFParticle electronCandidate2KF( *electronCandidate2->GetConstrainedParam(), ::kElectron );
1830 AliKFConversionPhoton* virtualPhoton = new AliKFConversionPhoton(electronCandidate1KF,electronCandidate2KF);
1832 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
1833 primaryVertexImproved+=*virtualPhoton;
1834 virtualPhoton->SetProductionVertex(primaryVertexImproved);
1837 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton);
1838 hESDEposEnegLikeSignBackInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1840 delete virtualPhoton;
1842 virtualPhoton = 0x0;
1848 for(UInt_t i = 0; i < lGoodPositronIndex.size(); i++){
1852 //if( lPositronPsiIndex[i] == kFALSE ) continue;
1854 AliESDtrack *positronCandidate1 = fESDEvent->GetTrack(lGoodPositronIndex[i]);
1856 AliKFParticle positronCandidate1KF( *positronCandidate1->GetConstrainedParam(), ::kPositron );
1859 for(UInt_t j = i+1; j < lGoodPositronIndex.size(); j++){
1861 // if( lPositronPsiIndex[j] == kFALSE ) continue;
1863 AliESDtrack *positronCandidate2 = fESDEvent->GetTrack(lGoodPositronIndex[j]);
1865 AliKFParticle positronCandidate2KF( *positronCandidate2->GetConstrainedParam(), ::kPositron );
1867 AliKFConversionPhoton* virtualPhoton = new AliKFConversionPhoton(positronCandidate1KF,positronCandidate2KF);
1868 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
1869 primaryVertexImproved+=*virtualPhoton;
1870 virtualPhoton->SetProductionVertex(primaryVertexImproved);
1872 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton);
1873 hESDEposEnegLikeSignBackInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1877 delete virtualPhoton;
1879 virtualPhoton = 0x0;
1887 //________________________________________________________________________
1888 void AliAnalysisTaskGammaConvDalitzV1::CalculatePi0DalitzCandidates(){
1890 // Conversion Gammas
1895 if( fGoodGammas->GetEntries() > 0 && fGoodVirtualGammas->GetEntries() > 0 ){
1897 vector<Bool_t> lGoodVirtualGamma(fGoodVirtualGammas->GetEntries(), kFALSE);
1899 for(Int_t GammaIndex=0; GammaIndex<fGoodGammas->GetEntries(); GammaIndex++){
1901 AliAODConversionPhoton *gamma=dynamic_cast<AliAODConversionPhoton*>(fGoodGammas->At(GammaIndex));
1902 if (gamma==NULL) continue;
1903 for(Int_t virtualGammaIndex=0;virtualGammaIndex<fGoodVirtualGammas->GetEntries();virtualGammaIndex++){
1905 AliAODConversionPhoton *Vgamma=dynamic_cast<AliAODConversionPhoton*>(fGoodVirtualGammas->At(virtualGammaIndex));
1906 if (Vgamma==NULL) continue;
1907 //Check for same Electron ID
1908 if(gamma->GetTrackLabelPositive() == Vgamma->GetTrackLabelPositive() ||
1909 gamma->GetTrackLabelNegative() == Vgamma->GetTrackLabelNegative() ||
1910 gamma->GetTrackLabelNegative() == Vgamma->GetTrackLabelPositive() ||
1911 gamma->GetTrackLabelPositive() == Vgamma->GetTrackLabelNegative() ) continue;
1913 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma,Vgamma);
1914 pi0cand->SetLabels(GammaIndex,virtualGammaIndex);
1917 if( ( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift())) ){
1919 //cout<< "Meson Accepted "<<endl;
1921 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fESDEvent->GetPrimaryVertex()->GetZ());
1923 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity() ){
1924 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1926 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGoodGammas->GetEntries());
1931 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
1934 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( pi0cand->Pt() , Vgamma->GetMass() ) == kTRUE ){
1936 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
1938 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
1939 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
1944 hESDMotherPhi[fiCut]->Fill(pi0cand->Phi());
1946 if( lGoodVirtualGamma[virtualGammaIndex] == kFALSE ) {
1948 FillElectronQAHistos(Vgamma);
1950 lGoodVirtualGamma[virtualGammaIndex] = kTRUE;
1956 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
1957 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
1958 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
1963 hESDMotherPhi[fiCut]->Fill(pi0cand->Phi());
1965 if( lGoodVirtualGamma[virtualGammaIndex] == kFALSE ) {
1967 FillElectronQAHistos(Vgamma);
1969 lGoodVirtualGamma[virtualGammaIndex] = kTRUE;
1975 if( fDoChicAnalysis) {
1977 hESDPi0MotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
1979 Double_t diffMass = pi0cand->M() - Vgamma->GetMass();
1981 hESDPi0MotherDiffInvMassPt[fiCut]->Fill( diffMass , pi0cand->Pt() );
1983 if( Vgamma->GetMass() > 2.5 && Vgamma->GetMass() < 3.4){
1984 hESDPi0MotherDiffLimInvMassPt[fiCut]->Fill( diffMass , pi0cand->Pt() );
1989 ProcessTrueMesonCandidates(pi0cand,gamma,Vgamma);
1999 //________________________________________________________________________
2000 void AliAnalysisTaskGammaConvDalitzV1::CalculateBackground(){
2002 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fESDEvent->GetPrimaryVertex()->GetZ());
2007 method = ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetBKGMethod();
2010 if(((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity()){
2011 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
2013 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGoodGammas->GetEntries());
2016 if( method == 1 || method == 2 ) {
2018 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
2020 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity() ) {
2022 for(Int_t nEventsInBG=0;nEventsInBG<fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2024 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2026 if(fMoveParticleAccordingToVertex == kTRUE && method == 1){
2027 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2030 for(Int_t iCurrent=0;iCurrent<fGoodVirtualGammas->GetEntries();iCurrent++){
2031 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualGammas->At(iCurrent));
2033 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2034 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2036 if(fMoveParticleAccordingToVertex == kTRUE && method == 1 ){
2037 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2040 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2043 if( ( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE, ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
2044 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
2046 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.GetMass() ) == kTRUE ){
2048 // cout<<" Mass dalitz: "<<currentEventGoodV0.GetMass()<<endl;
2049 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2050 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2051 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2055 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2056 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2057 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2060 delete backgroundCandidate;
2061 backgroundCandidate = 0x0;
2067 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2068 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2069 if(previousEventV0s){
2070 if(fMoveParticleAccordingToVertex == kTRUE && method == 1){
2071 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2073 for(Int_t iCurrent=0;iCurrent<fGoodVirtualGammas->GetEntries();iCurrent++){
2075 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualGammas->At(iCurrent));
2077 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2079 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2081 if(fMoveParticleAccordingToVertex == kTRUE && method ==1){
2082 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2085 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2087 if((((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
2089 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
2091 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.GetMass() ) == kTRUE ){
2094 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2095 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2096 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2100 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2101 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2102 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2105 delete backgroundCandidate;
2106 backgroundCandidate = 0x0;
2114 else if( method == 3 ){
2116 for(Int_t iCurrent=0;iCurrent<fGoodVirtualGammas->GetEntries();iCurrent++){
2118 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualGammas->At(iCurrent));
2120 for(Int_t iPrevious=0;iPrevious<fGammasPool[fiCut]->GetEntries();iPrevious++){
2122 AliAODConversionPhoton previousGoodV0 = *(AliAODConversionPhoton*)((fGammasPool[fiCut]->At(iPrevious) ));
2125 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2128 if((((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE, ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
2130 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
2132 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.GetMass() ) == kTRUE ){
2135 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2136 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2137 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2143 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2144 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2145 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2149 delete backgroundCandidate;
2150 backgroundCandidate = 0x0;
2156 //________________________________________________________________________
2157 void AliAnalysisTaskGammaConvDalitzV1::UpdateEventByEventData(){
2158 //see header file for documentation
2162 method = ( (AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetBKGMethod();
2169 if(fGoodGammas->GetEntries() > 0 ){
2171 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity() ){
2172 fBGHandler[fiCut]->AddEvent(fGoodGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fNumberOfESDTracks);
2175 else{ // means we use #V0s for multiplicity
2176 fBGHandler[fiCut]->AddEvent(fGoodGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fGoodGammas->GetEntries());
2181 else if ( method == 2 ){
2183 if(fGoodVirtualGammas->GetEntries() > 0 ){
2184 if(((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity()){
2185 fBGHandler[fiCut]->AddEvent(fGoodVirtualGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fNumberOfESDTracks);
2187 else{ // means we use #V0s for multiplicity
2188 fBGHandler[fiCut]->AddEvent(fGoodVirtualGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fGoodVirtualGammas->GetEntries());
2192 else if ( method == 3 ) {
2196 for(Int_t index = 0; index < fGoodGammas->GetEntries(); index++){
2199 if ( fGammasPool[fiCut]->GetEntries() > ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->NumberOfRotationEvents() ){
2200 fGammasPool[fiCut]->RemoveLast();
2202 fGammasPool[fiCut]->AddFirst( new AliAODConversionPhoton(*(AliAODConversionPhoton*)(fGoodGammas->At(index)) ) );
2207 //______________________________________________________________________
2208 void AliAnalysisTaskGammaConvDalitzV1::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate, AliAODConversionPhoton *TrueVirtualGammaCandidate)
2211 // Process True Mesons
2213 AliStack *MCStack = fMCEvent->Stack();
2215 if( TrueGammaCandidate->GetV0Index()<fESDEvent->GetNumberOfV0s() ){
2218 //cout<<"Entro True Meson"<<endl;
2221 Bool_t isTruePi0 = kFALSE;
2222 Bool_t isTrueEta = kFALSE;
2223 Bool_t massCutAccept = kFALSE;
2224 //Bool_t isTrueChiC = kFALSE;
2225 Int_t gammaMCLabel = TrueGammaCandidate->GetMCParticleLabel(MCStack);
2226 Int_t gammaMotherLabel = -1;
2229 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
2231 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( Pi0Candidate->Pt() , TrueVirtualGammaCandidate->GetMass() ) == kTRUE ){
2233 massCutAccept = kTRUE;
2237 massCutAccept = kTRUE;
2244 if(gammaMCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2247 // Daughters Gamma 0
2248 TParticle * negativeMC = (TParticle*)TrueGammaCandidate->GetNegativeMCDaughter(MCStack);
2249 TParticle * positiveMC = (TParticle*)TrueGammaCandidate->GetPositiveMCDaughter(MCStack);
2250 TParticle * gammaMC = (TParticle*)MCStack->Particle(gammaMCLabel);
2253 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2255 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
2257 if(gammaMC->GetPdgCode() == 22){ // ... with Gamma Mother
2258 gammaMotherLabel=gammaMC->GetFirstMother();
2265 Int_t virtualGammaMCLabel = TrueVirtualGammaCandidate->GetMCParticleLabel(MCStack);
2266 Int_t virtualGammaMotherLabel = -1;
2267 Int_t virtualGamma = 1;
2268 Int_t virtualGammaGrandMotherLabel =-1;
2271 if(virtualGammaMCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2272 // Daughters Gamma 1
2273 TParticle * negativeMC = (TParticle*)TrueVirtualGammaCandidate->GetNegativeMCDaughter(MCStack);
2274 TParticle * positiveMC = (TParticle*)TrueVirtualGammaCandidate->GetPositiveMCDaughter(MCStack);
2275 TParticle * virtualGammaMotherMC = (TParticle*)MCStack->Particle(virtualGammaMCLabel);
2277 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2279 if( virtualGammaMotherMC->GetPdgCode() != 22 ){
2280 virtualGammaMotherLabel=virtualGammaMCLabel;
2281 if(virtualGammaMotherMC->GetPdgCode() == 443){
2282 virtualGammaGrandMotherLabel=virtualGammaMotherMC->GetFirstMother();
2286 else if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
2287 virtualGammaMotherLabel=virtualGammaMotherMC->GetFirstMother();
2288 virtualGamma = 0; //no virtual gamma
2294 if(gammaMotherLabel >= 0 && ( gammaMotherLabel == virtualGammaMotherLabel) ){
2296 if(((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->GetPdgCode() == 111){
2300 if(((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->GetPdgCode() == 221){
2307 if( fDoChicAnalysis) {
2308 if(gammaMotherLabel>=0 && ( gammaMotherLabel == virtualGammaGrandMotherLabel) ){
2309 if(((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 445 ||
2310 ((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 10443 ||
2311 ((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 20443 ){
2313 hESDTrueMotherChiCInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2314 hESDTrueMotherChiCDiffInvMassPt[fiCut]->Fill(Pi0Candidate->M()-TrueVirtualGammaCandidate->GetMass(),Pi0Candidate->Pt());
2319 if( ( isTruePi0 || isTrueEta) && massCutAccept ){ // True Pion or Eta
2321 if ( virtualGamma == 1 ) { //True Dalitz
2323 Float_t weighted= 1;
2325 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2326 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
2327 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
2328 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
2333 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2334 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill( TrueVirtualGammaCandidate->GetMass(),Pi0Candidate->Pt(),weighted);
2336 if(gammaMotherLabel < MCStack->GetNprimary()){ // Only primary pi0 for efficiency calculation
2339 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill( Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2340 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill( Pi0Candidate->M(), Pi0Candidate->Pt() );
2342 hESDTruePrimaryMotherInvMassMCPt[fiCut]->Fill(Pi0Candidate->M(),((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->Pt(),weighted);
2343 if(isTruePi0){ // Only primaries for unfolding
2344 hESDTruePrimaryPi0DalitzESDPtMCPt[fiCut]->Fill(Pi0Candidate->Pt(),((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->Pt(),weighted);
2347 else { // Secondary Meson
2348 Float_t weightedSec= 1;
2350 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2351 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetMother(0);
2352 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(gammaMotherLabel)->GetPdgCode()==310){
2353 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
2357 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2362 else if ( virtualGamma == 0 ){
2364 Float_t weighted= 1;
2366 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2367 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
2368 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
2369 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
2374 hESDTrueMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted); // Pi0 from GG
2376 if( gammaMotherLabel < MCStack->GetNprimary() ){
2377 hESDTruePrimaryMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2381 Float_t weightedSec= 1;
2383 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2384 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetMother(0);
2385 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(gammaMotherLabel)->GetPdgCode()==310){
2386 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
2389 hESDTrueSecondaryMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2394 if(!isTruePi0 && !isTrueEta && massCutAccept ){ // Background
2395 if(gammaMotherLabel>-1 && virtualGammaMotherLabel>-1 && virtualGamma == 0){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2396 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2397 } else { // No photon or without mother
2398 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2405 //________________________________________________________________________
2406 void AliAnalysisTaskGammaConvDalitzV1::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
2407 //see header file for documentation
2409 Double_t dx = vertex->fX - fESDEvent->GetPrimaryVertex()->GetX();
2410 Double_t dy = vertex->fY - fESDEvent->GetPrimaryVertex()->GetY();
2411 Double_t dz = vertex->fZ - fESDEvent->GetPrimaryVertex()->GetZ();
2413 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
2414 particle->SetConversionPoint(movedPlace);
2418 //________________________________________________________________________
2419 void AliAnalysisTaskGammaConvDalitzV1::CountESDTracks(){
2421 // Using standard function for setting Cuts
2422 Bool_t selectPrimaries=kTRUE;
2423 AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
2424 EsdTrackCuts->SetMaxDCAToVertexZ(2);
2425 EsdTrackCuts->SetEtaRange(-0.8, 0.8);
2426 EsdTrackCuts->SetPtRange(0.15);
2428 fNumberOfESDTracks = 0;
2429 for(Int_t iTracks = 0; iTracks < fESDEvent->GetNumberOfTracks(); iTracks++){
2430 AliESDtrack* curTrack = fESDEvent->GetTrack(iTracks);
2431 if(!curTrack) continue;
2432 if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
2434 delete EsdTrackCuts;
2440 //_____________________________________________________________________________
2441 void AliAnalysisTaskGammaConvDalitzV1::ProcessMCParticles()
2444 // Loop over all primary MC particle
2446 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
2449 TParticle* particle = (TParticle *)fMCStack->Particle(i);
2450 if (!particle) continue;
2453 Bool_t mcIsFromMB = kTRUE;
2454 Int_t isMCFromMBHeader = -1;
2456 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0) {
2458 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i,fMCStack,fInputEvent);
2459 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
2460 if(isMCFromMBHeader != 2) mcIsFromMB = kFALSE;
2463 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
2464 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
2467 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
2468 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
2470 hMCConvGammaRSPt[fiCut]->Fill(particle->Pt());
2472 } // Converted MC Gamma
2474 if(((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(i,fMCStack)){
2475 if( particle->GetPdgCode() == -11)hMCAllPositronsPt[fiCut]->Fill(particle->Pt()); // All positrons
2476 if( particle->GetPdgCode() == 11)hMCAllElectronsPt[fiCut]->Fill(particle->Pt()); // All electrons
2479 if(((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMC( particle,fMCStack,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift() ) ){
2481 Float_t weighted= 1;
2483 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2484 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2485 if (particle->Pt()>0.005){
2486 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
2491 if(particle->GetPdgCode() == 111)hMCPi0GGPt[fiCut]->Fill( particle->Pt() , weighted); // All MC Pi0 GG decay
2492 if(particle->GetPdgCode() == 221)hMCEtaGGPt[fiCut]->Fill( particle->Pt() , weighted); // All MC Eta GG decay
2496 Int_t labelgamma = -1;
2497 Int_t labelelectron = -1;
2498 Int_t labelpositron = -1;
2501 if( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMCDalitz(particle,fMCStack,labelelectron,labelpositron,labelgamma,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()) )
2505 Float_t weighted= 1;
2506 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2507 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack,fInputEvent)){
2508 if (particle->Pt()>0.005){
2509 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
2513 if(particle->GetPdgCode() == 111)hMCPi0Pt[fiCut]->Fill(particle->Pt(), weighted); // All MC Pi0
2514 if(particle->GetPdgCode() == 221)hMCEtaPt[fiCut]->Fill(particle->Pt(), weighted); // All MC Eta
2516 // Check the acceptance for gamma and electrons
2519 TParticle *gamma = fMCStack->Particle(labelgamma);
2520 TParticle *electron = fMCStack->Particle(labelelectron);
2521 TParticle *positron = fMCStack->Particle(labelpositron);
2524 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC(gamma,fMCStack,kFALSE) &&
2525 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelelectron,fMCStack) &&
2526 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelpositron,fMCStack) ) {
2528 Double_t massDalitz = -1;
2532 TLorentzVector TLVEpos,TLVEneg,TLVDalitz;
2533 Double_t electronMass = TDatabasePDG::Instance()->GetParticle( ::kElectron )->Mass();
2535 TLVEpos.SetXYZM(positron->Px(),positron->Py(),positron->Pz(),electronMass);
2536 TLVEneg.SetXYZM(electron->Px(),electron->Py(),electron->Pz(),electronMass);
2537 TLVDalitz = TLVEpos + TLVEneg ;
2538 massDalitz = TLVDalitz.M();
2544 if(particle->GetPdgCode() == 111){
2546 hMCPi0InAccPt[fiCut]->Fill(particle->Pt() , weighted); // MC Pi0Dalitz with gamma and e+e- in acc
2547 hMCPi0DalitzGammaPt[fiCut]->Fill( gamma->Pt() ,weighted );
2548 hMCPi0DalitzPositronPt[fiCut]->Fill( positron->Pt(),weighted );
2549 hMCPi0DalitzElectronPt[fiCut]->Fill( electron->Pt(),weighted );
2551 if ( fDoMesonQA )hMCPi0EposEnegInvMassPt[fiCut]->Fill(massDalitz,particle->Pt());
2555 if(particle->GetPdgCode() == 221){
2556 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(), weighted ); // MC EtaDalitz with gamma and e+e- in acc
2557 if( fDoMesonQA) hMCEtaEposEnegInvMassPt[fiCut]->Fill( massDalitz, particle->Pt());
2563 Int_t labelgammaChiC=-1;
2564 Int_t labelpositronChiC=-1;
2565 Int_t labelelectronChiC=-1;
2567 if(((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMCChiC(particle,fMCStack,labelelectronChiC,labelpositronChiC,labelgammaChiC,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift())){
2569 hMCChiCPt[fiCut]->Fill(particle->Pt()); // All MC ChiC
2570 TParticle * gammaChiC =fMCStack->Particle(labelgammaChiC);
2572 if( ((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC( gammaChiC,fMCStack,kFALSE) &&
2573 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelelectronChiC,fMCStack) &&
2574 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelpositronChiC,fMCStack) ){
2575 hMCChiCInAccPt[fiCut]->Fill(particle->Pt()); // All MC ChiC
2580 //_____________________________________________________________________________
2581 Bool_t AliAnalysisTaskGammaConvDalitzV1::IsDalitz(TParticle *fMCMother) const
2584 if( fMCMother->GetNDaughters() != 3 ) return kFALSE;
2585 if( fMCMother->GetPdgCode() != 111 && fMCMother->GetPdgCode() != 221 ) return kFALSE;
2588 TParticle *positron = 0x0;
2589 TParticle *electron = 0x0;
2590 TParticle *gamma = 0x0;
2592 for(Int_t index= fMCMother->GetFirstDaughter();index<= fMCMother->GetLastDaughter();index++){
2594 TParticle* temp = (TParticle*)fMCStack->Particle( index );
2596 switch( temp->GetPdgCode() ) {
2609 if( positron && electron && gamma) return kTRUE;
2613 //_____________________________________________________________________________________
2614 Bool_t AliAnalysisTaskGammaConvDalitzV1::IsPi0DalitzDaughter( Int_t label ) const
2617 // Returns true if the particle comes from Pi0 -> e+ e- gamma
2620 Int_t motherLabel = fMCStack->Particle( label )->GetMother(0);
2622 if( motherLabel < 0 || motherLabel >= fMCStack->GetNtrack() ) return kFALSE;
2624 TParticle* mother = fMCStack->Particle( motherLabel );
2626 if( mother->GetPdgCode() != 111 ) return kFALSE;
2628 if( IsDalitz( mother ) ) return kTRUE;
2636 void AliAnalysisTaskGammaConvDalitzV1::FillElectronQAHistos(AliAODConversionPhoton *Vgamma) const
2640 AliESDtrack *positronVgamma = 0;
2641 AliESDtrack *electronVgamma = 0;
2643 Double_t clsToFPos = -1.0;
2644 Double_t clsToFNeg = -1.0;
2647 Double_t NumClsITSPos = -1.0;
2648 Double_t NumClsITSNeg = -1.0;
2649 Double_t NumClsTPCPos = -1.0;
2650 Double_t NumClsTPCNeg = -1.0;
2651 Double_t nCrossedRowsTPCPos = -1.0;
2652 Double_t nCrossedRowsTPCNeg = -1.0;
2656 Float_t dcaToVertexXYPos = -1.0;
2657 Float_t dcaToVertexZPos = -1.0;
2658 Float_t dcaToVertexXYNeg = -1.0;
2659 Float_t dcaToVertexZNeg = -1.0;
2661 Double_t nSigmaPosTPC = -999.;
2662 Double_t nSigmaNegTPC = -999.;
2664 positronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelPositive() );
2665 electronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelNegative() );
2666 clsToFPos = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetNFindableClustersTPC(positronVgamma);
2667 clsToFNeg = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetNFindableClustersTPC(electronVgamma);
2669 nSigmaPosTPC = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(positronVgamma, AliPID::kElectron) ;
2670 nSigmaNegTPC = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(electronVgamma, AliPID::kElectron) ;
2674 NumClsITSPos = positronVgamma->GetNcls(0); //Get number of ITS clusters
2675 NumClsITSNeg = electronVgamma->GetNcls(0);
2676 NumClsTPCPos = positronVgamma->GetNcls(1); //Get number of TPC clusters
2677 NumClsTPCNeg = electronVgamma->GetNcls(1);
2679 nCrossedRowsTPCPos = positronVgamma->GetTPCCrossedRows();
2680 nCrossedRowsTPCNeg = electronVgamma->GetTPCCrossedRows();
2686 positronVgamma->GetImpactParameters(bPos,bCovPos);
2688 if (bCovPos[0]<=0 || bCovPos[2]<=0) {
2689 AliDebug(1, "Estimated b resolution lower or equal zero!");
2690 bCovPos[0]=0; bCovPos[2]=0;
2695 positronVgamma->GetImpactParameters(bNeg,bCovNeg);
2697 if (bCovNeg[0]<=0 || bCovNeg[2]<=0) {
2698 AliDebug(1, "Estimated b resolution lower or equal zero!");
2699 bCovNeg[0]=0; bCovNeg[2]=0;
2702 dcaToVertexXYPos = bPos[0];
2703 dcaToVertexZPos = bPos[1];
2704 dcaToVertexXYNeg = bNeg[0];
2705 dcaToVertexZNeg = bNeg[1];
2707 hESDDalitzElectronAfterPt[fiCut]->Fill( electronVgamma->Pt() );
2708 hESDDalitzPositronAfterPt[fiCut]->Fill( positronVgamma->Pt() );
2710 hESDDalitzElectronAfterEta[fiCut]->Fill( electronVgamma->Eta() );
2711 hESDDalitzPositronAfterEta[fiCut]->Fill( positronVgamma->Eta() );
2713 hESDDalitzElectronAfterPhi[fiCut]->Fill( electronVgamma->Phi() );
2714 hESDDalitzPositronAfterPhi[fiCut]->Fill( positronVgamma->Phi() );
2716 hESDDalitzElectronAfterNFindClsTPC[fiCut]->Fill(clsToFNeg,electronVgamma->Pt());
2717 hESDDalitzPositronAfterNFindClsTPC[fiCut]->Fill(clsToFPos,positronVgamma->Pt());
2719 hESDDalitzElectronAfterNClsTPC[fiCut]->Fill( NumClsTPCNeg,electronVgamma->Pt());
2720 hESDDalitzPositronAfterNClsTPC[fiCut]->Fill( NumClsTPCPos,positronVgamma->Pt());
2722 hESDDalitzElectronAfterNCrossedRowsTPC[fiCut]->Fill( nCrossedRowsTPCNeg, electronVgamma->Pt() );
2723 hESDDalitzPositronAfterNCrossedRowsTPC[fiCut]->Fill( nCrossedRowsTPCPos, positronVgamma->Pt() );
2725 hESDDalitzElectronAfterNClsITS[fiCut]->Fill( NumClsITSNeg);
2726 hESDDalitzPositronAfterNClsITS[fiCut]->Fill( NumClsITSPos);
2728 hESDDalitzPosEleAfterDCAxy[fiCut]->Fill( dcaToVertexXYNeg, electronVgamma->Pt() );
2729 hESDDalitzPosEleAfterDCAz[fiCut]->Fill( dcaToVertexZNeg, electronVgamma->Pt() );
2730 hESDDalitzPosEleAfterDCAxy[fiCut]->Fill( dcaToVertexXYPos, positronVgamma->Pt() );
2731 hESDDalitzPosEleAfterDCAz[fiCut]->Fill( dcaToVertexZPos, positronVgamma->Pt() );
2733 hESDDalitzElectronAfterTPCdEdxVsP[fiCut]->Fill( electronVgamma->P(),nSigmaNegTPC);
2734 hESDDalitzPositronAfterTPCdEdxVsP[fiCut]->Fill( positronVgamma->P(), nSigmaPosTPC);
2736 hESDDalitzElectronAfterTPCdEdxVsEta[fiCut]->Fill( electronVgamma->Eta(),nSigmaNegTPC);
2737 hESDDalitzPositronAfterTPCdEdxVsEta[fiCut]->Fill( positronVgamma->Eta(),nSigmaPosTPC);
2739 hESDDalitzElectronAfterTPCdEdxVsPhi[fiCut]->Fill( electronVgamma->Phi(),nSigmaNegTPC);
2740 hESDDalitzPositronAfterTPCdEdxVsPhi[fiCut]->Fill( positronVgamma->Phi(),nSigmaPosTPC);
2743 hESDDalitzElectronAfterTPCdEdxSignalVsP[fiCut]->Fill( electronVgamma->P(), TMath::Abs(electronVgamma->GetTPCsignal()));
2744 hESDDalitzPositronAfterTPCdEdxSignalVsP[fiCut]->Fill( positronVgamma->P(), TMath::Abs(positronVgamma->GetTPCsignal()));
2751 //_____________________________________________________________________________
2752 Double_t AliAnalysisTaskGammaConvDalitzV1::GetPsiPair( const AliESDtrack *trackPos, const AliESDtrack *trackNeg ) const
2755 // This angle is a measure for the contribution of the opening in polar
2756 // direction ?0 to the opening angle ? Pair
2758 // Ref. Measurement of photons via conversion pairs with the PHENIX experiment at RHIC
2759 // Mas ter Thesis. Thorsten Dahms. 2005
2760 // https://twiki.cern.ch/twiki/pub/ALICE/GammaPhysicsPublications/tdahms_thesis.pdf
2764 if( trackPos->GetConstrainedPxPyPz(momPos) == 0 ) trackPos->GetPxPyPz( momPos );
2765 if( trackNeg->GetConstrainedPxPyPz(momNeg) == 0 ) trackNeg->GetPxPyPz( momNeg );
2767 TVector3 posDaughter;
2768 TVector3 negDaughter;
2770 posDaughter.SetXYZ( momPos[0], momPos[1], momPos[2] );
2771 negDaughter.SetXYZ( momNeg[0], momNeg[1], momNeg[2] );
2773 Double_t deltaTheta = negDaughter.Theta() - posDaughter.Theta();
2774 Double_t openingAngle = posDaughter.Angle( negDaughter ); //TMath::ACos( posDaughter.Dot(negDaughter)/(negDaughter.Mag()*posDaughter.Mag()) );
2776 if( openingAngle < 1e-20 ) return 0.;
2778 Double_t psiAngle = TMath::ASin( deltaTheta/openingAngle );