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 "AliAnalysisTaskEtaToPiPlPiMiGamma.h"
58 ClassImp( AliAnalysisTaskEtaToPiPlPiMiGamma )
60 //-----------------------------------------------------------------------------------------------
61 AliAnalysisTaskEtaToPiPlPiMiGamma::AliAnalysisTaskEtaToPiPlPiMiGamma():
76 fSelectorNegPionIndex(0),
77 fSelectorPosPionIndex(0),
79 fGoodVirtualParticles(NULL),
83 fConversionCuts(NULL),
84 fHistoConvGammaPt(NULL),
85 fHistoConvGammaEta(NULL),
86 fHistoNegPionPt(NULL),
87 fHistoPosPionPt(NULL),
88 fHistoNegPionPhi(NULL),
89 fHistoPosPionPhi(NULL),
90 fHistoNegPionEta(NULL),
91 fHistoPosPionEta(NULL),
92 fHistoNegPionClsTPC(NULL),
93 fHistoPosPionClsTPC(NULL),
94 fHistoPionDCAxy(NULL),
96 fHistoPionTPCdEdxNSigma(NULL),
97 fHistoPionTPCdEdx(NULL),
98 fHistoMotherInvMassPt(NULL),
99 fTHnSparseMotherInvMassPtZM(NULL),
100 fHistoMotherBackInvMassPt(NULL),
101 fTHnSparseMotherBackInvMassPtZM(NULL),
102 fHistoMCAllGammaPt(NULL),
103 fHistoMCConvGammaPt(NULL),
104 fHistoMCAllPosPionsPt(NULL),
105 fHistoMCAllNegPionsPt(NULL),
106 fHistoMCGammaFromEtaPt(NULL),
107 fHistoMCPosPionsFromEtaPt(NULL),
108 fHistoMCNegPionsFromEtaPt(NULL),
109 fHistoMCEtaPiPlPiMiGammaPt(NULL),
110 fHistoMCEtaGGPt(NULL),
111 fHistoMCEtaDalitzPt(NULL),
112 fHistoMCEtaPiPlPiMiGammaInAccPt(NULL),
113 fHistoTrueMotherPiPlPiMiGammaInvMassPt(NULL),
114 fHistoTrueMotherGammaGammaInvMassPt(NULL),
115 fHistoTrueMotherDalitzInvMassPt(NULL),
116 fHistoTrueConvGammaPt(NULL),
117 fHistoTrueConvGammaFromEtaPt(NULL),
118 fHistoTruePosPionPt(NULL),
119 fHistoTruePosPionFromEtaPt(NULL),
120 fHistoTrueNegPionPt(NULL),
121 fHistoTrueNegPionFromEtaPt(NULL),
123 fHistoNGoodESDTracks(NULL),
124 fProfileEtaShift(NULL),
128 fNumberOfESDTracks(0),
129 fMoveParticleAccordingToVertex(kFALSE),
131 fDoMesonAnalysis(kTRUE),
133 fIsFromMBHeader(kTRUE),
139 //-----------------------------------------------------------------------------------------------
140 AliAnalysisTaskEtaToPiPlPiMiGamma::AliAnalysisTaskEtaToPiPlPiMiGamma( const char* name ):
141 AliAnalysisTaskSE(name),
156 fSelectorNegPionIndex(0),
157 fSelectorPosPionIndex(0),
159 fGoodVirtualParticles(NULL),
160 fGammaCutArray(NULL),
162 fMesonCutArray(NULL),
163 fConversionCuts(NULL),
164 fHistoConvGammaPt(NULL),
165 fHistoConvGammaEta(NULL),
166 fHistoNegPionPt(NULL),
167 fHistoPosPionPt(NULL),
168 fHistoNegPionPhi(NULL),
169 fHistoPosPionPhi(NULL),
170 fHistoNegPionEta(NULL),
171 fHistoPosPionEta(NULL),
172 fHistoNegPionClsTPC(NULL),
173 fHistoPosPionClsTPC(NULL),
174 fHistoPionDCAxy(NULL),
175 fHistoPionDCAz(NULL),
176 fHistoPionTPCdEdxNSigma(NULL),
177 fHistoPionTPCdEdx(NULL),
178 fHistoMotherInvMassPt(NULL),
179 fTHnSparseMotherInvMassPtZM(NULL),
180 fHistoMotherBackInvMassPt(NULL),
181 fTHnSparseMotherBackInvMassPtZM(NULL),
182 fHistoMCAllGammaPt(NULL),
183 fHistoMCConvGammaPt(NULL),
184 fHistoMCAllPosPionsPt(NULL),
185 fHistoMCAllNegPionsPt(NULL),
186 fHistoMCGammaFromEtaPt(NULL),
187 fHistoMCPosPionsFromEtaPt(NULL),
188 fHistoMCNegPionsFromEtaPt(NULL),
189 fHistoMCEtaPiPlPiMiGammaPt(NULL),
190 fHistoMCEtaGGPt(NULL),
191 fHistoMCEtaDalitzPt(NULL),
192 fHistoMCEtaPiPlPiMiGammaInAccPt(NULL),
193 fHistoTrueMotherPiPlPiMiGammaInvMassPt(NULL),
194 fHistoTrueMotherGammaGammaInvMassPt(NULL),
195 fHistoTrueMotherDalitzInvMassPt(NULL),
196 fHistoTrueConvGammaPt(NULL),
197 fHistoTrueConvGammaFromEtaPt(NULL),
198 fHistoTruePosPionPt(NULL),
199 fHistoTruePosPionFromEtaPt(NULL),
200 fHistoTrueNegPionPt(NULL),
201 fHistoTrueNegPionFromEtaPt(NULL),
203 fHistoNGoodESDTracks(NULL),
204 fProfileEtaShift(NULL),
208 fNumberOfESDTracks(0),
209 fMoveParticleAccordingToVertex(kFALSE),
211 fDoMesonAnalysis(kTRUE),
213 fIsFromMBHeader(kTRUE),
216 DefineOutput(1, TList::Class());
219 //-----------------------------------------------------------------------------------------------
220 AliAnalysisTaskEtaToPiPlPiMiGamma::~AliAnalysisTaskEtaToPiPlPiMiGamma()
223 // virtual destructor
225 cout<<"Destructor"<<endl;
230 if(fGoodVirtualParticles){
231 delete fGoodVirtualParticles;
239 //___________________________________________________________
240 void AliAnalysisTaskEtaToPiPlPiMiGamma::InitBack(){
242 const Int_t nDim = 4;
243 Int_t nBins[nDim] = {800,250,7,4};
244 Double_t xMin[nDim] = {0,0, 0,0};
245 Double_t xMax[nDim] = {0.8,25,7,4};
247 fTHnSparseMotherInvMassPtZM = new THnSparseF*[fnCuts];
248 fTHnSparseMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
250 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
251 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
253 TString cutstringPion = ((AliPrimaryPionCuts*)fPionCutArray->At(iCut))->GetCutNumber();
254 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
255 TString cutstringGamma = ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutNumber();
257 Int_t collisionSystem = atoi((TString)(((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutNumber())(0,1));
258 Int_t centMin = atoi((TString)(((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutNumber())(1,1));
259 Int_t centMax = atoi((TString)(((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutNumber())(2,1));
261 if(collisionSystem == 1 || collisionSystem == 2 ||
262 collisionSystem == 5 || collisionSystem == 8 ||
263 collisionSystem == 9){
264 centMin = centMin*10;
265 centMax = centMax*10;
267 else if(collisionSystem == 3 || collisionSystem == 6){
271 else if(collisionSystem == 4 || collisionSystem == 7){
272 centMin = ((centMin*5)+45);
273 centMax = ((centMax*5)+45);
277 fBackList[iCut] = new TList();
278 fBackList[iCut]->SetName(Form("%s_%s_%s Back histograms",cutstringGamma.Data(),cutstringPion.Data(),cutstringMeson.Data()));
279 fBackList[iCut]->SetOwner(kTRUE);
280 fCutFolder[iCut]->Add(fBackList[iCut]);
282 fTHnSparseMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
283 fBackList[iCut]->Add(fTHnSparseMotherBackInvMassPtZM[iCut]);
285 fMotherList[iCut] = new TList();
286 fMotherList[iCut]->SetName(Form("%s_%s_%s Mother histograms",cutstringGamma.Data(),cutstringPion.Data(),cutstringMeson.Data()));
287 fMotherList[iCut]->SetOwner(kTRUE);
288 fCutFolder[iCut]->Add(fMotherList[iCut]);
290 fTHnSparseMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
291 fMotherList[iCut]->Add(fTHnSparseMotherInvMassPtZM[iCut]);
294 fBGHandler[iCut] = new AliGammaConversionAODBGHandler( collisionSystem,centMin,centMax,
295 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents(),
296 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity());
301 //______________________________________________________________________
302 void AliAnalysisTaskEtaToPiPlPiMiGamma::UserCreateOutputObjects()
305 // Create ouput objects
308 // Create the output container
309 if(fOutputContainer != NULL){
310 delete fOutputContainer;
311 fOutputContainer = NULL;
313 if(fOutputContainer == NULL){
314 fOutputContainer = new TList();
315 fOutputContainer->SetOwner(kTRUE);
318 fGoodGammas = new TList();
319 //fGoodGammas->SetOwner(kTRUE);
321 fGoodVirtualParticles = new TList();
322 //fGoodVirtualParticles->SetOwner(kTRUE);
324 fCutFolder = new TList*[fnCuts];
325 fESDList = new TList*[fnCuts];
326 fBackList = new TList*[fnCuts];
327 fMotherList = new TList*[fnCuts];
328 fHistoNEvents = new TH1I*[fnCuts];
329 fHistoNGoodESDTracks = new TH1I*[fnCuts];
330 fProfileEtaShift = new TProfile*[fnCuts];
331 fHistoConvGammaPt = new TH1F*[fnCuts];
332 fHistoConvGammaEta = new TH1F*[fnCuts];
333 fHistoNegPionPt = new TH1F*[fnCuts];
334 fHistoPosPionPt = new TH1F*[fnCuts];
335 fHistoNegPionPhi = new TH1F*[fnCuts];
336 fHistoPosPionPhi = new TH1F*[fnCuts];
339 fHistoNegPionEta = new TH1F*[fnCuts];
340 fHistoPosPionEta = new TH1F*[fnCuts];
341 fHistoNegPionClsTPC = new TH2F*[fnCuts];
342 fHistoPosPionClsTPC = new TH2F*[fnCuts];
343 fHistoPionDCAxy = new TH2F*[fnCuts];
344 fHistoPionDCAz = new TH2F*[fnCuts];
345 fHistoPionTPCdEdxNSigma = new TH2F*[fnCuts];
346 fHistoPionTPCdEdx = new TH2F*[fnCuts];
349 fHistoMotherInvMassPt = new TH2F*[fnCuts];
350 fHistoMotherBackInvMassPt = new TH2F*[fnCuts];
352 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
353 TString cutstringPion =((AliPrimaryPionCuts*)fPionCutArray->At(iCut))->GetCutNumber();
354 TString cutstringMeson= ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
355 TString cutstringGamma = ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutNumber();
357 fCutFolder[iCut] = new TList();
358 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s_%s",cutstringGamma.Data(),cutstringPion.Data(),cutstringMeson.Data()));
359 fCutFolder[iCut]->SetOwner(kTRUE);
360 fOutputContainer->Add(fCutFolder[iCut]);
362 fESDList[iCut] = new TList();
363 fESDList[iCut]->SetName(Form("%s_%s_%s ESD histograms",cutstringGamma.Data(),cutstringPion.Data(),cutstringMeson.Data()));
364 fESDList[iCut]->SetOwner(kTRUE);
366 fHistoNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
367 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
368 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
369 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
370 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
371 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
372 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
373 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
374 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
375 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
376 fESDList[iCut]->Add(fHistoNEvents[iCut]);
378 if(fIsHeavyIon) fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",3000,0,3000);
379 else fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
380 fESDList[iCut]->Add(fHistoNGoodESDTracks[iCut]);
382 fProfileEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
383 fESDList[iCut]->Add(fProfileEtaShift[iCut]);
384 fHistoConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
385 fESDList[iCut]->Add(fHistoConvGammaPt[iCut]);
386 fHistoConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",600,-1.5,1.5);
387 fESDList[iCut]->Add(fHistoConvGammaEta[iCut]);
388 fHistoNegPionPt[iCut] = new TH1F("ESD_PrimaryNegPions_Pt","ESD_PrimaryNegPions_Pt",1000,0,25);
389 fESDList[iCut]->Add(fHistoNegPionPt[iCut]);
390 fHistoPosPionPt[iCut] = new TH1F("ESD_PrimaryPosPions_Pt","ESD_PrimaryPosPions_Pt",1000,0,25);
391 fESDList[iCut]->Add(fHistoPosPionPt[iCut]);
392 fHistoNegPionPhi[iCut] = new TH1F("ESD_PrimaryNegPions_Phi","ESD_PrimaryNegPions_Phi",360,0,2*TMath::Pi());
393 fESDList[iCut]->Add(fHistoNegPionPhi[iCut]);
394 fHistoPosPionPhi[iCut] = new TH1F("ESD_PrimaryPosPions_Phi","ESD_PrimaryPosPions_Phi",360,0,2*TMath::Pi());
395 fESDList[iCut]->Add(fHistoPosPionPhi[iCut]);
398 fHistoNegPionEta[iCut] = new TH1F("ESD_PrimaryNegPions_Eta","ESD_PrimaryNegPions_Eta",600,-1.5,1.5);
399 fESDList[iCut]->Add(fHistoNegPionEta[iCut]);
400 fHistoPosPionEta[iCut] = new TH1F("ESD_PrimaryPosPions_Eta","ESD_PrimaryPosPions_Eta",600,-1.5,1.5);
401 fESDList[iCut]->Add(fHistoPosPionEta[iCut]);
402 fHistoNegPionClsTPC[iCut] = new TH2F("ESD_PrimaryNegPions_ClsTPC","ESD_PrimaryNegPions_ClsTPC",100,0,1,400,0.,10.);
403 fESDList[iCut]->Add(fHistoNegPionClsTPC[iCut]);
404 fHistoPosPionClsTPC[iCut] = new TH2F("ESD_PrimaryPosPions_ClsTPC","ESD_PrimaryPosPions_ClsTPC",100,0,1,400,0.,10.);
405 fESDList[iCut]->Add(fHistoPosPionClsTPC[iCut]);
406 fHistoPionDCAxy[iCut] = new TH2F("ESD_PrimaryPions_DCAxy","ESD_PrimaryPions_DCAxy",800,-4.0,4.0,400,0.,10.);
407 fESDList[iCut]->Add(fHistoPionDCAxy[iCut]);
408 fHistoPionDCAz[iCut] = new TH2F("ESD_PrimaryPions_DCAz","ESD_PrimaryPions_DCAz",800,-4.0,4.0,400,0.,10.);
409 fESDList[iCut]->Add(fHistoPionDCAz[iCut]);
410 fHistoPionTPCdEdxNSigma[iCut] = new TH2F("ESD_PrimaryPions_TPCdEdx","ESD_PrimaryPions_TPCdEdx",150,0.05,20,400,-10,10);
411 fESDList[iCut]->Add(fHistoPionTPCdEdxNSigma[iCut]);
412 fHistoPionTPCdEdx[iCut] =new TH2F("ESD_PrimaryPions_TPCdEdxSignal","ESD_PrimaryPions_TPCdEdxSignal" ,150,0.05,20.0,800,0.0,200);
413 fESDList[iCut]->Add(fHistoPionTPCdEdx[iCut]);
416 fHistoMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",900,0.3,1.2,250,0,25);
417 fESDList[iCut]->Add(fHistoMotherInvMassPt[iCut]);
418 fHistoMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",900,0.3,1.2,250,0,25);
419 fESDList[iCut]->Add(fHistoMotherBackInvMassPt[iCut]);
422 TAxis *AxisAfter = fHistoPionTPCdEdxNSigma[iCut]->GetXaxis();
423 Int_t bins = AxisAfter->GetNbins();
424 Double_t from = AxisAfter->GetXmin();
425 Double_t to = AxisAfter->GetXmax();
426 Double_t *newBins = new Double_t[bins+1];
428 Double_t factor = TMath::Power(to/from, 1./bins);
429 for(Int_t i=1; i<=bins; ++i) newBins[i] = factor * newBins[i-1];
431 AxisAfter->Set(bins, newBins);
432 AxisAfter = fHistoPionTPCdEdx[iCut]->GetXaxis();
433 AxisAfter->Set(bins, newBins);
438 fCutFolder[iCut]->Add(fESDList[iCut]);
444 fMCList = new TList*[fnCuts];
446 fTrueList = new TList*[fnCuts];
447 fHistoTrueConvGammaPt = new TH1F*[fnCuts];
448 fHistoTrueConvGammaFromEtaPt = new TH1F*[fnCuts];
449 fHistoTruePosPionPt = new TH1F*[fnCuts];
450 fHistoTrueNegPionPt = new TH1F*[fnCuts];
451 fHistoTruePosPionFromEtaPt = new TH1F*[fnCuts];
452 fHistoTrueNegPionFromEtaPt = new TH1F*[fnCuts];
455 fHistoMCAllGammaPt = new TH1F*[fnCuts];
456 fHistoMCConvGammaPt = new TH1F*[fnCuts];
457 fHistoMCAllPosPionsPt = new TH1F*[fnCuts];
458 fHistoMCAllNegPionsPt = new TH1F*[fnCuts];
459 fHistoMCGammaFromEtaPt = new TH1F*[fnCuts];
460 fHistoMCPosPionsFromEtaPt = new TH1F*[fnCuts];
461 fHistoMCNegPionsFromEtaPt = new TH1F*[fnCuts];
463 // hMCPi0DalitzGammaPt = new TH1F*[fnCuts];
464 // hMCPi0DalitzElectronPt = new TH1F*[fnCuts];
465 // hMCPi0DalitzPositronPt = new TH1F*[fnCuts];
467 fHistoMCEtaPiPlPiMiGammaPt = new TH1F*[fnCuts];
468 fHistoMCEtaDalitzPt = new TH1F*[fnCuts];
469 fHistoMCEtaGGPt = new TH1F*[fnCuts];
470 fHistoMCEtaPiPlPiMiGammaInAccPt = new TH1F*[fnCuts];
472 fHistoTrueMotherPiPlPiMiGammaInvMassPt = new TH2F*[fnCuts];
473 fHistoTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
474 fHistoTrueMotherGammaGammaInvMassPt = new TH2F*[fnCuts];
476 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
477 TString cutstringPion =((AliPrimaryPionCuts*)fPionCutArray->At(iCut))->GetCutNumber();
478 TString cutstringMeson= ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
479 TString cutstringGamma = ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutNumber();
481 fMCList[iCut] = new TList();
482 fMCList[iCut]->SetName(Form("%s_%s_%s MC histograms",cutstringGamma.Data(),cutstringPion.Data(),cutstringMeson.Data()));
483 fMCList[iCut]->SetOwner(kTRUE);
484 fCutFolder[iCut]->Add(fMCList[iCut]);
486 fHistoMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
487 fMCList[iCut]->Add(fHistoMCAllGammaPt[iCut]);
488 fHistoMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
489 fMCList[iCut]->Add(fHistoMCConvGammaPt[iCut]);
490 fHistoMCAllPosPionsPt[iCut] = new TH1F("MC_AllPosPions_Pt","MC_AllPosPions_Pt",1000,0,25);
491 fMCList[iCut]->Add(fHistoMCAllPosPionsPt[iCut]);
492 fHistoMCAllNegPionsPt[iCut] = new TH1F("MC_AllNegPions_Pt","MC_AllNegPions_Pt",1000,0,25);
493 fMCList[iCut]->Add(fHistoMCAllNegPionsPt[iCut]);
494 fHistoMCGammaFromEtaPt[iCut] = new TH1F("MC_GammaFromEta_Pt","MC_GammaFromEta_Pt",250,0,25);
495 fMCList[iCut]->Add(fHistoMCGammaFromEtaPt[iCut]);
496 fHistoMCPosPionsFromEtaPt[iCut] = new TH1F("MC_PosPionsFromEta_Pt","MC_PosPionsFromEta_Pt",1000,0,25);
497 fMCList[iCut]->Add(fHistoMCPosPionsFromEtaPt[iCut]);
498 fHistoMCNegPionsFromEtaPt[iCut] = new TH1F("MC_NegPionsFromEta_Pt","MC_NegPionsFromEta_Pt",1000,0,25);
499 fMCList[iCut]->Add(fHistoMCNegPionsFromEtaPt[iCut]);
501 fHistoMCEtaPiPlPiMiGammaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
502 fHistoMCEtaPiPlPiMiGammaPt[iCut]->Sumw2();
503 fMCList[iCut]->Add(fHistoMCEtaPiPlPiMiGammaPt[iCut]);
505 fHistoMCEtaDalitzPt[iCut] = new TH1F("MC_Eta_Dalitz_Pt","MC_Eta_Pt",250,0,25);
506 fHistoMCEtaDalitzPt[iCut]->Sumw2();
507 fMCList[iCut]->Add(fHistoMCEtaDalitzPt[iCut]);
509 fHistoMCEtaGGPt[iCut] = new TH1F("MC_Eta_GG_Pt","MC_Eta_GG_Pt",250,0,25);
510 fHistoMCEtaGGPt[iCut]->Sumw2();
511 fMCList[iCut]->Add(fHistoMCEtaGGPt[iCut]);
513 fHistoMCEtaPiPlPiMiGammaInAccPt[iCut] = new TH1F("MC_EtaDalitzInAcc_Pt","MC_EtaDalitzInAcc_Pt",250,0,25);
514 fHistoMCEtaPiPlPiMiGammaInAccPt[iCut]->Sumw2();
515 fMCList[iCut]->Add(fHistoMCEtaPiPlPiMiGammaInAccPt[iCut]);
517 fTrueList[iCut] = new TList();
518 fTrueList[iCut]->SetName(Form("%s_%s_%s True histograms",cutstringGamma.Data(),cutstringPion.Data(),cutstringMeson.Data()));
519 fTrueList[iCut]->SetOwner(kTRUE);
520 fCutFolder[iCut]->Add(fTrueList[iCut]);
522 fHistoTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
523 fTrueList[iCut]->Add(fHistoTrueConvGammaPt[iCut]);
524 fHistoTrueConvGammaFromEtaPt[iCut] = new TH1F("ESD_TrueConvGammaFromEta_Pt","ESD_TrueConvGammaFromEta_Pt",250,0,25);
525 fTrueList[iCut]->Add(fHistoTrueConvGammaFromEtaPt[iCut]);
527 fHistoTruePosPionPt[iCut] = new TH1F("ESD_TruePosPion_Pt","ESD_TruePosPion_Pt",1000,0,25);
528 fTrueList[iCut]->Add(fHistoTruePosPionPt[iCut]);
529 fHistoTrueNegPionPt[iCut] = new TH1F("ESD_TrueNegPion_Pt","ESD_TrueNegPion_Pt",1000,0,25);
530 fTrueList[iCut]->Add(fHistoTrueNegPionPt[iCut]);
532 fHistoTrueNegPionFromEtaPt[iCut] = new TH1F("ESD_TrueNegPionFromEta_Pt","ESD_TrueNegPionFromEta_Pt",1000,0,25);
533 fTrueList[iCut]->Add(fHistoTrueNegPionFromEtaPt[iCut]);
534 fHistoTruePosPionFromEtaPt[iCut] = new TH1F("ESD_TruePosPionFromEta_Pt","ESD_TruePosPionFromEta_Pt",1000,0,25);
535 fTrueList[iCut]->Add(fHistoTruePosPionFromEtaPt[iCut]);
537 fHistoTrueMotherPiPlPiMiGammaInvMassPt[iCut] = new TH2F("ESD_TrueMotherPiPlPiMiGamma_InvMass_Pt","ESD_TrueMotherPiPlPiMiGamma_InvMass_Pt",900,0.3,1.4,250,0,25);
538 fHistoTrueMotherPiPlPiMiGammaInvMassPt[iCut]->Sumw2();
539 fTrueList[iCut]->Add(fHistoTrueMotherPiPlPiMiGammaInvMassPt[iCut]);
541 fHistoTrueMotherGammaGammaInvMassPt[iCut] = new TH2F("ESD_TrueMotherGG_InvMass_Pt","ESD_TrueMotherGG_InvMass_Pt",900,0.3,1.4,250,0,25);
542 fHistoTrueMotherGammaGammaInvMassPt[iCut]->Sumw2();
543 fTrueList[iCut]->Add(fHistoTrueMotherGammaGammaInvMassPt[iCut]);
545 fHistoTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueMotherDalitz_InvMass_Pt","ESD_TrueMotherDalitz_InvMass_Pt",900,0.3,1.4,250,0,25);
546 fHistoTrueMotherDalitzInvMassPt[iCut]->Sumw2();
547 fTrueList[iCut]->Add(fHistoTrueMotherDalitzInvMassPt[iCut]);
554 InitBack(); // Init Background Handler
556 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
557 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
560 if((AliConversionCuts*)fV0Reader->GetConversionCuts())
561 if(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
562 fOutputContainer->Add(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
566 fPionSelector=(AliPrimaryPionSelector*)AliAnalysisManager::GetAnalysisManager()->GetTask("PionSelector");
567 if(!fPionSelector){printf("Error: No PionSelector");return;} // GetV0Reader
570 if ( ((AliPrimaryPionCuts*)fPionSelector->GetPrimaryPionCuts())->GetCutHistograms() ){
571 fOutputContainer->Add( ((AliPrimaryPionCuts*)fPionSelector->GetPrimaryPionCuts())->GetCutHistograms() );
575 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
577 if( ((AliPrimaryPionCuts*)fPionCutArray->At(iCut))->GetCutHistograms() ) {
578 fCutFolder[iCut]->Add( ((AliPrimaryPionCuts*)fPionCutArray->At(iCut))->GetCutHistograms() );
581 if( fMesonCutArray ) {
582 if( ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms() ) {
583 fCutFolder[iCut]->Add( ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms());
586 if( fGammaCutArray ) {
587 if( ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutHistograms() ) {
588 fCutFolder[iCut]->Add( ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutHistograms() );
593 PostData(1, fOutputContainer);
597 //______________________________________________________________________
598 void AliAnalysisTaskEtaToPiPlPiMiGamma::UserExec(Option_t *){
601 // Execute analysis for current event
604 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
605 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
607 Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
609 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
610 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
611 fHistoNEvents[iCut]->Fill(eventQuality);
616 fPionSelector=(AliPrimaryPionSelector*)AliAnalysisManager::GetAnalysisManager()->GetTask("PionSelector");
617 if(!fPionSelector){printf("Error: No PionSelector");return;} // GetV0Reader
619 if(fIsMC) fMCEvent = MCEvent();
620 fESDEvent = (AliESDEvent*)InputEvent();
621 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
622 fSelectorNegPionIndex = fPionSelector->GetReconstructedNegPionIndex(); // Electrons from default Cut
623 fSelectorPosPionIndex = fPionSelector->GetReconstructedPosPionIndex(); // Positrons from default Cut
625 fNumberOfESDTracks = fV0Reader->GetNumberOfPrimaryTracks();
626 //AddTaskContainers(); //Add conatiner
628 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
630 Int_t eventNotAccepted =
631 ((AliConversionCuts*)fGammaCutArray->At(iCut))
632 ->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
634 if(eventNotAccepted){
635 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
636 fHistoNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
640 if(eventQuality != 0){// Event Not Accepted
641 // cout << "event rejected due to: " <<eventQuality << endl;
642 fHistoNEvents[iCut]->Fill(eventQuality);
646 fHistoNEvents[iCut]->Fill(eventQuality);
647 fHistoNGoodESDTracks[iCut]->Fill(fNumberOfESDTracks);
649 if(fMCEvent){ // Process MC Particle
650 fMCStack = fMCEvent->Stack();
651 if(((AliConversionCuts*)fGammaCutArray->At(iCut))->GetSignalRejection() != 0){
652 ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fGammaCutArray->At(iCut))->GetSignalRejection(), ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetAcceptedHeader(),
655 ProcessMCParticles();
658 // cout << "new event" << endl;
659 ProcessPhotonCandidates(); // Process this cuts gammas
660 ProcessPionCandidates(); // Process this cuts gammas
663 CalculateMesonCandidates();
664 CalculateBackground();
665 UpdateEventByEventData();
667 fGoodGammas->Clear(); // delete this cuts good gammas
668 fGoodVirtualParticles->Clear(); // delete this cuts good gammas
671 fSelectorNegPionIndex.clear();
672 fSelectorPosPionIndex.clear();
674 PostData( 1, fOutputContainer );
677 Bool_t AliAnalysisTaskEtaToPiPlPiMiGamma::Notify(){
678 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
679 if( !((AliConversionCuts*)fGammaCutArray->At(iCut))->GetDoEtaShift() ){
680 fProfileEtaShift[iCut]->Fill(0.,0.);
681 continue; // No Eta Shift requested, continue
683 if( ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
684 ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
685 ((AliConversionCuts*)fGammaCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
686 ((AliPrimaryPionCuts*)fPionCutArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetEtaShift() );
687 fProfileEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fGammaCutArray->At(iCut))->GetEtaShift()));
690 printf(" Eta t PiPlusPiMinus Gamma Task %s :: Eta Shift Manually Set to %f \n\n",
691 (((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fGammaCutArray->At(iCut))->GetEtaShift());
692 ((AliConversionCuts*)fGammaCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
693 ((AliPrimaryPionCuts*)fPionCutArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetEtaShift() );
694 fProfileEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fGammaCutArray->At(iCut))->GetEtaShift()));
701 void AliAnalysisTaskEtaToPiPlPiMiGamma::Terminate(const Option_t *){
705 //________________________________________________________________________
706 void AliAnalysisTaskEtaToPiPlPiMiGamma::ProcessPhotonCandidates(){
708 TList *GoodGammasStepOne = new TList();
709 TList *GoodGammasStepTwo = new TList();
710 // Loop over Photon Candidates allocated by ReaderV1
712 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
713 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
714 if(!PhotonCandidate) continue;
716 fIsFromMBHeader = kTRUE;
718 if( fMCEvent && ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetSignalRejection() != 0 ){
719 Int_t isPosFromMBHeader
720 = ((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
721 if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
722 Int_t isNegFromMBHeader
723 = ((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
724 if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
725 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
728 if(!((AliConversionCuts*)fGammaCutArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fESDEvent)) continue;
730 if(!((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseElecSharingCut() &&
731 !((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseToCloseV0sCut()){ // if no post reader loop is required add to events good gammas
733 fGoodGammas->Add(PhotonCandidate);
736 fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
737 fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
741 ProcessTruePhotonCandidates(PhotonCandidate);
743 } else if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
744 ((AliConversionCuts*)fGammaCutArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
746 GoodGammasStepOne->Add(PhotonCandidate);
747 } else if(!((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseElecSharingCut() &&
748 ((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
749 GoodGammasStepTwo->Add(PhotonCandidate);
754 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseElecSharingCut()){
755 for(Int_t i = 0;i<GoodGammasStepOne->GetEntries();i++){
756 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GoodGammasStepOne->At(i);
757 if(!PhotonCandidate) continue;
758 fIsFromMBHeader = kTRUE;
759 if(fMCEvent && ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetSignalRejection() != 0){
760 Int_t isPosFromMBHeader
761 = ((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack,fInputEvent);
762 Int_t isNegFromMBHeader
763 = ((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
764 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
766 if(!((AliConversionCuts*)fGammaCutArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GoodGammasStepOne->GetEntries())) continue;
767 if(!((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
768 fGoodGammas->Add(PhotonCandidate);
770 fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
771 fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
774 ProcessTruePhotonCandidates(PhotonCandidate);
777 else GoodGammasStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
780 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseToCloseV0sCut()){
781 for(Int_t i = 0;i<GoodGammasStepTwo->GetEntries();i++){
782 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GoodGammasStepTwo->At(i);
783 if(!PhotonCandidate) continue;
785 if(fMCEvent && ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetSignalRejection() != 0){
786 Int_t isPosFromMBHeader
787 = ((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack,fInputEvent);
788 Int_t isNegFromMBHeader
789 = ((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
790 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
793 if(!((AliConversionCuts*)fGammaCutArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GoodGammasStepTwo,i)) continue;
794 fGoodGammas->Add(PhotonCandidate); // Add gamma to current cut TList
797 fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt()); // Differences to old V0Reader in p_t due to conversion KF->TLorentzVector
798 fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
802 ProcessTruePhotonCandidates(PhotonCandidate);
807 delete GoodGammasStepOne;
808 GoodGammasStepOne = 0x0;
809 delete GoodGammasStepTwo;
810 GoodGammasStepTwo = 0x0;
813 //________________________________________________________________________
814 void AliAnalysisTaskEtaToPiPlPiMiGamma::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
816 // Process True Photons
817 AliStack *MCStack = fMCEvent->Stack();
818 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(MCStack);
819 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(MCStack);
821 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
822 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){ // Not Same Mother == Combinatorial Bck
826 else if (posDaughter->GetMother(0) == -1){
830 if(TMath::Abs(posDaughter->GetPdgCode())!=11 || TMath::Abs(negDaughter->GetPdgCode())!=11) return; //One Particle is not electron
831 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
832 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
834 TParticle *Photon = TruePhotonCandidate->GetMCParticle(MCStack);
835 if(Photon->GetPdgCode() != 22) return; // Mother is no Photon
839 Int_t labelGamma = TruePhotonCandidate->GetMCParticleLabel(MCStack);
841 if( labelGamma < MCStack->GetNprimary() ){
842 if( fIsFromMBHeader ){
843 fHistoTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
847 if( IsEtaPiPlPiMiGammaDaughter(labelGamma) == kTRUE ) {
848 if( labelGamma < MCStack->GetNprimary() ) {
849 if( fIsFromMBHeader ){
850 fHistoTrueConvGammaFromEtaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
856 //________________________________________________________________________
857 void AliAnalysisTaskEtaToPiPlPiMiGamma::ProcessPionCandidates(){
859 Double_t magField = fInputEvent->GetMagneticField();
860 if( magField < 0.0 ){
866 vector<Int_t> lGoodNegPionIndexPrev(0);
867 vector<Int_t> lGoodPosPionIndexPrev(0);
869 for(UInt_t i = 0; i < fSelectorNegPionIndex.size(); i++){
870 AliESDtrack* negPionCandidate = fESDEvent->GetTrack(fSelectorNegPionIndex[i]);
871 if(! ((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->PionIsSelected(negPionCandidate) ) continue;
872 lGoodNegPionIndexPrev.push_back( fSelectorNegPionIndex[i] );
873 fHistoNegPionPt[fiCut]->Fill(negPionCandidate->Pt());
874 fHistoNegPionPhi[fiCut]->Fill(negPionCandidate->Phi());
876 Int_t labelNegPion = TMath::Abs( negPionCandidate->GetLabel() );
877 if( labelNegPion < fMCStack->GetNtrack() ){
878 TParticle* negPion = fMCStack->Particle(labelNegPion);
879 if( negPion->GetPdgCode() == -211 ){
880 if( labelNegPion < fMCStack->GetNprimary() ){
881 fHistoTrueNegPionPt[fiCut]->Fill(negPionCandidate->Pt()); //primary negPion
883 if( IsEtaPiPlPiMiGammaDaughter(labelNegPion) == kTRUE ) {
884 if( labelNegPion < fMCStack->GetNprimary() ) {
885 fHistoTrueNegPionFromEtaPt[fiCut]->Fill(negPionCandidate->Pt());
893 for(UInt_t i = 0; i < fSelectorPosPionIndex.size(); i++){
894 AliESDtrack* posPionCandidate = fESDEvent->GetTrack( fSelectorPosPionIndex[i] );
895 if(! ((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->PionIsSelected(posPionCandidate) ) continue;
896 lGoodPosPionIndexPrev.push_back( fSelectorPosPionIndex[i] );
897 fHistoPosPionPt[fiCut]->Fill( posPionCandidate->Pt() );
898 fHistoPosPionPhi[fiCut]->Fill( posPionCandidate->Phi() );
901 Int_t labelPosPion = TMath::Abs( posPionCandidate->GetLabel() );
902 if( labelPosPion < fMCStack->GetNtrack() ) {
903 TParticle* posPion = fMCStack->Particle(labelPosPion);
904 if( posPion->GetPdgCode() == 211 ){
905 if( labelPosPion < fMCStack->GetNprimary() ){
906 fHistoTruePosPionPt[fiCut]->Fill(posPionCandidate->Pt());
908 if( IsEtaPiPlPiMiGammaDaughter(labelPosPion) == kTRUE ) {
909 if( labelPosPion < fMCStack->GetNprimary() ){
910 fHistoTruePosPionFromEtaPt[fiCut]->Fill(posPionCandidate->Pt());
919 for(UInt_t i = 0; i < lGoodNegPionIndexPrev.size(); i++){
921 AliESDtrack *negPionCandidate = fESDEvent->GetTrack(lGoodNegPionIndexPrev[i]);
922 AliKFParticle negPionCandidateKF( *negPionCandidate->GetConstrainedParam(), 211 );
924 for(UInt_t j = 0; j < lGoodPosPionIndexPrev.size(); j++){
926 AliESDtrack *posPionCandidate = fESDEvent->GetTrack(lGoodPosPionIndexPrev[j]);
927 AliKFParticle posPionCandidateKF( *posPionCandidate->GetConstrainedParam(), 211 );
929 AliKFConversionPhoton* virtualPhoton = NULL;
930 virtualPhoton = new AliKFConversionPhoton(negPionCandidateKF,posPionCandidateKF);
931 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
932 // primaryVertexImproved+=*virtualPhoton;
933 virtualPhoton->SetProductionVertex(primaryVertexImproved);
934 virtualPhoton->SetTrackLabels( lGoodPosPionIndexPrev[j], lGoodNegPionIndexPrev[i]);
938 Int_t labeln=TMath::Abs(negPionCandidate->GetLabel());
939 Int_t labelp=TMath::Abs(posPionCandidate->GetLabel());
940 TParticle *fNegativeMCParticle = fMCStack->Particle(labeln);
941 TParticle *fPositiveMCParticle = fMCStack->Particle(labelp);
943 if( fPositiveMCParticle && fNegativeMCParticle) {
944 virtualPhoton->SetMCLabelPositive(labelp);
945 virtualPhoton->SetMCLabelNegative(labeln);
949 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton); //To Apply PsiPairCut
950 fGoodVirtualParticles->Add( vphoton );
951 delete virtualPhoton;
958 //_____________________________________________________________________________
959 void AliAnalysisTaskEtaToPiPlPiMiGamma::ProcessMCParticles(){
961 // Loop over all primary MC particle
963 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
965 TParticle* particle = (TParticle *)fMCStack->Particle(i);
966 if (!particle) continue;
968 Int_t isMCFromMBHeader = -1;
969 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetSignalRejection() != 0){
971 = ((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
972 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
975 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack,fInputEvent)){
977 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
978 fHistoMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
979 if(particle->GetMother(0) >-1){
980 if (fMCStack->Particle(particle->GetMother(0))->GetPdgCode() ==221 && fMCStack->Particle(particle->GetMother(0))->GetNDaughters()==3 ) fHistoMCGammaFromEtaPt[fiCut]->Fill(particle->Pt()); // All pos from eta
984 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
985 fHistoMCConvGammaPt[fiCut]->Fill(particle->Pt());
986 } // Converted MC Gamma
988 if(((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->PionIsSelectedMC(i,fMCStack)){
989 if( particle->GetPdgCode() == 211){
990 fHistoMCAllPosPionsPt[fiCut]->Fill(particle->Pt()); // All pos pions
991 if(particle->GetMother(0) >-1){
992 if (fMCStack->Particle(particle->GetMother(0))->GetPdgCode() ==221) fHistoMCPosPionsFromEtaPt[fiCut]->Fill(particle->Pt()); // All pos from eta
995 if( particle->GetPdgCode() == -211){
996 fHistoMCAllNegPionsPt[fiCut]->Fill(particle->Pt()); // All neg pions
997 if(particle->GetMother(0) >-1){
998 if (fMCStack->Particle(particle->GetMother(0))->GetPdgCode() ==221) fHistoMCNegPionsFromEtaPt[fiCut]->Fill(particle->Pt()); // All pos from eta
1003 // \eta -> \gamma \gamma
1005 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedMC( particle,fMCStack,((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetEtaShift() ) ){
1006 Float_t weighted= 1;
1007 if( ((AliPrimaryPionCuts*) fPionCutArray->At(fiCut))->DoWeights() ) {
1008 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1009 if (particle->Pt()>0.005){
1010 weighted= ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
1014 if(particle->GetPdgCode() == 221)fHistoMCEtaGGPt[fiCut]->Fill( particle->Pt() , weighted); // All MC Eta GG decay
1017 // \eta -> e+ e- \gamma
1018 Int_t labelgamma = -1;
1019 Int_t labelelectron = -1;
1020 Int_t labelpositron = -1;
1022 if( ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedMCDalitz(particle,fMCStack,labelelectron,labelpositron,labelgamma,((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetEtaShift())){
1023 Float_t weighted= 1;
1024 if( ((AliPrimaryPionCuts*) fPionCutArray->At(fiCut))->DoWeights() ) {
1025 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack,fInputEvent)){
1026 if (particle->Pt()>0.005){
1027 weighted= ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
1031 if(particle->GetPdgCode() == 221)fHistoMCEtaDalitzPt[fiCut]->Fill(particle->Pt(), weighted); // All MC Eta
1035 // \eta -> pi+ pi- \gamma
1036 Int_t labelGamma3Body = -1;
1037 Int_t labelNegPion = -1;
1038 Int_t labelPosPion = -1;
1040 if( ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedMCEtaPiPlPiMiGamma(particle,fMCStack,labelNegPion,labelPosPion,labelGamma3Body,((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetEtaShift())){
1041 Float_t weighted= 1;
1042 if( ((AliPrimaryPionCuts*) fPionCutArray->At(fiCut))->DoWeights() ) {
1043 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack,fInputEvent)){
1044 if (particle->Pt()>0.005){
1045 weighted= ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
1049 if(particle->GetPdgCode() == 221)fHistoMCEtaPiPlPiMiGammaPt[fiCut]->Fill(particle->Pt(), weighted); // All MC Eta
1051 TParticle *gamma = fMCStack->Particle(labelGamma3Body);
1052 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->PhotonIsSelectedMC(gamma,fMCStack,kFALSE) &&
1053 ((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->PionIsSelectedMC(labelNegPion,fMCStack) &&
1054 ((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->PionIsSelectedMC(labelPosPion,fMCStack) ) {
1055 if(particle->GetPdgCode() == 221)fHistoMCEtaPiPlPiMiGammaInAccPt[fiCut]->Fill(particle->Pt(), weighted ); // MC EtaDalitz with gamma and e+e- in acc
1063 //________________________________________________________________________
1064 void AliAnalysisTaskEtaToPiPlPiMiGamma::CalculateMesonCandidates(){
1066 // Conversion Gammas
1067 if( fGoodGammas->GetEntries() > 0 && fGoodVirtualParticles->GetEntries() > 0 ){
1069 vector<Bool_t> lGoodVirtualParticle(fGoodVirtualParticles->GetEntries(), kFALSE);
1071 for(Int_t GammaIndex=0; GammaIndex<fGoodGammas->GetEntries(); GammaIndex++){
1073 AliAODConversionPhoton *gamma=dynamic_cast<AliAODConversionPhoton*>(fGoodGammas->At(GammaIndex));
1074 if (gamma==NULL) continue;
1075 for(Int_t virtualParticleIndex=0;virtualParticleIndex<fGoodVirtualParticles->GetEntries();virtualParticleIndex++){
1077 AliAODConversionPhoton *Vgamma=dynamic_cast<AliAODConversionPhoton*>(fGoodVirtualParticles->At(virtualParticleIndex));
1078 if (Vgamma==NULL) continue;
1079 //Check for same Electron ID
1080 if(gamma->GetTrackLabelPositive() == Vgamma->GetTrackLabelPositive() ||
1081 gamma->GetTrackLabelNegative() == Vgamma->GetTrackLabelNegative() ||
1082 gamma->GetTrackLabelNegative() == Vgamma->GetTrackLabelPositive() ||
1083 gamma->GetTrackLabelPositive() == Vgamma->GetTrackLabelNegative() ) continue;
1085 AliAODConversionMother *etacand = new AliAODConversionMother(gamma,Vgamma);
1086 etacand->SetLabels(GammaIndex,virtualParticleIndex);
1089 if( ( ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(etacand,kTRUE,((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetEtaShift())) ){
1091 //cout<< "Meson Accepted "<<endl;
1093 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fESDEvent->GetPrimaryVertex()->GetZ());
1095 if( ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1096 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1098 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGoodGammas->GetEntries());
1101 AliESDtrack *posPionVgamma = 0;
1102 AliESDtrack *negPionVgamma = 0;
1104 Double_t clsToFPos = -1.0;
1105 Double_t clsToFNeg = -1.0;
1107 Float_t dcaToVertexXYPos = -1.0;
1108 Float_t dcaToVertexZPos = -1.0;
1109 Float_t dcaToVertexXYNeg = -1.0;
1110 Float_t dcaToVertexZNeg = -1.0;
1115 posPionVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelPositive() );
1116 negPionVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelNegative() );
1117 clsToFPos = ((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->GetNFindableClustersTPC(posPionVgamma);
1118 clsToFNeg = ((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->GetNFindableClustersTPC(negPionVgamma);
1122 posPionVgamma->GetImpactParameters(bPos,bCovPos);
1123 if (bCovPos[0]<=0 || bCovPos[2]<=0) {
1124 AliDebug(1, "Estimated b resolution lower or equal zero!");
1125 bCovPos[0]=0; bCovPos[2]=0;
1130 posPionVgamma->GetImpactParameters(bNeg,bCovNeg);
1131 if (bCovNeg[0]<=0 || bCovNeg[2]<=0) {
1132 AliDebug(1, "Estimated b resolution lower or equal zero!");
1133 bCovNeg[0]=0; bCovNeg[2]=0;
1136 dcaToVertexXYPos = bPos[0];
1137 dcaToVertexZPos = bPos[1];
1138 dcaToVertexXYNeg = bNeg[0];
1139 dcaToVertexZNeg = bNeg[1];
1142 fHistoMotherInvMassPt[fiCut]->Fill(etacand->M(),etacand->Pt());
1143 Double_t sparesFill[4] = {etacand->M(),etacand->Pt(),(Double_t)zbin,(Double_t)mbin};
1144 fTHnSparseMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
1147 if( lGoodVirtualParticle[virtualParticleIndex] == kFALSE ) {
1149 fHistoNegPionEta[fiCut]->Fill( negPionVgamma->Eta() );
1150 fHistoPosPionEta[fiCut]->Fill( posPionVgamma->Eta() );
1152 fHistoNegPionClsTPC[fiCut]->Fill(clsToFNeg,negPionVgamma->Pt());
1153 fHistoPosPionClsTPC[fiCut]->Fill(clsToFPos,posPionVgamma->Pt());
1155 fHistoPionDCAxy[fiCut]->Fill( dcaToVertexXYNeg, negPionVgamma->Pt() );
1156 fHistoPionDCAz[fiCut]->Fill( dcaToVertexZNeg, negPionVgamma->Pt() );
1157 fHistoPionDCAxy[fiCut]->Fill( dcaToVertexXYPos, posPionVgamma->Pt() );
1158 fHistoPionDCAz[fiCut]->Fill( dcaToVertexZPos, posPionVgamma->Pt() );
1160 fHistoPionTPCdEdxNSigma[fiCut]->Fill( posPionVgamma->P(),((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(posPionVgamma, AliPID::kPion) );
1161 fHistoPionTPCdEdxNSigma[fiCut]->Fill( negPionVgamma->P(),((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(negPionVgamma, AliPID::kPion) );
1163 fHistoPionTPCdEdx[fiCut]->Fill( posPionVgamma->P(), TMath::Abs(posPionVgamma->GetTPCsignal()));
1164 fHistoPionTPCdEdx[fiCut]->Fill( negPionVgamma->P(), TMath::Abs(negPionVgamma->GetTPCsignal()));
1166 lGoodVirtualParticle[virtualParticleIndex] = kTRUE;
1173 ProcessTrueMesonCandidates(etacand,gamma,Vgamma);
1183 //________________________________________________________________________
1184 void AliAnalysisTaskEtaToPiPlPiMiGamma::CalculateBackground(){
1186 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fESDEvent->GetPrimaryVertex()->GetZ());
1190 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1191 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1193 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGoodGammas->GetEntries());
1197 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
1198 if( ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity() ) {
1199 for(Int_t nEventsInBG=0;nEventsInBG<fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
1200 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
1201 if(fMoveParticleAccordingToVertex == kTRUE && method == 1){
1202 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
1205 for(Int_t iCurrent=0;iCurrent<fGoodVirtualParticles->GetEntries();iCurrent++){
1206 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualParticles->At(iCurrent));
1208 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
1209 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
1211 if(fMoveParticleAccordingToVertex == kTRUE && method == 1 ){
1212 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
1215 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
1218 if( ( ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE, ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetEtaShift()))){
1219 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1220 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1221 fTHnSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1223 delete backgroundCandidate;
1224 backgroundCandidate = 0x0;
1229 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
1230 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
1231 if(previousEventV0s){
1232 if(fMoveParticleAccordingToVertex == kTRUE && method == 1){
1233 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
1235 for(Int_t iCurrent=0;iCurrent<fGoodVirtualParticles->GetEntries();iCurrent++){
1237 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualParticles->At(iCurrent));
1239 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
1241 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
1243 if(fMoveParticleAccordingToVertex == kTRUE && method ==1){
1244 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
1247 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
1249 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetEtaShift()))){
1250 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1251 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1252 fTHnSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1254 delete backgroundCandidate;
1255 backgroundCandidate = 0x0;
1263 //______________________________________________________________________
1264 void AliAnalysisTaskEtaToPiPlPiMiGamma::ProcessTrueMesonCandidates(AliAODConversionMother *EtaCandidate, AliAODConversionPhoton *TrueGammaCandidate, AliAODConversionPhoton *TrueVirtualParticleCandidate){
1266 // Process True Mesons
1268 AliStack *MCStack = fMCEvent->Stack();
1270 if( TrueGammaCandidate->GetV0Index()<fESDEvent->GetNumberOfV0s() ){
1272 Bool_t isTrueEta = kFALSE;
1273 Int_t gammaMCLabel = TrueGammaCandidate->GetMCParticleLabel(MCStack);
1274 Int_t gammaMotherLabel = -1;
1276 if(gammaMCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1277 // Daughters Gamma 0
1278 TParticle * negativeMC = (TParticle*)TrueGammaCandidate->GetNegativeMCDaughter(MCStack);
1279 TParticle * positiveMC = (TParticle*)TrueGammaCandidate->GetPositiveMCDaughter(MCStack);
1280 TParticle * gammaMC = (TParticle*)MCStack->Particle(gammaMCLabel);
1282 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1283 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1284 if(gammaMC->GetPdgCode() == 22){ // ... with Gamma Mother
1285 gammaMotherLabel=gammaMC->GetFirstMother();
1291 Int_t virtualParticleMCLabel = TrueVirtualParticleCandidate->GetMCParticleLabel(MCStack);
1292 Int_t virtualParticleMotherLabel = -1;
1294 Bool_t isPiPiDecay = kFALSE;
1295 Bool_t isDalitz = kFALSE;
1296 Bool_t isRealGamma = kFALSE;
1298 if(virtualParticleMCLabel != -1){ // if virtualParticleMCLabel==-1 particles don't have same mother
1299 TParticle * negativeMC = (TParticle*)TrueVirtualParticleCandidate->GetNegativeMCDaughter(MCStack);
1300 TParticle * positiveMC = (TParticle*)TrueVirtualParticleCandidate->GetPositiveMCDaughter(MCStack);
1301 // cout << "neg Part: label - " << TrueVirtualParticleCandidate->GetMCLabelNegative() <<" pdg-code - " << negativeMC->GetPdgCode() << endl;
1302 // cout << "pos Part: label - " << TrueVirtualParticleCandidate->GetMCLabelPositive() <<" pdg-code - " << positiveMC->GetPdgCode() << endl;
1304 TParticle * virtualParticleMotherMC = (TParticle*)MCStack->Particle(virtualParticleMCLabel);
1305 // cout << "pdg code same mother - " << virtualParticleMotherMC->GetPdgCode() << endl;
1307 if(TMath::Abs(negativeMC->GetPdgCode())==211 && TMath::Abs(positiveMC->GetPdgCode())==211){ // Pions ...
1308 virtualParticleMotherLabel=virtualParticleMCLabel;
1310 } else if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1311 if( virtualParticleMotherMC->GetPdgCode() != 22 ){
1312 virtualParticleMotherLabel=virtualParticleMCLabel;
1314 } else if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1315 virtualParticleMotherLabel=virtualParticleMotherMC->GetFirstMother();
1316 isRealGamma = kTRUE; //no virtual gamma
1321 if(gammaMotherLabel >= 0 && ( gammaMotherLabel == virtualParticleMotherLabel) ){
1322 if(((TParticle*)MCStack->Particle(virtualParticleMotherLabel))->GetPdgCode() == 221){
1327 if( isTrueEta ){ // True Eta
1328 if ( isPiPiDecay) { //real eta -> Pi+ Pi- Gamma
1329 Float_t weighted= 1;
1330 if( ((AliPrimaryPionCuts*) fPionCutArray->At(fiCut))->DoWeights() ) {
1331 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
1332 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
1333 weighted= ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
1338 fHistoTrueMotherPiPlPiMiGammaInvMassPt[fiCut]->Fill(EtaCandidate->M(),EtaCandidate->Pt(),weighted);
1339 } else if ( isRealGamma ){
1340 Float_t weighted= 1;
1341 if( ((AliPrimaryPionCuts*) fPionCutArray->At(fiCut))->DoWeights() ) {
1342 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
1343 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
1344 weighted= ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
1349 fHistoTrueMotherGammaGammaInvMassPt[fiCut]->Fill(EtaCandidate->M(),EtaCandidate->Pt(),weighted);
1350 } else if (isDalitz) {
1351 Float_t weighted= 1;
1352 if( ((AliPrimaryPionCuts*) fPionCutArray->At(fiCut))->DoWeights() ) {
1353 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
1354 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
1355 weighted= ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
1359 fHistoTrueMotherDalitzInvMassPt[fiCut]->Fill(EtaCandidate->M(),EtaCandidate->Pt(),weighted);
1366 //________________________________________________________________________
1367 void AliAnalysisTaskEtaToPiPlPiMiGamma::UpdateEventByEventData(){
1368 //see header file for documentation
1372 if(fGoodGammas->GetEntries() >0 ){
1373 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1374 fBGHandler[fiCut]->AddEvent(fGoodGammas,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),0);
1375 } else{ // means we use #V0s for multiplicity
1376 fBGHandler[fiCut]->AddEvent(fGoodGammas,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGoodGammas->GetEntries(),0);
1379 } else if ( method == 2 ){
1380 if(fGoodVirtualParticles->GetEntries() > 0 ){
1381 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1382 fBGHandler[fiCut]->AddEvent(fGoodVirtualParticles,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),0);
1383 } else{ // means we use #V0s for multiplicity
1384 fBGHandler[fiCut]->AddEvent(fGoodVirtualParticles,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGoodVirtualParticles->GetEntries(),0);
1390 //________________________________________________________________________
1391 void AliAnalysisTaskEtaToPiPlPiMiGamma::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
1392 //see header file for documentation
1394 Double_t dx = vertex->fX - fInputEvent->GetPrimaryVertex()->GetX();
1395 Double_t dy = vertex->fY - fInputEvent->GetPrimaryVertex()->GetY();
1396 Double_t dz = vertex->fZ - fInputEvent->GetPrimaryVertex()->GetZ();
1398 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
1399 particle->SetConversionPoint(movedPlace);
1402 //_____________________________________________________________________________________
1403 Bool_t AliAnalysisTaskEtaToPiPlPiMiGamma::IsEtaPiPlPiMiGammaDaughter( Int_t label ) const {
1405 // Returns true if the particle comes from eta -> pi+ pi- gamma
1407 Int_t motherLabel = fMCStack->Particle( label )->GetMother(0);
1408 if( motherLabel < 0 || motherLabel >= fMCStack->GetNtrack() ) return kFALSE;
1410 TParticle* mother = fMCStack->Particle( motherLabel );
1411 if( mother->GetPdgCode() != 221 ) return kFALSE;
1412 if( IsPiPlPiMiGammaDecay( mother ) ) return kTRUE;
1416 //_____________________________________________________________________________
1417 Bool_t AliAnalysisTaskEtaToPiPlPiMiGamma::IsPiPlPiMiGammaDecay(TParticle *fMCMother) const
1420 if( fMCMother->GetNDaughters() != 3 ) return kFALSE;
1421 if( fMCMother->GetPdgCode() != 221 ) return kFALSE;
1424 TParticle *posPion = 0x0;
1425 TParticle *negPion = 0x0;
1426 TParticle *gamma = 0x0;
1428 for(Int_t index= fMCMother->GetFirstDaughter();index<= fMCMother->GetLastDaughter();index++){
1429 TParticle* temp = (TParticle*)fMCStack->Particle( index );
1431 switch( temp->GetPdgCode() ) {
1444 if( posPion && negPion && gamma) return kTRUE;