19 #include "TParticle.h"
21 #include "TMCProcess.h"
22 #include "TDatabasePDG.h"
25 #include "TDirectory.h"
29 #include "THnSparse.h"
32 #include "AliAnalysisManager.h"
33 #include "AliESDInputHandler.h"
34 #include "AliESDtrack.h"
35 #include "AliMCEvent.h"
37 #include "AliMCEventHandler.h"
40 #include "AliESDtrackCuts.h"
41 #include "AliESDpidCuts.h"
42 #include "AliMCEvent.h"
44 #include "AliESDEvent.h"
45 #include "AliESDpid.h"
46 #include "AliKFParticle.h"
47 #include "AliMCEventHandler.h"
48 #include "AliKFVertex.h"
49 #include "AliTriggerAnalysis.h"
50 #include "AliCentrality.h"
51 #include "AliMultiplicity.h"
52 #include "AliAODEvent.h"
62 fV0ReaderName("V0ReaderV1"),
77 fSelectorNegPionIndex(0),
78 fSelectorPosPionIndex(0),
79 fGoodConvGammas(NULL),
80 fClusterCandidates(NULL),
81 fNeutralPionCandidates(NULL),
82 fNegPionCandidates(NULL),
83 fPosPionCandidates(NULL),
84 fGoodVirtualParticles(NULL),
87 fClusterCutArray(NULL),
89 fNeutralPionMesonCutArray(NULL),
92 fConversionCuts(NULL),
94 fHistoConvGammaPt(NULL),
95 fHistoConvGammaEta(NULL),
96 fHistoClusterGammaPt(NULL),
97 fHistoClusterGammaEta(NULL),
98 fHistoNegPionPt(NULL),
99 fHistoPosPionPt(NULL),
100 fHistoNegPionPhi(NULL),
101 fHistoPosPionPhi(NULL),
102 fHistoNegPionEta(NULL),
103 fHistoPosPionEta(NULL),
104 fHistoNegPionClsTPC(NULL),
105 fHistoPosPionClsTPC(NULL),
106 fHistoPionDCAxy(NULL),
107 fHistoPionDCAz(NULL),
108 fHistoPionTPCdEdxNSigma(NULL),
109 fHistoPionTPCdEdx(NULL),
110 fHistoPionPionInvMassPt(NULL),
111 fHistoGammaGammaInvMassPt(NULL),
112 fHistoMotherInvMassPt(NULL),
113 fHistoMotherInvMassPtRejectedKinematic(NULL),
115 fHistoMotherSameDiff1Diff2BackInvMassPt(NULL),
116 fHistoMotherSameDiff1Diff1BackInvMassPt(NULL),
117 fHistoMotherSameSameDiff2BackInvMassPt(NULL),
118 fHistoMotherSameDiff1SameBackInvMassPt(NULL),
120 fHistoAngleOmegaPiPlPiMi(NULL),
121 fHistoAngleOmegaPiZero(NULL),
122 fHistoAngleOmegaPiPl(NULL),
123 fHistoAngleOmegaPiMi(NULL),
124 fHistoAnglePiPlPiMi(NULL),
125 fHistoAnglePiZeroPiMi(NULL),
126 fHistoAnglePiPlPiZero(NULL),
127 fHistoAngleSum(NULL),
128 fHistoMotherInvMassSubPi0(NULL),
129 fHistoMotherSameDiff1Diff2BackInvMassSubPi0Pt(NULL),
130 fHistoMotherSameDiff1Diff1BackInvMassSubPi0Pt(NULL),
131 fHistoMotherSameSameDiff2BackInvMassSubPi0Pt(NULL),
132 fHistoMotherSameDiff1SameBackInvMassSubPi0Pt(NULL),
133 fHistoMotherInvMassFixedPzPi0(NULL),
134 fHistoMotherSameDiff1Diff2BackInvMassFixedPzPi0Pt(NULL),
135 fHistoMotherSameDiff1Diff1BackInvMassFixedPzPi0Pt(NULL),
136 fHistoMotherSameSameDiff2BackInvMassFixedPzPi0Pt(NULL),
137 fHistoMotherSameDiff1SameBackInvMassFixedPzPi0Pt(NULL),
138 fHistoTrueAngleSum(NULL),
139 fHistoMCAllGammaPt(NULL),
140 fHistoMCConvGammaPt(NULL),
141 fHistoMCAllPosPionsPt(NULL),
142 fHistoMCAllNegPionsPt(NULL),
143 fHistoMCGammaFromNeutralMesonPt(NULL),
144 fHistoMCPosPionsFromNeutralMesonPt(NULL),
145 fHistoMCNegPionsFromNeutralMesonPt(NULL),
146 fHistoMCEtaPiPlPiMiPiZeroPt(NULL),
147 fHistoMCEtaPiPlPiMiPiZeroInAccPt(NULL),
148 fHistoMCOmegaPiPlPiMiPiZeroPt(NULL),
149 fHistoMCOmegaPiPlPiMiPiZeroInAccPt(NULL),
150 fHistoTrueMotherPiPlPiMiPiZeroInvMassPt(NULL),
151 fHistoTrueMotherGammaGammaInvMassPt(NULL),
152 fHistoTrueMotherGammaGammaFromEtaInvMassPt(NULL),
153 fHistoTrueMotherGammaGammaFromOmegaInvMassPt(NULL),
154 fHistoTrueConvGammaPt(NULL),
155 fHistoTrueConvGammaFromNeutralMesonPt(NULL),
156 fHistoTrueClusterGammaPt(NULL),
157 fHistoTrueClusterGammaFromNeutralMesonPt(NULL),
158 fHistoTruePosPionPt(NULL),
159 fHistoTruePosPionFromNeutralMesonPt(NULL),
160 fHistoTrueNegPionPt(NULL),
161 fHistoTrueNegPionFromNeutralMesonPt(NULL),
162 fHistoTruePionPionInvMassPt(NULL),
163 fHistoTruePionPionFromSameMotherInvMassPt(NULL),
164 fHistoTruePionPionFromEtaInvMassPt(NULL),
165 fHistoTruePionPionFromOmegaInvMassPt(NULL),
166 fHistoDoubleCountTruePi0InvMassPt(NULL),
167 fHistoDoubleCountTrueEtaInvMassPt(NULL),
168 fHistoDoubleCountTrueOmegaInvMassPt(NULL),
169 fHistoDoubleCountTrueConvGammaRPt(NULL),
170 fVectorDoubleCountTruePi0s(0),
171 fVectorDoubleCountTrueEtas(0),
172 fVectorDoubleCountTrueOmegas(0),
173 fVectorDoubleCountTrueConvGammas(0),
175 fHistoNGoodESDTracks(NULL),
176 fProfileEtaShift(NULL),
177 fHistoSPDClusterTrackletBackground(NULL),
181 fNumberOfESDTracks(0),
182 fMoveParticleAccordingToVertex(kFALSE),
184 fDoMesonAnalysis(kTRUE),
186 fIsFromMBHeader(kTRUE),
198 fV0ReaderName(
"V0ReaderV1"),
200 fBGHandlerPiPl(NULL),
201 fBGHandlerPiMi(NULL),
213 fSelectorNegPionIndex(0),
214 fSelectorPosPionIndex(0),
215 fGoodConvGammas(NULL),
216 fClusterCandidates(NULL),
217 fNeutralPionCandidates(NULL),
218 fPosPionCandidates(NULL),
219 fNegPionCandidates(NULL),
220 fGoodVirtualParticles(NULL),
221 fEventCutArray(NULL),
222 fGammaCutArray(NULL),
223 fClusterCutArray(NULL),
225 fNeutralPionMesonCutArray(NULL),
226 fMesonCutArray(NULL),
228 fConversionCuts(NULL),
230 fHistoConvGammaPt(NULL),
231 fHistoConvGammaEta(NULL),
232 fHistoClusterGammaPt(NULL),
233 fHistoClusterGammaEta(NULL),
234 fHistoNegPionPt(NULL),
235 fHistoPosPionPt(NULL),
236 fHistoNegPionPhi(NULL),
237 fHistoPosPionPhi(NULL),
238 fHistoNegPionEta(NULL),
239 fHistoPosPionEta(NULL),
240 fHistoNegPionClsTPC(NULL),
241 fHistoPosPionClsTPC(NULL),
242 fHistoPionDCAxy(NULL),
243 fHistoPionDCAz(NULL),
244 fHistoPionTPCdEdxNSigma(NULL),
245 fHistoPionTPCdEdx(NULL),
246 fHistoPionPionInvMassPt(NULL),
247 fHistoGammaGammaInvMassPt(NULL),
248 fHistoMotherInvMassPt(NULL),
249 fHistoMotherInvMassPtRejectedKinematic(NULL),
251 fHistoMotherSameDiff1Diff2BackInvMassPt(NULL),
252 fHistoMotherSameDiff1Diff1BackInvMassPt(NULL),
253 fHistoMotherSameSameDiff2BackInvMassPt(NULL),
254 fHistoMotherSameDiff1SameBackInvMassPt(NULL),
256 fHistoAngleOmegaPiPlPiMi(NULL),
257 fHistoAngleOmegaPiZero(NULL),
258 fHistoAngleOmegaPiPl(NULL),
259 fHistoAngleOmegaPiMi(NULL),
260 fHistoAnglePiPlPiMi(NULL),
261 fHistoAnglePiZeroPiMi(NULL),
262 fHistoAnglePiPlPiZero(NULL),
263 fHistoAngleSum(NULL),
264 fHistoMotherInvMassSubPi0(NULL),
265 fHistoMotherSameDiff1Diff2BackInvMassSubPi0Pt(NULL),
266 fHistoMotherSameDiff1Diff1BackInvMassSubPi0Pt(NULL),
267 fHistoMotherSameSameDiff2BackInvMassSubPi0Pt(NULL),
268 fHistoMotherSameDiff1SameBackInvMassSubPi0Pt(NULL),
269 fHistoMotherInvMassFixedPzPi0(NULL),
270 fHistoMotherSameDiff1Diff2BackInvMassFixedPzPi0Pt(NULL),
271 fHistoMotherSameDiff1Diff1BackInvMassFixedPzPi0Pt(NULL),
272 fHistoMotherSameSameDiff2BackInvMassFixedPzPi0Pt(NULL),
273 fHistoMotherSameDiff1SameBackInvMassFixedPzPi0Pt(NULL),
274 fHistoTrueAngleSum(NULL),
275 fHistoMCAllGammaPt(NULL),
276 fHistoMCConvGammaPt(NULL),
277 fHistoMCAllPosPionsPt(NULL),
278 fHistoMCAllNegPionsPt(NULL),
279 fHistoMCGammaFromNeutralMesonPt(NULL),
280 fHistoMCPosPionsFromNeutralMesonPt(NULL),
281 fHistoMCNegPionsFromNeutralMesonPt(NULL),
282 fHistoMCEtaPiPlPiMiPiZeroPt(NULL),
283 fHistoMCEtaPiPlPiMiPiZeroInAccPt(NULL),
284 fHistoMCOmegaPiPlPiMiPiZeroPt(NULL),
285 fHistoMCOmegaPiPlPiMiPiZeroInAccPt(NULL),
286 fHistoTrueMotherPiPlPiMiPiZeroInvMassPt(NULL),
287 fHistoTrueMotherGammaGammaInvMassPt(NULL),
288 fHistoTrueMotherGammaGammaFromEtaInvMassPt(NULL),
289 fHistoTrueMotherGammaGammaFromOmegaInvMassPt(NULL),
290 fHistoTrueConvGammaPt(NULL),
291 fHistoTrueConvGammaFromNeutralMesonPt(NULL),
292 fHistoTrueClusterGammaPt(NULL),
293 fHistoTrueClusterGammaFromNeutralMesonPt(NULL),
294 fHistoTruePosPionPt(NULL),
295 fHistoTruePosPionFromNeutralMesonPt(NULL),
296 fHistoTrueNegPionPt(NULL),
297 fHistoTrueNegPionFromNeutralMesonPt(NULL),
298 fHistoTruePionPionInvMassPt(NULL),
299 fHistoTruePionPionFromSameMotherInvMassPt(NULL),
300 fHistoTruePionPionFromEtaInvMassPt(NULL),
301 fHistoTruePionPionFromOmegaInvMassPt(NULL),
302 fHistoDoubleCountTruePi0InvMassPt(NULL),
303 fHistoDoubleCountTrueEtaInvMassPt(NULL),
304 fHistoDoubleCountTrueOmegaInvMassPt(NULL),
305 fHistoDoubleCountTrueConvGammaRPt(NULL),
306 fVectorDoubleCountTruePi0s(0),
307 fVectorDoubleCountTrueEtas(0),
308 fVectorDoubleCountTrueOmegas(0),
309 fVectorDoubleCountTrueConvGammas(0),
311 fHistoNGoodESDTracks(NULL),
312 fProfileEtaShift(NULL),
313 fHistoSPDClusterTrackletBackground(NULL),
317 fNumberOfESDTracks(0),
318 fMoveParticleAccordingToVertex(kFALSE),
320 fDoMesonAnalysis(kTRUE),
322 fIsFromMBHeader(kTRUE),
327 DefineOutput(1, TList::Class());
336 cout<<
"Destructor"<<endl;
398 TString cutstringConvGamma =
"";
400 TString cutstringCaloGamma =
"";
406 if (
fNeutralPionMode == 0) fullCutString = Form(
"%i_%s_%s_%s_%s_%s",
fNeutralPionMode,cutstringEvent.Data(),cutstringConvGamma.Data(),cutstringNeutralPion.Data(), cutstringPion.Data(),cutstringMeson.Data());
407 else if (
fNeutralPionMode == 1) fullCutString = Form(
"%i_%s_%s_%s_%s_%s_%s",
fNeutralPionMode,cutstringEvent.Data(),cutstringConvGamma.Data(),cutstringCaloGamma.Data(),cutstringNeutralPion.Data(), cutstringPion.Data(),cutstringMeson.Data());
408 else if (
fNeutralPionMode == 2) fullCutString = Form(
"%i_%s_%s_%s_%s_%s",
fNeutralPionMode,cutstringEvent.Data(),cutstringCaloGamma.Data(),cutstringNeutralPion.Data(), cutstringPion.Data(),cutstringMeson.Data());
417 if(collisionSystem == 1 || collisionSystem == 2 ||
418 collisionSystem == 5 || collisionSystem == 8 ||
419 collisionSystem == 9){
420 centMin = centMin*10;
421 centMax = centMax*10;
423 else if(collisionSystem == 3 || collisionSystem == 6){
427 else if(collisionSystem == 4 || collisionSystem == 7){
428 centMin = ((centMin*5)+45);
429 centMax = ((centMax*5)+45);
565 TString cutstringConvGamma =
"";
567 TString cutstringCaloGamma =
"";
573 if (
fNeutralPionMode == 0) fullCutString = Form(
"%i_%s_%s_%s_%s_%s",
fNeutralPionMode,cutstringEvent.Data(),cutstringConvGamma.Data(),cutstringNeutralPion.Data(), cutstringPion.Data(),cutstringMeson.Data());
574 else if (
fNeutralPionMode == 1) fullCutString = Form(
"%i_%s_%s_%s_%s_%s_%s",
fNeutralPionMode,cutstringEvent.Data(),cutstringConvGamma.Data(),cutstringCaloGamma.Data(),cutstringNeutralPion.Data(), cutstringPion.Data(),cutstringMeson.Data());
575 else if (
fNeutralPionMode == 2) fullCutString = Form(
"%i_%s_%s_%s_%s_%s",
fNeutralPionMode,cutstringEvent.Data(),cutstringCaloGamma.Data(),cutstringNeutralPion.Data(), cutstringPion.Data(),cutstringMeson.Data());
576 TString nameCutFolder = Form(
"Cut Number %s", fullCutString.Data());
577 TString nameESDList = Form(
"%s ESD histograms", fullCutString.Data());
581 fCutFolder[iCut]->SetName(nameCutFolder.Data());
582 fCutFolder[iCut]->SetOwner(kTRUE);
586 fESDList[iCut]->SetName(nameESDList.Data());
591 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(2,
"Centrality");
592 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(3,
"Miss. MC or inc. ev.");
595 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(6,
"Cont. Vertex");
599 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(10,
"EMCAL problem");
600 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(12,
"SPD hits vs tracklet");
601 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(13,
"Out-of-Bunch pileup Past-Future");
602 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(14,
"Pileup V0M-TPCout Tracks");
614 fHistoConvGammaPt[iCut] =
new TH1F(
"ESD_ConvGamma_Pt",
"ESD_ConvGamma_Pt",250,0,25);
616 fHistoConvGammaEta[iCut] =
new TH1F(
"ESD_ConvGamma_Eta",
"ESD_ConvGamma_Eta",600,-1.5,1.5);
625 fHistoNegPionPt[iCut] =
new TH1F(
"ESD_PrimaryNegPions_Pt",
"ESD_PrimaryNegPions_Pt",1000,0,25);
627 fHistoPosPionPt[iCut] =
new TH1F(
"ESD_PrimaryPosPions_Pt",
"ESD_PrimaryPosPions_Pt",1000,0,25);
629 fHistoNegPionPhi[iCut] =
new TH1F(
"ESD_PrimaryNegPions_Phi",
"ESD_PrimaryNegPions_Phi",360,0,2*TMath::Pi());
631 fHistoPosPionPhi[iCut] =
new TH1F(
"ESD_PrimaryPosPions_Phi",
"ESD_PrimaryPosPions_Phi",360,0,2*TMath::Pi());
637 fHistoNegPionEta[iCut] =
new TH1F(
"ESD_PrimaryNegPions_Eta",
"ESD_PrimaryNegPions_Eta",600,-1.5,1.5);
639 fHistoPosPionEta[iCut] =
new TH1F(
"ESD_PrimaryPosPions_Eta",
"ESD_PrimaryPosPions_Eta",600,-1.5,1.5);
641 fHistoNegPionClsTPC[iCut] =
new TH2F(
"ESD_PrimaryNegPions_ClsTPC",
"ESD_PrimaryNegPions_ClsTPC",100,0,1,400,0.,10.);
643 fHistoPosPionClsTPC[iCut] =
new TH2F(
"ESD_PrimaryPosPions_ClsTPC",
"ESD_PrimaryPosPions_ClsTPC",100,0,1,400,0.,10.);
645 fHistoPionDCAxy[iCut] =
new TH2F(
"ESD_PrimaryPions_DCAxy",
"ESD_PrimaryPions_DCAxy",800,-4.0,4.0,400,0.,10.);
647 fHistoPionDCAz[iCut] =
new TH2F(
"ESD_PrimaryPions_DCAz",
"ESD_PrimaryPions_DCAz",800,-4.0,4.0,400,0.,10.);
651 fHistoPionTPCdEdx[iCut] =
new TH2F(
"ESD_PrimaryPions_TPCdEdxSignal",
"ESD_PrimaryPions_TPCdEdxSignal" ,150,0.05,20.0,800,0.0,200);
669 fHistoMotherInvMassSubPi0[iCut] =
new TH2F(
"ESD_InvMass_Mother_Sub_InvMass(NeutralPion)_Pt",
"ESD_Mother_InvMass_Sub_InvMass(NeutralPion)_Pt",800,0.1,0.9,250,0,25);
691 fHistoAngleOmegaPiPlPiMi[iCut] =
new TH2F(
"ESD_Mother_AngleOmegaNegPionsPosPions_Pt",
"ESD_Mother_AngleOmegaNegPionsPosPions_Pt",250,0,25,360,0,TMath::Pi());
693 fHistoAngleOmegaPiMi[iCut] =
new TH2F(
"ESD_Mother_AngleOmegaNegPions_Pt",
"ESD_Mother_AngleOmegaNegPions_Pt",250,0,25,360,0,TMath::Pi());
695 fHistoAngleOmegaPiPl[iCut] =
new TH2F(
"ESD_Mother_AngleOmegaPosPions_Pt",
"ESD_Mother_AngleOmegaPosPions_Pt",250,0,25,360,0,TMath::Pi());
697 fHistoAngleOmegaPiZero[iCut] =
new TH2F(
"ESD_Mother_AngleOmegaNeutralPion_Pt",
"ESD_Mother_AngleOmegaNeutralPion_Pt",250,0,25,360,0,TMath::Pi());
699 fHistoAnglePiPlPiZero[iCut] =
new TH2F(
"ESD_Mother_AnglePosPionsNeutralPion_Pt",
"ESD_Mother_AnglePosPionsNeutralPion_Pt",250,0,25,360,0,TMath::Pi());
701 fHistoAnglePiPlPiMi[iCut] =
new TH2F(
"ESD_Mother_AnglePosPionsNegPions_Pt",
"ESD_Mother_AnglePosPionsNegPions_Pt",250,0,25,360,0,TMath::Pi());
703 fHistoAnglePiZeroPiMi[iCut] =
new TH2F(
"ESD_Mother_AngleNeutralPionNegPions_Pt",
"ESD_Mother_AngleNeutralPionNegPions_Pt",250,0,25,360,0,TMath::Pi());
705 fHistoAngleSum[iCut] =
new TH2F(
"ESD_Mother_AngleSum_Pt",
"ESD_Mother_AngleSum_Pt",250,0,25,720,0,2*TMath::Pi());
710 Int_t bins = AxisAfter->GetNbins();
711 Double_t from = AxisAfter->GetXmin();
715 Double_t factor = TMath::Power(to/from, 1./bins);
716 for(
Int_t i=1; i<=bins; ++i) newBins[i] = factor * newBins[i-1];
718 AxisAfter->Set(bins, newBins);
720 AxisAfter->Set(bins, newBins);
725 fCutFolder[iCut]->Add(
fESDList[iCut]);
786 TString cutstringConvGamma =
"";
788 TString cutstringCaloGamma =
"";
794 if (
fNeutralPionMode == 0) fullCutString = Form(
"%i_%s_%s_%s_%s_%s",
fNeutralPionMode,cutstringEvent.Data(),cutstringConvGamma.Data(),cutstringNeutralPion.Data(), cutstringPion.Data(),cutstringMeson.Data());
795 else if (
fNeutralPionMode == 1) fullCutString = Form(
"%i_%s_%s_%s_%s_%s_%s",
fNeutralPionMode,cutstringEvent.Data(),cutstringConvGamma.Data(),cutstringCaloGamma.Data(),cutstringNeutralPion.Data(), cutstringPion.Data(),cutstringMeson.Data());
796 else if (
fNeutralPionMode == 2) fullCutString = Form(
"%i_%s_%s_%s_%s_%s",
fNeutralPionMode,cutstringEvent.Data(),cutstringCaloGamma.Data(),cutstringNeutralPion.Data(), cutstringPion.Data(),cutstringMeson.Data());
797 TString nameMCList = Form(
"%s MC histograms", fullCutString.Data());
798 TString nameTrueRecList = Form(
"%s True histograms", fullCutString.Data());
801 fMCList[iCut]->SetName(nameMCList.Data());
802 fMCList[iCut]->SetOwner(kTRUE);
840 fTrueList[iCut]->SetName(nameTrueRecList.Data());
898 fHistoTrueAngleSum[iCut] =
new TH2F(
"ESD_TrueMother_AngleSum_Pt",
"ESD_TrueMother_AngleSum_Pt",250,0,25,720,0,2*TMath::Pi());
911 if(!
fV0Reader){printf(
"Error: No V0 Reader");
return;}
928 for(
Int_t iMatcherTask = 0; iMatcherTask < 3; iMatcherTask++){
992 if(!
fV0Reader){printf(
"Error: No V0 Reader");
return;}
995 if(InputEvent()->IsIncompleteDAQ()==kTRUE) eventQuality = 2;
996 if(eventQuality == 2 || eventQuality == 3){
1004 if(!
fPionSelector){printf(
"Error: No PionSelector");
return;}
1018 Bool_t isRunningEMCALrelAna = kFALSE;
1025 if(eventNotAccepted){
1031 if(eventQuality != 0){
1039 fHistoSPDClusterTrackletBackground[iCut]->Fill(fInputEvent->GetMultiplicity()->GetNumberOfTracklets(),(fInputEvent->GetNumberOfITSClusters(0)+fInputEvent->GetNumberOfITSClusters(1)));
1112 printf(
" Eta t PiPlusPiMinus Gamma Task %s :: Eta Shift Manually Set to %f \n\n",
1133 nclus = fInputEvent->GetNumberOfCaloClusters();
1137 if(nclus == 0)
return;
1141 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
1144 for(Long_t i = 0; i < nclus; i++){
1146 AliVCluster* clus = NULL;
1147 if(fInputEvent->IsA()==AliESDEvent::Class()) clus =
new AliESDCaloCluster(*(AliESDCaloCluster*)fInputEvent->GetCaloCluster(i));
1148 else if(fInputEvent->IsA()==AliAODEvent::Class()) clus =
new AliAODCaloCluster(*(AliAODCaloCluster*)fInputEvent->GetCaloCluster(i));
1150 if (!clus)
continue;
1153 TLorentzVector clusterVector;
1154 clus->GetMomentum(clusterVector,vertex);
1156 TLorentzVector* tmpvec =
new TLorentzVector();
1157 tmpvec->SetPxPyPzE(clusterVector.Px(),clusterVector.Py(),clusterVector.Pz(),clusterVector.E());
1161 if(!PhotonCandidate){
delete clus;
delete tmpvec;
continue;}
1168 Int_t* mclabelsCluster = clus->GetLabels();
1171 if (clus->GetNLabels()>0){
1172 for (
Int_t k =0; k< (
Int_t)clus->GetNLabels(); k++){
1207 TParticle *Photon = NULL;
1208 if (!TruePhotonCandidate->
GetIsCaloPhoton()) AliFatal(
"CaloPhotonFlag has not been set task will abort");
1212 const AliVVertex* primVtxMC =
fMCEvent->GetPrimaryVertex();
1213 Double_t mcProdVtxX = primVtxMC->GetX();
1214 Double_t mcProdVtxY = primVtxMC->GetY();
1215 Double_t mcProdVtxZ = primVtxMC->GetZ();
1260 if(!PhotonCandidate)
continue;
1265 Int_t isPosFromMBHeader
1268 Int_t isNegFromMBHeader
1271 if( (isNegFromMBHeader+isPosFromMBHeader) != 4)
fIsFromMBHeader = kFALSE;
1292 GoodGammasStepOne->Add(PhotonCandidate);
1295 GoodGammasStepTwo->Add(PhotonCandidate);
1301 for(
Int_t i = 0;i<GoodGammasStepOne->GetEntries();i++){
1303 if(!PhotonCandidate)
continue;
1306 Int_t isPosFromMBHeader
1308 Int_t isNegFromMBHeader
1310 if( (isNegFromMBHeader+isPosFromMBHeader) != 4)
fIsFromMBHeader = kFALSE;
1323 else GoodGammasStepTwo->Add(PhotonCandidate);
1327 for(
Int_t i = 0;i<GoodGammasStepTwo->GetEntries();i++){
1329 if(!PhotonCandidate)
continue;
1332 Int_t isPosFromMBHeader
1334 Int_t isNegFromMBHeader
1336 if( (isNegFromMBHeader+isPosFromMBHeader) != 4)
fIsFromMBHeader = kFALSE;
1353 delete GoodGammasStepOne;
1354 GoodGammasStepOne = 0x0;
1355 delete GoodGammasStepTwo;
1356 GoodGammasStepTwo = 0x0;
1363 AliStack *MCStack =
fMCEvent->Stack();
1367 const AliVVertex* primVtxMC =
fMCEvent->GetPrimaryVertex();
1368 Double_t mcProdVtxX = primVtxMC->GetX();
1369 Double_t mcProdVtxY = primVtxMC->GetY();
1370 Double_t mcProdVtxZ = primVtxMC->GetZ();
1373 if(posDaughter == NULL || negDaughter == NULL)
return;
1374 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){
1378 else if (posDaughter->GetMother(0) == -1){
1382 if(TMath::Abs(posDaughter->GetPdgCode())!=11 || TMath::Abs(negDaughter->GetPdgCode())!=11)
return;
1383 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode())
return;
1384 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5)
return;
1386 TParticle *Photon = TruePhotonCandidate->
GetMCParticle(MCStack);
1387 if(Photon->GetPdgCode() != 22)
return;
1395 if( gammaIsPrimary ){
1409 for(
Int_t firstGammaIndex=0;firstGammaIndex<
fGoodConvGammas->GetEntries()-1;firstGammaIndex++){
1411 if (gamma0==NULL)
continue;
1412 for(
Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<
fGoodConvGammas->GetEntries();secondGammaIndex++){
1415 if (gamma1==NULL)
continue;
1422 pi0cand->
SetLabels(firstGammaIndex,secondGammaIndex);
1428 if(fInputEvent->IsA()==AliESDEvent::Class())
1430 if(fInputEvent->IsA()==AliAODEvent::Class())
1458 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
1462 if (gamma0==NULL)
continue;
1465 if (firstGammaIndex == secondGammaIndex)
continue;
1467 if (gamma1==NULL)
continue;
1470 pi0cand->
SetLabels(firstGammaIndex,secondGammaIndex);
1500 AliStack *MCStack =
fMCEvent->Stack();
1502 Bool_t isTruePi0 = kFALSE;
1504 Int_t gamma0MotherLabel = -1;
1505 Int_t motherRealLabel = -1;
1507 if(gamma0MCLabel != -1){
1508 TParticle * gammaMC0 = (TParticle*)MCStack->Particle(gamma0MCLabel);
1512 gamma0MotherLabel=gammaMC0->GetMother(0);
1513 motherRealLabel=gammaMC0->GetFirstMother();
1515 if (TrueGammaCandidate0->
IsConversion() && gammaMC0->GetMother(0)>-1){
1516 gamma0MotherLabel=MCStack->Particle(gammaMC0->GetMother(0))->GetMother(0);
1517 motherRealLabel=MCStack->Particle(gammaMC0->GetMother(0))->GetMother(0);
1519 gamma0MotherLabel=gammaMC0->GetMother(0);
1520 motherRealLabel=gammaMC0->GetMother(0);
1526 if (!TrueGammaCandidate1->
GetIsCaloPhoton()) AliFatal(
"CaloPhotonFlag has not been set. Aborting");
1529 Int_t gamma1MotherLabel = -1;
1531 if(gamma1MCLabel != -1){
1533 TParticle * gammaMC1 = (TParticle*)MCStack->Particle(gamma1MCLabel);
1537 gamma1MotherLabel=gammaMC1->GetMother(0);
1539 if (TrueGammaCandidate1->
IsConversion() && gammaMC1->GetMother(0)>-1) gamma1MotherLabel=MCStack->Particle(gammaMC1->GetMother(0))->GetMother(0);
1540 else gamma1MotherLabel=gammaMC1->GetMother(0);
1545 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1546 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
1571 AliStack *MCStack =
fMCEvent->Stack();
1572 if(TrueGammaCandidate0->
GetV0Index()<fInputEvent->GetNumberOfV0s()){
1573 Bool_t isTruePi0 = kFALSE;
1574 Bool_t isTruePi0Dalitz = kFALSE;
1575 Bool_t gamma0DalitzCand = kFALSE;
1576 Bool_t gamma1DalitzCand = kFALSE;
1578 Int_t gamma0MotherLabel = -1;
1579 Int_t motherRealLabel = -1;
1580 if(gamma0MCLabel != -1){
1584 TParticle * gammaMC0 = (TParticle*)MCStack->Particle(gamma0MCLabel);
1585 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){
1586 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){
1587 if(gammaMC0->GetPdgCode() == 22){
1588 gamma0MotherLabel=gammaMC0->GetFirstMother();
1589 motherRealLabel=gammaMC0->GetFirstMother();
1592 if(gammaMC0->GetPdgCode() ==111){
1593 gamma0DalitzCand = kTRUE;
1594 gamma0MotherLabel=-111;
1595 motherRealLabel=gamma0MCLabel;
1599 if(TrueGammaCandidate1->
GetV0Index()<fInputEvent->GetNumberOfV0s()){
1601 Int_t gamma1MotherLabel = -1;
1602 if(gamma1MCLabel != -1){
1606 TParticle * gammaMC1 = (TParticle*)MCStack->Particle(gamma1MCLabel);
1607 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){
1608 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){
1609 if(gammaMC1->GetPdgCode() == 22){
1610 gamma1MotherLabel=gammaMC1->GetFirstMother();
1613 if(gammaMC1->GetPdgCode() ==111 ){
1614 gamma1DalitzCand = kTRUE;
1615 gamma1MotherLabel=-111;
1619 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1620 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
1627 if (gamma1DalitzCand || gamma0DalitzCand){
1628 if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
1629 if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
1631 if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
1632 if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
1637 if(isTruePi0 || isTruePi0Dalitz){
1657 TClonesArray *AODMCTrackArray =
dynamic_cast<TClonesArray*
>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1658 Bool_t isTruePi0 = kFALSE;
1659 Bool_t isTruePi0Dalitz = kFALSE;
1660 Bool_t gamma0DalitzCand = kFALSE;
1661 Bool_t gamma1DalitzCand = kFALSE;
1662 Int_t motherRealLabel = -1;
1664 if (AODMCTrackArray!=NULL && TrueGammaCandidate0 != NULL){
1665 AliAODMCParticle *positiveMC =
static_cast<AliAODMCParticle*
>(AODMCTrackArray->At(TrueGammaCandidate0->
GetMCLabelPositive()));
1666 AliAODMCParticle *negativeMC =
static_cast<AliAODMCParticle*
>(AODMCTrackArray->At(TrueGammaCandidate0->
GetMCLabelNegative()));
1668 Int_t gamma0MCLabel = -1;
1669 Int_t gamma0MotherLabel = -1;
1670 if(!positiveMC||!negativeMC)
1673 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
1674 gamma0MCLabel = positiveMC->GetMother();
1677 if(gamma0MCLabel != -1){
1679 AliAODMCParticle * gammaMC0 =
static_cast<AliAODMCParticle*
>(AODMCTrackArray->At(gamma0MCLabel));
1680 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){
1681 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){
1682 if(gammaMC0->GetPdgCode() == 22){
1683 gamma0MotherLabel=gammaMC0->GetMother();
1684 motherRealLabel=gammaMC0->GetMother();
1687 if(gammaMC0->GetPdgCode() ==111){
1688 gamma0DalitzCand = kTRUE;
1689 gamma0MotherLabel=-111;
1690 motherRealLabel=gamma0MCLabel;
1694 positiveMC =
static_cast<AliAODMCParticle*
>(AODMCTrackArray->At(TrueGammaCandidate1->
GetMCLabelPositive()));
1695 negativeMC =
static_cast<AliAODMCParticle*
>(AODMCTrackArray->At(TrueGammaCandidate1->
GetMCLabelNegative()));
1697 Int_t gamma1MCLabel = -1;
1698 Int_t gamma1MotherLabel = -1;
1699 if(!positiveMC||!negativeMC)
1702 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
1703 gamma1MCLabel = positiveMC->GetMother();
1705 if(gamma1MCLabel != -1){
1707 AliAODMCParticle * gammaMC1 =
static_cast<AliAODMCParticle*
>(AODMCTrackArray->At(gamma1MCLabel));
1708 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){
1709 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){
1710 if(gammaMC1->GetPdgCode() == 22){
1711 gamma1MotherLabel=gammaMC1->GetMother();
1714 if(gammaMC1->GetPdgCode() ==111 ){
1715 gamma1DalitzCand = kTRUE;
1716 gamma1MotherLabel=-111;
1720 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1721 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
1728 if (gamma1DalitzCand || gamma0DalitzCand){
1729 if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
1730 if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
1732 if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
1733 if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
1737 if(isTruePi0 || isTruePi0Dalitz){
1760 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
1764 if (gamma0==NULL)
continue;
1769 if (gamma1==NULL)
continue;
1772 AliVCluster* cluster = fInputEvent->GetCaloCluster(gamma1->
GetCaloClusterRef());
1777 pi0cand->
SetLabels(firstGammaIndex,secondGammaIndex);
1812 AliStack *MCStack =
fMCEvent->Stack();
1813 if(TrueGammaCandidate0->
GetV0Index()<fInputEvent->GetNumberOfV0s()){
1814 Bool_t isTruePi0 = kFALSE;
1815 Bool_t isTruePi0Dalitz = kFALSE;
1816 Bool_t gamma0DalitzCand = kFALSE;
1819 Int_t gamma0MotherLabel = -1;
1820 Int_t motherRealLabel = -1;
1821 if(gamma0MCLabel != -1){
1825 TParticle * gammaMC0 = (TParticle*)MCStack->Particle(gamma0MCLabel);
1826 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){
1827 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){
1828 if(gammaMC0->GetPdgCode() == 22){
1829 gamma0MotherLabel=gammaMC0->GetFirstMother();
1830 motherRealLabel=gammaMC0->GetFirstMother();
1833 if(gammaMC0->GetPdgCode() ==111){
1834 gamma0DalitzCand = kTRUE;
1835 gamma0MotherLabel=-111;
1836 motherRealLabel=gamma0MCLabel;
1842 if (!TrueGammaCandidate1->
GetIsCaloPhoton()) AliFatal(
"CaloPhotonFlag has not been set. Aborting");
1845 Int_t gamma1MotherLabel = -1;
1848 if(gamma1MCLabel != -1){
1850 TParticle * gammaMC1 = (TParticle*)MCStack->Particle(gamma1MCLabel);
1854 gamma1MotherLabel=gammaMC1->GetMother(0);
1856 if (TrueGammaCandidate1->
IsConversion() && gammaMC1->GetMother(0)>-1) gamma1MotherLabel=MCStack->Particle(gammaMC1->GetMother(0))->GetMother(0);
1857 else gamma1MotherLabel=gammaMC1->GetMother(0);
1862 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1863 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
1869 if (gamma0DalitzCand ){
1870 if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
1871 if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
1875 if(isTruePi0 || isTruePi0Dalitz ){
1894 Double_t magField = fInputEvent->GetMagneticField();
1895 if( magField < 0.0 ){
1901 vector<Int_t> lGoodNegPionIndexPrev(0);
1902 vector<Int_t> lGoodPosPionIndexPrev(0);
1909 TLorentzVector *negPionforHandler =
new TLorentzVector();
1910 negPionforHandler->SetPxPyPzE(negPionCandidate->Px(), negPionCandidate->Py(), negPionCandidate->Pz(), negPionCandidate->E());
1913 delete negPionforHandler;
1920 const AliVVertex* primVtxMC =
fMCEvent->GetPrimaryVertex();
1921 Double_t mcProdVtxX = primVtxMC->GetX();
1922 Double_t mcProdVtxY = primVtxMC->GetY();
1923 Double_t mcProdVtxZ = primVtxMC->GetZ();
1925 Int_t labelNegPion = TMath::Abs( negPionCandidate->GetLabel() );
1927 if( labelNegPion>-1 && labelNegPion < fMCStack->GetNtrack() ){
1928 TParticle* negPion =
fMCStack->Particle(labelNegPion);
1929 if( negPion->GetPdgCode() == -211 ){
1930 if( negPionIsPrimary ){
1934 if( negPionIsPrimary ) {
1948 TLorentzVector *posPionforHandler =
new TLorentzVector();
1949 posPionforHandler->SetPxPyPzE(posPionCandidate->Px(), posPionCandidate->Py(), posPionCandidate->Pz(), posPionCandidate->E());
1952 delete posPionforHandler;
1959 const AliVVertex* primVtxMC =
fMCEvent->GetPrimaryVertex();
1960 Double_t mcProdVtxX = primVtxMC->GetX();
1961 Double_t mcProdVtxY = primVtxMC->GetY();
1962 Double_t mcProdVtxZ = primVtxMC->GetZ();
1964 Int_t labelPosPion = TMath::Abs( posPionCandidate->GetLabel() );
1966 if( labelPosPion>-1 && labelPosPion < fMCStack->GetNtrack() ) {
1967 TParticle* posPion =
fMCStack->Particle(labelPosPion);
1968 if( posPion->GetPdgCode() == 211 ){
1969 if( posPionIsPrimary ){
1973 if(posPionIsPrimary){
1983 for(
Int_t i = 0; i < lGoodNegPionIndexPrev.size(); i++){
1985 AliESDtrack *negPionCandidate =
fESDEvent->GetTrack(lGoodNegPionIndexPrev[i]);
1986 AliKFParticle negPionCandidateKF( *negPionCandidate->GetConstrainedParam(), 211 );
1988 for(
Int_t j = 0; j < lGoodPosPionIndexPrev.size(); j++){
1989 AliESDtrack *posPionCandidate =
fESDEvent->GetTrack(lGoodPosPionIndexPrev[j]);
1990 AliKFParticle posPionCandidateKF( *posPionCandidate->GetConstrainedParam(), 211 );
1994 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
1996 virtualPhoton->SetProductionVertex(primaryVertexImproved);
1997 virtualPhoton->SetTrackLabels( lGoodPosPionIndexPrev[j], lGoodNegPionIndexPrev[i]);
2001 Int_t motherlabelp = 0;
2002 Int_t motherlabeln = 0;
2003 TParticle *fNegativeMCParticle =NULL;
2004 TParticle *fPositiveMCParticle =NULL;
2006 labeln=TMath::Abs(negPionCandidate->GetLabel());
2007 labelp=TMath::Abs(posPionCandidate->GetLabel());
2008 if(labeln>-1) fNegativeMCParticle =
fMCStack->Particle(labeln);
2009 if(labelp>-1) fPositiveMCParticle =
fMCStack->Particle(labelp);
2011 if (fNegativeMCParticle == NULL || fPositiveMCParticle == NULL)
return;
2013 motherlabeln = fNegativeMCParticle->GetMother(0);
2014 motherlabelp = fPositiveMCParticle->GetMother(0);
2015 virtualPhoton->SetMCLabelPositive(labelp);
2016 virtualPhoton->SetMCLabelNegative(labeln);
2023 if (fPositiveMCParticle && fNegativeMCParticle ) {
2026 if(TMath::Abs(fNegativeMCParticle->GetPdgCode())==211 && TMath::Abs(fPositiveMCParticle->GetPdgCode())==211){
2028 if (motherlabeln == motherlabelp){
2040 if(TMath::Abs(fNegativeMCParticle->GetPdgCode())==211 && TMath::Abs(fPositiveMCParticle->GetPdgCode())==211){
2042 if (motherlabeln == motherlabelp){
2072 Float_t dcaToVertexXYPos = -1.0;
2073 Float_t dcaToVertexZPos = -1.0;
2074 Float_t dcaToVertexXYNeg = -1.0;
2075 Float_t dcaToVertexZNeg = -1.0;
2083 posPionCandidate->GetImpactParameters(bPos,bCovPos);
2084 if (bCovPos[0]<=0 || bCovPos[2]<=0) {
2085 AliDebug(1,
"Estimated b resolution lower or equal zero!");
2086 bCovPos[0]=0; bCovPos[2]=0;
2091 posPionCandidate->GetImpactParameters(bNeg,bCovNeg);
2092 if (bCovNeg[0]<=0 || bCovNeg[2]<=0) {
2093 AliDebug(1,
"Estimated b resolution lower or equal zero!");
2094 bCovNeg[0]=0; bCovNeg[2]=0;
2097 dcaToVertexXYPos = bPos[0];
2098 dcaToVertexZPos = bPos[1];
2099 dcaToVertexXYNeg = bNeg[0];
2100 dcaToVertexZNeg = bNeg[1];
2121 delete virtualPhoton;
2131 const AliVVertex* primVtxMC =
fMCEvent->GetPrimaryVertex();
2132 Double_t mcProdVtxX = primVtxMC->GetX();
2133 Double_t mcProdVtxY = primVtxMC->GetY();
2134 Double_t mcProdVtxZ = primVtxMC->GetZ();
2139 TParticle* particle = (TParticle *)
fMCStack->Particle(i);
2140 if (!particle)
continue;
2142 Int_t isMCFromMBHeader = -1;
2154 if(particle->GetMother(0) >-1){
2155 if (
fMCStack->Particle(particle->GetMother(0))->GetPdgCode() ==111){
2156 if (
fMCStack->Particle(particle->GetMother(0))->GetMother(0) > -1){
2157 if (
fMCStack->Particle((
fMCStack->Particle(particle->GetMother(0)))->GetMother(0))->GetPdgCode() == 221 ||
2158 fMCStack->Particle((
fMCStack->Particle(particle->GetMother(0)))->GetMother(0))->GetPdgCode() == 223 ){
2159 if (
fMCStack->Particle(particle->GetMother(0))->GetNDaughters()==3 )
2169 if(particle->GetMother(0) >-1){
2170 if (
fMCStack->Particle(particle->GetMother(0))->GetPdgCode() ==111){
2171 if (
fMCStack->Particle(particle->GetMother(0))->GetMother(0) > -1){
2172 if (
fMCStack->Particle((
fMCStack->Particle(particle->GetMother(0)))->GetMother(0))->GetPdgCode() == 221 ||
2173 fMCStack->Particle((
fMCStack->Particle(particle->GetMother(0)))->GetMother(0))->GetPdgCode() == 223 ){
2174 if (
fMCStack->Particle(particle->GetMother(0))->GetNDaughters()==3 )
2188 if( particle->GetPdgCode() == 211){
2190 if(particle->GetMother(0) >-1){
2191 if (
fMCStack->Particle(particle->GetMother(0))->GetPdgCode() ==221 ||
fMCStack->Particle(particle->GetMother(0))->GetPdgCode() ==223)
2195 if( particle->GetPdgCode() == -211){
2197 if(particle->GetMother(0) >-1){
2198 if (
fMCStack->Particle(particle->GetMother(0))->GetPdgCode() ==221 ||
fMCStack->Particle(particle->GetMother(0))->GetPdgCode() ==223 )
2206 Int_t labelNeutPion = -1;
2207 Int_t labelNegPion = -1;
2208 Int_t labelPosPion = -1;
2214 if (particle->Pt()>0.005){
2222 if(labelNeutPion>-1){
2223 TParticle *neutPion =
fMCStack->Particle(labelNeutPion);
2224 if(neutPion->GetDaughter(0)>-1 && neutPion->GetDaughter(1)>-1){
2225 TParticle *gamma1 =
fMCStack->Particle(neutPion->GetDaughter(0));
2226 TParticle *gamma2 =
fMCStack->Particle(neutPion->GetDaughter(1));
2233 if( kDaughter0IsPrim && kDaughter1IsPrim && kNegPionIsPrim && kPosPionIsPrim &&
2243 if( kDaughter0IsPrim && kDaughter1IsPrim && kNegPionIsPrim && kPosPionIsPrim &&
2270 if (neutralPion==NULL)
continue;
2279 if (vParticle==NULL)
continue;
2283 mesoncand->
SetLabels(mesonIndex,virtualParticleIndex);
2297 if(negPionCandidatetmp==NULL){
delete mesoncand;
continue;}
2299 NegPiontmp->SetPxPyPzE(negPionCandidatetmp->Px(), negPionCandidatetmp->Py(), negPionCandidatetmp->Pz(), negPionCandidatetmp->E());
2302 if(posPionCandidatetmp==NULL){
delete NegPiontmp;
delete mesoncand;
continue;}
2304 PosPiontmp->SetPxPyPzE(posPionCandidatetmp->Px(), posPionCandidatetmp->Py(), posPionCandidatetmp->Pz(), posPionCandidatetmp->E());
2306 if(
KinematicCut(NegPiontmp, PosPiontmp, neutralPion, mesoncand)){
2314 fHistoAngleSum[
fiCut]->Fill(mesoncand->Pt(),((PosPiontmp->Angle(mesoncand->Vect()))+(NegPiontmp->Angle(PosPiontmp->Vect()))+(PosPiontmp->Angle(neutralPion->Vect()))));
2322 Pi0tmp->SetPxPyPzE(neutralPion->Px(), neutralPion->Py(), neutralPion->Pz(), neutralPion->Energy());
2367 else if(
fNeutralPionMode == 1 && EventPiZeroGoodMeson.Pt() < 1.0)
continue;
2368 else if(
fNeutralPionMode == 2 && EventPiZeroGoodMeson.Pt() < 1.5)
continue;
2375 if(EventPiMiMeson && EventPiPlMeson){
2380 for(
Int_t iPrevious1=0; iPrevious1<EventPiPlMeson->size(); iPrevious1++){
2386 for(
Int_t iPrevious2=0; iPrevious2<EventPiMiMeson->size(); iPrevious2++){
2395 delete backPiPlPiMiCandidate;
2396 backPiPlPiMiCandidate = 0x0;
2399 delete backPiPlPiMiCandidate;
2400 backPiPlPiMiCandidate = 0x0;
2403 if(nEventsInBGMi!=nEventsInBGPl){
2406 if(
KinematicCut(&EventPiMiGoodMeson, &EventPiPlGoodMeson, &EventPiZeroGoodMeson, backgroundCandidate)){
2410 Pi0tmp->SetPxPyPzE(EventPiZeroGoodMeson.Px(), EventPiZeroGoodMeson.Py(), EventPiZeroGoodMeson.Pz(), EventPiZeroGoodMeson.Energy());
2420 delete backgroundCandidate;
2421 backgroundCandidate = 0x0;
2424 if(nEventsInBGMi==nEventsInBGPl){
2427 if(
KinematicCut(&EventPiMiGoodMeson, &EventPiPlGoodMeson, &EventPiZeroGoodMeson, backgroundCandidate)){
2431 Pi0tmp->SetPxPyPzE(EventPiZeroGoodMeson.Px(), EventPiZeroGoodMeson.Py(), EventPiZeroGoodMeson.Pz(), EventPiZeroGoodMeson.Energy());
2441 delete backgroundCandidate;
2442 backgroundCandidate = 0x0;
2445 delete PiPlPiMiBackgroundCandidate;
2446 PiPlPiMiBackgroundCandidate= 0x0;
2458 for(
Int_t iPrevious1=0; iPrevious1<EventPiPlMeson->size(); iPrevious1++){
2471 delete backPiPlPiMiCandidate;
2472 backPiPlPiMiCandidate = 0x0;
2475 delete backPiPlPiMiCandidate;
2476 backPiPlPiMiCandidate = 0x0;
2481 if(
KinematicCut(&EventPiNegGoodMeson, &EventPiPlGoodMeson, &EventPiZeroGoodMeson, backgroundCandidate)){
2485 Pi0tmp->SetPxPyPzE(EventPiZeroGoodMeson.Px(), EventPiZeroGoodMeson.Py(), EventPiZeroGoodMeson.Pz(), EventPiZeroGoodMeson.Energy());
2496 delete backgroundCandidate;
2497 backgroundCandidate = 0x0;
2499 delete PiPlPiMiBackgroundCandidate;
2500 PiPlPiMiBackgroundCandidate = 0x0;
2514 for(
Int_t iPrevious2=0; iPrevious2<EventPiMiMeson->size(); iPrevious2++){
2523 delete backPiPlPiMiCandidate;
2524 backPiPlPiMiCandidate = 0x0;
2527 delete backPiPlPiMiCandidate;
2528 backPiPlPiMiCandidate = 0x0;
2533 if(
KinematicCut(&EventPiMiGoodMeson, &EventPiPosGoodMeson, &EventPiZeroGoodMeson, backgroundCandidate)){
2537 Pi0tmp->SetPxPyPzE(EventPiZeroGoodMeson.Px(), EventPiZeroGoodMeson.Py(), EventPiZeroGoodMeson.Pz(), EventPiZeroGoodMeson.Energy());
2547 delete backgroundCandidate;
2548 backgroundCandidate = 0x0;
2550 delete PiPlPiMiBackgroundCandidate;
2551 PiPlPiMiBackgroundCandidate = 0x0;
2560 else if(
fNeutralPionMode == 1 && EventPiZeroGoodMeson.Pt() < 1.0)
continue;
2561 else if(
fNeutralPionMode == 2 && EventPiZeroGoodMeson.Pt() < 1.5)
continue;
2568 if(EventPiMiMeson && EventPiPlMeson){
2574 for(
Int_t iPrevious1=0; iPrevious1<EventPiPlMeson->size(); iPrevious1++){
2581 for(
Int_t iPrevious2=0; iPrevious2<EventPiMiMeson->size(); iPrevious2++){
2590 delete backPiPlPiMiCandidate;
2591 backPiPlPiMiCandidate = 0x0;
2594 delete backPiPlPiMiCandidate;
2595 backPiPlPiMiCandidate = 0x0;
2598 if(nEventsInBGMi!=nEventsInBGPl){
2601 if(
KinematicCut(&EventPiMiGoodMeson, &EventPiPlGoodMeson, &EventPiZeroGoodMeson, backgroundCandidate)){
2605 Pi0tmp->SetPxPyPzE(EventPiZeroGoodMeson.Px(), EventPiZeroGoodMeson.Py(), EventPiZeroGoodMeson.Pz(), EventPiZeroGoodMeson.Energy());
2615 delete backgroundCandidate;
2616 backgroundCandidate = 0x0;
2618 if(nEventsInBGMi==nEventsInBGPl){
2621 if(
KinematicCut(&EventPiMiGoodMeson, &EventPiPlGoodMeson, &EventPiZeroGoodMeson, backgroundCandidate)){
2625 Pi0tmp->SetPxPyPzE(EventPiZeroGoodMeson.Px(), EventPiZeroGoodMeson.Py(), EventPiZeroGoodMeson.Pz(), EventPiZeroGoodMeson.Energy());
2635 delete backgroundCandidate;
2636 backgroundCandidate = 0x0;
2639 delete PiPlPiMiBackgroundCandidate;
2640 PiPlPiMiBackgroundCandidate = 0x0;
2651 for(
Int_t iPrevious1=0; iPrevious1<EventPiPlMeson->size(); iPrevious1++){
2663 delete backPiPlPiMiCandidate;
2664 backPiPlPiMiCandidate = 0x0;
2667 delete backPiPlPiMiCandidate;
2668 backPiPlPiMiCandidate = 0x0;
2673 if(
KinematicCut(&EventPiNegGoodMeson, &EventPiPlGoodMeson, &EventPiZeroGoodMeson, backgroundCandidate)){
2677 Pi0tmp->SetPxPyPzE(EventPiZeroGoodMeson.Px(), EventPiZeroGoodMeson.Py(), EventPiZeroGoodMeson.Pz(), EventPiZeroGoodMeson.Energy());
2687 delete backgroundCandidate;
2688 backgroundCandidate = 0x0;
2690 delete PiPlPiMiBackgroundCandidate;
2691 PiPlPiMiBackgroundCandidate = 0x0;
2704 for(
Int_t iPrevious2=0; iPrevious2<EventPiMiMeson->size(); iPrevious2++){
2713 delete backPiPlPiMiCandidate;
2714 backPiPlPiMiCandidate = 0x0;
2717 delete backPiPlPiMiCandidate;
2718 backPiPlPiMiCandidate = 0x0;
2723 if(
KinematicCut(&EventPiMiGoodMeson, &EventPiPosGoodMeson, &EventPiZeroGoodMeson, backgroundCandidate)){
2727 Pi0tmp->SetPxPyPzE(EventPiZeroGoodMeson.Px(), EventPiZeroGoodMeson.Py(), EventPiZeroGoodMeson.Pz(), EventPiZeroGoodMeson.Energy());
2737 delete backgroundCandidate;
2738 backgroundCandidate = 0x0;
2740 delete PiPlPiMiBackgroundCandidate;
2741 PiPlPiMiBackgroundCandidate = 0x0;
2752 if((omega->Pt())<=5.){
2753 if((omega->Angle(pospion->Vect())) < ((2.78715*(TMath::Exp(-0.589934*(omega->Pt()))+0.0519574))*
fTolerance) &&
2754 (omega->Angle(negpion->Vect())) < ((5.94216*(TMath::Exp(-0.444428*(omega->Pt()))-0.0574076))*
fTolerance) &&
2755 (omega->Angle(neutpion->Vect())) < ((2.79529*(TMath::Exp(-0.565999*(omega->Pt()))+0.0413576))*
fTolerance) &&
2756 (pospion->Angle(negpion->Vect())) < ((3.14446*(TMath::Exp(-0.666433*(omega->Pt()))+0.0964309))*
fTolerance) &&
2757 (pospion->Angle(neutpion->Vect())) < ((3.08241*(TMath::Exp(-0.650657*(omega->Pt()))+0.0997539))*
fTolerance) &&
2758 (negpion->Angle(neutpion->Vect())) < ((3.18536*(TMath::Exp(-0.752847*(omega->Pt()))+0.1262780))*
fTolerance)
2763 if((omega->Angle(pospion->Vect())) < ((0.459270*(TMath::Exp(-0.126007*(omega->Pt()))+0.100475))*
fTolerance) &&
2764 (omega->Angle(negpion->Vect())) < ((0.521250*(TMath::Exp(-0.152532*(omega->Pt()))+0.114617))*
fTolerance) &&
2765 (omega->Angle(neutpion->Vect())) < ((0.409766*(TMath::Exp(-0.108566*(omega->Pt()))+0.103594))*
fTolerance) &&
2766 (pospion->Angle(negpion->Vect())) < ((0.709206*(TMath::Exp(-0.149072*(omega->Pt()))+0.111345))*
fTolerance) &&
2767 (pospion->Angle(neutpion->Vect())) < ((0.662184*(TMath::Exp(-0.123397*(omega->Pt()))+0.104675))*
fTolerance) &&
2768 (negpion->Angle(neutpion->Vect())) < ((0.730228*(TMath::Exp(-0.120859*(omega->Pt()))+0.105522))*
fTolerance)
2781 AliStack *MCStack =
fMCEvent->Stack();
2783 Bool_t isTrueEta = kFALSE;
2784 Bool_t isTrueOmega = kFALSE;
2789 if ( !(trueMesonFlag == 1 && pi0MCLabel != -1))
return;
2794 Int_t virtualParticleMotherLabel = -1;
2795 Bool_t isPiPiDecay = kFALSE;
2802 if(virtualParticleMCLabel != -1){
2808 if(TMath::Abs(negativeMC->GetPdgCode())==211 && TMath::Abs(positiveMC->GetPdgCode())==211){
2809 virtualParticleMotherLabel=virtualParticleMCLabel;
2822 Int_t pi0MotherMCLabel = ((TParticle*)MCStack->Particle(pi0MCLabel))->GetMother(0);
2823 if(virtualParticleMCLabel != -1){
2830 if( pi0MotherMCLabel>-1 && pi0MotherMCLabel == virtualParticleMotherLabel ){
2831 if(((TParticle*)MCStack->Particle(virtualParticleMotherLabel))->GetPdgCode() == 221){
2836 if(((TParticle*)MCStack->Particle(virtualParticleMotherLabel))->GetPdgCode() == 223){
2845 if( isTrueEta || isTrueOmega ){
2859 PosPiontmp->SetPxPyPzE(positiveMC->Px(), positiveMC->Py(), positiveMC->Pz(), positiveMC->Energy());
2861 NegPiontmp->SetPxPyPzE(negativeMC->Px(), negativeMC->Py(), negativeMC->Pz(), negativeMC->Energy());
2863 fHistoTrueAngleSum[
fiCut]->Fill(mesoncand->Pt(),((PosPiontmp->Angle(mesoncand->Vect()))+(NegPiontmp->Angle(PosPiontmp->Vect()))+(PosPiontmp->Angle(TrueNeutralPionCandidate->Vect()))));
2865 delete PosPiontmp; PosPiontmp = 0x0;
2866 delete NegPiontmp; NegPiontmp = 0x0;
2909 Double_t dx = vertex->
fX - fInputEvent->GetPrimaryVertex()->GetX();
2910 Double_t dy = vertex->
fY - fInputEvent->GetPrimaryVertex()->GetY();
2911 Double_t dz = vertex->
fZ - fInputEvent->GetPrimaryVertex()->GetZ();
2921 pi0.SetPdgCode(111);
2926 Int_t signPz = particle->Pz()<0?-1:1;
2928 Double_t pz = signPz*TMath::Sqrt(TMath::Abs(pow(PdgMass,2)-pow(energy,2)+pow(px,2)+pow(py,2)));
2929 particle->SetPxPyPzE(px,py,pz,energy);
2939 if(label<0)
return kFALSE;
2940 Int_t motherLabel =
fMCStack->Particle( label )->GetMother(0);
2941 if( motherLabel < 0 || motherLabel >=
fMCStack->GetNtrack() )
return kFALSE;
2943 TParticle* mother =
fMCStack->Particle( motherLabel );
2945 if( mother->GetPdgCode() != 221 )
return kFALSE;
2956 if(label<0)
return kFALSE;
2957 Int_t motherLabel =
fMCStack->Particle( label )->GetMother(0);
2958 if( motherLabel < 0 || motherLabel >=
fMCStack->GetNtrack() )
return kFALSE;
2960 TParticle* mother =
fMCStack->Particle( motherLabel );
2962 if( mother->GetPdgCode() != 223 )
return kFALSE;
2973 if( fMCMother->GetNDaughters() != 3 )
return kFALSE;
2975 if( !(fMCMother->GetPdgCode() == 221 || fMCMother->GetPdgCode() == 223) )
return kFALSE;
2978 TParticle *posPion = 0x0;
2979 TParticle *negPion = 0x0;
2980 TParticle *neutPion = 0x0;
2982 for(
Int_t index= fMCMother->GetFirstDaughter();index<= fMCMother->GetLastDaughter();index++){
2983 if(index<0)
continue;
2984 TParticle* temp = (TParticle*)
fMCStack->Particle( index );
2986 switch( temp->GetPdgCode() ) {
2998 if( posPion && negPion && neutPion)
return kTRUE;
3008 if(label<0)
return kFALSE;
3009 Int_t motherLabel =
fMCStack->Particle( label )->GetMother(0);
3010 if( motherLabel < 0 || motherLabel >=
fMCStack->GetNtrack() )
return kFALSE;
3012 TParticle* mother =
fMCStack->Particle( motherLabel );
3014 if( mother->GetPdgCode() != 111 )
return kFALSE;
3016 Int_t grandMotherLabel = mother->GetMother(0);
3017 if( grandMotherLabel < 0 || grandMotherLabel >=
fMCStack->GetNtrack() )
return kFALSE;
3018 TParticle* grandmother =
fMCStack->Particle( grandMotherLabel );
3027 if(tobechecked > -1)
3029 vector<Int_t>::iterator it;
3030 it = find (vec.begin(), vec.end(), tobechecked);
3031 if (it != vec.end())
return true;
3033 vec.push_back(tobechecked);
TH2F ** fHistoMotherSameSameDiff2BackInvMassFixedPzPi0Pt
TParticle * GetMCParticle(AliStack *fMCStack)
TH1F ** fHistoTrueNegPionFromNeutralMesonPt
Int_t GetMCLabelPositive() const
void CalculateMesonCandidates()
TH2F ** fHistoMotherSameDiff1Diff1BackInvMassSubPi0Pt
vector< Int_t > GetReconstructedPosPionIndex()
void ProcessTrueNeutralPionCandidatesPureCalo(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
Bool_t IsPiPlPiMiPiZeroDecay(TParticle *fMCMother) const
TH2F ** fHistoMotherSameDiff1Diff2BackInvMassFixedPzPi0Pt
void SetCaloClusterRef(Long_t ref)
void SetLabels(Int_t label1, Int_t label2, Int_t label3=0)
TList * fNeutralPionMesonCutArray
vector< Int_t > fVectorDoubleCountTruePi0s
array of histos with double counted photons, R, pT
GammaConversionVertex * GetBGEventVertex(Int_t zbin, Int_t mbin, Int_t event)
vector< Int_t > fSelectorNegPionIndex
TH1F ** fHistoMCGammaFromNeutralMesonPt
TH2F ** fHistoMotherSameDiff1SameBackInvMassSubPi0Pt
TList * fNeutralPionCandidates
good calo gammas after selection
TH2F ** fHistoTrueMotherPiPlPiMiPiZeroInvMassPt
vector< Int_t > fVectorDoubleCountTrueOmegas
vector containing labels of validated eta
TH1F ** fHistoMCPosPionsFromNeutralMesonPt
TH2F ** fHistoGammaGammaInvMassPt
TH2F ** fHistoTrueMotherGammaGammaInvMassPt
TH2F ** fHistoTruePionPionFromSameMotherInvMassPt
TH2F ** fHistoTrueMotherGammaGammaFromEtaInvMassPt
ClassImp(AliAnalysisTaskNeutralMesonToPiPlPiMiPiZero) AliAnalysisTaskNeutralMesonToPiPlPiMiPiZero
TH2F ** fHistoTrueAngleSum
TH2F ** fHistoAnglePiZeroPiMi
Int_t GetNumberOfPrimaryTracks()
virtual void UserExec(Option_t *)
TH1F ** fHistoTrueConvGammaPt
TH1F ** fHistoConvGammaEta
TH1I ** fHistoNGoodESDTracks
TH2F ** fHistoMotherSameSameDiff2BackInvMassSubPi0Pt
void AddMesonEvent(TList *const eventMothers, Double_t xvalue, Double_t yvalue, Double_t zvalue, Int_t multiplicity, Double_t epvalue=-100)
TH1F ** fHistoTruePosPionPt
vector< Int_t > fVectorDoubleCountTrueEtas
vector containing labels of validated pi0
void SetProductionPoint(Double_t *point)
void SetTrueMesonValue(Int_t trueMeson)
void ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionMother *TrueNeutralPionCandidate, AliAODConversionPhoton *TrueVirtualGammaCandidate)
Bool_t IsOmegaPiPlPiMiPiZeroDaughter(Int_t label) const
void SetCaloPhotonMCLabel(Int_t i, Int_t labelCaloPhoton)
TH1F ** fHistoTruePosPionFromNeutralMesonPt
TH2F ** fHistoMotherInvMassPtRejectedKinematic
TH1F ** fHistoConvGammaPt
virtual void Terminate(const Option_t *)
TH1F ** fHistoMCNegPionsFromNeutralMesonPt
TH1F ** fHistoMCAllGammaPt
Int_t GetTrueMesonValue() const
virtual void UserCreateOutputObjects()
TList * fClusterCandidates
TH2F ** fHistoMotherSameDiff1SameBackInvMassPt
TH2F ** fHistoAngleOmegaPiPlPiMi
TH1F ** fHistoClusterGammaPt
TH2F ** fHistoTruePionPionFromEtaInvMassPt
Class handling all kinds of selection cuts for Gamma Calo analysis.
TH2F ** fHistoAngleOmegaPiPl
void ProcessTrueCaloPhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
void FixPzToMatchPDGInvMassPi0(AliAODConversionMother *particle)
Int_t GetTrackLabelNegative() const
std::vector< AliAODConversionMother * > AliGammaConversionMotherAODVector
TH1F ** fHistoMCAllNegPionsPt
void UpdateEventByEventData()
TH1I ** fHistoNEvents
vector containing labels of validated photons
TH2F ** fHistoPionPionInvMassPt
Int_t GetTrackLabelPositive() const
void ProcessCaloPhotonCandidates()
AliConversionPhotonCuts * GetConversionCuts()
TH2F ** fHistoTruePionPionFromOmegaInvMassPt
Int_t GetTrackLabel(Int_t i) const
TH1F ** fHistoMCAllPosPionsPt
TH1F ** fHistoMCOmegaPiPlPiMiPiZeroPt
TH2F ** fHistoMotherSameDiff1Diff2BackInvMassSubPi0Pt
TH2F ** fHistoAnglePiPlPiZero
TH2F ** fHistoMotherSameDiff1Diff1BackInvMassPt
Class handling all kinds of selection cuts for Gamma Conversion analysis.
TParticle * GetPositiveMCDaughter(AliStack *fMCStack)
TProfile ** fProfileEtaShift
void ProcessNeutralPionCandidatesPureCalo()
TList * fPosPionCandidates
TH2F ** fHistoPosPionClsTPC
virtual ~AliAnalysisTaskNeutralMesonToPiPlPiMiPiZero()
TH2F ** fHistoDoubleCountTrueConvGammaRPt
array of histos with double counted omegas, invMass, pT
TH2F ** fHistoPionTPCdEdxNSigma
Bool_t IsLargestComponentElectron()
TH2F ** fHistoMotherSameDiff1Diff1BackInvMassFixedPzPi0Pt
Bool_t GammaIsNeutralMesonPiPlPiMiPiZeroDaughter(Int_t label) const
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Int_t GetCaloPhotonMCLabel(Int_t i)
void ProcessConversionPhotonCandidates()
TH2F ** fHistoPionTPCdEdx
TH2F ** fHistoMotherInvMassPt
TH1F ** fHistoMCConvGammaPt
void ProcessMCParticles()
Int_t GetMCLabelNegative() const
void ProcessTrueNeutralPionCandidatesPureConversions(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
Int_t GetNBGEvents() const
Bool_t fMoveParticleAccordingToVertex
Int_t GetNCaloPhotonMCLabels()
TH2F ** fHistoMotherInvMassFixedPzPi0
Int_t GetZBinIndex(Double_t z) const
TH2F ** fHistoTrueMotherGammaGammaFromOmegaInvMassPt
TH1F ** fHistoClusterGammaEta
TList * GetCaloTrackMatcherHistograms()
TH2F ** fHistoMotherSameDiff1SameBackInvMassFixedPzPi0Pt
Double_t GetProductionZ() const
Double_t GetProductionX() const
TH2F ** fHistoTruePionPionInvMassPt
void ProcessNeutralPionCandidatesPureConversions()
TH2F ** fHistoMotherSameDiff1Diff2BackInvMassPt
AliGammaConversionMotherAODVector * GetBGGoodMesons(Int_t zbin, Int_t mbin, Int_t event)
void ProcessPionCandidates()
TH2F ** fHistoAngleOmegaPiZero
void ProcessNeutralPionCandidatesMixedConvCalo()
void SetCaloPhotonMCFlags(AliStack *MCStack, Bool_t enableSort)
TH1F ** fHistoMCEtaPiPlPiMiPiZeroInAccPt
vector< Int_t > fVectorDoubleCountTrueConvGammas
vector containing labels of validated omega
Class handling all kinds of selection cuts for Gamma Conversion analysis.
TH2F ** fHistoDoubleCountTrueEtaInvMassPt
array of histos with double counted pi0s, invMass, pT
void SetNCaloPhotonMCLabels(Int_t nLabels)
TClonesArray * GetReconstructedGammas() const
AliPrimaryPionCuts * GetPrimaryPionCuts()
TH2F ** fHistoDoubleCountTrueOmegaInvMassPt
array of histos with double counted etas, invMass, pT
TH2F ** fHistoMotherInvMassSubPi0
Bool_t KinematicCut(AliAODConversionMother *negpion, AliAODConversionMother *pospion, AliAODConversionMother *neutpion, AliAODConversionMother *omega)
TClonesArray * fReaderGammas
Class handling all kinds of selection cuts for Gamma Conversion analysis.
TH2F ** fHistoAngleOmegaPiMi
Double_t GetProductionY() const
TH1F ** fHistoTrueConvGammaFromNeutralMesonPt
vector< Int_t > fSelectorPosPionIndex
AliConvEventCuts * GetEventCuts()
TParticle * GetNegativeMCDaughter(AliStack *fMCStack)
AliV0ReaderV1 * fV0Reader
Int_t GetMCParticleLabel(AliStack *fMCStack)
Int_t GetMultiplicityBinIndex(Int_t mult) const
TH1F ** fHistoTrueNegPionPt
void MoveParticleAccordingToVertex(AliAODConversionMother *particle, const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex)
TH2F ** fHistoMotherSameSameDiff2BackInvMassPt
TH2F ** fHistoSPDClusterTrackletBackground
TH2F ** fHistoDoubleCountTruePi0InvMassPt
void ProcessTrueConversionPhotonCandidates(AliAODConversionPhoton *)
TH1F ** fHistoTrueClusterGammaFromNeutralMesonPt
TH1F ** fHistoTrueClusterGammaPt
void ProcessTrueNeutralPionCandidatesMixedConvCalo(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
AliPrimaryPionSelector * fPionSelector
Bool_t IsEtaPiPlPiMiPiZeroDaughter(Int_t label) const
vector< Int_t > GetReconstructedNegPionIndex()
TList * fGoodVirtualParticles
Long_t GetCaloClusterRef() const
TH2F ** fHistoAnglePiPlPiMi
TH1F ** fHistoMCEtaPiPlPiMiPiZeroPt
void CalculateDistanceOfClossetApproachToPrimVtx(const AliVVertex *primVertex)
Bool_t CheckVectorForDoubleCount(vector< Int_t > &vec, Int_t tobechecked)
Bool_t IsLargestComponentPhoton()
TH2F ** fHistoNegPionClsTPC
AliGammaConversionAODBGHandler ** fBGHandlerPiPl
void CalculateBackground()
Double_t GetConversionRadius() const
AliGammaConversionAODBGHandler ** fBGHandlerPiMi
void ProcessTrueNeutralPionCandidatesPureConversionsAOD(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
AliAnalysisTaskNeutralMesonToPiPlPiMiPiZero()
TH1F ** fHistoMCOmegaPiPlPiMiPiZeroInAccPt
TList * fNegPionCandidates