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():
76 fSelectorElectronIndex(0),
77 fSelectorPositronIndex(0),
79 fGoodVirtualGammas(NULL),
83 fCutElectronArray(NULL),
86 fConversionCuts(NULL),
87 hESDConvGammaPt(NULL),
88 hESDConvGammaEta(NULL),
89 hESDConvGammaZR(NULL),
90 hESDDalitzElectronPt(NULL),
91 hESDDalitzPositronPt(NULL),
92 hESDDalitzElectronPhi(NULL),
93 hESDDalitzPositronPhi(NULL),
94 hESDDalitzElectronAfterPt(NULL),
95 hESDDalitzPositronAfterPt(NULL),
96 hESDDalitzElectronAfterEta(NULL),
97 hESDDalitzPositronAfterEta(NULL),
98 hESDDalitzElectronAfterPhi(NULL),
99 hESDDalitzPositronAfterPhi(NULL),
100 hESDDalitzElectronAfterNFindClsTPC(NULL),
101 hESDDalitzPositronAfterNFindClsTPC(NULL),
102 hESDDalitzPosEleAfterDCAxy(NULL),
103 hESDDalitzPosEleAfterDCAz(NULL),
104 hESDDalitzPosEleAfterTPCdEdx(NULL),
105 hESDDalitzPosEleAfterTPCdEdxSignal(NULL),
107 hESDEposEnegPsiPairDPhi(NULL),
108 hESDEposEnegInvMassPt(NULL),
109 hESDEposEnegLikeSignBackInvMassPt(NULL),
110 hESDMotherInvMassPt(NULL),
111 hESDPi0MotherInvMassPt(NULL),
112 hESDPi0MotherDiffInvMassPt(NULL),
113 hESDPi0MotherDiffLimInvMassPt(NULL),
114 sESDMotherInvMassPtZM(NULL),
115 hESDMotherBackInvMassPt(NULL),
116 sESDMotherBackInvMassPtZM(NULL),
118 hMCConvGammaPt(NULL),
119 hMCConvGammaRSPt(NULL),
120 hMCAllPositronsPt(NULL),
121 hMCAllElectronsPt(NULL),
122 hMCPi0DalitzGammaPt(NULL),
123 hMCPi0DalitzElectronPt(NULL),
124 hMCPi0DalitzPositronPt(NULL),
132 hMCChiCInAccPt(NULL),
133 hESDEposEnegTruePi0DalitzInvMassPt(NULL),
134 hESDEposEnegTruePi0DalitzPsiPairDPhi(NULL),
135 hESDEposEnegTrueEtaDalitzInvMassPt(NULL),
136 hESDEposEnegTrueEtaDalitzPsiPairDPhi(NULL),
137 hESDEposEnegTruePhotonInvMassPt(NULL),
138 hESDEposEnegTruePhotonPsiPairDPhi(NULL),
139 hESDEposEnegTrueJPsiInvMassPt(NULL),
140 hESDTrueMotherChiCInvMassPt(NULL),
141 hESDTrueMotherChiCDiffInvMassPt(NULL),
142 hESDTrueMotherInvMassPt(NULL),
143 hESDTrueMotherDalitzInvMassPt(NULL),
144 hESDTrueMotherPi0GGInvMassPt(NULL),
145 hESDTruePrimaryMotherPi0GGInvMassPt(NULL),
146 hESDTrueSecondaryMotherPi0GGInvMassPt(NULL),
147 hESDTruePrimaryMotherInvMassMCPt(NULL),
148 hESDTruePrimaryMotherInvMassPt(NULL),
149 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
150 hESDTruePrimaryPi0DalitzESDPtMCPt(NULL),
151 hESDTrueSecondaryMotherInvMassPt(NULL),
152 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
153 hESDTrueBckGGInvMassPt(NULL),
154 hESDTrueBckContInvMassPt(NULL),
155 hESDTrueMotherGGInvMassPt(NULL),
156 hESDTrueConvGammaPt(NULL),
157 hESDTruePositronPt(NULL),
158 hESDTrueElectronPt(NULL),
159 hESDTrueSecConvGammaPt(NULL),
160 hESDTrueSecPositronPt(NULL),
161 hESDTrueSecElectronPt(NULL),
162 hESDTruePi0DalitzConvGammaPt(NULL),
163 hESDTruePi0DalitzPositronPt(NULL),
164 hESDTruePi0DalitzElectronPt(NULL),
165 hESDTruePi0DalitzSecConvGammaPt(NULL),
166 hESDTruePi0DalitzSecPositronPt(NULL),
167 hESDTruePi0DalitzSecElectronPt(NULL),
169 hNGoodESDTracks(NULL),
178 fNumberOfESDTracks(0),
179 fMoveParticleAccordingToVertex(kFALSE),
181 fDoMesonAnalysis(kTRUE),
182 fDoChicAnalysis(kFALSE),
184 fIsFromMBHeader(kTRUE),
190 //-----------------------------------------------------------------------------------------------
191 AliAnalysisTaskGammaConvDalitzV1::AliAnalysisTaskGammaConvDalitzV1( const char* name ):
192 AliAnalysisTaskSE(name),
207 fSelectorElectronIndex(0),
208 fSelectorPositronIndex(0),
210 fGoodVirtualGammas(NULL),
211 fGoodElectrons(NULL),
212 fGoodPositrons(NULL),
213 fCutGammaArray(NULL),
214 fCutElectronArray(NULL),
215 fCutMesonArray(NULL),
217 fConversionCuts(NULL),
218 hESDConvGammaPt(NULL),
219 hESDConvGammaEta(NULL),
220 hESDConvGammaZR(NULL),
221 hESDDalitzElectronPt(NULL),
222 hESDDalitzPositronPt(NULL),
223 hESDDalitzElectronPhi(NULL),
224 hESDDalitzPositronPhi(NULL),
225 hESDDalitzElectronAfterPt(NULL),
226 hESDDalitzPositronAfterPt(NULL),
227 hESDDalitzElectronAfterEta(NULL),
228 hESDDalitzPositronAfterEta(NULL),
229 hESDDalitzElectronAfterPhi(NULL),
230 hESDDalitzPositronAfterPhi(NULL),
231 hESDDalitzElectronAfterNFindClsTPC(NULL),
232 hESDDalitzPositronAfterNFindClsTPC(NULL),
233 hESDDalitzPosEleAfterDCAxy(NULL),
234 hESDDalitzPosEleAfterDCAz(NULL),
235 hESDDalitzPosEleAfterTPCdEdx(NULL),
236 hESDDalitzPosEleAfterTPCdEdxSignal(NULL),
238 hESDEposEnegPsiPairDPhi(NULL),
239 hESDEposEnegInvMassPt(NULL),
240 hESDEposEnegLikeSignBackInvMassPt(NULL),
241 hESDMotherInvMassPt(NULL),
242 hESDPi0MotherInvMassPt(NULL),
243 hESDPi0MotherDiffInvMassPt(NULL),
244 hESDPi0MotherDiffLimInvMassPt(NULL),
245 sESDMotherInvMassPtZM(NULL),
246 hESDMotherBackInvMassPt(NULL),
247 sESDMotherBackInvMassPtZM(NULL),
249 hMCConvGammaPt(NULL),
250 hMCConvGammaRSPt(NULL),
251 hMCAllPositronsPt(NULL),
252 hMCAllElectronsPt(NULL),
253 hMCPi0DalitzGammaPt(NULL),
254 hMCPi0DalitzElectronPt(NULL),
255 hMCPi0DalitzPositronPt(NULL),
263 hMCChiCInAccPt(NULL),
264 hESDEposEnegTruePi0DalitzInvMassPt(NULL),
265 hESDEposEnegTruePi0DalitzPsiPairDPhi(NULL),
266 hESDEposEnegTrueEtaDalitzInvMassPt(NULL),
267 hESDEposEnegTrueEtaDalitzPsiPairDPhi(NULL),
268 hESDEposEnegTruePhotonInvMassPt(NULL),
269 hESDEposEnegTruePhotonPsiPairDPhi(NULL),
270 hESDEposEnegTrueJPsiInvMassPt(NULL),
271 hESDTrueMotherChiCInvMassPt(NULL),
272 hESDTrueMotherChiCDiffInvMassPt(NULL),
273 hESDTrueMotherInvMassPt(NULL),
274 hESDTrueMotherDalitzInvMassPt(NULL),
275 hESDTrueMotherPi0GGInvMassPt(NULL),
276 hESDTruePrimaryMotherPi0GGInvMassPt(NULL),
277 hESDTrueSecondaryMotherPi0GGInvMassPt(NULL),
278 hESDTruePrimaryMotherInvMassMCPt(NULL),
279 hESDTruePrimaryMotherInvMassPt(NULL),
280 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
281 hESDTruePrimaryPi0DalitzESDPtMCPt(NULL),
282 hESDTrueSecondaryMotherInvMassPt(NULL),
283 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
284 hESDTrueBckGGInvMassPt(NULL),
285 hESDTrueBckContInvMassPt(NULL),
286 hESDTrueMotherGGInvMassPt(NULL),
287 hESDTrueConvGammaPt(NULL),
288 hESDTruePositronPt(NULL),
289 hESDTrueElectronPt(NULL),
290 hESDTrueSecConvGammaPt(NULL),
291 hESDTrueSecPositronPt(NULL),
292 hESDTrueSecElectronPt(NULL),
293 hESDTruePi0DalitzConvGammaPt(NULL),
294 hESDTruePi0DalitzPositronPt(NULL),
295 hESDTruePi0DalitzElectronPt(NULL),
296 hESDTruePi0DalitzSecConvGammaPt(NULL),
297 hESDTruePi0DalitzSecPositronPt(NULL),
298 hESDTruePi0DalitzSecElectronPt(NULL),
300 hNGoodESDTracks(NULL),
309 fNumberOfESDTracks(0),
310 fMoveParticleAccordingToVertex(kFALSE),
312 fDoMesonAnalysis(kTRUE),
313 fDoChicAnalysis(kFALSE),
315 fIsFromMBHeader(kTRUE),
318 DefineOutput(1, TList::Class());
321 //-----------------------------------------------------------------------------------------------
322 AliAnalysisTaskGammaConvDalitzV1::~AliAnalysisTaskGammaConvDalitzV1()
325 // virtual destructor
327 cout<<"Destructor"<<endl;
333 if(fGoodVirtualGammas){
334 delete fGoodVirtualGammas;
350 delete[] fGammasPool;
354 //___________________________________________________________
355 void AliAnalysisTaskGammaConvDalitzV1::InitBack(){
357 const Int_t nDim = 4;
358 Int_t nBins[nDim] = {800,250,7,4};
359 Double_t xMin[nDim] = {0,0, 0,0};
360 Double_t xMax[nDim] = {0.8,25,7,4};
362 sESDMotherInvMassPtZM = new THnSparseF*[fnCuts];
363 sESDMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
365 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
366 //fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
367 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
368 //if (((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->DoBGCalculation()){
371 TString cutstringElectron = ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
372 TString cutstringMeson = ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
373 TString cutstringGamma = ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
377 Int_t collisionSystem = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(0,1));
378 Int_t centMin = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(1,1));
379 Int_t centMax = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(2,1));
381 if(collisionSystem == 1 || collisionSystem == 2 ||
382 collisionSystem == 5 || collisionSystem == 8 ||
383 collisionSystem == 9){
384 centMin = centMin*10;
385 centMax = centMax*10;
387 else if(collisionSystem == 3 || collisionSystem == 6){
391 else if(collisionSystem == 4 || collisionSystem == 7){
392 centMin = ((centMin*5)+45);
393 centMax = ((centMax*5)+45);
397 fBackList[iCut] = new TList();
398 fBackList[iCut]->SetName(Form("%s_%s_%s Back histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
399 fBackList[iCut]->SetOwner(kTRUE);
400 fCutFolder[iCut]->Add(fBackList[iCut]);
402 sESDMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
403 fBackList[iCut]->Add(sESDMotherBackInvMassPtZM[iCut]);
405 fMotherList[iCut] = new TList();
406 fMotherList[iCut]->SetName(Form("%s_%s_%s Mother histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
407 fMotherList[iCut]->SetOwner(kTRUE);
408 fCutFolder[iCut]->Add(fMotherList[iCut]);
410 sESDMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
411 fMotherList[iCut]->Add(sESDMotherInvMassPtZM[iCut]);
414 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
415 collisionSystem,centMin,centMax,
416 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->NumberOfRotationEvents(),
417 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->UseTrackMultiplicity());
419 if( ( (AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetBKGMethod() == 3 ){
420 fGammasPool[iCut] = new TList();
427 //______________________________________________________________________
428 void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
431 // Create ouput objects
434 // Create the output container
435 if(fOutputContainer != NULL){
436 delete fOutputContainer;
437 fOutputContainer = NULL;
439 if(fOutputContainer == NULL){
440 fOutputContainer = new TList();
441 fOutputContainer->SetOwner(kTRUE);
444 fGoodGammas = new TList();
445 //fGoodGammas->SetOwner(kTRUE);
448 fGoodVirtualGammas = new TList();
449 //fGoodVirtualGammas->SetOwner(kTRUE);
453 fGammasPool = new TList*[fnCuts];
454 fCutFolder = new TList*[fnCuts];
455 fESDList = new TList*[fnCuts];
456 fBackList = new TList*[fnCuts];
457 fMotherList = new TList*[fnCuts];
458 hNEvents = new TH1I*[fnCuts];
459 hNGoodESDTracks = new TH1I*[fnCuts];
460 hEtaShift = new TProfile*[fnCuts];
461 hESDConvGammaPt = new TH1F*[fnCuts];
462 hESDConvGammaEta = new TH1F*[fnCuts];
463 hESDConvGammaZR = new TH2F*[fnCuts];
464 hESDDalitzElectronPt = new TH1F*[fnCuts];
465 hESDDalitzPositronPt = new TH1F*[fnCuts];
466 hESDDalitzElectronPhi = new TH1F*[fnCuts];
467 hESDDalitzPositronPhi = new TH1F*[fnCuts];
471 hESDDalitzElectronAfterPt = new TH1F*[fnCuts];
472 hESDDalitzPositronAfterPt = new TH1F*[fnCuts];
473 hESDDalitzElectronAfterEta = new TH1F*[fnCuts];
474 hESDDalitzPositronAfterEta = new TH1F*[fnCuts];
475 hESDDalitzElectronAfterPhi = new TH1F*[fnCuts];
476 hESDDalitzPositronAfterPhi = new TH1F*[fnCuts];
477 hESDDalitzElectronAfterNFindClsTPC = new TH2F*[fnCuts];
478 hESDDalitzPositronAfterNFindClsTPC = new TH2F*[fnCuts];
479 hESDDalitzPosEleAfterDCAxy = new TH2F*[fnCuts];
480 hESDDalitzPosEleAfterDCAz = new TH2F*[fnCuts];
481 hESDDalitzPosEleAfterTPCdEdx = new TH2F*[fnCuts];
482 hESDDalitzPosEleAfterTPCdEdxSignal = new TH2F*[fnCuts];
483 hESDMotherPhi = new TH1F*[fnCuts];
484 hESDEposEnegPsiPairDPhi = new TH2F*[fnCuts];
485 hESDEposEnegInvMassPt = new TH2F*[fnCuts];
486 hESDEposEnegLikeSignBackInvMassPt = new TH2F*[fnCuts];
492 hESDMotherInvMassPt = new TH2F*[fnCuts];
494 if(fDoChicAnalysis) {
495 hESDPi0MotherInvMassPt = new TH2F*[fnCuts];
496 hESDPi0MotherDiffInvMassPt = new TH2F*[fnCuts];
497 hESDPi0MotherDiffLimInvMassPt = new TH2F*[fnCuts];
501 hESDMotherBackInvMassPt = new TH2F*[fnCuts];
504 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
507 TString cutstringElectron =((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
508 TString cutstringMeson= ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
509 TString cutstringGamma = ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
511 fCutFolder[iCut] = new TList();
512 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s_%s",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
513 fCutFolder[iCut]->SetOwner(kTRUE);
514 fOutputContainer->Add(fCutFolder[iCut]);
516 fESDList[iCut] = new TList();
517 fESDList[iCut]->SetName(Form("%s_%s_%s ESD histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
518 fESDList[iCut]->SetOwner(kTRUE);
522 hNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
523 hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
524 hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
525 hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
526 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
527 hNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
528 hNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
529 hNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
530 hNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
531 hNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
532 fESDList[iCut]->Add(hNEvents[iCut]);
536 if(fIsHeavyIon) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",3000,0,3000);
537 else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
538 fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
540 hEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
541 fESDList[iCut]->Add(hEtaShift[iCut]);
543 hESDConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
544 fESDList[iCut]->Add(hESDConvGammaPt[iCut]);
546 hESDConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",600,-1.5,1.5);
547 fESDList[iCut]->Add(hESDConvGammaEta[iCut]);
549 hESDConvGammaZR[iCut]= new TH2F("ESD_ConvGamma_ConversionPoint_ZR","ESD_ConvGamma_ConversionPoint_ZR",1200,-150,150,480,0,120);
550 fESDList[iCut]->Add(hESDConvGammaZR[iCut]);
552 hESDDalitzElectronPt[iCut] = new TH1F("ESD_DalitzElectron_Pt","ESD_DalitzElectron_Pt",1000,0,25);
553 fESDList[iCut]->Add(hESDDalitzElectronPt[iCut]);
555 hESDDalitzPositronPt[iCut] = new TH1F("ESD_DalitzPositron_Pt","ESD_DalitzPositron_Pt",1000,0,25);
556 fESDList[iCut]->Add(hESDDalitzPositronPt[iCut]);
559 hESDDalitzElectronPhi[iCut] = new TH1F("ESD_DalitzElectron_Phi","ESD_DalitzElectron_Phi",360,0,2*TMath::Pi());
560 fESDList[iCut]->Add(hESDDalitzElectronPhi[iCut]);
562 hESDDalitzPositronPhi[iCut] = new TH1F("ESD_DalitzPositron_Phi","ESD_DalitzPositron_Phi",360,0,2*TMath::Pi());
563 fESDList[iCut]->Add(hESDDalitzPositronPhi[iCut]);
571 hESDDalitzElectronAfterPt[iCut] = new TH1F("ESD_DalitzElectron_After_Pt","ESD_DalitzElectron_After_Pt",1000,0,25);
572 fESDList[iCut]->Add(hESDDalitzElectronAfterPt[iCut]);
574 hESDDalitzPositronAfterPt[iCut] = new TH1F("ESD_DalitzPositron_After_Pt","ESD_DalitzPositron_After_Pt",1000,0,25);
575 fESDList[iCut]->Add(hESDDalitzPositronAfterPt[iCut]);
577 hESDDalitzElectronAfterEta[iCut] = new TH1F("ESD_DalitzElectron_After_Eta","ESD_DalitzElectron_After_Eta",600,-1.5,1.5);
578 fESDList[iCut]->Add(hESDDalitzElectronAfterEta[iCut]);
580 hESDDalitzPositronAfterEta[iCut] = new TH1F("ESD_DalitzPositron_After_Eta","ESD_DalitzElectron_After_Eta",600,-1.5,1.5);
581 fESDList[iCut]->Add(hESDDalitzPositronAfterEta[iCut]);
584 hESDDalitzElectronAfterPhi[iCut] = new TH1F("ESD_DalitzElectron_After_Phi","ESD_DalitzElectron_After_Phi",360,0,2*TMath::Pi());
585 fESDList[iCut]->Add(hESDDalitzElectronAfterPhi[iCut]);
587 hESDDalitzPositronAfterPhi[iCut] = new TH1F("ESD_DalitzPositron_After_Phi","ESD_DalitzPositron_After_Phi",360,0,2*TMath::Pi());
588 fESDList[iCut]->Add(hESDDalitzPositronAfterPhi[iCut]);
590 hESDDalitzElectronAfterNFindClsTPC[iCut] = new TH2F("ESD_DalitzElectron_After_NFindClsTPC","ESD_DalitzElectron_After_NFindClsTPC",100,0,1,400,0.,10.);
591 fESDList[iCut]->Add(hESDDalitzElectronAfterNFindClsTPC[iCut]);
593 hESDDalitzPositronAfterNFindClsTPC[iCut] = new TH2F("ESD_DalitzPositron_After_NFindClsTPC","ESD_DalitzPositron_After_NFindClsTPC",100,0,1,400,0.,10.);
594 fESDList[iCut]->Add(hESDDalitzPositronAfterNFindClsTPC[iCut]);
596 hESDDalitzPosEleAfterDCAxy[iCut] = new TH2F("ESD_DalitzPosEle_After_DCAxy","ESD_DalitzPosEle_After_DCAxy",800,-4.0,4.0,400,0.,10.);
597 fESDList[iCut]->Add(hESDDalitzPosEleAfterDCAxy[iCut]);
599 hESDDalitzPosEleAfterDCAz[iCut] = new TH2F("ESD_DalitzPosEle_After_DCAz","ESD_DalitzPosEle_After_DCAz",800,-4.0,4.0,400,0.,10.);
600 fESDList[iCut]->Add(hESDDalitzPosEleAfterDCAz[iCut]);
602 hESDDalitzPosEleAfterTPCdEdx[iCut] = new TH2F("ESD_DalitzPosEle_After_TPCdEdx","ESD_DalitzPosEle_After_TPCdEdx",150,0.05,20,400,-10,10);
603 fESDList[iCut]->Add(hESDDalitzPosEleAfterTPCdEdx[iCut]);
605 hESDDalitzPosEleAfterTPCdEdxSignal[iCut] =new TH2F("ESD_DalitzPosEle_After_TPCdEdxSignal","ESD_DalitzPosEle_After_TPCdEdxSignal" ,150,0.05,20.0,800,0.0,200);
606 fESDList[iCut]->Add(hESDDalitzPosEleAfterTPCdEdxSignal[iCut]);
608 hESDMotherPhi[iCut] = new TH1F("ESD_DalitzMother_Phi","ESD_DalitzMother_Phi",360,0,2*TMath::Pi());
609 fESDList[iCut]->Add(hESDMotherPhi[iCut]);
611 hESDEposEnegPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_PsiPair_DPhi","ESD_EposEneg_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
612 fESDList[iCut]->Add(hESDEposEnegPsiPairDPhi[iCut]);
614 hESDEposEnegInvMassPt[iCut] = new TH2F("ESD_EposEneg_InvMassPt","ESD_EposEneg_InvMassPt",5000,0.,5.,100,0.,10.);
615 fESDList[iCut]->Add(hESDEposEnegInvMassPt[iCut]);
617 hESDEposEnegLikeSignBackInvMassPt[iCut] = new TH2F("ESD_EposEneg_LikeSignBack_InvMassPt","ESD_EposEneg_LikeSignBack_InvMassPt",5000,0.,5.,100,0.,10.);
618 fESDList[iCut]->Add(hESDEposEnegLikeSignBackInvMassPt[iCut]);
629 hESDMotherInvMassPt[iCut] = new TH2F("ESD_DalitzMother_InvMass_Pt","ESD_DalitzMother_InvMass_Pt",800,0,0.8,250,0,25);
630 fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
633 if( fDoChicAnalysis) {
635 hESDPi0MotherInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_InvMass_Pt","ESD_Pi0Mother_InvMass_Pt",4000,0,4,250,0,25);
636 fESDList[iCut]->Add(hESDPi0MotherInvMassPt[iCut]);
638 hESDPi0MotherDiffInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_DiffInvMass_Pt","ESD_Pi0Mother_DiffInvMass_Pt",2000,0,2,250,0,25);
639 fESDList[iCut]->Add(hESDPi0MotherDiffInvMassPt[iCut]);
641 hESDPi0MotherDiffLimInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_DiffLimInvMass_Pt","ESD_Pi0Mother_DiffLimInvMass_Pt",2000,0,2,250,0,25);
642 fESDList[iCut]->Add(hESDPi0MotherDiffLimInvMassPt[iCut]);
647 hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_DalitzBackground_InvMass_Pt","ESD_DalitzBackground_InvMass_Pt",800,0,0.8,250,0,25);
648 fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
653 TAxis *AxisAfter = hESDDalitzPosEleAfterTPCdEdx[iCut]->GetXaxis();
654 Int_t bins = AxisAfter->GetNbins();
655 Double_t from = AxisAfter->GetXmin();
656 Double_t to = AxisAfter->GetXmax();
657 Double_t *newBins = new Double_t[bins+1];
659 Double_t factor = TMath::Power(to/from, 1./bins);
660 for(Int_t i=1; i<=bins; ++i) newBins[i] = factor * newBins[i-1];
662 AxisAfter->Set(bins, newBins);
663 AxisAfter = hESDDalitzPosEleAfterTPCdEdxSignal[iCut]->GetXaxis();
664 AxisAfter->Set(bins, newBins);
672 fCutFolder[iCut]->Add(fESDList[iCut]);
677 InitBack(); // Init Background Handler
683 fMCList = new TList*[fnCuts];
685 fTrueList = new TList*[fnCuts];
686 hESDTrueConvGammaPt = new TH1F*[fnCuts];
687 hESDTruePositronPt = new TH1F*[fnCuts];
688 hESDTrueElectronPt = new TH1F*[fnCuts];
689 hESDTrueSecConvGammaPt = new TH1F*[fnCuts];
690 hESDTrueSecPositronPt = new TH1F*[fnCuts];
691 hESDTrueSecElectronPt = new TH1F*[fnCuts];
692 hESDTruePi0DalitzConvGammaPt = new TH1F*[fnCuts];
693 hESDTruePi0DalitzPositronPt = new TH1F*[fnCuts];
694 hESDTruePi0DalitzElectronPt = new TH1F*[fnCuts];
695 hESDTruePi0DalitzSecConvGammaPt = new TH1F*[fnCuts];
696 hESDTruePi0DalitzSecPositronPt = new TH1F*[fnCuts];
697 hESDTruePi0DalitzSecElectronPt = new TH1F*[fnCuts];
698 //if(fDoMesonAnalysis){
699 hMCAllGammaPt = new TH1F*[fnCuts];
700 hMCConvGammaPt = new TH1F*[fnCuts];
701 hMCConvGammaRSPt = new TH1F*[fnCuts];
702 hMCAllPositronsPt = new TH1F*[fnCuts];
703 hMCAllElectronsPt = new TH1F*[fnCuts];
704 hMCPi0DalitzGammaPt = new TH1F*[fnCuts];
705 hMCPi0DalitzElectronPt = new TH1F*[fnCuts];
706 hMCPi0DalitzPositronPt = new TH1F*[fnCuts];
708 hMCPi0Pt = new TH1F*[fnCuts];
709 hMCPi0GGPt = new TH1F*[fnCuts];
710 hMCEtaPt = new TH1F*[fnCuts];
711 hMCEtaGGPt = new TH1F*[fnCuts];
712 hMCPi0InAccPt = new TH1F*[fnCuts];
713 hMCEtaInAccPt = new TH1F*[fnCuts];
714 hMCChiCPt = new TH1F*[fnCuts];
715 hMCChiCInAccPt = new TH1F*[fnCuts];
719 hESDEposEnegTruePi0DalitzInvMassPt = new TH2F*[fnCuts];
720 hESDEposEnegTruePi0DalitzPsiPairDPhi = new TH2F*[fnCuts];
721 hESDEposEnegTrueEtaDalitzInvMassPt = new TH2F*[fnCuts];
722 hESDEposEnegTrueEtaDalitzPsiPairDPhi = new TH2F*[fnCuts];
723 hESDEposEnegTruePhotonInvMassPt = new TH2F*[fnCuts];
724 hESDEposEnegTruePhotonPsiPairDPhi = new TH2F*[fnCuts];
725 hESDEposEnegTrueJPsiInvMassPt = new TH2F*[fnCuts];
729 if( fDoChicAnalysis ){
730 hESDTrueMotherChiCInvMassPt = new TH2F*[fnCuts];
731 hESDTrueMotherChiCDiffInvMassPt = new TH2F*[fnCuts];
735 hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
736 hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
737 hESDTrueMotherPi0GGInvMassPt = new TH2F*[fnCuts];
738 hESDTruePrimaryMotherPi0GGInvMassPt = new TH2F*[fnCuts];
739 hESDTrueSecondaryMotherPi0GGInvMassPt = new TH2F*[fnCuts];
740 hESDTruePrimaryPi0DalitzESDPtMCPt = new TH2F*[fnCuts];
741 hESDTruePrimaryMotherInvMassMCPt = new TH2F*[fnCuts];
742 hESDTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
743 hESDTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
744 hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
745 hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
746 hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
747 hESDTrueBckContInvMassPt = new TH2F*[fnCuts];
748 hESDTrueMotherGGInvMassPt = new TH2F*[fnCuts];
751 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
752 TString cutstringElectron =((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
753 TString cutstringMeson= ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
754 TString cutstringGamma = ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
756 fMCList[iCut] = new TList();
757 fMCList[iCut]->SetName(Form("%s_%s_%s MC histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
758 fMCList[iCut]->SetOwner(kTRUE);
759 fCutFolder[iCut]->Add(fMCList[iCut]);
762 hMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
763 fMCList[iCut]->Add(hMCAllGammaPt[iCut]);
765 hMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
766 fMCList[iCut]->Add(hMCConvGammaPt[iCut]);
768 hMCConvGammaRSPt[iCut] = new TH1F("MC_ConvGamma_RS_Pt","MC_ConvGamma_RS_Pt",250,0,25);
769 fMCList[iCut]->Add(hMCConvGammaRSPt[iCut]);
772 hMCAllPositronsPt[iCut] = new TH1F("MC_AllPositrons_Pt","MC_AllPositrons_Pt",1000,0,25);
773 fMCList[iCut]->Add(hMCAllPositronsPt[iCut]);
775 hMCAllElectronsPt[iCut] = new TH1F("MC_AllElectrons_Pt","MC_AllElectrons_Pt",1000,0,25);
776 fMCList[iCut]->Add(hMCAllElectronsPt[iCut]);
778 hMCPi0DalitzGammaPt[iCut] = new TH1F("MC_Pi0DalitzGamma_Pt","MC_Pi0DalitzGamma_Pt",250,0,25);
779 hMCPi0DalitzGammaPt[iCut]->Sumw2();
780 fMCList[iCut]->Add(hMCPi0DalitzGammaPt[iCut]);
782 hMCPi0DalitzPositronPt[iCut] = new TH1F("MC_Pi0DalitzPositron_Pt","MC_Pi0DalitzPositron_Pt",1000,0,25);
783 hMCPi0DalitzPositronPt[iCut]->Sumw2();
784 fMCList[iCut]->Add(hMCPi0DalitzPositronPt[iCut]);
786 hMCPi0DalitzElectronPt[iCut] = new TH1F("MC_Pi0DalitzElectron_Pt","MC_Pi0DalitzElectron_Pt",1000,0,25);
787 hMCPi0DalitzElectronPt[iCut]->Sumw2();
788 fMCList[iCut]->Add(hMCPi0DalitzElectronPt[iCut]);
791 hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
792 hMCPi0Pt[iCut]->Sumw2();
793 fMCList[iCut]->Add(hMCPi0Pt[iCut]);
795 hMCPi0GGPt[iCut] = new TH1F("MC_Pi0_GG_Pt","MC_Pi0_GG_Pt",250,0,25);
796 hMCPi0GGPt[iCut]->Sumw2();
797 fMCList[iCut]->Add(hMCPi0GGPt[iCut]);
799 hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
800 hMCEtaPt[iCut]->Sumw2();
801 fMCList[iCut]->Add(hMCEtaPt[iCut]);
803 hMCEtaGGPt[iCut] = new TH1F("MC_Eta_GG_Pt","MC_Eta_GG_Pt",250,0,25);
804 hMCEtaGGPt[iCut]->Sumw2();
805 fMCList[iCut]->Add(hMCEtaGGPt[iCut]);
807 hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0DalitzInAcc_Pt","MC_Pi0DalitzInAcc_Pt",250,0,25);
808 hMCPi0InAccPt[iCut]->Sumw2();
809 fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
811 hMCEtaInAccPt[iCut] = new TH1F("MC_EtaDalitzInAcc_Pt","MC_EtaDalitzInAcc_Pt",250,0,25);
812 hMCEtaInAccPt[iCut]->Sumw2();
813 fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
815 hMCChiCPt[iCut] = new TH1F("MC_ChiC_Pt","MC_ChiC_Pt",250,0,25);
816 fMCList[iCut]->Add(hMCChiCPt[iCut]);
818 hMCChiCInAccPt[iCut] = new TH1F("MC_ChiCInAcc_Pt","MC_ChiCInAcc_Pt",250,0,25);
819 fMCList[iCut]->Add(hMCChiCInAccPt[iCut]);
821 fTrueList[iCut] = new TList();
822 fTrueList[iCut]->SetName(Form("%s_%s_%s True histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
823 fTrueList[iCut]->SetOwner(kTRUE);
824 fCutFolder[iCut]->Add(fTrueList[iCut]);
829 hESDEposEnegTruePi0DalitzInvMassPt[iCut] = new TH2F("ESD_EposEneg_TruePi0Dalitz_InvMassPt","ESD_EposEneg_TruePi0Dalitz_InvMassPt",5000,0.,5.,100,0.,10.);
830 fTrueList[iCut]->Add(hESDEposEnegTruePi0DalitzInvMassPt[iCut]);
832 hESDEposEnegTruePi0DalitzPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TruePi0Dalitz_PsiPair_DPhi","ESD_EposEneg_TruePi0Dalitz_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
833 fTrueList[iCut]->Add(hESDEposEnegTruePi0DalitzPsiPairDPhi[iCut]);
836 hESDEposEnegTrueEtaDalitzInvMassPt[iCut] = new TH2F("ESD_EposEneg_TrueEtaDalitz_InvMassPt","ESD_EposEneg_TrueEtaDalitz_InvMassPt",5000,0.,5.,100,0.,10.);
837 fTrueList[iCut]->Add(hESDEposEnegTrueEtaDalitzInvMassPt[iCut]);
839 hESDEposEnegTrueEtaDalitzPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TrueEtaDalitz_PsiPair_DPhi","ESD_EposEneg_TrueEtaDalitz_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
840 fTrueList[iCut]->Add(hESDEposEnegTrueEtaDalitzPsiPairDPhi[iCut]);
842 hESDEposEnegTruePhotonInvMassPt[iCut] = new TH2F("ESD_EposEneg_TruePhoton_InvMassPt","ESD_EposEneg_TruePhoton_InvMassPt",5000,0.,5.,100,0.,10.);
843 fTrueList[iCut]->Add(hESDEposEnegTruePhotonInvMassPt[iCut]);
845 hESDEposEnegTruePhotonPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TruePhoton_PsiPair_DPhi","ESD_EposEneg_TruePhoton_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
846 fTrueList[iCut]->Add(hESDEposEnegTruePhotonPsiPairDPhi[iCut]);
848 hESDEposEnegTrueJPsiInvMassPt[iCut] = new TH2F("ESD_EposEneg_TrueJPsi_InvMassPt","ESD_EposEneg_TrueJPsi_InvMassPt",5000,0.,5.,100,0.,10.);
849 fTrueList[iCut]->Add(hESDEposEnegTrueJPsiInvMassPt[iCut]);
858 hESDTruePositronPt[iCut] = new TH1F("ESD_TruePositron_Pt","ESD_TruePositron_Pt",1000,0,25);
859 fTrueList[iCut]->Add(hESDTruePositronPt[iCut]);
861 hESDTrueElectronPt[iCut] = new TH1F("ESD_TrueElectron_Pt","ESD_TrueElectron_Pt",1000,0,25);
862 fTrueList[iCut]->Add(hESDTrueElectronPt[iCut]);
864 hESDTrueSecPositronPt[iCut] = new TH1F("ESD_TrueSecPositron_Pt","ESD_TrueSecPositron_Pt",1000,0,25);
865 fTrueList[iCut]->Add(hESDTrueSecPositronPt[iCut]);
867 hESDTrueSecElectronPt[iCut] = new TH1F("ESD_TrueSecElectron_Pt","ESD_TrueSecElectron_Pt",1000,0,25);
868 fTrueList[iCut]->Add(hESDTrueSecElectronPt[iCut]);
870 hESDTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
871 fTrueList[iCut]->Add(hESDTrueConvGammaPt[iCut]);
873 hESDTrueSecConvGammaPt[iCut] = new TH1F("ESD_TrueSecConvGamma_Pt","ESD_TrueSecConvGamma_Pt",250,0,25);
874 fTrueList[iCut]->Add(hESDTrueSecConvGammaPt[iCut]);
876 hESDTruePi0DalitzConvGammaPt[iCut] = new TH1F("ESD_TruePi0DalitzConvGamma_Pt","ESD_TruePi0DalitzConvGamma_Pt",250,0,25);
877 fTrueList[iCut]->Add(hESDTruePi0DalitzConvGammaPt[iCut]);
879 hESDTruePi0DalitzElectronPt[iCut] = new TH1F("ESD_TruePi0DalitzElectron_Pt","ESD_TruePi0DalitzElectron_Pt",1000,0,25);
880 fTrueList[iCut]->Add(hESDTruePi0DalitzElectronPt[iCut]);
882 hESDTruePi0DalitzPositronPt[iCut] = new TH1F("ESD_TruePi0DalitzPositron_Pt","ESD_TruePi0DalitzPositron_Pt",1000,0,25);
883 fTrueList[iCut]->Add(hESDTruePi0DalitzPositronPt[iCut]);
885 hESDTruePi0DalitzSecConvGammaPt[iCut] = new TH1F("ESD_TruePi0DalitzSecConvGamma_Pt","ESD_TruePi0DalitzSecConvGamma_Pt",250,0,25);
886 fTrueList[iCut]->Add(hESDTruePi0DalitzSecConvGammaPt[iCut]);
888 hESDTruePi0DalitzSecElectronPt[iCut] = new TH1F("ESD_TruePi0DalitzSecElectron_Pt","ESD_TruePi0DalitzSecElectron_Pt",1000,0,25);
889 fTrueList[iCut]->Add(hESDTruePi0DalitzSecElectronPt[iCut]);
891 hESDTruePi0DalitzSecPositronPt[iCut] = new TH1F("ESD_TruePi0DalitzSecPositron_Pt","ESD_TruePi0DalitzSecPositron_Pt",1000,0,25);
892 fTrueList[iCut]->Add(hESDTruePi0DalitzSecPositronPt[iCut]);
894 if( fDoChicAnalysis) {
896 hESDTrueMotherChiCInvMassPt[iCut] = new TH2F("ESD_TrueMotherChiC_InvMass_Pt","ESD_TrueMotherChiC_InvMass_Pt",4000,0,4,250,0,25);
897 fTrueList[iCut]->Add(hESDTrueMotherChiCInvMassPt[iCut]);
899 hESDTrueMotherChiCDiffInvMassPt[iCut] = new TH2F("ESD_TrueMotherChiCDiff_InvMass_Pt","ESD_TrueMotherChiCDiff_InvMass_Pt",2000,0,2,250,0,25);
900 fTrueList[iCut]->Add(hESDTrueMotherChiCDiffInvMassPt[iCut]);
904 hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
905 hESDTrueMotherInvMassPt[iCut]->Sumw2();
906 fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
908 hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueMother_Dalitz_InvMass_Pt","ESD_TrueMother_Dalitz_InvMass_Pt",800,0,0.8,250,0,25);
909 hESDTrueMotherDalitzInvMassPt[iCut]->Sumw2();
910 fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);
916 hESDTrueMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TrueMotherPi0GG_InvMass_Pt","ESD_TrueMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
917 hESDTrueMotherPi0GGInvMassPt[iCut]->Sumw2();
918 fTrueList[iCut]->Add(hESDTrueMotherPi0GGInvMassPt[iCut]);
920 hESDTruePrimaryMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMotherPi0GG_InvMass_Pt","ESD_TruePrimaryMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
921 hESDTruePrimaryMotherPi0GGInvMassPt[iCut]->Sumw2();
922 fTrueList[iCut]->Add(hESDTruePrimaryMotherPi0GGInvMassPt[iCut]);
924 hESDTrueSecondaryMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryMotherPi0GG_InvMass_Pt","ESD_TrueSecondaryMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
925 hESDTrueSecondaryMotherPi0GGInvMassPt[iCut]->Sumw2();
926 fTrueList[iCut]->Add(hESDTrueSecondaryMotherPi0GGInvMassPt[iCut]);
928 hESDTruePrimaryPi0DalitzESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryPi0Dalitz_ESDPt_MCPt","ESD_TruePrimaryPi0Dalitz_ESDPt_MCPt",250,0,25,250,0,25);
929 hESDTruePrimaryPi0DalitzESDPtMCPt[iCut]->Sumw2();
930 fTrueList[iCut]->Add(hESDTruePrimaryPi0DalitzESDPtMCPt[iCut]);
931 hESDTruePrimaryMotherInvMassMCPt[iCut] = new TH2F("ESD_TruePrimaryMother_InvMass_MCPt","ESD_TrueDalitzPrimaryMother_InvMass_MCPt",800,0,0.8,250,0,25);
932 hESDTruePrimaryMotherInvMassMCPt[iCut]->Sumw2();
933 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassMCPt[iCut]);
934 hESDTruePrimaryMotherInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMother_InvMass_Pt","ESD_TruePrimaryMother_InvMass_Pt",800,0,0.8,250,0,25);
935 hESDTruePrimaryMotherInvMassPt[iCut]->Sumw2();
936 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassPt[iCut]);
937 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMotherW0Weighting_InvMass_Pt","ESD_TruePrimaryMotherW0Weighting_InvMass_Pt",800,0,0.8,250,0,25);
938 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
939 fTrueList[iCut]->Add(hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]);
941 hESDTrueSecondaryMotherInvMassPt[iCut] = new TH2F("ESD_TrueDalitzSecondaryMother_InvMass_Pt","ESD_TrueDalitzSecondaryMother_InvMass_Pt",800,0,0.8,250,0,25);
942 hESDTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
943 fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
944 // hESDTrueSecondaryMotherFromK0sInvMassPt[iCut] = new TH2F("ESD_TrueDalitzSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueDalitzSecondaryMotherFromK0s_InvMass_Pt",1000,0,1,250,0,25);
945 // fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
946 hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueDalitzBckGG_InvMass_Pt","ESD_TrueDalitzBckGG_InvMass_Pt",800,0,0.8,250,0,25);
947 fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
948 hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueDalitzBckCont_InvMass_Pt","ESD_TrueDalitzBckCont_InvMass_Pt",800,0,0.8,250,0,25);
949 fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
950 // hESDTrueMotherGGInvMassPt[iCut] = new TH2F("ESD_TrueGammaGamma_InvMass_Pt","ESD_TrueGammaGamma_InvMass_Pt",1000,0,1,250,0,25);
951 // fTrueList[iCut]->Add(hESDTrueMotherGGInvMassPt[iCut]);
956 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
957 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
960 if((AliConversionCuts*)fV0Reader->GetConversionCuts())
961 if(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
962 fOutputContainer->Add(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
966 fElecSelector=(AliDalitzElectronSelector*)AliAnalysisManager::GetAnalysisManager()->GetTask("ElectronSelector");
967 if(!fElecSelector){printf("Error: No ElectronSelector");return;} // GetV0Reader
971 if ( ((AliDalitzElectronCuts*)fElecSelector->GetDalitzElectronCuts())->GetCutHistograms() ){
972 fOutputContainer->Add( ((AliDalitzElectronCuts*)fElecSelector->GetDalitzElectronCuts())->GetCutHistograms() );
976 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
978 if( fCutElectronArray ){
979 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutHistograms() ) {
980 fCutFolder[iCut]->Add( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutHistograms() );
984 if( fCutMesonArray ) {
985 if( ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutHistograms() ) {
986 fCutFolder[iCut]->Add( ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutHistograms());
990 if( fCutGammaArray ) {
991 if( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutHistograms() ) {
992 fCutFolder[iCut]->Add( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutHistograms() );
997 PostData(1, fOutputContainer);
1001 //______________________________________________________________________
1002 void AliAnalysisTaskGammaConvDalitzV1::UserExec(Option_t *)
1006 // Execute analysis for current event
1009 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
1010 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
1013 Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
1015 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
1016 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1017 hNEvents[iCut]->Fill(eventQuality);
1023 fElecSelector=(AliDalitzElectronSelector*)AliAnalysisManager::GetAnalysisManager()->GetTask("ElectronSelector");
1024 if(!fElecSelector){printf("Error: No ElectronSelector");return;} // GetV0Reader
1027 if(fIsMC) fMCEvent = MCEvent();
1028 fESDEvent = (AliESDEvent*)InputEvent();
1029 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
1030 fSelectorElectronIndex = fElecSelector->GetReconstructedElectronsIndex(); // Electrons from default Cut
1031 fSelectorPositronIndex = fElecSelector->GetReconstructedPositronsIndex(); // Positrons from default Cut
1033 //CountESDTracks(); // Estimate Event Multiplicity
1034 fNumberOfESDTracks = fV0Reader->GetNumberOfPrimaryTracks();
1035 //AddTaskContainers(); //Add conatiner
1037 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1040 Int_t eventNotAccepted =
1041 ((AliConversionCuts*)fCutGammaArray->At(iCut))
1042 ->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
1044 if(eventNotAccepted){
1045 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
1046 hNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
1050 if(eventQuality != 0){// Event Not Accepted
1051 // cout << "event rejected due to: " <<eventQuality << endl;
1052 hNEvents[iCut]->Fill(eventQuality);
1056 hNEvents[iCut]->Fill(eventQuality);
1058 hNGoodESDTracks[iCut]->Fill(fNumberOfESDTracks);
1060 if(fMCEvent){ // Process MC Particle
1064 fMCStack = fMCEvent->Stack();
1066 if(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetSignalRejection() != 0){
1067 ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetSignalRejection(),
1068 ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetAcceptedHeader(),
1072 ProcessMCParticles();
1075 ProcessPhotonCandidates(); // Process this cuts gammas
1076 ProcessElectronCandidates(); // Process this cuts gammas
1078 if(((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->UseMCPSmearing() && fMCEvent){
1080 fUnsmearedPx = new Double_t[fGoodGammas->GetEntries()]; // Store unsmeared Momenta
1081 fUnsmearedPy = new Double_t[fGoodGammas->GetEntries()];
1082 fUnsmearedPz = new Double_t[fGoodGammas->GetEntries()];
1083 fUnsmearedE = new Double_t[fGoodGammas->GetEntries()];
1085 for(Int_t gamma=0;gamma<fGoodGammas->GetEntries();gamma++){ // Smear the AODPhotons in MC
1087 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->Px();
1088 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->Py();
1089 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->Pz();
1090 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->E();
1091 ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGoodGammas->At(gamma)));
1097 CalculatePi0DalitzCandidates();
1098 CalculateBackground();
1099 UpdateEventByEventData();
1102 if(((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->UseMCPSmearing() && fMCEvent){
1104 for(Int_t gamma=0;gamma<fGoodGammas->GetEntries();gamma++){ // Smear the AODPhotons in MC
1105 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
1106 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetPy(fUnsmearedPy[gamma]);
1107 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetPz(fUnsmearedPz[gamma]);
1108 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetE(fUnsmearedE[gamma]);
1110 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
1111 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
1112 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
1113 delete[] fUnsmearedE; fUnsmearedE = 0x0;
1118 fGoodGammas->Clear(); // delete this cuts good gammas
1119 fGoodVirtualGammas->Clear(); // delete this cuts good gammas
1122 fSelectorElectronIndex.clear();
1123 fSelectorPositronIndex.clear();
1125 PostData( 1, fOutputContainer );
1128 Bool_t AliAnalysisTaskGammaConvDalitzV1::Notify()
1130 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
1133 if( !((AliConversionCuts*)fCutGammaArray->At(iCut))->GetDoEtaShift() ){
1135 /*if (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() != 0.){
1136 printf("Error: Gamma Conversion Dalitz Task %s :: Eta Shift not requested but set to %f, reset to 00. \n\n",
1137 (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift());
1138 ((AliConversionCuts*)fCutGammaArray->At(iCut))->SetEtaShift(0.);
1139 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift(0.);
1143 hEtaShift[iCut]->Fill(0.,0.);
1144 continue; // No Eta Shift requested, continue
1148 if( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
1149 ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
1150 ((AliConversionCuts*)fCutGammaArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1151 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() );
1152 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift()));
1156 printf(" Gamma Conversion Dalitz Task %s :: Eta Shift Manually Set to %f \n\n",
1157 (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift());
1158 ((AliConversionCuts*)fCutGammaArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1159 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() );
1160 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift()));
1168 void AliAnalysisTaskGammaConvDalitzV1::Terminate(const Option_t *)
1174 //________________________________________________________________________
1175 void AliAnalysisTaskGammaConvDalitzV1::ProcessPhotonCandidates()
1178 TList *GoodGammasStepOne = new TList();
1179 TList *GoodGammasStepTwo = new TList();
1180 // Loop over Photon Candidates allocated by ReaderV1
1182 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
1183 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
1184 if(!PhotonCandidate) continue;
1186 fIsFromMBHeader = kTRUE;
1188 if( fMCEvent && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0 ){
1190 Int_t isPosFromMBHeader
1191 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1192 if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
1194 Int_t isNegFromMBHeader
1195 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
1196 if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
1198 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1202 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fESDEvent)) continue;
1204 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut() &&
1205 !((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){ // if no post reader loop is required add to events good gammas
1207 fGoodGammas->Add(PhotonCandidate);
1209 if(fIsFromMBHeader){
1210 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1211 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1212 hESDConvGammaZR[fiCut]->Fill(PhotonCandidate->GetConversionZ(),PhotonCandidate->GetConversionRadius());
1216 ProcessTruePhotonCandidates(PhotonCandidate);
1219 else if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
1220 ((AliConversionCuts*)fCutGammaArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
1222 GoodGammasStepOne->Add(PhotonCandidate);
1224 else if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut() &&
1225 ((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
1226 GoodGammasStepTwo->Add(PhotonCandidate);
1231 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut()){
1232 for(Int_t i = 0;i<GoodGammasStepOne->GetEntries();i++){
1233 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GoodGammasStepOne->At(i);
1234 if(!PhotonCandidate) continue;
1237 fIsFromMBHeader = kTRUE;
1238 if(fMCEvent && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0){
1239 Int_t isPosFromMBHeader
1240 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack,fInputEvent);
1241 Int_t isNegFromMBHeader
1242 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
1243 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1247 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GoodGammasStepOne->GetEntries())) continue;
1248 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
1249 fGoodGammas->Add(PhotonCandidate);
1251 if(fIsFromMBHeader){
1252 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1253 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1254 hESDConvGammaZR[fiCut]->Fill(PhotonCandidate->GetConversionZ(),PhotonCandidate->GetConversionRadius());
1258 ProcessTruePhotonCandidates(PhotonCandidate);
1261 else GoodGammasStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
1264 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){
1265 for(Int_t i = 0;i<GoodGammasStepTwo->GetEntries();i++){
1266 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GoodGammasStepTwo->At(i);
1267 if(!PhotonCandidate) continue;
1269 if(fMCEvent && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0){
1270 Int_t isPosFromMBHeader
1271 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack,fInputEvent);
1272 Int_t isNegFromMBHeader
1273 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
1274 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1277 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GoodGammasStepTwo,i)) continue;
1278 fGoodGammas->Add(PhotonCandidate); // Add gamma to current cut TList
1280 if(fIsFromMBHeader){
1281 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt()); // Differences to old V0Reader in p_t due to conversion KF->TLorentzVector
1282 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1283 hESDConvGammaZR[fiCut]->Fill(PhotonCandidate->GetConversionZ(),PhotonCandidate->GetConversionRadius());
1287 ProcessTruePhotonCandidates(PhotonCandidate);
1292 delete GoodGammasStepOne;
1293 GoodGammasStepOne = 0x0;
1294 delete GoodGammasStepTwo;
1295 GoodGammasStepTwo = 0x0;
1298 //________________________________________________________________________
1299 void AliAnalysisTaskGammaConvDalitzV1::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1301 // Process True Photons
1302 AliStack *MCStack = fMCEvent->Stack();
1303 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(MCStack);
1304 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(MCStack);
1306 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1307 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){ // Not Same Mother == Combinatorial Bck
1311 else if (posDaughter->GetMother(0) == -1){
1315 if(TMath::Abs(posDaughter->GetPdgCode())!=11 || TMath::Abs(negDaughter->GetPdgCode())!=11) return; //One Particle is not electron
1316 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
1317 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
1319 TParticle *Photon = TruePhotonCandidate->GetMCParticle(MCStack);
1320 if(Photon->GetPdgCode() != 22) return; // Mother is no Photon
1324 Int_t labelGamma = TruePhotonCandidate->GetMCParticleLabel(MCStack);
1326 if( labelGamma < MCStack->GetNprimary() ){
1327 if( fIsFromMBHeader ){
1328 hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1332 if( fIsFromMBHeader){
1333 hESDTrueSecConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1337 if( IsPi0DalitzDaughter(labelGamma) == kTRUE ) {
1338 if( labelGamma < MCStack->GetNprimary() ) {
1339 if( fIsFromMBHeader ){
1340 hESDTruePi0DalitzConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1344 if( fIsFromMBHeader ) {
1345 hESDTruePi0DalitzSecConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1353 //________________________________________________________________________
1354 void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
1356 Double_t magField = fInputEvent->GetMagneticField();
1359 if( magField < 0.0 ){
1367 vector<Int_t> lGoodElectronIndexPrev(0);
1368 vector<Int_t> lGoodPositronIndexPrev(0);
1373 for(UInt_t i = 0; i < fSelectorElectronIndex.size(); i++){
1374 AliESDtrack* electronCandidate = fESDEvent->GetTrack(fSelectorElectronIndex[i]);
1375 if(! ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelected(electronCandidate) ) continue;
1376 lGoodElectronIndexPrev.push_back( fSelectorElectronIndex[i] );
1377 hESDDalitzElectronPt[fiCut]->Fill(electronCandidate->Pt());
1378 hESDDalitzElectronPhi[fiCut]->Fill(electronCandidate->Phi());
1380 Int_t labelelectron = TMath::Abs( electronCandidate->GetLabel() );
1381 if( labelelectron < fMCStack->GetNtrack() ){
1382 TParticle* electron = fMCStack->Particle(labelelectron);
1383 if( electron->GetPdgCode() == 11 ){
1384 if( labelelectron < fMCStack->GetNprimary() ){
1385 hESDTrueElectronPt[fiCut]->Fill(electronCandidate->Pt()); //primary electron
1388 hESDTrueSecElectronPt[fiCut]->Fill(electronCandidate->Pt()); //secondary electron
1390 if( IsPi0DalitzDaughter(labelelectron) == kTRUE ) {
1391 if( labelelectron < fMCStack->GetNprimary() ) {
1392 hESDTruePi0DalitzElectronPt[fiCut]->Fill(electronCandidate->Pt());
1395 hESDTruePi0DalitzSecElectronPt[fiCut]->Fill(electronCandidate->Pt());
1403 for(UInt_t i = 0; i < fSelectorPositronIndex.size(); i++){
1405 AliESDtrack* positronCandidate = fESDEvent->GetTrack( fSelectorPositronIndex[i] );
1406 if(! ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelected(positronCandidate) ) continue;
1407 lGoodPositronIndexPrev.push_back( fSelectorPositronIndex[i] );
1408 hESDDalitzPositronPt[fiCut]->Fill( positronCandidate->Pt() );
1409 hESDDalitzPositronPhi[fiCut]->Fill( positronCandidate->Phi() );
1412 Int_t labelpositron = TMath::Abs( positronCandidate->GetLabel() );
1413 if( labelpositron < fMCStack->GetNtrack() ) {
1414 TParticle* positron = fMCStack->Particle(labelpositron);
1415 if( positron->GetPdgCode() == -11 ){
1416 if( labelpositron < fMCStack->GetNprimary() ){
1417 hESDTruePositronPt[fiCut]->Fill(positronCandidate->Pt());
1420 hESDTrueSecPositronPt[fiCut]->Fill(positronCandidate->Pt());
1422 if( IsPi0DalitzDaughter(labelpositron) == kTRUE ) {
1423 if( labelpositron < fMCStack->GetNprimary() ){
1424 hESDTruePi0DalitzPositronPt[fiCut]->Fill(positronCandidate->Pt());
1427 hESDTruePi0DalitzSecPositronPt[fiCut]->Fill(positronCandidate->Pt());
1436 vector<Bool_t> lElectronPsiIndex(lGoodElectronIndexPrev.size(), kTRUE);
1437 vector<Bool_t> lPositronPsiIndex(lGoodPositronIndexPrev.size(), kTRUE);
1440 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->DoPsiPairCut() == kTRUE ){
1442 for( UInt_t i = 0; i < lGoodElectronIndexPrev.size(); i++ ) {
1444 AliESDtrack *electronCandidate = fESDEvent->GetTrack(lGoodElectronIndexPrev[i]);
1446 for(UInt_t j = 0; j < lGoodPositronIndexPrev.size(); j++){
1447 AliESDtrack *positronCandidate = fESDEvent->GetTrack(lGoodPositronIndexPrev[j]);
1448 Double_t psiPair = GetPsiPair(positronCandidate,electronCandidate);
1449 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->GetConstrainedParam()->Phi()-positronCandidate->GetConstrainedParam()->Phi());
1451 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->IsFromGammaConversion(psiPair,deltaPhi ) ){
1452 lElectronPsiIndex[i] = kFALSE;
1453 lPositronPsiIndex[j] = kFALSE;
1460 vector<Int_t> lGoodElectronIndex(0);
1461 vector<Int_t> lGoodPositronIndex(0);
1464 for( UInt_t i = 0; i < lGoodElectronIndexPrev.size(); i++ ) {
1466 if( lElectronPsiIndex[i] == kTRUE )
1467 lGoodElectronIndex.push_back( lGoodElectronIndexPrev[i] );
1470 for( UInt_t i = 0; i < lGoodPositronIndexPrev.size(); i++ ) {
1472 if( lPositronPsiIndex[i] == kTRUE )
1473 lGoodPositronIndex.push_back( lGoodPositronIndexPrev[i] );
1480 for(UInt_t i = 0; i < lGoodElectronIndex.size(); i++){
1482 //if( lElectronPsiIndex[i] == kFALSE ) continue;
1485 AliESDtrack *electronCandidate = fESDEvent->GetTrack(lGoodElectronIndex[i]);
1487 AliKFParticle electronCandidateKF( *electronCandidate->GetConstrainedParam(), ::kElectron );
1489 for(UInt_t j = 0; j < lGoodPositronIndex.size(); j++){
1491 //if( lPositronPsiIndex[j] == kFALSE ) continue;
1493 AliESDtrack *positronCandidate = fESDEvent->GetTrack(lGoodPositronIndex[j]);
1494 AliKFParticle positronCandidateKF( *positronCandidate->GetConstrainedParam(), ::kPositron );
1495 Bool_t isPhoton = kFALSE;
1496 Bool_t isPi0Dalitz = kFALSE;
1497 Bool_t isEtaDalitz = kFALSE;
1498 Bool_t isJPsi = kFALSE;
1500 Double_t psiPair = GetPsiPair(positronCandidate,electronCandidate);
1501 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->GetConstrainedParam()->Phi()-positronCandidate->GetConstrainedParam()->Phi());
1504 AliKFConversionPhoton* virtualPhoton = NULL;
1505 virtualPhoton = new AliKFConversionPhoton(electronCandidateKF,positronCandidateKF);
1508 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
1509 primaryVertexImproved+=*virtualPhoton;
1510 virtualPhoton->SetProductionVertex(primaryVertexImproved);
1512 virtualPhoton->SetTrackLabels( lGoodPositronIndex[j], lGoodElectronIndex[i]);
1517 Int_t labeln=TMath::Abs(electronCandidate->GetLabel());
1518 Int_t labelp=TMath::Abs(positronCandidate->GetLabel());
1519 TParticle *fNegativeMCParticle = fMCStack->Particle(labeln);
1520 TParticle *fPositiveMCParticle = fMCStack->Particle(labelp);
1522 if( fPositiveMCParticle && fNegativeMCParticle) {
1523 virtualPhoton->SetMCLabelPositive(labelp);
1524 virtualPhoton->SetMCLabelNegative(labeln);
1528 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton); //To Apply PsiPairCut
1534 TParticle *mcVgamma=virtualPhoton->GetMCParticle(fMCStack);
1537 // Check if it is a true photon
1538 if(mcVgamma->GetPdgCode() == 22){
1540 }else if(mcVgamma->GetPdgCode() == 443){
1543 else if( IsDalitz( mcVgamma ) ){
1544 if ( mcVgamma->GetPdgCode() == 111 ) isPi0Dalitz = kTRUE;
1545 else if( mcVgamma->GetPdgCode() == 221 ) isEtaDalitz = kTRUE;
1550 hESDEposEnegTruePhotonInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1551 hESDEposEnegTruePhotonPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1554 hESDEposEnegTrueJPsiInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1556 else if(isPi0Dalitz){
1557 hESDEposEnegTruePi0DalitzInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1558 hESDEposEnegTruePi0DalitzPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1560 else if(isEtaDalitz){
1561 hESDEposEnegTrueEtaDalitzInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1562 hESDEposEnegTrueEtaDalitzPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1571 hESDEposEnegPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1572 hESDEposEnegInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1576 if( ! fDoChicAnalysis ) {
1578 if ( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
1580 Double_t MassCutMax = 1000.0;
1581 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutLowPt() >= ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutHighPt() ){
1582 MassCutMax = ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutLowPt();
1585 MassCutMax = ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutHighPt();
1588 if( vphoton->GetMass() > MassCutMax ) {
1593 delete virtualPhoton;
1594 virtualPhoton = 0x0;
1603 fGoodVirtualGammas->Add( vphoton );
1604 delete virtualPhoton;
1611 //Computing mixing event
1615 for(UInt_t i = 0; i < lGoodElectronIndex.size(); i++){
1617 //if( lElectronPsiIndex[i] == kFALSE ) continue;
1619 AliESDtrack *electronCandidate1 = fESDEvent->GetTrack(lGoodElectronIndex[i]);
1621 AliKFParticle electronCandidate1KF( *electronCandidate1->GetConstrainedParam(), ::kElectron );
1624 for(UInt_t j = i+1; j < lGoodElectronIndex.size(); j++){
1626 //if( lElectronPsiIndex[j] == kFALSE ) continue;
1629 AliESDtrack *electronCandidate2 = fESDEvent->GetTrack(lGoodElectronIndex[j]);
1631 AliKFParticle electronCandidate2KF( *electronCandidate2->GetConstrainedParam(), ::kElectron );
1633 AliKFConversionPhoton* virtualPhoton = new AliKFConversionPhoton(electronCandidate1KF,electronCandidate2KF);
1635 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
1636 primaryVertexImproved+=*virtualPhoton;
1637 virtualPhoton->SetProductionVertex(primaryVertexImproved);
1640 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton);
1641 hESDEposEnegLikeSignBackInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1643 delete virtualPhoton;
1645 virtualPhoton = 0x0;
1651 for(UInt_t i = 0; i < lGoodPositronIndex.size(); i++){
1655 //if( lPositronPsiIndex[i] == kFALSE ) continue;
1657 AliESDtrack *positronCandidate1 = fESDEvent->GetTrack(lGoodPositronIndex[i]);
1659 AliKFParticle positronCandidate1KF( *positronCandidate1->GetConstrainedParam(), ::kPositron );
1662 for(UInt_t j = i+1; j < lGoodPositronIndex.size(); j++){
1664 // if( lPositronPsiIndex[j] == kFALSE ) continue;
1666 AliESDtrack *positronCandidate2 = fESDEvent->GetTrack(lGoodPositronIndex[j]);
1668 AliKFParticle positronCandidate2KF( *positronCandidate2->GetConstrainedParam(), ::kPositron );
1670 AliKFConversionPhoton* virtualPhoton = new AliKFConversionPhoton(positronCandidate1KF,positronCandidate2KF);
1671 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
1672 primaryVertexImproved+=*virtualPhoton;
1673 virtualPhoton->SetProductionVertex(primaryVertexImproved);
1675 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton);
1676 hESDEposEnegLikeSignBackInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1680 delete virtualPhoton;
1682 virtualPhoton = 0x0;
1690 //________________________________________________________________________
1691 void AliAnalysisTaskGammaConvDalitzV1::CalculatePi0DalitzCandidates(){
1693 // Conversion Gammas
1698 if( fGoodGammas->GetEntries() > 0 && fGoodVirtualGammas->GetEntries() > 0 ){
1700 vector<Bool_t> lGoodVirtualGamma(fGoodVirtualGammas->GetEntries(), kFALSE);
1702 for(Int_t GammaIndex=0; GammaIndex<fGoodGammas->GetEntries(); GammaIndex++){
1704 AliAODConversionPhoton *gamma=dynamic_cast<AliAODConversionPhoton*>(fGoodGammas->At(GammaIndex));
1705 if (gamma==NULL) continue;
1706 for(Int_t virtualGammaIndex=0;virtualGammaIndex<fGoodVirtualGammas->GetEntries();virtualGammaIndex++){
1708 AliAODConversionPhoton *Vgamma=dynamic_cast<AliAODConversionPhoton*>(fGoodVirtualGammas->At(virtualGammaIndex));
1709 if (Vgamma==NULL) continue;
1710 //Check for same Electron ID
1711 if(gamma->GetTrackLabelPositive() == Vgamma->GetTrackLabelPositive() ||
1712 gamma->GetTrackLabelNegative() == Vgamma->GetTrackLabelNegative() ||
1713 gamma->GetTrackLabelNegative() == Vgamma->GetTrackLabelPositive() ||
1714 gamma->GetTrackLabelPositive() == Vgamma->GetTrackLabelNegative() ) continue;
1716 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma,Vgamma);
1717 pi0cand->SetLabels(GammaIndex,virtualGammaIndex);
1720 if( ( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift())) ){
1722 //cout<< "Meson Accepted "<<endl;
1724 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fESDEvent->GetPrimaryVertex()->GetZ());
1726 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity() ){
1727 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1729 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGoodGammas->GetEntries());
1732 AliESDtrack *positronVgamma = 0;
1733 AliESDtrack *electronVgamma = 0;
1735 Double_t clsToFPos = -1.0;
1736 Double_t clsToFNeg = -1.0;
1738 Float_t dcaToVertexXYPos = -1.0;
1739 Float_t dcaToVertexZPos = -1.0;
1740 Float_t dcaToVertexXYNeg = -1.0;
1741 Float_t dcaToVertexZNeg = -1.0;
1746 positronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelPositive() );
1747 electronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelNegative() );
1748 clsToFPos = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetNFindableClustersTPC(positronVgamma);
1749 clsToFNeg = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetNFindableClustersTPC(electronVgamma);
1753 positronVgamma->GetImpactParameters(bPos,bCovPos);
1754 if (bCovPos[0]<=0 || bCovPos[2]<=0) {
1755 AliDebug(1, "Estimated b resolution lower or equal zero!");
1756 bCovPos[0]=0; bCovPos[2]=0;
1761 positronVgamma->GetImpactParameters(bNeg,bCovNeg);
1762 if (bCovNeg[0]<=0 || bCovNeg[2]<=0) {
1763 AliDebug(1, "Estimated b resolution lower or equal zero!");
1764 bCovNeg[0]=0; bCovNeg[2]=0;
1767 dcaToVertexXYPos = bPos[0];
1768 dcaToVertexZPos = bPos[1];
1769 dcaToVertexXYNeg = bNeg[0];
1770 dcaToVertexZNeg = bNeg[1];
1775 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
1778 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( pi0cand->Pt() , Vgamma->GetMass() ) == kTRUE ){
1780 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
1782 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
1783 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
1788 hESDMotherPhi[fiCut]->Fill(pi0cand->Phi());
1790 if( lGoodVirtualGamma[virtualGammaIndex] == kFALSE ) {
1792 hESDDalitzElectronAfterPt[fiCut]->Fill( electronVgamma->Pt() );
1793 hESDDalitzPositronAfterPt[fiCut]->Fill( positronVgamma->Pt() );
1795 hESDDalitzElectronAfterEta[fiCut]->Fill( electronVgamma->Eta() );
1796 hESDDalitzPositronAfterEta[fiCut]->Fill( positronVgamma->Eta() );
1798 hESDDalitzElectronAfterPhi[fiCut]->Fill( electronVgamma->Phi() );
1799 hESDDalitzPositronAfterPhi[fiCut]->Fill( positronVgamma->Phi() );
1801 hESDDalitzElectronAfterNFindClsTPC[fiCut]->Fill(clsToFNeg,electronVgamma->Pt());
1802 hESDDalitzPositronAfterNFindClsTPC[fiCut]->Fill(clsToFPos,positronVgamma->Pt());
1805 hESDDalitzPosEleAfterDCAxy[fiCut]->Fill( dcaToVertexXYNeg, electronVgamma->Pt() );
1806 hESDDalitzPosEleAfterDCAz[fiCut]->Fill( dcaToVertexZNeg, electronVgamma->Pt() );
1807 hESDDalitzPosEleAfterDCAxy[fiCut]->Fill( dcaToVertexXYPos, positronVgamma->Pt() );
1808 hESDDalitzPosEleAfterDCAz[fiCut]->Fill( dcaToVertexZPos, positronVgamma->Pt() );
1810 hESDDalitzPosEleAfterTPCdEdx[fiCut]->Fill( positronVgamma->P(),((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(positronVgamma, AliPID::kElectron) );
1811 hESDDalitzPosEleAfterTPCdEdx[fiCut]->Fill( electronVgamma->P(),((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(electronVgamma, AliPID::kElectron) );
1813 hESDDalitzPosEleAfterTPCdEdxSignal[fiCut]->Fill( positronVgamma->P(), TMath::Abs(positronVgamma->GetTPCsignal()));
1814 hESDDalitzPosEleAfterTPCdEdxSignal[fiCut]->Fill( electronVgamma->P(), TMath::Abs(electronVgamma->GetTPCsignal()));
1816 lGoodVirtualGamma[virtualGammaIndex] = kTRUE;
1822 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
1823 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
1824 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
1829 hESDMotherPhi[fiCut]->Fill(pi0cand->Phi());
1831 if( lGoodVirtualGamma[virtualGammaIndex] == kFALSE ) {
1833 hESDDalitzElectronAfterPt[fiCut]->Fill( electronVgamma->Pt() );
1834 hESDDalitzPositronAfterPt[fiCut]->Fill( positronVgamma->Pt() );
1836 hESDDalitzElectronAfterEta[fiCut]->Fill( electronVgamma->Eta() );
1837 hESDDalitzPositronAfterEta[fiCut]->Fill( positronVgamma->Eta() );
1839 hESDDalitzElectronAfterPhi[fiCut]->Fill( electronVgamma->Phi() );
1840 hESDDalitzPositronAfterPhi[fiCut]->Fill( positronVgamma->Phi() );
1842 hESDDalitzElectronAfterNFindClsTPC[fiCut]->Fill(clsToFNeg,electronVgamma->Pt());
1843 hESDDalitzPositronAfterNFindClsTPC[fiCut]->Fill(clsToFPos,positronVgamma->Pt());
1845 hESDDalitzPosEleAfterDCAxy[fiCut]->Fill( dcaToVertexXYNeg, electronVgamma->Pt() );
1846 hESDDalitzPosEleAfterDCAz[fiCut]->Fill( dcaToVertexZNeg, electronVgamma->Pt() );
1847 hESDDalitzPosEleAfterDCAxy[fiCut]->Fill( dcaToVertexXYPos, positronVgamma->Pt() );
1848 hESDDalitzPosEleAfterDCAz[fiCut]->Fill( dcaToVertexZPos, positronVgamma->Pt() );
1850 hESDDalitzPosEleAfterTPCdEdx[fiCut]->Fill( positronVgamma->P(),((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(positronVgamma, AliPID::kElectron) );
1851 hESDDalitzPosEleAfterTPCdEdx[fiCut]->Fill( electronVgamma->P(),((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(electronVgamma, AliPID::kElectron) );
1853 hESDDalitzPosEleAfterTPCdEdxSignal[fiCut]->Fill( positronVgamma->P(), TMath::Abs(positronVgamma->GetTPCsignal()));
1854 hESDDalitzPosEleAfterTPCdEdxSignal[fiCut]->Fill( electronVgamma->P(), TMath::Abs(electronVgamma->GetTPCsignal()));
1857 lGoodVirtualGamma[virtualGammaIndex] = kTRUE;
1863 if( fDoChicAnalysis) {
1865 hESDPi0MotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
1867 Double_t diffMass = pi0cand->M() - Vgamma->GetMass();
1869 hESDPi0MotherDiffInvMassPt[fiCut]->Fill( diffMass , pi0cand->Pt() );
1871 if( Vgamma->GetMass() > 2.5 && Vgamma->GetMass() < 3.4){
1872 hESDPi0MotherDiffLimInvMassPt[fiCut]->Fill( diffMass , pi0cand->Pt() );
1877 ProcessTrueMesonCandidates(pi0cand,gamma,Vgamma);
1887 //________________________________________________________________________
1888 void AliAnalysisTaskGammaConvDalitzV1::CalculateBackground(){
1890 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fESDEvent->GetPrimaryVertex()->GetZ());
1895 method = ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetBKGMethod();
1898 if(((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity()){
1899 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1901 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGoodGammas->GetEntries());
1904 if( method == 1 || method == 2 ) {
1906 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
1908 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity() ) {
1910 for(Int_t nEventsInBG=0;nEventsInBG<fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
1912 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
1914 if(fMoveParticleAccordingToVertex == kTRUE && method == 1){
1915 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
1918 for(Int_t iCurrent=0;iCurrent<fGoodVirtualGammas->GetEntries();iCurrent++){
1919 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualGammas->At(iCurrent));
1921 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
1922 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
1924 if(fMoveParticleAccordingToVertex == kTRUE && method == 1 ){
1925 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
1928 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
1931 if( ( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE, ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
1932 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
1934 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.GetMass() ) == kTRUE ){
1936 // cout<<" Mass dalitz: "<<currentEventGoodV0.GetMass()<<endl;
1937 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1938 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1939 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1943 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1944 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1945 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1948 delete backgroundCandidate;
1949 backgroundCandidate = 0x0;
1955 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
1956 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
1957 if(previousEventV0s){
1958 if(fMoveParticleAccordingToVertex == kTRUE && method == 1){
1959 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
1961 for(Int_t iCurrent=0;iCurrent<fGoodVirtualGammas->GetEntries();iCurrent++){
1963 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualGammas->At(iCurrent));
1965 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
1967 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
1969 if(fMoveParticleAccordingToVertex == kTRUE && method ==1){
1970 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
1973 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
1975 if((((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
1977 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
1979 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.GetMass() ) == kTRUE ){
1982 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1983 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1984 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1988 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1989 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1990 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1993 delete backgroundCandidate;
1994 backgroundCandidate = 0x0;
2002 else if( method == 3 ){
2004 for(Int_t iCurrent=0;iCurrent<fGoodVirtualGammas->GetEntries();iCurrent++){
2006 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualGammas->At(iCurrent));
2008 for(Int_t iPrevious=0;iPrevious<fGammasPool[fiCut]->GetEntries();iPrevious++){
2010 AliAODConversionPhoton previousGoodV0 = *(AliAODConversionPhoton*)((fGammasPool[fiCut]->At(iPrevious) ));
2013 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2016 if((((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE, ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
2018 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
2020 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.GetMass() ) == kTRUE ){
2023 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2024 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2025 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2031 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2032 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2033 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2037 delete backgroundCandidate;
2038 backgroundCandidate = 0x0;
2044 //________________________________________________________________________
2045 void AliAnalysisTaskGammaConvDalitzV1::UpdateEventByEventData(){
2046 //see header file for documentation
2050 method = ( (AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetBKGMethod();
2057 if(fGoodGammas->GetEntries() > 0 ){
2059 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity() ){
2060 fBGHandler[fiCut]->AddEvent(fGoodGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fNumberOfESDTracks);
2063 else{ // means we use #V0s for multiplicity
2064 fBGHandler[fiCut]->AddEvent(fGoodGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fGoodGammas->GetEntries());
2069 else if ( method == 2 ){
2071 if(fGoodVirtualGammas->GetEntries() > 0 ){
2072 if(((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity()){
2073 fBGHandler[fiCut]->AddEvent(fGoodVirtualGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fNumberOfESDTracks);
2075 else{ // means we use #V0s for multiplicity
2076 fBGHandler[fiCut]->AddEvent(fGoodVirtualGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fGoodVirtualGammas->GetEntries());
2080 else if ( method == 3 ) {
2084 for(Int_t index = 0; index < fGoodGammas->GetEntries(); index++){
2087 if ( fGammasPool[fiCut]->GetEntries() > ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->NumberOfRotationEvents() ){
2088 fGammasPool[fiCut]->RemoveLast();
2090 fGammasPool[fiCut]->AddFirst( new AliAODConversionPhoton(*(AliAODConversionPhoton*)(fGoodGammas->At(index)) ) );
2095 //______________________________________________________________________
2096 void AliAnalysisTaskGammaConvDalitzV1::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate, AliAODConversionPhoton *TrueVirtualGammaCandidate)
2099 // Process True Mesons
2101 AliStack *MCStack = fMCEvent->Stack();
2103 if( TrueGammaCandidate->GetV0Index()<fESDEvent->GetNumberOfV0s() ){
2106 //cout<<"Entro True Meson"<<endl;
2109 Bool_t isTruePi0 = kFALSE;
2110 Bool_t isTrueEta = kFALSE;
2111 Bool_t massCutAccept = kFALSE;
2112 //Bool_t isTrueChiC = kFALSE;
2113 Int_t gammaMCLabel = TrueGammaCandidate->GetMCParticleLabel(MCStack);
2114 Int_t gammaMotherLabel = -1;
2117 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
2119 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( Pi0Candidate->Pt() , TrueVirtualGammaCandidate->GetMass() ) == kTRUE ){
2121 massCutAccept = kTRUE;
2125 massCutAccept = kTRUE;
2132 if(gammaMCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2135 // Daughters Gamma 0
2136 TParticle * negativeMC = (TParticle*)TrueGammaCandidate->GetNegativeMCDaughter(MCStack);
2137 TParticle * positiveMC = (TParticle*)TrueGammaCandidate->GetPositiveMCDaughter(MCStack);
2138 TParticle * gammaMC = (TParticle*)MCStack->Particle(gammaMCLabel);
2141 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2143 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
2145 if(gammaMC->GetPdgCode() == 22){ // ... with Gamma Mother
2146 gammaMotherLabel=gammaMC->GetFirstMother();
2153 Int_t virtualGammaMCLabel = TrueVirtualGammaCandidate->GetMCParticleLabel(MCStack);
2154 Int_t virtualGammaMotherLabel = -1;
2155 Int_t virtualGamma = 1;
2156 Int_t virtualGammaGrandMotherLabel =-1;
2159 if(virtualGammaMCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2160 // Daughters Gamma 1
2161 TParticle * negativeMC = (TParticle*)TrueVirtualGammaCandidate->GetNegativeMCDaughter(MCStack);
2162 TParticle * positiveMC = (TParticle*)TrueVirtualGammaCandidate->GetPositiveMCDaughter(MCStack);
2163 TParticle * virtualGammaMotherMC = (TParticle*)MCStack->Particle(virtualGammaMCLabel);
2165 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2167 if( virtualGammaMotherMC->GetPdgCode() != 22 ){
2168 virtualGammaMotherLabel=virtualGammaMCLabel;
2169 if(virtualGammaMotherMC->GetPdgCode() == 443){
2170 virtualGammaGrandMotherLabel=virtualGammaMotherMC->GetFirstMother();
2174 else if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
2175 virtualGammaMotherLabel=virtualGammaMotherMC->GetFirstMother();
2176 virtualGamma = 0; //no virtual gamma
2182 if(gammaMotherLabel >= 0 && ( gammaMotherLabel == virtualGammaMotherLabel) ){
2184 if(((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->GetPdgCode() == 111){
2188 if(((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->GetPdgCode() == 221){
2195 if( fDoChicAnalysis) {
2196 if(gammaMotherLabel>=0 && ( gammaMotherLabel == virtualGammaGrandMotherLabel) ){
2197 if(((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 445 ||
2198 ((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 10443 ||
2199 ((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 20443 ){
2201 hESDTrueMotherChiCInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2202 hESDTrueMotherChiCDiffInvMassPt[fiCut]->Fill(Pi0Candidate->M()-TrueVirtualGammaCandidate->GetMass(),Pi0Candidate->Pt());
2207 if( ( isTruePi0 || isTrueEta) && massCutAccept ){ // True Pion or Eta
2209 if ( virtualGamma == 1 ) { //True Dalitz
2211 Float_t weighted= 1;
2213 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2214 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
2215 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
2216 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
2221 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2222 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill( TrueVirtualGammaCandidate->GetMass(),Pi0Candidate->Pt(),weighted);
2224 if(gammaMotherLabel < MCStack->GetNprimary()){ // Only primary pi0 for efficiency calculation
2227 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill( Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2228 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill( Pi0Candidate->M(), Pi0Candidate->Pt() );
2230 hESDTruePrimaryMotherInvMassMCPt[fiCut]->Fill(Pi0Candidate->M(),((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->Pt(),weighted);
2231 if(isTruePi0){ // Only primaries for unfolding
2232 hESDTruePrimaryPi0DalitzESDPtMCPt[fiCut]->Fill(Pi0Candidate->Pt(),((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->Pt(),weighted);
2235 else { // Secondary Meson
2236 Float_t weightedSec= 1;
2238 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2239 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetMother(0);
2240 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(gammaMotherLabel)->GetPdgCode()==310){
2241 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
2245 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2250 else if ( virtualGamma == 0 ){
2252 Float_t weighted= 1;
2254 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2255 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
2256 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
2257 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
2262 hESDTrueMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted); // Pi0 from GG
2264 if( gammaMotherLabel < MCStack->GetNprimary() ){
2265 hESDTruePrimaryMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2269 Float_t weightedSec= 1;
2271 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2272 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetMother(0);
2273 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(gammaMotherLabel)->GetPdgCode()==310){
2274 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
2277 hESDTrueSecondaryMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2282 if(!isTruePi0 && !isTrueEta && massCutAccept ){ // Background
2283 if(gammaMotherLabel>-1 && virtualGammaMotherLabel>-1 && virtualGamma == 0){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2284 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2285 } else { // No photon or without mother
2286 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2293 //________________________________________________________________________
2294 void AliAnalysisTaskGammaConvDalitzV1::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
2295 //see header file for documentation
2297 Double_t dx = vertex->fX - fESDEvent->GetPrimaryVertex()->GetX();
2298 Double_t dy = vertex->fY - fESDEvent->GetPrimaryVertex()->GetY();
2299 Double_t dz = vertex->fZ - fESDEvent->GetPrimaryVertex()->GetZ();
2301 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
2302 particle->SetConversionPoint(movedPlace);
2306 //________________________________________________________________________
2307 void AliAnalysisTaskGammaConvDalitzV1::CountESDTracks(){
2309 // Using standard function for setting Cuts
2310 Bool_t selectPrimaries=kTRUE;
2311 AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
2312 EsdTrackCuts->SetMaxDCAToVertexZ(2);
2313 EsdTrackCuts->SetEtaRange(-0.8, 0.8);
2314 EsdTrackCuts->SetPtRange(0.15);
2316 fNumberOfESDTracks = 0;
2317 for(Int_t iTracks = 0; iTracks < fESDEvent->GetNumberOfTracks(); iTracks++){
2318 AliESDtrack* curTrack = fESDEvent->GetTrack(iTracks);
2319 if(!curTrack) continue;
2320 if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
2322 delete EsdTrackCuts;
2328 //_____________________________________________________________________________
2329 void AliAnalysisTaskGammaConvDalitzV1::ProcessMCParticles()
2332 // Loop over all primary MC particle
2334 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
2337 TParticle* particle = (TParticle *)fMCStack->Particle(i);
2338 if (!particle) continue;
2341 Bool_t mcIsFromMB = kTRUE;
2342 Int_t isMCFromMBHeader = -1;
2344 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0) {
2346 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i,fMCStack,fInputEvent);
2347 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
2348 if(isMCFromMBHeader != 2) mcIsFromMB = kFALSE;
2351 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
2352 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
2355 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
2356 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
2358 hMCConvGammaRSPt[fiCut]->Fill(particle->Pt());
2360 } // Converted MC Gamma
2362 if(((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(i,fMCStack)){
2363 if( particle->GetPdgCode() == -11)hMCAllPositronsPt[fiCut]->Fill(particle->Pt()); // All positrons
2364 if( particle->GetPdgCode() == 11)hMCAllElectronsPt[fiCut]->Fill(particle->Pt()); // All electrons
2367 if(((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMC( particle,fMCStack,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift() ) ){
2369 Float_t weighted= 1;
2371 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2372 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2373 if (particle->Pt()>0.005){
2374 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
2379 if(particle->GetPdgCode() == 111)hMCPi0GGPt[fiCut]->Fill( particle->Pt() , weighted); // All MC Pi0 GG decay
2380 if(particle->GetPdgCode() == 221)hMCEtaGGPt[fiCut]->Fill( particle->Pt() , weighted); // All MC Eta GG decay
2384 Int_t labelgamma = -1;
2385 Int_t labelelectron = -1;
2386 Int_t labelpositron = -1;
2389 if( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMCDalitz(particle,fMCStack,labelelectron,labelpositron,labelgamma,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()) )
2393 Float_t weighted= 1;
2394 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2395 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack,fInputEvent)){
2396 if (particle->Pt()>0.005){
2397 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
2401 if(particle->GetPdgCode() == 111)hMCPi0Pt[fiCut]->Fill(particle->Pt(), weighted); // All MC Pi0
2402 if(particle->GetPdgCode() == 221)hMCEtaPt[fiCut]->Fill(particle->Pt(), weighted); // All MC Eta
2404 // Check the acceptance for gamma and electrons
2407 TParticle *gamma = fMCStack->Particle(labelgamma);
2408 TParticle *electron = fMCStack->Particle(labelelectron);
2409 TParticle *positron = fMCStack->Particle(labelpositron);
2412 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC(gamma,fMCStack,kFALSE) &&
2413 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelelectron,fMCStack) &&
2414 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelpositron,fMCStack) ) {
2416 if(particle->GetPdgCode() == 111){
2418 hMCPi0InAccPt[fiCut]->Fill(particle->Pt() , weighted); // MC Pi0Dalitz with gamma and e+e- in acc
2419 hMCPi0DalitzGammaPt[fiCut]->Fill( gamma->Pt() ,weighted );
2420 hMCPi0DalitzPositronPt[fiCut]->Fill( positron->Pt(),weighted );
2421 hMCPi0DalitzElectronPt[fiCut]->Fill( electron->Pt(),weighted );
2424 if(particle->GetPdgCode() == 221)hMCEtaInAccPt[fiCut]->Fill(particle->Pt(), weighted ); // MC EtaDalitz with gamma and e+e- in acc
2429 Int_t labelgammaChiC=-1;
2430 Int_t labelpositronChiC=-1;
2431 Int_t labelelectronChiC=-1;
2433 if(((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMCChiC(particle,fMCStack,labelelectronChiC,labelpositronChiC,labelgammaChiC,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift())){
2435 hMCChiCPt[fiCut]->Fill(particle->Pt()); // All MC ChiC
2436 TParticle * gammaChiC =fMCStack->Particle(labelgammaChiC);
2438 if( ((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC( gammaChiC,fMCStack,kFALSE) &&
2439 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelelectronChiC,fMCStack) &&
2440 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelpositronChiC,fMCStack) ){
2441 hMCChiCInAccPt[fiCut]->Fill(particle->Pt()); // All MC ChiC
2446 //_____________________________________________________________________________
2447 Bool_t AliAnalysisTaskGammaConvDalitzV1::IsDalitz(TParticle *fMCMother) const
2450 if( fMCMother->GetNDaughters() != 3 ) return kFALSE;
2451 if( fMCMother->GetPdgCode() != 111 && fMCMother->GetPdgCode() != 221 ) return kFALSE;
2454 TParticle *positron = 0x0;
2455 TParticle *electron = 0x0;
2456 TParticle *gamma = 0x0;
2458 for(Int_t index= fMCMother->GetFirstDaughter();index<= fMCMother->GetLastDaughter();index++){
2460 TParticle* temp = (TParticle*)fMCStack->Particle( index );
2462 switch( temp->GetPdgCode() ) {
2475 if( positron && electron && gamma) return kTRUE;
2479 //_____________________________________________________________________________________
2480 Bool_t AliAnalysisTaskGammaConvDalitzV1::IsPi0DalitzDaughter( Int_t label ) const
2483 // Returns true if the particle comes from Pi0 -> e+ e- gamma
2486 Int_t motherLabel = fMCStack->Particle( label )->GetMother(0);
2488 if( motherLabel < 0 || motherLabel >= fMCStack->GetNtrack() ) return kFALSE;
2490 TParticle* mother = fMCStack->Particle( motherLabel );
2492 if( mother->GetPdgCode() != 111 ) return kFALSE;
2494 if( IsDalitz( mother ) ) return kTRUE;
2503 //_____________________________________________________________________________
2504 Double_t AliAnalysisTaskGammaConvDalitzV1::GetPsiPair( const AliESDtrack *trackPos, const AliESDtrack *trackNeg ) const
2507 // This angle is a measure for the contribution of the opening in polar
2508 // direction ?0 to the opening angle ? Pair
2510 // Ref. Measurement of photons via conversion pairs with the PHENIX experiment at RHIC
2511 // Master Thesis. Thorsten Dahms. 2005
2512 // https://twiki.cern.ch/twiki/pub/ALICE/GammaPhysicsPublications/tdahms_thesis.pdf
2516 if( trackPos->GetConstrainedPxPyPz(momPos) == 0 ) trackPos->GetPxPyPz( momPos );
2517 if( trackNeg->GetConstrainedPxPyPz(momNeg) == 0 ) trackNeg->GetPxPyPz( momNeg );
2519 TVector3 posDaughter;
2520 TVector3 negDaughter;
2522 posDaughter.SetXYZ( momPos[0], momPos[1], momPos[2] );
2523 negDaughter.SetXYZ( momNeg[0], momNeg[1], momNeg[2] );
2525 Double_t deltaTheta = negDaughter.Theta() - posDaughter.Theta();
2526 Double_t openingAngle = posDaughter.Angle( negDaughter ); //TMath::ACos( posDaughter.Dot(negDaughter)/(negDaughter.Mag()*posDaughter.Mag()) );
2528 if( openingAngle < 1e-20 ) return 0.;
2530 Double_t psiAngle = TMath::ASin( deltaTheta/openingAngle );