1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: Pedro Gonz??lez, Pedro Ladr??n de Guevara, Ernesto L??pez Torres, *
5 * Eulogio Serradilla, Ana Marin, Friederike Bock *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
17 // Analysis task for pi0->e+e-gamma (Dalitz decay)
18 // Analysis task for chic->JPsi+gamma
22 #include "TParticle.h"
24 #include "TMCProcess.h"
25 #include "TDatabasePDG.h"
28 #include "TDirectory.h"
32 #include "THnSparse.h"
35 #include "AliAnalysisManager.h"
36 #include "AliESDInputHandler.h"
37 #include "AliESDtrack.h"
38 #include "AliMCEvent.h"
40 #include "AliMCEventHandler.h"
43 #include "AliESDtrackCuts.h"
44 #include "AliESDpidCuts.h"
45 #include "AliMCEvent.h"
47 #include "AliESDEvent.h"
48 #include "AliESDpid.h"
49 #include "AliKFParticle.h"
50 #include "AliMCEventHandler.h"
51 #include "AliKFVertex.h"
52 #include "AliTriggerAnalysis.h"
53 #include "AliCentrality.h"
54 #include "AliMultiplicity.h"
55 #include "AliAnalysisTaskGammaConvDalitzV1.h"
58 ClassImp( AliAnalysisTaskGammaConvDalitzV1 )
60 //-----------------------------------------------------------------------------------------------
61 AliAnalysisTaskGammaConvDalitzV1::AliAnalysisTaskGammaConvDalitzV1():
77 fSelectorElectronIndex(0),
78 fSelectorPositronIndex(0),
80 fGoodVirtualGammas(NULL),
84 fCutElectronArray(NULL),
87 fConversionCuts(NULL),
88 hESDConvGammaPt(NULL),
89 hESDConvGammaEta(NULL),
90 hESDConvGammaZR(NULL),
91 hESDDalitzElectronPt(NULL),
92 hESDDalitzPositronPt(NULL),
93 hESDDalitzElectronPhi(NULL),
94 hESDDalitzPositronPhi(NULL),
95 hESDDalitzElectronAfterPt(NULL),
96 hESDDalitzPositronAfterPt(NULL),
97 hESDDalitzElectronAfterEta(NULL),
98 hESDDalitzPositronAfterEta(NULL),
99 hESDDalitzElectronAfterPhi(NULL),
100 hESDDalitzPositronAfterPhi(NULL),
101 hESDDalitzElectronAfterNClsITS(NULL),
102 hESDDalitzPositronAfterNClsITS(NULL),
103 hESDDalitzElectronAfterNFindClsTPC(NULL),
104 hESDDalitzPositronAfterNFindClsTPC(NULL),
105 hESDDalitzElectronAfterNClsTPC(NULL),
106 hESDDalitzPositronAfterNClsTPC(NULL),
107 hESDDalitzPosEleAfterDCAxy(NULL),
108 hESDDalitzPosEleAfterDCAz(NULL),
109 hESDDalitzElectronAfterTPCdEdxVsP(NULL),
110 hESDDalitzPositronAfterTPCdEdxVsP(NULL),
111 hESDDalitzElectronAfterTPCdEdxSignalVsP(NULL),
112 hESDDalitzPositronAfterTPCdEdxSignalVsP(NULL),
113 hESDDalitzElectronAfterTPCdEdxVsEta(NULL),
114 hESDDalitzPositronAfterTPCdEdxVsEta(NULL),
115 hESDDalitzElectronAfterTPCdEdxVsPhi(NULL),
116 hESDDalitzPositronAfterTPCdEdxVsPhi(NULL),
118 hESDEposEnegPsiPairDPhi(NULL),
119 hESDEposEnegInvMassPt(NULL),
120 hESDEposEnegLikeSignBackInvMassPt(NULL),
121 hESDMotherInvMassPt(NULL),
122 hESDPi0MotherInvMassPt(NULL),
123 hESDPi0MotherDiffInvMassPt(NULL),
124 hESDPi0MotherDiffLimInvMassPt(NULL),
125 sESDMotherInvMassPtZM(NULL),
126 hESDMotherBackInvMassPt(NULL),
127 sESDMotherBackInvMassPtZM(NULL),
129 hMCConvGammaPt(NULL),
130 hMCConvGammaRSPt(NULL),
131 hMCAllPositronsPt(NULL),
132 hMCAllElectronsPt(NULL),
133 hMCPi0DalitzGammaPt(NULL),
134 hMCPi0DalitzElectronPt(NULL),
135 hMCPi0DalitzPositronPt(NULL),
143 hMCChiCInAccPt(NULL),
144 hESDEposEnegTruePi0DalitzInvMassPt(NULL),
145 hESDEposEnegTruePi0DalitzPsiPairDPhi(NULL),
146 hESDEposEnegTrueEtaDalitzInvMassPt(NULL),
147 hESDEposEnegTrueEtaDalitzPsiPairDPhi(NULL),
148 hESDEposEnegTruePhotonInvMassPt(NULL),
149 hESDEposEnegTruePhotonPsiPairDPhi(NULL),
150 hESDEposEnegTrueJPsiInvMassPt(NULL),
151 hESDTrueMotherChiCInvMassPt(NULL),
152 hESDTrueMotherChiCDiffInvMassPt(NULL),
153 hESDTrueMotherInvMassPt(NULL),
154 hESDTrueMotherDalitzInvMassPt(NULL),
155 hESDTrueMotherPi0GGInvMassPt(NULL),
156 hESDTruePrimaryMotherPi0GGInvMassPt(NULL),
157 hESDTrueSecondaryMotherPi0GGInvMassPt(NULL),
158 hESDTruePrimaryMotherInvMassMCPt(NULL),
159 hESDTruePrimaryMotherInvMassPt(NULL),
160 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
161 hESDTruePrimaryPi0DalitzESDPtMCPt(NULL),
162 hESDTrueSecondaryMotherInvMassPt(NULL),
163 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
164 hESDTrueBckGGInvMassPt(NULL),
165 hESDTrueBckContInvMassPt(NULL),
166 hESDTrueMotherGGInvMassPt(NULL),
167 hESDTrueConvGammaPt(NULL),
168 hESDTruePositronPt(NULL),
169 hESDTrueElectronPt(NULL),
170 hESDTrueSecConvGammaPt(NULL),
171 hESDTrueSecPositronPt(NULL),
172 hESDTrueSecElectronPt(NULL),
173 hESDTruePi0DalitzConvGammaPt(NULL),
174 hESDTruePi0DalitzPositronPt(NULL),
175 hESDTruePi0DalitzElectronPt(NULL),
176 hESDTruePi0DalitzSecConvGammaPt(NULL),
177 hESDTruePi0DalitzSecPositronPt(NULL),
178 hESDTruePi0DalitzSecElectronPt(NULL),
180 hNGoodESDTracks(NULL),
189 fNumberOfESDTracks(0),
190 fMoveParticleAccordingToVertex(kFALSE),
192 fDoMesonAnalysis(kTRUE),
193 fDoChicAnalysis(kFALSE),
195 fIsFromMBHeader(kTRUE),
201 //-----------------------------------------------------------------------------------------------
202 AliAnalysisTaskGammaConvDalitzV1::AliAnalysisTaskGammaConvDalitzV1( const char* name ):
203 AliAnalysisTaskSE(name),
219 fSelectorElectronIndex(0),
220 fSelectorPositronIndex(0),
222 fGoodVirtualGammas(NULL),
223 fGoodElectrons(NULL),
224 fGoodPositrons(NULL),
225 fCutGammaArray(NULL),
226 fCutElectronArray(NULL),
227 fCutMesonArray(NULL),
229 fConversionCuts(NULL),
230 hESDConvGammaPt(NULL),
231 hESDConvGammaEta(NULL),
232 hESDConvGammaZR(NULL),
233 hESDDalitzElectronPt(NULL),
234 hESDDalitzPositronPt(NULL),
235 hESDDalitzElectronPhi(NULL),
236 hESDDalitzPositronPhi(NULL),
237 hESDDalitzElectronAfterPt(NULL),
238 hESDDalitzPositronAfterPt(NULL),
239 hESDDalitzElectronAfterEta(NULL),
240 hESDDalitzPositronAfterEta(NULL),
241 hESDDalitzElectronAfterPhi(NULL),
242 hESDDalitzPositronAfterPhi(NULL),
243 hESDDalitzElectronAfterNClsITS(NULL),
244 hESDDalitzPositronAfterNClsITS(NULL),
245 hESDDalitzElectronAfterNFindClsTPC(NULL),
246 hESDDalitzPositronAfterNFindClsTPC(NULL),
247 hESDDalitzElectronAfterNClsTPC(NULL),
248 hESDDalitzPositronAfterNClsTPC(NULL),
249 hESDDalitzPosEleAfterDCAxy(NULL),
250 hESDDalitzPosEleAfterDCAz(NULL),
251 hESDDalitzElectronAfterTPCdEdxVsP(NULL),
252 hESDDalitzPositronAfterTPCdEdxVsP(NULL),
253 hESDDalitzElectronAfterTPCdEdxSignalVsP(NULL),
254 hESDDalitzPositronAfterTPCdEdxSignalVsP(NULL),
255 hESDDalitzElectronAfterTPCdEdxVsEta(NULL),
256 hESDDalitzPositronAfterTPCdEdxVsEta(NULL),
257 hESDDalitzElectronAfterTPCdEdxVsPhi(NULL),
258 hESDDalitzPositronAfterTPCdEdxVsPhi(NULL),
260 hESDEposEnegPsiPairDPhi(NULL),
261 hESDEposEnegInvMassPt(NULL),
262 hESDEposEnegLikeSignBackInvMassPt(NULL),
263 hESDMotherInvMassPt(NULL),
264 hESDPi0MotherInvMassPt(NULL),
265 hESDPi0MotherDiffInvMassPt(NULL),
266 hESDPi0MotherDiffLimInvMassPt(NULL),
267 sESDMotherInvMassPtZM(NULL),
268 hESDMotherBackInvMassPt(NULL),
269 sESDMotherBackInvMassPtZM(NULL),
271 hMCConvGammaPt(NULL),
272 hMCConvGammaRSPt(NULL),
273 hMCAllPositronsPt(NULL),
274 hMCAllElectronsPt(NULL),
275 hMCPi0DalitzGammaPt(NULL),
276 hMCPi0DalitzElectronPt(NULL),
277 hMCPi0DalitzPositronPt(NULL),
285 hMCChiCInAccPt(NULL),
286 hESDEposEnegTruePi0DalitzInvMassPt(NULL),
287 hESDEposEnegTruePi0DalitzPsiPairDPhi(NULL),
288 hESDEposEnegTrueEtaDalitzInvMassPt(NULL),
289 hESDEposEnegTrueEtaDalitzPsiPairDPhi(NULL),
290 hESDEposEnegTruePhotonInvMassPt(NULL),
291 hESDEposEnegTruePhotonPsiPairDPhi(NULL),
292 hESDEposEnegTrueJPsiInvMassPt(NULL),
293 hESDTrueMotherChiCInvMassPt(NULL),
294 hESDTrueMotherChiCDiffInvMassPt(NULL),
295 hESDTrueMotherInvMassPt(NULL),
296 hESDTrueMotherDalitzInvMassPt(NULL),
297 hESDTrueMotherPi0GGInvMassPt(NULL),
298 hESDTruePrimaryMotherPi0GGInvMassPt(NULL),
299 hESDTrueSecondaryMotherPi0GGInvMassPt(NULL),
300 hESDTruePrimaryMotherInvMassMCPt(NULL),
301 hESDTruePrimaryMotherInvMassPt(NULL),
302 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
303 hESDTruePrimaryPi0DalitzESDPtMCPt(NULL),
304 hESDTrueSecondaryMotherInvMassPt(NULL),
305 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
306 hESDTrueBckGGInvMassPt(NULL),
307 hESDTrueBckContInvMassPt(NULL),
308 hESDTrueMotherGGInvMassPt(NULL),
309 hESDTrueConvGammaPt(NULL),
310 hESDTruePositronPt(NULL),
311 hESDTrueElectronPt(NULL),
312 hESDTrueSecConvGammaPt(NULL),
313 hESDTrueSecPositronPt(NULL),
314 hESDTrueSecElectronPt(NULL),
315 hESDTruePi0DalitzConvGammaPt(NULL),
316 hESDTruePi0DalitzPositronPt(NULL),
317 hESDTruePi0DalitzElectronPt(NULL),
318 hESDTruePi0DalitzSecConvGammaPt(NULL),
319 hESDTruePi0DalitzSecPositronPt(NULL),
320 hESDTruePi0DalitzSecElectronPt(NULL),
322 hNGoodESDTracks(NULL),
331 fNumberOfESDTracks(0),
332 fMoveParticleAccordingToVertex(kFALSE),
334 fDoMesonAnalysis(kTRUE),
335 fDoChicAnalysis(kFALSE),
337 fIsFromMBHeader(kTRUE),
340 DefineOutput(1, TList::Class());
343 //-----------------------------------------------------------------------------------------------
344 AliAnalysisTaskGammaConvDalitzV1::~AliAnalysisTaskGammaConvDalitzV1()
347 // virtual destructor
349 cout<<"Destructor"<<endl;
355 if(fGoodVirtualGammas){
356 delete fGoodVirtualGammas;
372 delete[] fGammasPool;
376 //___________________________________________________________
377 void AliAnalysisTaskGammaConvDalitzV1::InitBack(){
379 const Int_t nDim = 4;
380 Int_t nBins[nDim] = {800,250,7,4};
381 Double_t xMin[nDim] = {0,0, 0,0};
382 Double_t xMax[nDim] = {0.8,25,7,4};
384 sESDMotherInvMassPtZM = new THnSparseF*[fnCuts];
385 sESDMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
387 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
388 //fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
389 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
390 //if (((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->DoBGCalculation()){
393 TString cutstringElectron = ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
394 TString cutstringMeson = ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
395 TString cutstringGamma = ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
399 Int_t collisionSystem = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(0,1));
400 Int_t centMin = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(1,1));
401 Int_t centMax = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(2,1));
403 if(collisionSystem == 1 || collisionSystem == 2 ||
404 collisionSystem == 5 || collisionSystem == 8 ||
405 collisionSystem == 9){
406 centMin = centMin*10;
407 centMax = centMax*10;
409 else if(collisionSystem == 3 || collisionSystem == 6){
413 else if(collisionSystem == 4 || collisionSystem == 7){
414 centMin = ((centMin*5)+45);
415 centMax = ((centMax*5)+45);
419 fBackList[iCut] = new TList();
420 fBackList[iCut]->SetName(Form("%s_%s_%s Back histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
421 fBackList[iCut]->SetOwner(kTRUE);
422 fCutFolder[iCut]->Add(fBackList[iCut]);
424 sESDMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
425 fBackList[iCut]->Add(sESDMotherBackInvMassPtZM[iCut]);
427 fMotherList[iCut] = new TList();
428 fMotherList[iCut]->SetName(Form("%s_%s_%s Mother histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
429 fMotherList[iCut]->SetOwner(kTRUE);
430 fCutFolder[iCut]->Add(fMotherList[iCut]);
432 sESDMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
433 fMotherList[iCut]->Add(sESDMotherInvMassPtZM[iCut]);
436 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
437 collisionSystem,centMin,centMax,
438 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->NumberOfRotationEvents(),
439 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->UseTrackMultiplicity());
441 if( ( (AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetBKGMethod() == 3 ){
442 fGammasPool[iCut] = new TList();
449 //______________________________________________________________________
450 void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
453 // Create ouput objects
456 // Create the output container
457 if(fOutputContainer != NULL){
458 delete fOutputContainer;
459 fOutputContainer = NULL;
461 if(fOutputContainer == NULL){
462 fOutputContainer = new TList();
463 fOutputContainer->SetOwner(kTRUE);
466 fGoodGammas = new TList();
467 //fGoodGammas->SetOwner(kTRUE);
470 fGoodVirtualGammas = new TList();
471 //fGoodVirtualGammas->SetOwner(kTRUE);
475 fGammasPool = new TList*[fnCuts];
476 fCutFolder = new TList*[fnCuts];
477 fESDList = new TList*[fnCuts];
478 fBackList = new TList*[fnCuts];
479 fMotherList = new TList*[fnCuts];
480 //fQAFolder = new TList*[fnCuts];
481 hNEvents = new TH1I*[fnCuts];
482 hNGoodESDTracks = new TH1I*[fnCuts];
483 hEtaShift = new TProfile*[fnCuts];
484 hESDConvGammaPt = new TH1F*[fnCuts];
485 hESDConvGammaEta = new TH1F*[fnCuts];
487 hESDDalitzElectronPt = new TH1F*[fnCuts];
488 hESDDalitzPositronPt = new TH1F*[fnCuts];
489 hESDDalitzElectronPhi = new TH1F*[fnCuts];
490 hESDDalitzPositronPhi = new TH1F*[fnCuts];
494 fQAFolder = new TList*[fnCuts];
496 hESDDalitzElectronAfterPt = new TH1F*[fnCuts];
497 hESDDalitzPositronAfterPt = new TH1F*[fnCuts];
498 hESDDalitzElectronAfterEta = new TH1F*[fnCuts];
499 hESDDalitzPositronAfterEta = new TH1F*[fnCuts];
500 hESDDalitzElectronAfterPhi = new TH1F*[fnCuts];
501 hESDDalitzPositronAfterPhi = new TH1F*[fnCuts];
502 hESDDalitzElectronAfterNClsITS = new TH1F*[fnCuts];
503 hESDDalitzPositronAfterNClsITS = new TH1F*[fnCuts];
504 hESDDalitzElectronAfterNFindClsTPC = new TH2F*[fnCuts];
505 hESDDalitzPositronAfterNFindClsTPC = new TH2F*[fnCuts];
506 hESDDalitzElectronAfterNClsTPC = new TH2F*[fnCuts];
507 hESDDalitzPositronAfterNClsTPC = new TH2F*[fnCuts];
508 hESDDalitzPosEleAfterDCAxy = new TH2F*[fnCuts];
509 hESDDalitzPosEleAfterDCAz = new TH2F*[fnCuts];
510 hESDDalitzElectronAfterTPCdEdxVsP = new TH2F*[fnCuts];
511 hESDDalitzPositronAfterTPCdEdxVsP = new TH2F*[fnCuts];
512 hESDDalitzElectronAfterTPCdEdxSignalVsP = new TH2F*[fnCuts];
513 hESDDalitzPositronAfterTPCdEdxSignalVsP = new TH2F*[fnCuts];
514 hESDDalitzElectronAfterTPCdEdxVsEta = new TH2F*[fnCuts];
515 hESDDalitzPositronAfterTPCdEdxVsEta = new TH2F*[fnCuts];
516 hESDDalitzElectronAfterTPCdEdxVsPhi = new TH2F*[fnCuts];
517 hESDDalitzPositronAfterTPCdEdxVsPhi = new TH2F*[fnCuts];
518 hESDMotherPhi = new TH1F*[fnCuts];
519 hESDEposEnegPsiPairDPhi = new TH2F*[fnCuts];
520 hESDConvGammaZR = new TH2F*[fnCuts];
526 hESDMotherInvMassPt = new TH2F*[fnCuts];
528 if(fDoChicAnalysis) {
529 hESDEposEnegInvMassPt = new TH2F*[fnCuts];
530 hESDEposEnegLikeSignBackInvMassPt = new TH2F*[fnCuts];
531 hESDPi0MotherInvMassPt = new TH2F*[fnCuts];
532 hESDPi0MotherDiffInvMassPt = new TH2F*[fnCuts];
533 hESDPi0MotherDiffLimInvMassPt = new TH2F*[fnCuts];
537 hESDMotherBackInvMassPt = new TH2F*[fnCuts];
540 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
543 TString cutstringElectron =((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
544 TString cutstringMeson= ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
545 TString cutstringGamma = ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
547 fCutFolder[iCut] = new TList();
548 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s_%s",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
549 fCutFolder[iCut]->SetOwner(kTRUE);
550 fOutputContainer->Add(fCutFolder[iCut]);
552 fESDList[iCut] = new TList();
553 fESDList[iCut]->SetName(Form("%s_%s_%s ESD histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
554 fESDList[iCut]->SetOwner(kTRUE);
557 hNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
558 hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
559 hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
560 hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
561 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
562 hNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
563 hNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
564 hNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
565 hNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
566 hNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
567 fESDList[iCut]->Add(hNEvents[iCut]);
571 if(fIsHeavyIon) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",3000,0,3000);
572 else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
573 fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
575 hEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
576 fESDList[iCut]->Add(hEtaShift[iCut]);
578 hESDConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
579 fESDList[iCut]->Add(hESDConvGammaPt[iCut]);
581 hESDConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",600,-1.5,1.5);
582 fESDList[iCut]->Add(hESDConvGammaEta[iCut]);
584 hESDDalitzElectronPt[iCut] = new TH1F("ESD_DalitzElectron_Pt","ESD_DalitzElectron_Pt",1000,0,25);
585 fESDList[iCut]->Add(hESDDalitzElectronPt[iCut]);
587 hESDDalitzPositronPt[iCut] = new TH1F("ESD_DalitzPositron_Pt","ESD_DalitzPositron_Pt",1000,0,25);
588 fESDList[iCut]->Add(hESDDalitzPositronPt[iCut]);
591 hESDDalitzElectronPhi[iCut] = new TH1F("ESD_DalitzElectron_Phi","ESD_DalitzElectron_Phi",360,0,2*TMath::Pi());
592 fESDList[iCut]->Add(hESDDalitzElectronPhi[iCut]);
594 hESDDalitzPositronPhi[iCut] = new TH1F("ESD_DalitzPositron_Phi","ESD_DalitzPositron_Phi",360,0,2*TMath::Pi());
595 fESDList[iCut]->Add(hESDDalitzPositronPhi[iCut]);
601 fQAFolder[iCut] = new TList();
602 fQAFolder[iCut]->SetName(Form("%s_%s_%s QA histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
603 fQAFolder[iCut]->SetOwner(kTRUE);
607 const Int_t kDCABins=62;
608 Double_t binsDCADummy[63]={-3.0,-2.7,-2.4,-2.1,-1.8,-1.5,-1.2,-0.9,-0.6,-0.3,-0.25,-0.2,-0.19,-0.18,-0.17,-0.16,-0.15,-0.14,-0.13,-0.12,-0.11,-0.10,-0.09,-0.08,-0.07,-0.06,-0.05,-0.04,-0.03,-0.02,-0.01,0.0,0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.19,0.2,0.25,0.3,0.6,0.9,1.2,1.5,1.8,2.1,2.4,2.7,3.0};
610 const Int_t kPtBins=110;
611 Double_t binsPtDummy[kPtBins+1];
612 const Int_t kPBins = 109;
613 Double_t binsPDummy[kPBins+1];
617 for(Int_t i=1;i<kPtBins+1;i++)
619 if(binsPtDummy[i-1]+0.05<1.01)
620 binsPtDummy[i]=binsPtDummy[i-1]+0.05;
622 binsPtDummy[i]=binsPtDummy[i-1]+0.1;
625 for(Int_t i=1; i<kPBins+1;i++){
627 if( binsPDummy[i-1]+0.05<1.01)
628 binsPDummy[i] = binsPDummy[i-1]+0.05;
630 binsPDummy[i] = binsPDummy[i-1]+0.1;
636 hESDConvGammaZR[iCut]= new TH2F("ESD_ConvGamma_ConversionPoint_ZR","ESD_ConvGamma_ConversionPoint_ZR",600,-150,150,240,0,120);
637 fQAFolder[iCut]->Add(hESDConvGammaZR[iCut]);
639 hESDDalitzElectronAfterPt[iCut] = new TH1F("ESD_DalitzElectron_After_Pt","ESD_DalitzElectron_After_Pt",1000,0,25);
640 fQAFolder[iCut]->Add(hESDDalitzElectronAfterPt[iCut]);
642 hESDDalitzPositronAfterPt[iCut] = new TH1F("ESD_DalitzPositron_After_Pt","ESD_DalitzPositron_After_Pt",1000,0,25);
643 fQAFolder[iCut]->Add(hESDDalitzPositronAfterPt[iCut]);
645 hESDDalitzElectronAfterEta[iCut] = new TH1F("ESD_DalitzElectron_After_Eta","ESD_DalitzElectron_After_Eta",600,-1.5,1.5);
646 fQAFolder[iCut]->Add(hESDDalitzElectronAfterEta[iCut]);
648 hESDDalitzPositronAfterEta[iCut] = new TH1F("ESD_DalitzPositron_After_Eta","ESD_DalitzElectron_After_Eta",600,-1.5,1.5);
649 fQAFolder[iCut]->Add(hESDDalitzPositronAfterEta[iCut]);
652 hESDDalitzElectronAfterPhi[iCut] = new TH1F("ESD_DalitzElectron_After_Phi","ESD_DalitzElectron_After_Phi",360,0,2*TMath::Pi());
653 fQAFolder[iCut]->Add(hESDDalitzElectronAfterPhi[iCut]);
655 hESDDalitzPositronAfterPhi[iCut] = new TH1F("ESD_DalitzPositron_After_Phi","ESD_DalitzPositron_After_Phi",360,0,2*TMath::Pi());
656 fQAFolder[iCut]->Add(hESDDalitzPositronAfterPhi[iCut]);
658 hESDDalitzElectronAfterNClsITS[iCut] = new TH1F("ESD_DalitzElectron_After_NClsITS","ESD_DalitzElectron_After_NClsITS",6,0.,6.);
659 fQAFolder[iCut]->Add(hESDDalitzElectronAfterNClsITS[iCut]);
661 hESDDalitzPositronAfterNClsITS[iCut] = new TH1F("ESD_DalitzPositron_After_NClsITS","ESD_DalitzPositron_After_NClsITS",6,0.,6.);
662 fQAFolder[iCut]->Add(hESDDalitzPositronAfterNClsITS[iCut]);
665 hESDDalitzElectronAfterNFindClsTPC[iCut] = new TH2F("ESD_DalitzElectron_After_NFindClsTPC","ESD_DalitzElectron_After_NFindClsTPC",50,0,1,kPtBins,binsPtDummy);
666 fQAFolder[iCut]->Add(hESDDalitzElectronAfterNFindClsTPC[iCut]);
668 hESDDalitzPositronAfterNFindClsTPC[iCut] = new TH2F("ESD_DalitzPositron_After_NFindClsTPC","ESD_DalitzPositron_After_NFindClsTPC",50,0,1,kPtBins,binsPtDummy);
669 fQAFolder[iCut]->Add(hESDDalitzPositronAfterNFindClsTPC[iCut]);
672 hESDDalitzElectronAfterNClsTPC[iCut] = new TH2F("ESD_DalitzElectron_After_NClsTPC","ESD_DalitzElectron_After_NClsTPC",200,0,200,kPtBins,binsPtDummy);
673 fQAFolder[iCut]->Add(hESDDalitzElectronAfterNClsTPC[iCut]);
675 hESDDalitzPositronAfterNClsTPC[iCut] = new TH2F("ESD_DalitzPositron_After_NClsTPC","ESD_DalitzPositron_After_NClsTPC",200,0,200,kPtBins,binsPtDummy);
676 fQAFolder[iCut]->Add(hESDDalitzPositronAfterNClsTPC[iCut]);
680 hESDDalitzPosEleAfterDCAxy[iCut] = new TH2F("ESD_DalitzPosEle_After_DCAxy","ESD_DalitzPosEle_After_DCAxy",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
681 fQAFolder[iCut]->Add(hESDDalitzPosEleAfterDCAxy[iCut]);
683 hESDDalitzPosEleAfterDCAz[iCut] = new TH2F("ESD_DalitzPosEle_After_DCAz","ESD_DalitzPosEle_After_DCAz",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
684 fQAFolder[iCut]->Add(hESDDalitzPosEleAfterDCAz[iCut]);
686 hESDDalitzElectronAfterTPCdEdxVsP[iCut] = new TH2F("ESD_DalitzElectron_After_TPCdEdxVsP","ESD_DalitzElectron_After_TPCdEdxVsP_After_TPCdEdx",kPBins,binsPDummy,200,-10,10);
687 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxVsP[iCut]);
689 hESDDalitzPositronAfterTPCdEdxVsP[iCut] = new TH2F("ESD_DalitzPositron_After_TPCdEdxVsP","ESD_DalitzPositron_After_TPCdEdxVsP",kPBins,binsPDummy,200,-10,10);
690 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxVsP[iCut]);
692 hESDDalitzElectronAfterTPCdEdxSignalVsP[iCut] =new TH2F("ESD_DalitzElectron_After_TPCdEdxSignalVsP","ESD_DalitzElectron_After_TPCdEdxSignalVsP" ,kPBins,binsPDummy,200,0.0,200);
693 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxSignalVsP[iCut]);
695 hESDDalitzPositronAfterTPCdEdxSignalVsP[iCut] =new TH2F("ESD_DalitzPositron_After_TPCdEdxSignalVsP","ESD_DalitzPositron_After_TPCdEdxSignalVsP" ,kPBins,binsPDummy,200,0.0,200);
696 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxSignalVsP[iCut]);
698 hESDDalitzElectronAfterTPCdEdxVsEta[iCut] = new TH2F("ESD_DalitzElectron_After_TPCdEdxVsEta","ESD_DalitzElectron_After_TPCdEdxVsEta",140,-1.4,1.4,200,-10,10);
699 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxVsEta[iCut]);
701 hESDDalitzPositronAfterTPCdEdxVsEta[iCut] = new TH2F("ESD_DalitzPositron_After_TPCdEdxVsEta","ESD_DalitzPositron_After_TPCdEdxVsEta",140,-1.4,1.4,200,-10,10);
702 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxVsEta[iCut]);
704 hESDDalitzElectronAfterTPCdEdxVsPhi[iCut] = new TH2F("ESD_DalitzElectron_After_TPCdEdxVsPhi","ESD_DalitzElectron_After_TPCdEdxVsPhi",180,0,2*TMath::Pi(),200,-10,10);
705 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxVsPhi[iCut]);
707 hESDDalitzPositronAfterTPCdEdxVsPhi[iCut] = new TH2F("ESD_DalitzPositron_After_TPCdEdxVsPhi","ESD_DalitzPositron_After_TPCdEdxVsPhi",180,0,2*TMath::Pi(),200,-10,10);
708 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxVsPhi[iCut]);
710 hESDMotherPhi[iCut] = new TH1F("ESD_DalitzMother_Phi","ESD_DalitzMother_Phi",360,0,2*TMath::Pi());
711 fQAFolder[iCut]->Add(hESDMotherPhi[iCut]);
713 hESDEposEnegPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_PsiPair_DPhi","ESD_EposEneg_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
714 fQAFolder[iCut]->Add(hESDEposEnegPsiPairDPhi[iCut]);
716 //hESDEposEnegInvMassPt[iCut] = new TH2F("ESD_EposEneg_InvMassPt","ESD_EposEneg_InvMassPt",5000,0.,5.,100,0.,10.);
717 //fQAFolder[iCut]->Add(hESDEposEnegInvMassPt[iCut]);
719 //hESDEposEnegLikeSignBackInvMassPt[iCut] = new TH2F("ESD_EposEneg_LikeSignBack_InvMassPt","ESD_EposEneg_LikeSignBack_InvMassPt",5000,0.,5.,100,0.,10.);
720 //fQAFolder[iCut]->Add(hESDEposEnegLikeSignBackInvMassPt[iCut]);
723 TAxis *AxisAfter = hESDDalitzElectronAfterTPCdEdxVsP[iCut]->GetXaxis();
724 Int_t bins = AxisAfter->GetNbins();
725 Double_t from = AxisAfter->GetXmin();
726 Double_t to = AxisAfter->GetXmax();
727 Double_t *newBins = new Double_t[bins+1];
729 Double_t factor = TMath::Power(to/from, 1./bins);
730 for(Int_t i=1; i<=bins; ++i) newBins[i] = factor * newBins[i-1];
732 AxisAfter->Set(bins, newBins);
733 AxisAfter = hESDDalitzElectronAfterTPCdEdxSignalVsP[iCut]->GetXaxis();
734 AxisAfter->Set(bins, newBins);
736 AxisAfter = hESDDalitzPositronAfterTPCdEdxVsP[iCut]->GetXaxis();
737 AxisAfter->Set(bins, newBins);
739 AxisAfter = hESDDalitzPositronAfterTPCdEdxSignalVsP[iCut]->GetXaxis();
740 AxisAfter->Set(bins,newBins);
746 fCutFolder[iCut]->Add(fQAFolder[iCut]);
756 hESDMotherInvMassPt[iCut] = new TH2F("ESD_DalitzMother_InvMass_Pt","ESD_DalitzMother_InvMass_Pt",800,0,0.8,250,0,25);
757 fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
760 if( fDoChicAnalysis) {
762 hESDPi0MotherInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_InvMass_Pt","ESD_Pi0Mother_InvMass_Pt",4000,0,4,250,0,25);
763 fESDList[iCut]->Add(hESDPi0MotherInvMassPt[iCut]);
765 hESDPi0MotherDiffInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_DiffInvMass_Pt","ESD_Pi0Mother_DiffInvMass_Pt",2000,0,2,250,0,25);
766 fESDList[iCut]->Add(hESDPi0MotherDiffInvMassPt[iCut]);
768 hESDPi0MotherDiffLimInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_DiffLimInvMass_Pt","ESD_Pi0Mother_DiffLimInvMass_Pt",2000,0,2,250,0,25);
769 fESDList[iCut]->Add(hESDPi0MotherDiffLimInvMassPt[iCut]);
771 hESDEposEnegInvMassPt[iCut] = new TH2F("ESD_EposEneg_InvMassPt","ESD_EposEneg_InvMassPt",5000,0.,5.,100,0.,10.);
772 fESDList[iCut]->Add(hESDEposEnegInvMassPt[iCut]);
774 hESDEposEnegLikeSignBackInvMassPt[iCut] = new TH2F("ESD_EposEneg_LikeSignBack_InvMassPt","ESD_EposEneg_LikeSignBack_InvMassPt",5000,0.,5.,100,0.,10.);
775 fESDList[iCut]->Add(hESDEposEnegLikeSignBackInvMassPt[iCut]);
782 hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_DalitzBackground_InvMass_Pt","ESD_DalitzBackground_InvMass_Pt",800,0,0.8,250,0,25);
783 fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
787 fCutFolder[iCut]->Add(fESDList[iCut]);
794 InitBack(); // Init Background Handler
800 fMCList = new TList*[fnCuts];
802 fTrueList = new TList*[fnCuts];
803 hESDTrueConvGammaPt = new TH1F*[fnCuts];
804 hESDTruePositronPt = new TH1F*[fnCuts];
805 hESDTrueElectronPt = new TH1F*[fnCuts];
806 hESDTrueSecConvGammaPt = new TH1F*[fnCuts];
807 hESDTrueSecPositronPt = new TH1F*[fnCuts];
808 hESDTrueSecElectronPt = new TH1F*[fnCuts];
809 hESDTruePi0DalitzConvGammaPt = new TH1F*[fnCuts];
810 hESDTruePi0DalitzPositronPt = new TH1F*[fnCuts];
811 hESDTruePi0DalitzElectronPt = new TH1F*[fnCuts];
812 hESDTruePi0DalitzSecConvGammaPt = new TH1F*[fnCuts];
813 hESDTruePi0DalitzSecPositronPt = new TH1F*[fnCuts];
814 hESDTruePi0DalitzSecElectronPt = new TH1F*[fnCuts];
815 //if(fDoMesonAnalysis){
816 hMCAllGammaPt = new TH1F*[fnCuts];
817 hMCConvGammaPt = new TH1F*[fnCuts];
818 hMCConvGammaRSPt = new TH1F*[fnCuts];
819 hMCAllPositronsPt = new TH1F*[fnCuts];
820 hMCAllElectronsPt = new TH1F*[fnCuts];
821 hMCPi0DalitzGammaPt = new TH1F*[fnCuts];
822 hMCPi0DalitzElectronPt = new TH1F*[fnCuts];
823 hMCPi0DalitzPositronPt = new TH1F*[fnCuts];
825 hMCPi0Pt = new TH1F*[fnCuts];
826 hMCPi0GGPt = new TH1F*[fnCuts];
827 hMCEtaPt = new TH1F*[fnCuts];
828 hMCEtaGGPt = new TH1F*[fnCuts];
829 hMCPi0InAccPt = new TH1F*[fnCuts];
830 hMCEtaInAccPt = new TH1F*[fnCuts];
831 hMCChiCPt = new TH1F*[fnCuts];
832 hMCChiCInAccPt = new TH1F*[fnCuts];
836 hESDEposEnegTruePi0DalitzInvMassPt = new TH2F*[fnCuts];
837 hESDEposEnegTruePi0DalitzPsiPairDPhi = new TH2F*[fnCuts];
838 hESDEposEnegTrueEtaDalitzInvMassPt = new TH2F*[fnCuts];
839 hESDEposEnegTrueEtaDalitzPsiPairDPhi = new TH2F*[fnCuts];
840 hESDEposEnegTruePhotonInvMassPt = new TH2F*[fnCuts];
841 hESDEposEnegTruePhotonPsiPairDPhi = new TH2F*[fnCuts];
842 hESDEposEnegTrueJPsiInvMassPt = new TH2F*[fnCuts];
846 if( fDoChicAnalysis ){
847 hESDTrueMotherChiCInvMassPt = new TH2F*[fnCuts];
848 hESDTrueMotherChiCDiffInvMassPt = new TH2F*[fnCuts];
852 hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
853 hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
854 hESDTrueMotherPi0GGInvMassPt = new TH2F*[fnCuts];
855 hESDTruePrimaryMotherPi0GGInvMassPt = new TH2F*[fnCuts];
856 hESDTrueSecondaryMotherPi0GGInvMassPt = new TH2F*[fnCuts];
857 hESDTruePrimaryPi0DalitzESDPtMCPt = new TH2F*[fnCuts];
858 hESDTruePrimaryMotherInvMassMCPt = new TH2F*[fnCuts];
859 hESDTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
860 hESDTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
861 hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
862 hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
863 hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
864 hESDTrueBckContInvMassPt = new TH2F*[fnCuts];
865 hESDTrueMotherGGInvMassPt = new TH2F*[fnCuts];
868 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
869 TString cutstringElectron =((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
870 TString cutstringMeson= ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
871 TString cutstringGamma = ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
873 fMCList[iCut] = new TList();
874 fMCList[iCut]->SetName(Form("%s_%s_%s MC histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
875 fMCList[iCut]->SetOwner(kTRUE);
876 fCutFolder[iCut]->Add(fMCList[iCut]);
879 hMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
880 fMCList[iCut]->Add(hMCAllGammaPt[iCut]);
882 hMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
883 fMCList[iCut]->Add(hMCConvGammaPt[iCut]);
885 hMCConvGammaRSPt[iCut] = new TH1F("MC_ConvGamma_RS_Pt","MC_ConvGamma_RS_Pt",250,0,25);
886 fMCList[iCut]->Add(hMCConvGammaRSPt[iCut]);
889 hMCAllPositronsPt[iCut] = new TH1F("MC_AllPositrons_Pt","MC_AllPositrons_Pt",1000,0,25);
890 fMCList[iCut]->Add(hMCAllPositronsPt[iCut]);
892 hMCAllElectronsPt[iCut] = new TH1F("MC_AllElectrons_Pt","MC_AllElectrons_Pt",1000,0,25);
893 fMCList[iCut]->Add(hMCAllElectronsPt[iCut]);
895 hMCPi0DalitzGammaPt[iCut] = new TH1F("MC_Pi0DalitzGamma_Pt","MC_Pi0DalitzGamma_Pt",250,0,25);
896 hMCPi0DalitzGammaPt[iCut]->Sumw2();
897 fMCList[iCut]->Add(hMCPi0DalitzGammaPt[iCut]);
899 hMCPi0DalitzPositronPt[iCut] = new TH1F("MC_Pi0DalitzPositron_Pt","MC_Pi0DalitzPositron_Pt",1000,0,25);
900 hMCPi0DalitzPositronPt[iCut]->Sumw2();
901 fMCList[iCut]->Add(hMCPi0DalitzPositronPt[iCut]);
903 hMCPi0DalitzElectronPt[iCut] = new TH1F("MC_Pi0DalitzElectron_Pt","MC_Pi0DalitzElectron_Pt",1000,0,25);
904 hMCPi0DalitzElectronPt[iCut]->Sumw2();
905 fMCList[iCut]->Add(hMCPi0DalitzElectronPt[iCut]);
908 hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
909 hMCPi0Pt[iCut]->Sumw2();
910 fMCList[iCut]->Add(hMCPi0Pt[iCut]);
912 hMCPi0GGPt[iCut] = new TH1F("MC_Pi0_GG_Pt","MC_Pi0_GG_Pt",250,0,25);
913 hMCPi0GGPt[iCut]->Sumw2();
914 fMCList[iCut]->Add(hMCPi0GGPt[iCut]);
916 hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
917 hMCEtaPt[iCut]->Sumw2();
918 fMCList[iCut]->Add(hMCEtaPt[iCut]);
920 hMCEtaGGPt[iCut] = new TH1F("MC_Eta_GG_Pt","MC_Eta_GG_Pt",250,0,25);
921 hMCEtaGGPt[iCut]->Sumw2();
922 fMCList[iCut]->Add(hMCEtaGGPt[iCut]);
924 hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0DalitzInAcc_Pt","MC_Pi0DalitzInAcc_Pt",250,0,25);
925 hMCPi0InAccPt[iCut]->Sumw2();
926 fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
928 hMCEtaInAccPt[iCut] = new TH1F("MC_EtaDalitzInAcc_Pt","MC_EtaDalitzInAcc_Pt",250,0,25);
929 hMCEtaInAccPt[iCut]->Sumw2();
930 fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
932 hMCChiCPt[iCut] = new TH1F("MC_ChiC_Pt","MC_ChiC_Pt",250,0,25);
933 fMCList[iCut]->Add(hMCChiCPt[iCut]);
935 hMCChiCInAccPt[iCut] = new TH1F("MC_ChiCInAcc_Pt","MC_ChiCInAcc_Pt",250,0,25);
936 fMCList[iCut]->Add(hMCChiCInAccPt[iCut]);
938 fTrueList[iCut] = new TList();
939 fTrueList[iCut]->SetName(Form("%s_%s_%s True histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
940 fTrueList[iCut]->SetOwner(kTRUE);
941 fCutFolder[iCut]->Add(fTrueList[iCut]);
946 hESDEposEnegTruePi0DalitzInvMassPt[iCut] = new TH2F("ESD_EposEneg_TruePi0Dalitz_InvMassPt","ESD_EposEneg_TruePi0Dalitz_InvMassPt",5000,0.,5.,100,0.,10.);
947 fTrueList[iCut]->Add(hESDEposEnegTruePi0DalitzInvMassPt[iCut]);
949 hESDEposEnegTruePi0DalitzPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TruePi0Dalitz_PsiPair_DPhi","ESD_EposEneg_TruePi0Dalitz_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
950 fTrueList[iCut]->Add(hESDEposEnegTruePi0DalitzPsiPairDPhi[iCut]);
953 hESDEposEnegTrueEtaDalitzInvMassPt[iCut] = new TH2F("ESD_EposEneg_TrueEtaDalitz_InvMassPt","ESD_EposEneg_TrueEtaDalitz_InvMassPt",5000,0.,5.,100,0.,10.);
954 fTrueList[iCut]->Add(hESDEposEnegTrueEtaDalitzInvMassPt[iCut]);
956 hESDEposEnegTrueEtaDalitzPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TrueEtaDalitz_PsiPair_DPhi","ESD_EposEneg_TrueEtaDalitz_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
957 fTrueList[iCut]->Add(hESDEposEnegTrueEtaDalitzPsiPairDPhi[iCut]);
959 hESDEposEnegTruePhotonInvMassPt[iCut] = new TH2F("ESD_EposEneg_TruePhoton_InvMassPt","ESD_EposEneg_TruePhoton_InvMassPt",5000,0.,5.,100,0.,10.);
960 fTrueList[iCut]->Add(hESDEposEnegTruePhotonInvMassPt[iCut]);
962 hESDEposEnegTruePhotonPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TruePhoton_PsiPair_DPhi","ESD_EposEneg_TruePhoton_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
963 fTrueList[iCut]->Add(hESDEposEnegTruePhotonPsiPairDPhi[iCut]);
965 hESDEposEnegTrueJPsiInvMassPt[iCut] = new TH2F("ESD_EposEneg_TrueJPsi_InvMassPt","ESD_EposEneg_TrueJPsi_InvMassPt",5000,0.,5.,100,0.,10.);
966 fTrueList[iCut]->Add(hESDEposEnegTrueJPsiInvMassPt[iCut]);
973 hESDTruePositronPt[iCut] = new TH1F("ESD_TruePositron_Pt","ESD_TruePositron_Pt",1000,0,25);
974 fTrueList[iCut]->Add(hESDTruePositronPt[iCut]);
976 hESDTrueElectronPt[iCut] = new TH1F("ESD_TrueElectron_Pt","ESD_TrueElectron_Pt",1000,0,25);
977 fTrueList[iCut]->Add(hESDTrueElectronPt[iCut]);
979 hESDTrueSecPositronPt[iCut] = new TH1F("ESD_TrueSecPositron_Pt","ESD_TrueSecPositron_Pt",1000,0,25);
980 fTrueList[iCut]->Add(hESDTrueSecPositronPt[iCut]);
982 hESDTrueSecElectronPt[iCut] = new TH1F("ESD_TrueSecElectron_Pt","ESD_TrueSecElectron_Pt",1000,0,25);
983 fTrueList[iCut]->Add(hESDTrueSecElectronPt[iCut]);
985 hESDTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
986 fTrueList[iCut]->Add(hESDTrueConvGammaPt[iCut]);
988 hESDTrueSecConvGammaPt[iCut] = new TH1F("ESD_TrueSecConvGamma_Pt","ESD_TrueSecConvGamma_Pt",250,0,25);
989 fTrueList[iCut]->Add(hESDTrueSecConvGammaPt[iCut]);
991 hESDTruePi0DalitzConvGammaPt[iCut] = new TH1F("ESD_TruePi0DalitzConvGamma_Pt","ESD_TruePi0DalitzConvGamma_Pt",250,0,25);
992 fTrueList[iCut]->Add(hESDTruePi0DalitzConvGammaPt[iCut]);
994 hESDTruePi0DalitzElectronPt[iCut] = new TH1F("ESD_TruePi0DalitzElectron_Pt","ESD_TruePi0DalitzElectron_Pt",1000,0,25);
995 fTrueList[iCut]->Add(hESDTruePi0DalitzElectronPt[iCut]);
997 hESDTruePi0DalitzPositronPt[iCut] = new TH1F("ESD_TruePi0DalitzPositron_Pt","ESD_TruePi0DalitzPositron_Pt",1000,0,25);
998 fTrueList[iCut]->Add(hESDTruePi0DalitzPositronPt[iCut]);
1000 hESDTruePi0DalitzSecConvGammaPt[iCut] = new TH1F("ESD_TruePi0DalitzSecConvGamma_Pt","ESD_TruePi0DalitzSecConvGamma_Pt",250,0,25);
1001 fTrueList[iCut]->Add(hESDTruePi0DalitzSecConvGammaPt[iCut]);
1003 hESDTruePi0DalitzSecElectronPt[iCut] = new TH1F("ESD_TruePi0DalitzSecElectron_Pt","ESD_TruePi0DalitzSecElectron_Pt",1000,0,25);
1004 fTrueList[iCut]->Add(hESDTruePi0DalitzSecElectronPt[iCut]);
1006 hESDTruePi0DalitzSecPositronPt[iCut] = new TH1F("ESD_TruePi0DalitzSecPositron_Pt","ESD_TruePi0DalitzSecPositron_Pt",1000,0,25);
1007 fTrueList[iCut]->Add(hESDTruePi0DalitzSecPositronPt[iCut]);
1009 if( fDoChicAnalysis) {
1011 hESDTrueMotherChiCInvMassPt[iCut] = new TH2F("ESD_TrueMotherChiC_InvMass_Pt","ESD_TrueMotherChiC_InvMass_Pt",4000,0,4,250,0,25);
1012 fTrueList[iCut]->Add(hESDTrueMotherChiCInvMassPt[iCut]);
1014 hESDTrueMotherChiCDiffInvMassPt[iCut] = new TH2F("ESD_TrueMotherChiCDiff_InvMass_Pt","ESD_TrueMotherChiCDiff_InvMass_Pt",2000,0,2,250,0,25);
1015 fTrueList[iCut]->Add(hESDTrueMotherChiCDiffInvMassPt[iCut]);
1019 hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
1020 hESDTrueMotherInvMassPt[iCut]->Sumw2();
1021 fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
1023 hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueMother_Dalitz_InvMass_Pt","ESD_TrueMother_Dalitz_InvMass_Pt",800,0,0.8,250,0,25);
1024 hESDTrueMotherDalitzInvMassPt[iCut]->Sumw2();
1025 fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);
1031 hESDTrueMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TrueMotherPi0GG_InvMass_Pt","ESD_TrueMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
1032 hESDTrueMotherPi0GGInvMassPt[iCut]->Sumw2();
1033 fTrueList[iCut]->Add(hESDTrueMotherPi0GGInvMassPt[iCut]);
1035 hESDTruePrimaryMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMotherPi0GG_InvMass_Pt","ESD_TruePrimaryMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
1036 hESDTruePrimaryMotherPi0GGInvMassPt[iCut]->Sumw2();
1037 fTrueList[iCut]->Add(hESDTruePrimaryMotherPi0GGInvMassPt[iCut]);
1039 hESDTrueSecondaryMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryMotherPi0GG_InvMass_Pt","ESD_TrueSecondaryMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
1040 hESDTrueSecondaryMotherPi0GGInvMassPt[iCut]->Sumw2();
1041 fTrueList[iCut]->Add(hESDTrueSecondaryMotherPi0GGInvMassPt[iCut]);
1043 hESDTruePrimaryPi0DalitzESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryPi0Dalitz_ESDPt_MCPt","ESD_TruePrimaryPi0Dalitz_ESDPt_MCPt",250,0,25,250,0,25);
1044 hESDTruePrimaryPi0DalitzESDPtMCPt[iCut]->Sumw2();
1045 fTrueList[iCut]->Add(hESDTruePrimaryPi0DalitzESDPtMCPt[iCut]);
1046 hESDTruePrimaryMotherInvMassMCPt[iCut] = new TH2F("ESD_TruePrimaryMother_InvMass_MCPt","ESD_TrueDalitzPrimaryMother_InvMass_MCPt",800,0,0.8,250,0,25);
1047 hESDTruePrimaryMotherInvMassMCPt[iCut]->Sumw2();
1048 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassMCPt[iCut]);
1049 hESDTruePrimaryMotherInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMother_InvMass_Pt","ESD_TruePrimaryMother_InvMass_Pt",800,0,0.8,250,0,25);
1050 hESDTruePrimaryMotherInvMassPt[iCut]->Sumw2();
1051 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassPt[iCut]);
1052 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMotherW0Weighting_InvMass_Pt","ESD_TruePrimaryMotherW0Weighting_InvMass_Pt",800,0,0.8,250,0,25);
1053 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
1054 fTrueList[iCut]->Add(hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]);
1056 hESDTrueSecondaryMotherInvMassPt[iCut] = new TH2F("ESD_TrueDalitzSecondaryMother_InvMass_Pt","ESD_TrueDalitzSecondaryMother_InvMass_Pt",800,0,0.8,250,0,25);
1057 hESDTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
1058 fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
1059 // hESDTrueSecondaryMotherFromK0sInvMassPt[iCut] = new TH2F("ESD_TrueDalitzSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueDalitzSecondaryMotherFromK0s_InvMass_Pt",1000,0,1,250,0,25);
1060 // fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
1061 hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueDalitzBckGG_InvMass_Pt","ESD_TrueDalitzBckGG_InvMass_Pt",800,0,0.8,250,0,25);
1062 fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
1063 hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueDalitzBckCont_InvMass_Pt","ESD_TrueDalitzBckCont_InvMass_Pt",800,0,0.8,250,0,25);
1064 fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
1065 // hESDTrueMotherGGInvMassPt[iCut] = new TH2F("ESD_TrueGammaGamma_InvMass_Pt","ESD_TrueGammaGamma_InvMass_Pt",1000,0,1,250,0,25);
1066 // fTrueList[iCut]->Add(hESDTrueMotherGGInvMassPt[iCut]);
1071 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
1072 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
1075 if((AliConversionCuts*)fV0Reader->GetConversionCuts())
1076 if(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
1077 fOutputContainer->Add(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
1081 fElecSelector=(AliDalitzElectronSelector*)AliAnalysisManager::GetAnalysisManager()->GetTask("ElectronSelector");
1082 if(!fElecSelector){printf("Error: No ElectronSelector");return;} // GetV0Reader
1084 if( fElecSelector ){
1086 if ( ((AliDalitzElectronCuts*)fElecSelector->GetDalitzElectronCuts())->GetCutHistograms() ){
1087 fOutputContainer->Add( ((AliDalitzElectronCuts*)fElecSelector->GetDalitzElectronCuts())->GetCutHistograms() );
1091 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
1093 if( fCutElectronArray ){
1094 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutHistograms() ) {
1095 fCutFolder[iCut]->Add( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutHistograms() );
1099 if( fCutMesonArray ) {
1100 if( ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutHistograms() ) {
1101 fCutFolder[iCut]->Add( ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutHistograms());
1105 if( fCutGammaArray ) {
1106 if( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutHistograms() ) {
1107 fCutFolder[iCut]->Add( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutHistograms() );
1112 PostData(1, fOutputContainer);
1116 //______________________________________________________________________
1117 void AliAnalysisTaskGammaConvDalitzV1::UserExec(Option_t *)
1121 // Execute analysis for current event
1124 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
1125 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
1128 Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
1130 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
1131 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1132 hNEvents[iCut]->Fill(eventQuality);
1138 fElecSelector=(AliDalitzElectronSelector*)AliAnalysisManager::GetAnalysisManager()->GetTask("ElectronSelector");
1139 if(!fElecSelector){printf("Error: No ElectronSelector");return;} // GetV0Reader
1142 if(fIsMC) fMCEvent = MCEvent();
1143 fESDEvent = (AliESDEvent*)InputEvent();
1144 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
1145 fSelectorElectronIndex = fElecSelector->GetReconstructedElectronsIndex(); // Electrons from default Cut
1146 fSelectorPositronIndex = fElecSelector->GetReconstructedPositronsIndex(); // Positrons from default Cut
1148 //CountESDTracks(); // Estimate Event Multiplicity
1149 fNumberOfESDTracks = fV0Reader->GetNumberOfPrimaryTracks();
1150 //AddTaskContainers(); //Add conatiner
1152 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1155 Int_t eventNotAccepted =
1156 ((AliConversionCuts*)fCutGammaArray->At(iCut))
1157 ->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
1159 if(eventNotAccepted){
1160 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
1161 hNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
1165 if(eventQuality != 0){// Event Not Accepted
1166 // cout << "event rejected due to: " <<eventQuality << endl;
1167 hNEvents[iCut]->Fill(eventQuality);
1171 hNEvents[iCut]->Fill(eventQuality);
1173 hNGoodESDTracks[iCut]->Fill(fNumberOfESDTracks);
1175 if(fMCEvent){ // Process MC Particle
1179 fMCStack = fMCEvent->Stack();
1181 if(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetSignalRejection() != 0){
1182 ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetSignalRejection(),
1183 ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetAcceptedHeader(),
1187 ProcessMCParticles();
1190 ProcessPhotonCandidates(); // Process this cuts gammas
1191 ProcessElectronCandidates(); // Process this cuts gammas
1193 if(((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->UseMCPSmearing() && fMCEvent){
1195 fUnsmearedPx = new Double_t[fGoodGammas->GetEntries()]; // Store unsmeared Momenta
1196 fUnsmearedPy = new Double_t[fGoodGammas->GetEntries()];
1197 fUnsmearedPz = new Double_t[fGoodGammas->GetEntries()];
1198 fUnsmearedE = new Double_t[fGoodGammas->GetEntries()];
1200 for(Int_t gamma=0;gamma<fGoodGammas->GetEntries();gamma++){ // Smear the AODPhotons in MC
1202 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->Px();
1203 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->Py();
1204 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->Pz();
1205 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->E();
1206 ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGoodGammas->At(gamma)));
1212 CalculatePi0DalitzCandidates();
1213 CalculateBackground();
1214 UpdateEventByEventData();
1217 if(((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->UseMCPSmearing() && fMCEvent){
1219 for(Int_t gamma=0;gamma<fGoodGammas->GetEntries();gamma++){ // Smear the AODPhotons in MC
1220 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
1221 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetPy(fUnsmearedPy[gamma]);
1222 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetPz(fUnsmearedPz[gamma]);
1223 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetE(fUnsmearedE[gamma]);
1225 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
1226 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
1227 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
1228 delete[] fUnsmearedE; fUnsmearedE = 0x0;
1233 fGoodGammas->Clear(); // delete this cuts good gammas
1234 fGoodVirtualGammas->Clear(); // delete this cuts good gammas
1237 fSelectorElectronIndex.clear();
1238 fSelectorPositronIndex.clear();
1240 PostData( 1, fOutputContainer );
1243 Bool_t AliAnalysisTaskGammaConvDalitzV1::Notify()
1245 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
1248 if( !((AliConversionCuts*)fCutGammaArray->At(iCut))->GetDoEtaShift() ){
1250 /*if (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() != 0.){
1251 printf("Error: Gamma Conversion Dalitz Task %s :: Eta Shift not requested but set to %f, reset to 00. \n\n",
1252 (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift());
1253 ((AliConversionCuts*)fCutGammaArray->At(iCut))->SetEtaShift(0.);
1254 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift(0.);
1258 hEtaShift[iCut]->Fill(0.,0.);
1259 continue; // No Eta Shift requested, continue
1263 if( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
1264 ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
1265 ((AliConversionCuts*)fCutGammaArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1266 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() );
1267 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift()));
1271 printf(" Gamma Conversion Dalitz Task %s :: Eta Shift Manually Set to %f \n\n",
1272 (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift());
1273 ((AliConversionCuts*)fCutGammaArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1274 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() );
1275 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift()));
1283 void AliAnalysisTaskGammaConvDalitzV1::Terminate(const Option_t *)
1289 //________________________________________________________________________
1290 void AliAnalysisTaskGammaConvDalitzV1::ProcessPhotonCandidates()
1293 TList *GoodGammasStepOne = new TList();
1294 TList *GoodGammasStepTwo = new TList();
1295 // Loop over Photon Candidates allocated by ReaderV1
1297 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
1298 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
1299 if(!PhotonCandidate) continue;
1301 fIsFromMBHeader = kTRUE;
1303 if( fMCEvent && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0 ){
1305 Int_t isPosFromMBHeader
1306 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1307 if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
1309 Int_t isNegFromMBHeader
1310 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
1311 if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
1313 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1317 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fESDEvent)) continue;
1319 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut() &&
1320 !((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){ // if no post reader loop is required add to events good gammas
1322 fGoodGammas->Add(PhotonCandidate);
1324 if(fIsFromMBHeader){
1325 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1326 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1327 if( fDoMesonQA ) hESDConvGammaZR[fiCut]->Fill(PhotonCandidate->GetConversionZ(),PhotonCandidate->GetConversionRadius());
1331 ProcessTruePhotonCandidates(PhotonCandidate);
1334 else if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
1335 ((AliConversionCuts*)fCutGammaArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
1337 GoodGammasStepOne->Add(PhotonCandidate);
1339 else if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut() &&
1340 ((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
1341 GoodGammasStepTwo->Add(PhotonCandidate);
1346 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut()){
1347 for(Int_t i = 0;i<GoodGammasStepOne->GetEntries();i++){
1348 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GoodGammasStepOne->At(i);
1349 if(!PhotonCandidate) continue;
1352 fIsFromMBHeader = kTRUE;
1353 if(fMCEvent && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0){
1354 Int_t isPosFromMBHeader
1355 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack,fInputEvent);
1356 Int_t isNegFromMBHeader
1357 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
1358 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1362 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GoodGammasStepOne->GetEntries())) continue;
1363 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
1364 fGoodGammas->Add(PhotonCandidate);
1366 if(fIsFromMBHeader){
1367 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1368 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1369 if( fDoMesonQA )hESDConvGammaZR[fiCut]->Fill(PhotonCandidate->GetConversionZ(),PhotonCandidate->GetConversionRadius());
1373 ProcessTruePhotonCandidates(PhotonCandidate);
1376 else GoodGammasStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
1379 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){
1380 for(Int_t i = 0;i<GoodGammasStepTwo->GetEntries();i++){
1381 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GoodGammasStepTwo->At(i);
1382 if(!PhotonCandidate) continue;
1384 if(fMCEvent && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0){
1385 Int_t isPosFromMBHeader
1386 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack,fInputEvent);
1387 Int_t isNegFromMBHeader
1388 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
1389 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1392 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GoodGammasStepTwo,i)) continue;
1393 fGoodGammas->Add(PhotonCandidate); // Add gamma to current cut TList
1395 if(fIsFromMBHeader){
1396 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt()); // Differences to old V0Reader in p_t due to conversion KF->TLorentzVector
1397 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1398 if(fDoMesonQA)hESDConvGammaZR[fiCut]->Fill(PhotonCandidate->GetConversionZ(),PhotonCandidate->GetConversionRadius());
1402 ProcessTruePhotonCandidates(PhotonCandidate);
1407 delete GoodGammasStepOne;
1408 GoodGammasStepOne = 0x0;
1409 delete GoodGammasStepTwo;
1410 GoodGammasStepTwo = 0x0;
1413 //________________________________________________________________________
1414 void AliAnalysisTaskGammaConvDalitzV1::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1416 // Process True Photons
1417 AliStack *MCStack = fMCEvent->Stack();
1418 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(MCStack);
1419 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(MCStack);
1421 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1422 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){ // Not Same Mother == Combinatorial Bck
1426 else if (posDaughter->GetMother(0) == -1){
1430 if(TMath::Abs(posDaughter->GetPdgCode())!=11 || TMath::Abs(negDaughter->GetPdgCode())!=11) return; //One Particle is not electron
1431 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
1432 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
1434 TParticle *Photon = TruePhotonCandidate->GetMCParticle(MCStack);
1435 if(Photon->GetPdgCode() != 22) return; // Mother is no Photon
1439 Int_t labelGamma = TruePhotonCandidate->GetMCParticleLabel(MCStack);
1441 if( labelGamma < MCStack->GetNprimary() ){
1442 if( fIsFromMBHeader ){
1443 hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1447 if( fIsFromMBHeader){
1448 hESDTrueSecConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1452 if( IsPi0DalitzDaughter(labelGamma) == kTRUE ) {
1453 if( labelGamma < MCStack->GetNprimary() ) {
1454 if( fIsFromMBHeader ){
1455 hESDTruePi0DalitzConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1459 if( fIsFromMBHeader ) {
1460 hESDTruePi0DalitzSecConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1468 //________________________________________________________________________
1469 void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
1471 Double_t magField = fInputEvent->GetMagneticField();
1474 if( magField < 0.0 ){
1482 vector<Int_t> lGoodElectronIndexPrev(0);
1483 vector<Int_t> lGoodPositronIndexPrev(0);
1488 for(UInt_t i = 0; i < fSelectorElectronIndex.size(); i++){
1489 AliESDtrack* electronCandidate = fESDEvent->GetTrack(fSelectorElectronIndex[i]);
1490 if(! ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelected(electronCandidate) ) continue;
1491 lGoodElectronIndexPrev.push_back( fSelectorElectronIndex[i] );
1492 hESDDalitzElectronPt[fiCut]->Fill(electronCandidate->Pt());
1493 hESDDalitzElectronPhi[fiCut]->Fill(electronCandidate->Phi());
1495 Int_t labelelectron = TMath::Abs( electronCandidate->GetLabel() );
1496 if( labelelectron < fMCStack->GetNtrack() ){
1497 TParticle* electron = fMCStack->Particle(labelelectron);
1498 if( electron->GetPdgCode() == 11 ){
1499 if( labelelectron < fMCStack->GetNprimary() ){
1500 hESDTrueElectronPt[fiCut]->Fill(electronCandidate->Pt()); //primary electron
1503 hESDTrueSecElectronPt[fiCut]->Fill(electronCandidate->Pt()); //secondary electron
1505 if( IsPi0DalitzDaughter(labelelectron) == kTRUE ) {
1506 if( labelelectron < fMCStack->GetNprimary() ) {
1507 hESDTruePi0DalitzElectronPt[fiCut]->Fill(electronCandidate->Pt());
1510 hESDTruePi0DalitzSecElectronPt[fiCut]->Fill(electronCandidate->Pt());
1518 for(UInt_t i = 0; i < fSelectorPositronIndex.size(); i++){
1520 AliESDtrack* positronCandidate = fESDEvent->GetTrack( fSelectorPositronIndex[i] );
1521 if(! ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelected(positronCandidate) ) continue;
1522 lGoodPositronIndexPrev.push_back( fSelectorPositronIndex[i] );
1523 hESDDalitzPositronPt[fiCut]->Fill( positronCandidate->Pt() );
1524 hESDDalitzPositronPhi[fiCut]->Fill( positronCandidate->Phi() );
1527 Int_t labelpositron = TMath::Abs( positronCandidate->GetLabel() );
1528 if( labelpositron < fMCStack->GetNtrack() ) {
1529 TParticle* positron = fMCStack->Particle(labelpositron);
1530 if( positron->GetPdgCode() == -11 ){
1531 if( labelpositron < fMCStack->GetNprimary() ){
1532 hESDTruePositronPt[fiCut]->Fill(positronCandidate->Pt());
1535 hESDTrueSecPositronPt[fiCut]->Fill(positronCandidate->Pt());
1537 if( IsPi0DalitzDaughter(labelpositron) == kTRUE ) {
1538 if( labelpositron < fMCStack->GetNprimary() ){
1539 hESDTruePi0DalitzPositronPt[fiCut]->Fill(positronCandidate->Pt());
1542 hESDTruePi0DalitzSecPositronPt[fiCut]->Fill(positronCandidate->Pt());
1551 vector<Bool_t> lElectronPsiIndex(lGoodElectronIndexPrev.size(), kTRUE);
1552 vector<Bool_t> lPositronPsiIndex(lGoodPositronIndexPrev.size(), kTRUE);
1555 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->DoPsiPairCut() == kTRUE ){
1557 for( UInt_t i = 0; i < lGoodElectronIndexPrev.size(); i++ ) {
1559 AliESDtrack *electronCandidate = fESDEvent->GetTrack(lGoodElectronIndexPrev[i]);
1561 for(UInt_t j = 0; j < lGoodPositronIndexPrev.size(); j++){
1562 AliESDtrack *positronCandidate = fESDEvent->GetTrack(lGoodPositronIndexPrev[j]);
1563 Double_t psiPair = GetPsiPair(positronCandidate,electronCandidate);
1564 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->GetConstrainedParam()->Phi()-positronCandidate->GetConstrainedParam()->Phi());
1566 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->IsFromGammaConversion(psiPair,deltaPhi ) ){
1567 lElectronPsiIndex[i] = kFALSE;
1568 lPositronPsiIndex[j] = kFALSE;
1575 vector<Int_t> lGoodElectronIndex(0);
1576 vector<Int_t> lGoodPositronIndex(0);
1579 for( UInt_t i = 0; i < lGoodElectronIndexPrev.size(); i++ ) {
1581 if( lElectronPsiIndex[i] == kTRUE )
1582 lGoodElectronIndex.push_back( lGoodElectronIndexPrev[i] );
1585 for( UInt_t i = 0; i < lGoodPositronIndexPrev.size(); i++ ) {
1587 if( lPositronPsiIndex[i] == kTRUE )
1588 lGoodPositronIndex.push_back( lGoodPositronIndexPrev[i] );
1595 for(UInt_t i = 0; i < lGoodElectronIndex.size(); i++){
1597 //if( lElectronPsiIndex[i] == kFALSE ) continue;
1600 AliESDtrack *electronCandidate = fESDEvent->GetTrack(lGoodElectronIndex[i]);
1602 AliKFParticle electronCandidateKF( *electronCandidate->GetConstrainedParam(), ::kElectron );
1604 for(UInt_t j = 0; j < lGoodPositronIndex.size(); j++){
1606 //if( lPositronPsiIndex[j] == kFALSE ) continue;
1608 AliESDtrack *positronCandidate = fESDEvent->GetTrack(lGoodPositronIndex[j]);
1609 AliKFParticle positronCandidateKF( *positronCandidate->GetConstrainedParam(), ::kPositron );
1610 Bool_t isPhoton = kFALSE;
1611 Bool_t isPi0Dalitz = kFALSE;
1612 Bool_t isEtaDalitz = kFALSE;
1613 Bool_t isJPsi = kFALSE;
1615 Double_t psiPair = GetPsiPair(positronCandidate,electronCandidate);
1616 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->GetConstrainedParam()->Phi()-positronCandidate->GetConstrainedParam()->Phi());
1619 AliKFConversionPhoton* virtualPhoton = NULL;
1620 virtualPhoton = new AliKFConversionPhoton(electronCandidateKF,positronCandidateKF);
1623 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
1624 primaryVertexImproved+=*virtualPhoton;
1625 virtualPhoton->SetProductionVertex(primaryVertexImproved);
1627 virtualPhoton->SetTrackLabels( lGoodPositronIndex[j], lGoodElectronIndex[i]);
1632 Int_t labeln=TMath::Abs(electronCandidate->GetLabel());
1633 Int_t labelp=TMath::Abs(positronCandidate->GetLabel());
1634 TParticle *fNegativeMCParticle = fMCStack->Particle(labeln);
1635 TParticle *fPositiveMCParticle = fMCStack->Particle(labelp);
1637 if( fPositiveMCParticle && fNegativeMCParticle) {
1638 virtualPhoton->SetMCLabelPositive(labelp);
1639 virtualPhoton->SetMCLabelNegative(labeln);
1643 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton); //To Apply PsiPairCut
1649 TParticle *mcVgamma=virtualPhoton->GetMCParticle(fMCStack);
1652 // Check if it is a true photon
1653 if(mcVgamma->GetPdgCode() == 22){
1655 }else if(mcVgamma->GetPdgCode() == 443){
1658 else if( IsDalitz( mcVgamma ) ){
1659 if ( mcVgamma->GetPdgCode() == 111 ) isPi0Dalitz = kTRUE;
1660 else if( mcVgamma->GetPdgCode() == 221 ) isEtaDalitz = kTRUE;
1665 hESDEposEnegTruePhotonInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1666 hESDEposEnegTruePhotonPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1669 hESDEposEnegTrueJPsiInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1671 else if(isPi0Dalitz){
1672 hESDEposEnegTruePi0DalitzInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1673 hESDEposEnegTruePi0DalitzPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1675 else if(isEtaDalitz){
1676 hESDEposEnegTrueEtaDalitzInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1677 hESDEposEnegTrueEtaDalitzPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1684 if( fDoMesonQA ) hESDEposEnegPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1685 if( fDoChicAnalysis ) hESDEposEnegInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1688 if( ! fDoChicAnalysis ) {
1690 if ( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
1692 Double_t MassCutMax = 1000.0;
1693 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutLowPt() >= ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutHighPt() ){
1694 MassCutMax = ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutLowPt();
1697 MassCutMax = ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutHighPt();
1700 if( vphoton->GetMass() > MassCutMax ) {
1705 delete virtualPhoton;
1706 virtualPhoton = 0x0;
1715 fGoodVirtualGammas->Add( vphoton );
1716 delete virtualPhoton;
1723 //Computing mixing event
1725 if( fDoChicAnalysis ) {
1727 for(UInt_t i = 0; i < lGoodElectronIndex.size(); i++){
1729 //if( lElectronPsiIndex[i] == kFALSE ) continue;
1731 AliESDtrack *electronCandidate1 = fESDEvent->GetTrack(lGoodElectronIndex[i]);
1733 AliKFParticle electronCandidate1KF( *electronCandidate1->GetConstrainedParam(), ::kElectron );
1736 for(UInt_t j = i+1; j < lGoodElectronIndex.size(); j++){
1738 //if( lElectronPsiIndex[j] == kFALSE ) continue;
1741 AliESDtrack *electronCandidate2 = fESDEvent->GetTrack(lGoodElectronIndex[j]);
1743 AliKFParticle electronCandidate2KF( *electronCandidate2->GetConstrainedParam(), ::kElectron );
1745 AliKFConversionPhoton* virtualPhoton = new AliKFConversionPhoton(electronCandidate1KF,electronCandidate2KF);
1747 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
1748 primaryVertexImproved+=*virtualPhoton;
1749 virtualPhoton->SetProductionVertex(primaryVertexImproved);
1752 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton);
1753 hESDEposEnegLikeSignBackInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1755 delete virtualPhoton;
1757 virtualPhoton = 0x0;
1763 for(UInt_t i = 0; i < lGoodPositronIndex.size(); i++){
1767 //if( lPositronPsiIndex[i] == kFALSE ) continue;
1769 AliESDtrack *positronCandidate1 = fESDEvent->GetTrack(lGoodPositronIndex[i]);
1771 AliKFParticle positronCandidate1KF( *positronCandidate1->GetConstrainedParam(), ::kPositron );
1774 for(UInt_t j = i+1; j < lGoodPositronIndex.size(); j++){
1776 // if( lPositronPsiIndex[j] == kFALSE ) continue;
1778 AliESDtrack *positronCandidate2 = fESDEvent->GetTrack(lGoodPositronIndex[j]);
1780 AliKFParticle positronCandidate2KF( *positronCandidate2->GetConstrainedParam(), ::kPositron );
1782 AliKFConversionPhoton* virtualPhoton = new AliKFConversionPhoton(positronCandidate1KF,positronCandidate2KF);
1783 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
1784 primaryVertexImproved+=*virtualPhoton;
1785 virtualPhoton->SetProductionVertex(primaryVertexImproved);
1787 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton);
1788 hESDEposEnegLikeSignBackInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1792 delete virtualPhoton;
1794 virtualPhoton = 0x0;
1803 //________________________________________________________________________
1804 void AliAnalysisTaskGammaConvDalitzV1::CalculatePi0DalitzCandidates(){
1806 // Conversion Gammas
1811 if( fGoodGammas->GetEntries() > 0 && fGoodVirtualGammas->GetEntries() > 0 ){
1813 vector<Bool_t> lGoodVirtualGamma(fGoodVirtualGammas->GetEntries(), kFALSE);
1815 for(Int_t GammaIndex=0; GammaIndex<fGoodGammas->GetEntries(); GammaIndex++){
1817 AliAODConversionPhoton *gamma=dynamic_cast<AliAODConversionPhoton*>(fGoodGammas->At(GammaIndex));
1818 if (gamma==NULL) continue;
1819 for(Int_t virtualGammaIndex=0;virtualGammaIndex<fGoodVirtualGammas->GetEntries();virtualGammaIndex++){
1821 AliAODConversionPhoton *Vgamma=dynamic_cast<AliAODConversionPhoton*>(fGoodVirtualGammas->At(virtualGammaIndex));
1822 if (Vgamma==NULL) continue;
1823 //Check for same Electron ID
1824 if(gamma->GetTrackLabelPositive() == Vgamma->GetTrackLabelPositive() ||
1825 gamma->GetTrackLabelNegative() == Vgamma->GetTrackLabelNegative() ||
1826 gamma->GetTrackLabelNegative() == Vgamma->GetTrackLabelPositive() ||
1827 gamma->GetTrackLabelPositive() == Vgamma->GetTrackLabelNegative() ) continue;
1829 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma,Vgamma);
1830 pi0cand->SetLabels(GammaIndex,virtualGammaIndex);
1833 if( ( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift())) ){
1835 //cout<< "Meson Accepted "<<endl;
1837 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fESDEvent->GetPrimaryVertex()->GetZ());
1839 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity() ){
1840 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1842 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGoodGammas->GetEntries());
1847 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
1850 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( pi0cand->Pt() , Vgamma->GetMass() ) == kTRUE ){
1852 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
1854 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
1855 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
1860 hESDMotherPhi[fiCut]->Fill(pi0cand->Phi());
1862 if( lGoodVirtualGamma[virtualGammaIndex] == kFALSE ) {
1864 FillElectronQAHistos(Vgamma);
1866 lGoodVirtualGamma[virtualGammaIndex] = kTRUE;
1872 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
1873 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
1874 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
1879 hESDMotherPhi[fiCut]->Fill(pi0cand->Phi());
1881 if( lGoodVirtualGamma[virtualGammaIndex] == kFALSE ) {
1883 FillElectronQAHistos(Vgamma);
1885 lGoodVirtualGamma[virtualGammaIndex] = kTRUE;
1891 if( fDoChicAnalysis) {
1893 hESDPi0MotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
1895 Double_t diffMass = pi0cand->M() - Vgamma->GetMass();
1897 hESDPi0MotherDiffInvMassPt[fiCut]->Fill( diffMass , pi0cand->Pt() );
1899 if( Vgamma->GetMass() > 2.5 && Vgamma->GetMass() < 3.4){
1900 hESDPi0MotherDiffLimInvMassPt[fiCut]->Fill( diffMass , pi0cand->Pt() );
1905 ProcessTrueMesonCandidates(pi0cand,gamma,Vgamma);
1915 //________________________________________________________________________
1916 void AliAnalysisTaskGammaConvDalitzV1::CalculateBackground(){
1918 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fESDEvent->GetPrimaryVertex()->GetZ());
1923 method = ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetBKGMethod();
1926 if(((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity()){
1927 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1929 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGoodGammas->GetEntries());
1932 if( method == 1 || method == 2 ) {
1934 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
1936 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity() ) {
1938 for(Int_t nEventsInBG=0;nEventsInBG<fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
1940 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
1942 if(fMoveParticleAccordingToVertex == kTRUE && method == 1){
1943 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
1946 for(Int_t iCurrent=0;iCurrent<fGoodVirtualGammas->GetEntries();iCurrent++){
1947 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualGammas->At(iCurrent));
1949 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
1950 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
1952 if(fMoveParticleAccordingToVertex == kTRUE && method == 1 ){
1953 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
1956 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
1959 if( ( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE, ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
1960 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
1962 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.GetMass() ) == kTRUE ){
1964 // cout<<" Mass dalitz: "<<currentEventGoodV0.GetMass()<<endl;
1965 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1966 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1967 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1971 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1972 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1973 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1976 delete backgroundCandidate;
1977 backgroundCandidate = 0x0;
1983 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
1984 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
1985 if(previousEventV0s){
1986 if(fMoveParticleAccordingToVertex == kTRUE && method == 1){
1987 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
1989 for(Int_t iCurrent=0;iCurrent<fGoodVirtualGammas->GetEntries();iCurrent++){
1991 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualGammas->At(iCurrent));
1993 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
1995 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
1997 if(fMoveParticleAccordingToVertex == kTRUE && method ==1){
1998 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2001 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2003 if((((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
2005 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
2007 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.GetMass() ) == kTRUE ){
2010 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2011 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2012 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2016 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2017 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2018 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2021 delete backgroundCandidate;
2022 backgroundCandidate = 0x0;
2030 else if( method == 3 ){
2032 for(Int_t iCurrent=0;iCurrent<fGoodVirtualGammas->GetEntries();iCurrent++){
2034 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualGammas->At(iCurrent));
2036 for(Int_t iPrevious=0;iPrevious<fGammasPool[fiCut]->GetEntries();iPrevious++){
2038 AliAODConversionPhoton previousGoodV0 = *(AliAODConversionPhoton*)((fGammasPool[fiCut]->At(iPrevious) ));
2041 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2044 if((((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE, ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
2046 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
2048 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.GetMass() ) == kTRUE ){
2051 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2052 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2053 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2059 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2060 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2061 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2065 delete backgroundCandidate;
2066 backgroundCandidate = 0x0;
2072 //________________________________________________________________________
2073 void AliAnalysisTaskGammaConvDalitzV1::UpdateEventByEventData(){
2074 //see header file for documentation
2078 method = ( (AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetBKGMethod();
2085 if(fGoodGammas->GetEntries() > 0 ){
2087 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity() ){
2088 fBGHandler[fiCut]->AddEvent(fGoodGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fNumberOfESDTracks);
2091 else{ // means we use #V0s for multiplicity
2092 fBGHandler[fiCut]->AddEvent(fGoodGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fGoodGammas->GetEntries());
2097 else if ( method == 2 ){
2099 if(fGoodVirtualGammas->GetEntries() > 0 ){
2100 if(((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity()){
2101 fBGHandler[fiCut]->AddEvent(fGoodVirtualGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fNumberOfESDTracks);
2103 else{ // means we use #V0s for multiplicity
2104 fBGHandler[fiCut]->AddEvent(fGoodVirtualGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fGoodVirtualGammas->GetEntries());
2108 else if ( method == 3 ) {
2112 for(Int_t index = 0; index < fGoodGammas->GetEntries(); index++){
2115 if ( fGammasPool[fiCut]->GetEntries() > ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->NumberOfRotationEvents() ){
2116 fGammasPool[fiCut]->RemoveLast();
2118 fGammasPool[fiCut]->AddFirst( new AliAODConversionPhoton(*(AliAODConversionPhoton*)(fGoodGammas->At(index)) ) );
2123 //______________________________________________________________________
2124 void AliAnalysisTaskGammaConvDalitzV1::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate, AliAODConversionPhoton *TrueVirtualGammaCandidate)
2127 // Process True Mesons
2129 AliStack *MCStack = fMCEvent->Stack();
2131 if( TrueGammaCandidate->GetV0Index()<fESDEvent->GetNumberOfV0s() ){
2134 //cout<<"Entro True Meson"<<endl;
2137 Bool_t isTruePi0 = kFALSE;
2138 Bool_t isTrueEta = kFALSE;
2139 Bool_t massCutAccept = kFALSE;
2140 //Bool_t isTrueChiC = kFALSE;
2141 Int_t gammaMCLabel = TrueGammaCandidate->GetMCParticleLabel(MCStack);
2142 Int_t gammaMotherLabel = -1;
2145 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
2147 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( Pi0Candidate->Pt() , TrueVirtualGammaCandidate->GetMass() ) == kTRUE ){
2149 massCutAccept = kTRUE;
2153 massCutAccept = kTRUE;
2160 if(gammaMCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2163 // Daughters Gamma 0
2164 TParticle * negativeMC = (TParticle*)TrueGammaCandidate->GetNegativeMCDaughter(MCStack);
2165 TParticle * positiveMC = (TParticle*)TrueGammaCandidate->GetPositiveMCDaughter(MCStack);
2166 TParticle * gammaMC = (TParticle*)MCStack->Particle(gammaMCLabel);
2169 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2171 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
2173 if(gammaMC->GetPdgCode() == 22){ // ... with Gamma Mother
2174 gammaMotherLabel=gammaMC->GetFirstMother();
2181 Int_t virtualGammaMCLabel = TrueVirtualGammaCandidate->GetMCParticleLabel(MCStack);
2182 Int_t virtualGammaMotherLabel = -1;
2183 Int_t virtualGamma = 1;
2184 Int_t virtualGammaGrandMotherLabel =-1;
2187 if(virtualGammaMCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2188 // Daughters Gamma 1
2189 TParticle * negativeMC = (TParticle*)TrueVirtualGammaCandidate->GetNegativeMCDaughter(MCStack);
2190 TParticle * positiveMC = (TParticle*)TrueVirtualGammaCandidate->GetPositiveMCDaughter(MCStack);
2191 TParticle * virtualGammaMotherMC = (TParticle*)MCStack->Particle(virtualGammaMCLabel);
2193 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2195 if( virtualGammaMotherMC->GetPdgCode() != 22 ){
2196 virtualGammaMotherLabel=virtualGammaMCLabel;
2197 if(virtualGammaMotherMC->GetPdgCode() == 443){
2198 virtualGammaGrandMotherLabel=virtualGammaMotherMC->GetFirstMother();
2202 else if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
2203 virtualGammaMotherLabel=virtualGammaMotherMC->GetFirstMother();
2204 virtualGamma = 0; //no virtual gamma
2210 if(gammaMotherLabel >= 0 && ( gammaMotherLabel == virtualGammaMotherLabel) ){
2212 if(((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->GetPdgCode() == 111){
2216 if(((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->GetPdgCode() == 221){
2223 if( fDoChicAnalysis) {
2224 if(gammaMotherLabel>=0 && ( gammaMotherLabel == virtualGammaGrandMotherLabel) ){
2225 if(((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 445 ||
2226 ((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 10443 ||
2227 ((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 20443 ){
2229 hESDTrueMotherChiCInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2230 hESDTrueMotherChiCDiffInvMassPt[fiCut]->Fill(Pi0Candidate->M()-TrueVirtualGammaCandidate->GetMass(),Pi0Candidate->Pt());
2235 if( ( isTruePi0 || isTrueEta) && massCutAccept ){ // True Pion or Eta
2237 if ( virtualGamma == 1 ) { //True Dalitz
2239 Float_t weighted= 1;
2241 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2242 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
2243 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
2244 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
2249 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2250 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill( TrueVirtualGammaCandidate->GetMass(),Pi0Candidate->Pt(),weighted);
2252 if(gammaMotherLabel < MCStack->GetNprimary()){ // Only primary pi0 for efficiency calculation
2255 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill( Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2256 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill( Pi0Candidate->M(), Pi0Candidate->Pt() );
2258 hESDTruePrimaryMotherInvMassMCPt[fiCut]->Fill(Pi0Candidate->M(),((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->Pt(),weighted);
2259 if(isTruePi0){ // Only primaries for unfolding
2260 hESDTruePrimaryPi0DalitzESDPtMCPt[fiCut]->Fill(Pi0Candidate->Pt(),((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->Pt(),weighted);
2263 else { // Secondary Meson
2264 Float_t weightedSec= 1;
2266 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2267 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetMother(0);
2268 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(gammaMotherLabel)->GetPdgCode()==310){
2269 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
2273 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2278 else if ( virtualGamma == 0 ){
2280 Float_t weighted= 1;
2282 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2283 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
2284 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
2285 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
2290 hESDTrueMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted); // Pi0 from GG
2292 if( gammaMotherLabel < MCStack->GetNprimary() ){
2293 hESDTruePrimaryMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2297 Float_t weightedSec= 1;
2299 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2300 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetMother(0);
2301 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(gammaMotherLabel)->GetPdgCode()==310){
2302 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
2305 hESDTrueSecondaryMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2310 if(!isTruePi0 && !isTrueEta && massCutAccept ){ // Background
2311 if(gammaMotherLabel>-1 && virtualGammaMotherLabel>-1 && virtualGamma == 0){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2312 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2313 } else { // No photon or without mother
2314 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2321 //________________________________________________________________________
2322 void AliAnalysisTaskGammaConvDalitzV1::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
2323 //see header file for documentation
2325 Double_t dx = vertex->fX - fESDEvent->GetPrimaryVertex()->GetX();
2326 Double_t dy = vertex->fY - fESDEvent->GetPrimaryVertex()->GetY();
2327 Double_t dz = vertex->fZ - fESDEvent->GetPrimaryVertex()->GetZ();
2329 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
2330 particle->SetConversionPoint(movedPlace);
2334 //________________________________________________________________________
2335 void AliAnalysisTaskGammaConvDalitzV1::CountESDTracks(){
2337 // Using standard function for setting Cuts
2338 Bool_t selectPrimaries=kTRUE;
2339 AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
2340 EsdTrackCuts->SetMaxDCAToVertexZ(2);
2341 EsdTrackCuts->SetEtaRange(-0.8, 0.8);
2342 EsdTrackCuts->SetPtRange(0.15);
2344 fNumberOfESDTracks = 0;
2345 for(Int_t iTracks = 0; iTracks < fESDEvent->GetNumberOfTracks(); iTracks++){
2346 AliESDtrack* curTrack = fESDEvent->GetTrack(iTracks);
2347 if(!curTrack) continue;
2348 if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
2350 delete EsdTrackCuts;
2356 //_____________________________________________________________________________
2357 void AliAnalysisTaskGammaConvDalitzV1::ProcessMCParticles()
2360 // Loop over all primary MC particle
2362 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
2365 TParticle* particle = (TParticle *)fMCStack->Particle(i);
2366 if (!particle) continue;
2369 Bool_t mcIsFromMB = kTRUE;
2370 Int_t isMCFromMBHeader = -1;
2372 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0) {
2374 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i,fMCStack,fInputEvent);
2375 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
2376 if(isMCFromMBHeader != 2) mcIsFromMB = kFALSE;
2379 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
2380 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
2383 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
2384 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
2386 hMCConvGammaRSPt[fiCut]->Fill(particle->Pt());
2388 } // Converted MC Gamma
2390 if(((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(i,fMCStack)){
2391 if( particle->GetPdgCode() == -11)hMCAllPositronsPt[fiCut]->Fill(particle->Pt()); // All positrons
2392 if( particle->GetPdgCode() == 11)hMCAllElectronsPt[fiCut]->Fill(particle->Pt()); // All electrons
2395 if(((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMC( particle,fMCStack,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift() ) ){
2397 Float_t weighted= 1;
2399 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2400 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2401 if (particle->Pt()>0.005){
2402 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
2407 if(particle->GetPdgCode() == 111)hMCPi0GGPt[fiCut]->Fill( particle->Pt() , weighted); // All MC Pi0 GG decay
2408 if(particle->GetPdgCode() == 221)hMCEtaGGPt[fiCut]->Fill( particle->Pt() , weighted); // All MC Eta GG decay
2412 Int_t labelgamma = -1;
2413 Int_t labelelectron = -1;
2414 Int_t labelpositron = -1;
2417 if( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMCDalitz(particle,fMCStack,labelelectron,labelpositron,labelgamma,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()) )
2421 Float_t weighted= 1;
2422 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2423 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack,fInputEvent)){
2424 if (particle->Pt()>0.005){
2425 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
2429 if(particle->GetPdgCode() == 111)hMCPi0Pt[fiCut]->Fill(particle->Pt(), weighted); // All MC Pi0
2430 if(particle->GetPdgCode() == 221)hMCEtaPt[fiCut]->Fill(particle->Pt(), weighted); // All MC Eta
2432 // Check the acceptance for gamma and electrons
2435 TParticle *gamma = fMCStack->Particle(labelgamma);
2436 TParticle *electron = fMCStack->Particle(labelelectron);
2437 TParticle *positron = fMCStack->Particle(labelpositron);
2440 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC(gamma,fMCStack,kFALSE) &&
2441 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelelectron,fMCStack) &&
2442 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelpositron,fMCStack) ) {
2444 if(particle->GetPdgCode() == 111){
2446 hMCPi0InAccPt[fiCut]->Fill(particle->Pt() , weighted); // MC Pi0Dalitz with gamma and e+e- in acc
2447 hMCPi0DalitzGammaPt[fiCut]->Fill( gamma->Pt() ,weighted );
2448 hMCPi0DalitzPositronPt[fiCut]->Fill( positron->Pt(),weighted );
2449 hMCPi0DalitzElectronPt[fiCut]->Fill( electron->Pt(),weighted );
2452 if(particle->GetPdgCode() == 221)hMCEtaInAccPt[fiCut]->Fill(particle->Pt(), weighted ); // MC EtaDalitz with gamma and e+e- in acc
2457 Int_t labelgammaChiC=-1;
2458 Int_t labelpositronChiC=-1;
2459 Int_t labelelectronChiC=-1;
2461 if(((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMCChiC(particle,fMCStack,labelelectronChiC,labelpositronChiC,labelgammaChiC,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift())){
2463 hMCChiCPt[fiCut]->Fill(particle->Pt()); // All MC ChiC
2464 TParticle * gammaChiC =fMCStack->Particle(labelgammaChiC);
2466 if( ((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC( gammaChiC,fMCStack,kFALSE) &&
2467 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelelectronChiC,fMCStack) &&
2468 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelpositronChiC,fMCStack) ){
2469 hMCChiCInAccPt[fiCut]->Fill(particle->Pt()); // All MC ChiC
2474 //_____________________________________________________________________________
2475 Bool_t AliAnalysisTaskGammaConvDalitzV1::IsDalitz(TParticle *fMCMother) const
2478 if( fMCMother->GetNDaughters() != 3 ) return kFALSE;
2479 if( fMCMother->GetPdgCode() != 111 && fMCMother->GetPdgCode() != 221 ) return kFALSE;
2482 TParticle *positron = 0x0;
2483 TParticle *electron = 0x0;
2484 TParticle *gamma = 0x0;
2486 for(Int_t index= fMCMother->GetFirstDaughter();index<= fMCMother->GetLastDaughter();index++){
2488 TParticle* temp = (TParticle*)fMCStack->Particle( index );
2490 switch( temp->GetPdgCode() ) {
2503 if( positron && electron && gamma) return kTRUE;
2507 //_____________________________________________________________________________________
2508 Bool_t AliAnalysisTaskGammaConvDalitzV1::IsPi0DalitzDaughter( Int_t label ) const
2511 // Returns true if the particle comes from Pi0 -> e+ e- gamma
2514 Int_t motherLabel = fMCStack->Particle( label )->GetMother(0);
2516 if( motherLabel < 0 || motherLabel >= fMCStack->GetNtrack() ) return kFALSE;
2518 TParticle* mother = fMCStack->Particle( motherLabel );
2520 if( mother->GetPdgCode() != 111 ) return kFALSE;
2522 if( IsDalitz( mother ) ) return kTRUE;
2530 void AliAnalysisTaskGammaConvDalitzV1::FillElectronQAHistos(AliAODConversionPhoton *Vgamma) const
2534 AliESDtrack *positronVgamma = 0;
2535 AliESDtrack *electronVgamma = 0;
2537 Double_t clsToFPos = -1.0;
2538 Double_t clsToFNeg = -1.0;
2540 Double_t NumClsITSPos = -1.0;
2541 Double_t NumClsITSNeg = -1.0;
2542 Double_t NumClsTPCPos = -1.0;
2543 Double_t NumClsTPCNeg = -1.0;
2545 Float_t dcaToVertexXYPos = -1.0;
2546 Float_t dcaToVertexZPos = -1.0;
2547 Float_t dcaToVertexXYNeg = -1.0;
2548 Float_t dcaToVertexZNeg = -1.0;
2550 Double_t nSigmaPosTPC = -999.;
2551 Double_t nSigmaNegTPC = -999.;
2553 positronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelPositive() );
2554 electronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelNegative() );
2555 clsToFPos = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetNFindableClustersTPC(positronVgamma);
2556 clsToFNeg = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetNFindableClustersTPC(electronVgamma);
2558 nSigmaPosTPC = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(positronVgamma, AliPID::kElectron) ;
2559 nSigmaNegTPC = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(electronVgamma, AliPID::kElectron) ;
2563 NumClsITSPos = positronVgamma->GetNcls(0); //Get number of ITS clusters
2564 NumClsITSNeg = electronVgamma->GetNcls(0);
2565 NumClsTPCPos = positronVgamma->GetNcls(1); //Get number of TPC clusters
2566 NumClsTPCNeg = electronVgamma->GetNcls(1);
2571 positronVgamma->GetImpactParameters(bPos,bCovPos);
2573 if (bCovPos[0]<=0 || bCovPos[2]<=0) {
2574 AliDebug(1, "Estimated b resolution lower or equal zero!");
2575 bCovPos[0]=0; bCovPos[2]=0;
2580 positronVgamma->GetImpactParameters(bNeg,bCovNeg);
2582 if (bCovNeg[0]<=0 || bCovNeg[2]<=0) {
2583 AliDebug(1, "Estimated b resolution lower or equal zero!");
2584 bCovNeg[0]=0; bCovNeg[2]=0;
2587 dcaToVertexXYPos = bPos[0];
2588 dcaToVertexZPos = bPos[1];
2589 dcaToVertexXYNeg = bNeg[0];
2590 dcaToVertexZNeg = bNeg[1];
2592 hESDDalitzElectronAfterPt[fiCut]->Fill( electronVgamma->Pt() );
2593 hESDDalitzPositronAfterPt[fiCut]->Fill( positronVgamma->Pt() );
2595 hESDDalitzElectronAfterEta[fiCut]->Fill( electronVgamma->Eta() );
2596 hESDDalitzPositronAfterEta[fiCut]->Fill( positronVgamma->Eta() );
2598 hESDDalitzElectronAfterPhi[fiCut]->Fill( electronVgamma->Phi() );
2599 hESDDalitzPositronAfterPhi[fiCut]->Fill( positronVgamma->Phi() );
2601 hESDDalitzElectronAfterNFindClsTPC[fiCut]->Fill(clsToFNeg,electronVgamma->Pt());
2602 hESDDalitzPositronAfterNFindClsTPC[fiCut]->Fill(clsToFPos,positronVgamma->Pt());
2604 hESDDalitzElectronAfterNClsTPC[fiCut]->Fill( NumClsTPCNeg,electronVgamma->Pt());
2605 hESDDalitzPositronAfterNClsTPC[fiCut]->Fill( NumClsTPCPos,positronVgamma->Pt());
2607 hESDDalitzElectronAfterNClsITS[fiCut]->Fill( NumClsITSNeg);
2608 hESDDalitzPositronAfterNClsITS[fiCut]->Fill( NumClsITSPos);
2610 hESDDalitzPosEleAfterDCAxy[fiCut]->Fill( dcaToVertexXYNeg, electronVgamma->Pt() );
2611 hESDDalitzPosEleAfterDCAz[fiCut]->Fill( dcaToVertexZNeg, electronVgamma->Pt() );
2612 hESDDalitzPosEleAfterDCAxy[fiCut]->Fill( dcaToVertexXYPos, positronVgamma->Pt() );
2613 hESDDalitzPosEleAfterDCAz[fiCut]->Fill( dcaToVertexZPos, positronVgamma->Pt() );
2615 hESDDalitzElectronAfterTPCdEdxVsP[fiCut]->Fill( electronVgamma->P(),nSigmaNegTPC);
2616 hESDDalitzPositronAfterTPCdEdxVsP[fiCut]->Fill( positronVgamma->P(), nSigmaPosTPC);
2618 hESDDalitzElectronAfterTPCdEdxVsEta[fiCut]->Fill( electronVgamma->Eta(),nSigmaNegTPC);
2619 hESDDalitzPositronAfterTPCdEdxVsEta[fiCut]->Fill( positronVgamma->Eta(),nSigmaPosTPC);
2621 hESDDalitzElectronAfterTPCdEdxVsPhi[fiCut]->Fill( electronVgamma->Phi(),nSigmaNegTPC);
2622 hESDDalitzPositronAfterTPCdEdxVsPhi[fiCut]->Fill( positronVgamma->Phi(),nSigmaPosTPC);
2625 hESDDalitzElectronAfterTPCdEdxSignalVsP[fiCut]->Fill( electronVgamma->P(), TMath::Abs(electronVgamma->GetTPCsignal()));
2626 hESDDalitzPositronAfterTPCdEdxSignalVsP[fiCut]->Fill( positronVgamma->P(), TMath::Abs(positronVgamma->GetTPCsignal()));
2633 //_____________________________________________________________________________
2634 Double_t AliAnalysisTaskGammaConvDalitzV1::GetPsiPair( const AliESDtrack *trackPos, const AliESDtrack *trackNeg ) const
2637 // This angle is a measure for the contribution of the opening in polar
2638 // direction ?0 to the opening angle ? Pair
2640 // Ref. Measurement of photons via conversion pairs with the PHENIX experiment at RHIC
2641 // Mas ter Thesis. Thorsten Dahms. 2005
2642 // https://twiki.cern.ch/twiki/pub/ALICE/GammaPhysicsPublications/tdahms_thesis.pdf
2646 if( trackPos->GetConstrainedPxPyPz(momPos) == 0 ) trackPos->GetPxPyPz( momPos );
2647 if( trackNeg->GetConstrainedPxPyPz(momNeg) == 0 ) trackNeg->GetPxPyPz( momNeg );
2649 TVector3 posDaughter;
2650 TVector3 negDaughter;
2652 posDaughter.SetXYZ( momPos[0], momPos[1], momPos[2] );
2653 negDaughter.SetXYZ( momNeg[0], momNeg[1], momNeg[2] );
2655 Double_t deltaTheta = negDaughter.Theta() - posDaughter.Theta();
2656 Double_t openingAngle = posDaughter.Angle( negDaughter ); //TMath::ACos( posDaughter.Dot(negDaughter)/(negDaughter.Mag()*posDaughter.Mag()) );
2658 if( openingAngle < 1e-20 ) return 0.;
2660 Double_t psiAngle = TMath::ASin( deltaTheta/openingAngle );