]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/GammaConv/AliAnalysisTaskEtaToPiPlPiMiGamma.cxx
bug fix for Config file
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliAnalysisTaskEtaToPiPlPiMiGamma.cxx
CommitLineData
209b710e 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: Pedro Gonz??lez, Pedro Ladr??n de Guevara, Ernesto L??pez Torres, *
5 * Eulogio Serradilla, Ana Marin, Friederike Bock *
6 * Version 2 *
7 * *
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 **************************************************************************/
16
17// Analysis task for pi0->e+e-gamma (Dalitz decay)
18// Analysis task for chic->JPsi+gamma
19
20#include <vector>
21
22#include "TParticle.h"
23#include "TPDGCode.h"
24#include "TMCProcess.h"
25#include "TDatabasePDG.h"
26#include "TList.h"
27#include "TChain.h"
28#include "TDirectory.h"
29#include "TTree.h"
30#include "TH1.h"
31#include "TH1F.h"
32#include "THnSparse.h"
33#include "TH2F.h"
34#include "AliStack.h"
35#include "AliAnalysisManager.h"
36#include "AliESDInputHandler.h"
37#include "AliESDtrack.h"
38#include "AliMCEvent.h"
39#include "AliStack.h"
40#include "AliMCEventHandler.h"
41#include "AliPID.h"
42#include "AliLog.h"
43#include "AliESDtrackCuts.h"
44#include "AliESDpidCuts.h"
45#include "AliMCEvent.h"
46#include "AliESDv0.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"
56
57
58ClassImp( AliAnalysisTaskEtaToPiPlPiMiGamma )
59
60//-----------------------------------------------------------------------------------------------
61AliAnalysisTaskEtaToPiPlPiMiGamma::AliAnalysisTaskEtaToPiPlPiMiGamma():
62 fV0Reader(NULL),
63 fPionSelector(NULL),
64 fBGHandler(NULL),
65 fESDEvent(NULL),
66 fMCEvent(NULL),
67 fMCStack(NULL),
68 fCutFolder(NULL),
69 fESDList(NULL),
70 fBackList(NULL),
71 fMotherList(NULL),
72 fTrueList(NULL),
73 fMCList(NULL),
74 fOutputContainer(0),
75 fReaderGammas(NULL),
76 fSelectorNegPionIndex(0),
77 fSelectorPosPionIndex(0),
78 fGoodGammas(NULL),
79 fGoodVirtualParticles(NULL),
80 fGammaCutArray(NULL),
81 fPionCutArray(NULL),
82 fMesonCutArray(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),
95 fHistoPionDCAz(NULL),
96 fHistoPionTPCdEdxNSigma(NULL),
97 fHistoPionTPCdEdx(NULL),
899d014b 98 fHistoPionPionInvMassPt(NULL),
209b710e 99 fHistoMotherInvMassPt(NULL),
100 fTHnSparseMotherInvMassPtZM(NULL),
101 fHistoMotherBackInvMassPt(NULL),
102 fTHnSparseMotherBackInvMassPtZM(NULL),
103 fHistoMCAllGammaPt(NULL),
104 fHistoMCConvGammaPt(NULL),
105 fHistoMCAllPosPionsPt(NULL),
106 fHistoMCAllNegPionsPt(NULL),
107 fHistoMCGammaFromEtaPt(NULL),
108 fHistoMCPosPionsFromEtaPt(NULL),
109 fHistoMCNegPionsFromEtaPt(NULL),
110 fHistoMCEtaPiPlPiMiGammaPt(NULL),
111 fHistoMCEtaGGPt(NULL),
112 fHistoMCEtaDalitzPt(NULL),
113 fHistoMCEtaPiPlPiMiGammaInAccPt(NULL),
114 fHistoTrueMotherPiPlPiMiGammaInvMassPt(NULL),
115 fHistoTrueMotherGammaGammaInvMassPt(NULL),
116 fHistoTrueMotherDalitzInvMassPt(NULL),
117 fHistoTrueConvGammaPt(NULL),
118 fHistoTrueConvGammaFromEtaPt(NULL),
119 fHistoTruePosPionPt(NULL),
120 fHistoTruePosPionFromEtaPt(NULL),
121 fHistoTrueNegPionPt(NULL),
122 fHistoTrueNegPionFromEtaPt(NULL),
899d014b 123 fHistoTruePionPionInvMassPt(NULL),
124 fHistoTruePionPionFromEtaInvMassPt(NULL),
209b710e 125 fHistoNEvents(NULL),
126 fHistoNGoodESDTracks(NULL),
127 fProfileEtaShift(NULL),
128 fRandom(0),
129 fnCuts(0),
130 fiCut(0),
131 fNumberOfESDTracks(0),
132 fMoveParticleAccordingToVertex(kFALSE),
133 fIsHeavyIon(kFALSE),
134 fDoMesonAnalysis(kTRUE),
135 fDoMesonQA(kFALSE),
136 fIsFromMBHeader(kTRUE),
d9d6352b 137 fIsMC(kFALSE),
138 fIsGammaEtaCand(kFALSE)
209b710e 139{
140
141}
142
143//-----------------------------------------------------------------------------------------------
144AliAnalysisTaskEtaToPiPlPiMiGamma::AliAnalysisTaskEtaToPiPlPiMiGamma( const char* name ):
145 AliAnalysisTaskSE(name),
146 fV0Reader(NULL),
147 fPionSelector(NULL),
148 fBGHandler(NULL),
149 fESDEvent(NULL),
150 fMCEvent(NULL),
151 fMCStack(NULL),
152 fCutFolder(NULL),
153 fESDList(NULL),
154 fBackList(NULL),
155 fMotherList(NULL),
156 fTrueList(NULL),
157 fMCList(NULL),
158 fOutputContainer(0),
159 fReaderGammas(NULL),
160 fSelectorNegPionIndex(0),
161 fSelectorPosPionIndex(0),
162 fGoodGammas(NULL),
163 fGoodVirtualParticles(NULL),
164 fGammaCutArray(NULL),
165 fPionCutArray(NULL),
166 fMesonCutArray(NULL),
167 fConversionCuts(NULL),
168 fHistoConvGammaPt(NULL),
169 fHistoConvGammaEta(NULL),
170 fHistoNegPionPt(NULL),
171 fHistoPosPionPt(NULL),
172 fHistoNegPionPhi(NULL),
173 fHistoPosPionPhi(NULL),
174 fHistoNegPionEta(NULL),
175 fHistoPosPionEta(NULL),
176 fHistoNegPionClsTPC(NULL),
177 fHistoPosPionClsTPC(NULL),
178 fHistoPionDCAxy(NULL),
179 fHistoPionDCAz(NULL),
180 fHistoPionTPCdEdxNSigma(NULL),
181 fHistoPionTPCdEdx(NULL),
899d014b 182 fHistoPionPionInvMassPt(NULL),
209b710e 183 fHistoMotherInvMassPt(NULL),
184 fTHnSparseMotherInvMassPtZM(NULL),
185 fHistoMotherBackInvMassPt(NULL),
186 fTHnSparseMotherBackInvMassPtZM(NULL),
187 fHistoMCAllGammaPt(NULL),
188 fHistoMCConvGammaPt(NULL),
189 fHistoMCAllPosPionsPt(NULL),
190 fHistoMCAllNegPionsPt(NULL),
191 fHistoMCGammaFromEtaPt(NULL),
192 fHistoMCPosPionsFromEtaPt(NULL),
193 fHistoMCNegPionsFromEtaPt(NULL),
194 fHistoMCEtaPiPlPiMiGammaPt(NULL),
195 fHistoMCEtaGGPt(NULL),
196 fHistoMCEtaDalitzPt(NULL),
197 fHistoMCEtaPiPlPiMiGammaInAccPt(NULL),
198 fHistoTrueMotherPiPlPiMiGammaInvMassPt(NULL),
199 fHistoTrueMotherGammaGammaInvMassPt(NULL),
200 fHistoTrueMotherDalitzInvMassPt(NULL),
201 fHistoTrueConvGammaPt(NULL),
202 fHistoTrueConvGammaFromEtaPt(NULL),
203 fHistoTruePosPionPt(NULL),
204 fHistoTruePosPionFromEtaPt(NULL),
205 fHistoTrueNegPionPt(NULL),
206 fHistoTrueNegPionFromEtaPt(NULL),
899d014b 207 fHistoTruePionPionInvMassPt(NULL),
208 fHistoTruePionPionFromEtaInvMassPt(NULL),
209b710e 209 fHistoNEvents(NULL),
210 fHistoNGoodESDTracks(NULL),
211 fProfileEtaShift(NULL),
212 fRandom(0),
213 fnCuts(0),
214 fiCut(0),
215 fNumberOfESDTracks(0),
216 fMoveParticleAccordingToVertex(kFALSE),
217 fIsHeavyIon(kFALSE),
218 fDoMesonAnalysis(kTRUE),
219 fDoMesonQA(kFALSE),
220 fIsFromMBHeader(kTRUE),
d9d6352b 221 fIsMC(kFALSE),
222 fIsGammaEtaCand(kFALSE)
209b710e 223{
224 DefineOutput(1, TList::Class());
225}
226
227//-----------------------------------------------------------------------------------------------
228AliAnalysisTaskEtaToPiPlPiMiGamma::~AliAnalysisTaskEtaToPiPlPiMiGamma()
229{
230 //
231 // virtual destructor
232 //
233 cout<<"Destructor"<<endl;
234 if(fGoodGammas){
235 delete fGoodGammas;
236 fGoodGammas = 0x0;
237 }
238 if(fGoodVirtualParticles){
239 delete fGoodVirtualParticles;
240 fGoodGammas = 0x0;
241 }
242 if(fBGHandler){
243 delete[] fBGHandler;
244 fBGHandler = 0x0;
245 }
246}
247//___________________________________________________________
248void AliAnalysisTaskEtaToPiPlPiMiGamma::InitBack(){
249
250 const Int_t nDim = 4;
899d014b 251 Int_t nBins[nDim] = {450,250,7,4};
252 Double_t xMin[nDim] = {0.3,0, 0,0};
253 Double_t xMax[nDim] = {0.75,25,7,4};
209b710e 254
255 fTHnSparseMotherInvMassPtZM = new THnSparseF*[fnCuts];
256 fTHnSparseMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
257
258 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
259 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
260
261 TString cutstringPion = ((AliPrimaryPionCuts*)fPionCutArray->At(iCut))->GetCutNumber();
262 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
263 TString cutstringGamma = ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutNumber();
264
265 Int_t collisionSystem = atoi((TString)(((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutNumber())(0,1));
266 Int_t centMin = atoi((TString)(((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutNumber())(1,1));
267 Int_t centMax = atoi((TString)(((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutNumber())(2,1));
268
269 if(collisionSystem == 1 || collisionSystem == 2 ||
270 collisionSystem == 5 || collisionSystem == 8 ||
271 collisionSystem == 9){
272 centMin = centMin*10;
273 centMax = centMax*10;
274 }
275 else if(collisionSystem == 3 || collisionSystem == 6){
276 centMin = centMin*5;
277 centMax = centMax*5;
278 }
279 else if(collisionSystem == 4 || collisionSystem == 7){
280 centMin = ((centMin*5)+45);
281 centMax = ((centMax*5)+45);
282 }
283
284
285 fBackList[iCut] = new TList();
286 fBackList[iCut]->SetName(Form("%s_%s_%s Back histograms",cutstringGamma.Data(),cutstringPion.Data(),cutstringMeson.Data()));
287 fBackList[iCut]->SetOwner(kTRUE);
288 fCutFolder[iCut]->Add(fBackList[iCut]);
289
290 fTHnSparseMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
291 fBackList[iCut]->Add(fTHnSparseMotherBackInvMassPtZM[iCut]);
292
293 fMotherList[iCut] = new TList();
294 fMotherList[iCut]->SetName(Form("%s_%s_%s Mother histograms",cutstringGamma.Data(),cutstringPion.Data(),cutstringMeson.Data()));
295 fMotherList[iCut]->SetOwner(kTRUE);
296 fCutFolder[iCut]->Add(fMotherList[iCut]);
297
298 fTHnSparseMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
299 fMotherList[iCut]->Add(fTHnSparseMotherInvMassPtZM[iCut]);
300
301
302 fBGHandler[iCut] = new AliGammaConversionAODBGHandler( collisionSystem,centMin,centMax,
303 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents(),
304 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity());
305
306 }
307}
308
309//______________________________________________________________________
310void AliAnalysisTaskEtaToPiPlPiMiGamma::UserCreateOutputObjects()
311{
312 //
313 // Create ouput objects
314 //
315
316 // Create the output container
317 if(fOutputContainer != NULL){
318 delete fOutputContainer;
319 fOutputContainer = NULL;
320 }
321 if(fOutputContainer == NULL){
322 fOutputContainer = new TList();
323 fOutputContainer->SetOwner(kTRUE);
324 }
325
326 fGoodGammas = new TList();
327 //fGoodGammas->SetOwner(kTRUE);
328
329 fGoodVirtualParticles = new TList();
330 //fGoodVirtualParticles->SetOwner(kTRUE);
331
332 fCutFolder = new TList*[fnCuts];
333 fESDList = new TList*[fnCuts];
334 fBackList = new TList*[fnCuts];
335 fMotherList = new TList*[fnCuts];
336 fHistoNEvents = new TH1I*[fnCuts];
337 fHistoNGoodESDTracks = new TH1I*[fnCuts];
338 fProfileEtaShift = new TProfile*[fnCuts];
339 fHistoConvGammaPt = new TH1F*[fnCuts];
340 fHistoConvGammaEta = new TH1F*[fnCuts];
341 fHistoNegPionPt = new TH1F*[fnCuts];
342 fHistoPosPionPt = new TH1F*[fnCuts];
343 fHistoNegPionPhi = new TH1F*[fnCuts];
344 fHistoPosPionPhi = new TH1F*[fnCuts];
345
346 if( fDoMesonQA ) {
347 fHistoNegPionEta = new TH1F*[fnCuts];
348 fHistoPosPionEta = new TH1F*[fnCuts];
349 fHistoNegPionClsTPC = new TH2F*[fnCuts];
350 fHistoPosPionClsTPC = new TH2F*[fnCuts];
351 fHistoPionDCAxy = new TH2F*[fnCuts];
352 fHistoPionDCAz = new TH2F*[fnCuts];
353 fHistoPionTPCdEdxNSigma = new TH2F*[fnCuts];
354 fHistoPionTPCdEdx = new TH2F*[fnCuts];
899d014b 355 fHistoPionPionInvMassPt = new TH2F*[fnCuts];
356
209b710e 357 }
358
359 fHistoMotherInvMassPt = new TH2F*[fnCuts];
360 fHistoMotherBackInvMassPt = new TH2F*[fnCuts];
361
362 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
363 TString cutstringPion =((AliPrimaryPionCuts*)fPionCutArray->At(iCut))->GetCutNumber();
364 TString cutstringMeson= ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
365 TString cutstringGamma = ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutNumber();
366
367 fCutFolder[iCut] = new TList();
368 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s_%s",cutstringGamma.Data(),cutstringPion.Data(),cutstringMeson.Data()));
369 fCutFolder[iCut]->SetOwner(kTRUE);
370 fOutputContainer->Add(fCutFolder[iCut]);
371
372 fESDList[iCut] = new TList();
373 fESDList[iCut]->SetName(Form("%s_%s_%s ESD histograms",cutstringGamma.Data(),cutstringPion.Data(),cutstringMeson.Data()));
374 fESDList[iCut]->SetOwner(kTRUE);
375
376 fHistoNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
377 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
378 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
379 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
380 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
381 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
382 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
383 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
384 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
385 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
386 fESDList[iCut]->Add(fHistoNEvents[iCut]);
387
388 if(fIsHeavyIon) fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",3000,0,3000);
389 else fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
390 fESDList[iCut]->Add(fHistoNGoodESDTracks[iCut]);
391
392 fProfileEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
393 fESDList[iCut]->Add(fProfileEtaShift[iCut]);
394 fHistoConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
395 fESDList[iCut]->Add(fHistoConvGammaPt[iCut]);
396 fHistoConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",600,-1.5,1.5);
397 fESDList[iCut]->Add(fHistoConvGammaEta[iCut]);
398 fHistoNegPionPt[iCut] = new TH1F("ESD_PrimaryNegPions_Pt","ESD_PrimaryNegPions_Pt",1000,0,25);
399 fESDList[iCut]->Add(fHistoNegPionPt[iCut]);
400 fHistoPosPionPt[iCut] = new TH1F("ESD_PrimaryPosPions_Pt","ESD_PrimaryPosPions_Pt",1000,0,25);
401 fESDList[iCut]->Add(fHistoPosPionPt[iCut]);
402 fHistoNegPionPhi[iCut] = new TH1F("ESD_PrimaryNegPions_Phi","ESD_PrimaryNegPions_Phi",360,0,2*TMath::Pi());
403 fESDList[iCut]->Add(fHistoNegPionPhi[iCut]);
404 fHistoPosPionPhi[iCut] = new TH1F("ESD_PrimaryPosPions_Phi","ESD_PrimaryPosPions_Phi",360,0,2*TMath::Pi());
405 fESDList[iCut]->Add(fHistoPosPionPhi[iCut]);
406
407 if ( fDoMesonQA ) {
408 fHistoNegPionEta[iCut] = new TH1F("ESD_PrimaryNegPions_Eta","ESD_PrimaryNegPions_Eta",600,-1.5,1.5);
409 fESDList[iCut]->Add(fHistoNegPionEta[iCut]);
410 fHistoPosPionEta[iCut] = new TH1F("ESD_PrimaryPosPions_Eta","ESD_PrimaryPosPions_Eta",600,-1.5,1.5);
411 fESDList[iCut]->Add(fHistoPosPionEta[iCut]);
412 fHistoNegPionClsTPC[iCut] = new TH2F("ESD_PrimaryNegPions_ClsTPC","ESD_PrimaryNegPions_ClsTPC",100,0,1,400,0.,10.);
413 fESDList[iCut]->Add(fHistoNegPionClsTPC[iCut]);
414 fHistoPosPionClsTPC[iCut] = new TH2F("ESD_PrimaryPosPions_ClsTPC","ESD_PrimaryPosPions_ClsTPC",100,0,1,400,0.,10.);
415 fESDList[iCut]->Add(fHistoPosPionClsTPC[iCut]);
416 fHistoPionDCAxy[iCut] = new TH2F("ESD_PrimaryPions_DCAxy","ESD_PrimaryPions_DCAxy",800,-4.0,4.0,400,0.,10.);
417 fESDList[iCut]->Add(fHistoPionDCAxy[iCut]);
418 fHistoPionDCAz[iCut] = new TH2F("ESD_PrimaryPions_DCAz","ESD_PrimaryPions_DCAz",800,-4.0,4.0,400,0.,10.);
419 fESDList[iCut]->Add(fHistoPionDCAz[iCut]);
420 fHistoPionTPCdEdxNSigma[iCut] = new TH2F("ESD_PrimaryPions_TPCdEdx","ESD_PrimaryPions_TPCdEdx",150,0.05,20,400,-10,10);
421 fESDList[iCut]->Add(fHistoPionTPCdEdxNSigma[iCut]);
422 fHistoPionTPCdEdx[iCut] =new TH2F("ESD_PrimaryPions_TPCdEdxSignal","ESD_PrimaryPions_TPCdEdxSignal" ,150,0.05,20.0,800,0.0,200);
423 fESDList[iCut]->Add(fHistoPionTPCdEdx[iCut]);
899d014b 424 fHistoPionPionInvMassPt[iCut] = new TH2F("ESD_PiPlusPiNeg_InvMassPt","ESD_PiPlusPiNeg_InvMassPt",2000,0.,2.,200,0.,20.);
425 fESDList[iCut]->Add(fHistoPionPionInvMassPt[iCut]);
209b710e 426 }
427
d9d6352b 428 fHistoMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",450,0.3,0.75,250,0,25);
209b710e 429 fESDList[iCut]->Add(fHistoMotherInvMassPt[iCut]);
d9d6352b 430 fHistoMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",450,0.3,0.75,250,0,25);
209b710e 431 fESDList[iCut]->Add(fHistoMotherBackInvMassPt[iCut]);
432
433 if ( fDoMesonQA ) {
434 TAxis *AxisAfter = fHistoPionTPCdEdxNSigma[iCut]->GetXaxis();
435 Int_t bins = AxisAfter->GetNbins();
436 Double_t from = AxisAfter->GetXmin();
437 Double_t to = AxisAfter->GetXmax();
438 Double_t *newBins = new Double_t[bins+1];
439 newBins[0] = from;
440 Double_t factor = TMath::Power(to/from, 1./bins);
441 for(Int_t i=1; i<=bins; ++i) newBins[i] = factor * newBins[i-1];
442
443 AxisAfter->Set(bins, newBins);
444 AxisAfter = fHistoPionTPCdEdx[iCut]->GetXaxis();
445 AxisAfter->Set(bins, newBins);
446
447 delete [] newBins;
448 }
449
450 fCutFolder[iCut]->Add(fESDList[iCut]);
451
452 }
453
454 if( fIsMC ){
455 // MC Histogramms
456 fMCList = new TList*[fnCuts];
457 // True Histogramms
458 fTrueList = new TList*[fnCuts];
459 fHistoTrueConvGammaPt = new TH1F*[fnCuts];
460 fHistoTrueConvGammaFromEtaPt = new TH1F*[fnCuts];
461 fHistoTruePosPionPt = new TH1F*[fnCuts];
462 fHistoTrueNegPionPt = new TH1F*[fnCuts];
463 fHistoTruePosPionFromEtaPt = new TH1F*[fnCuts];
464 fHistoTrueNegPionFromEtaPt = new TH1F*[fnCuts];
465
466
467 fHistoMCAllGammaPt = new TH1F*[fnCuts];
468 fHistoMCConvGammaPt = new TH1F*[fnCuts];
469 fHistoMCAllPosPionsPt = new TH1F*[fnCuts];
470 fHistoMCAllNegPionsPt = new TH1F*[fnCuts];
471 fHistoMCGammaFromEtaPt = new TH1F*[fnCuts];
472 fHistoMCPosPionsFromEtaPt = new TH1F*[fnCuts];
473 fHistoMCNegPionsFromEtaPt = new TH1F*[fnCuts];
474
475// hMCPi0DalitzGammaPt = new TH1F*[fnCuts];
476// hMCPi0DalitzElectronPt = new TH1F*[fnCuts];
477// hMCPi0DalitzPositronPt = new TH1F*[fnCuts];
478
479 fHistoMCEtaPiPlPiMiGammaPt = new TH1F*[fnCuts];
480 fHistoMCEtaDalitzPt = new TH1F*[fnCuts];
481 fHistoMCEtaGGPt = new TH1F*[fnCuts];
482 fHistoMCEtaPiPlPiMiGammaInAccPt = new TH1F*[fnCuts];
483//
484 fHistoTrueMotherPiPlPiMiGammaInvMassPt = new TH2F*[fnCuts];
485 fHistoTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
486 fHistoTrueMotherGammaGammaInvMassPt = new TH2F*[fnCuts];
487
899d014b 488 if (fDoMesonQA){
489 fHistoTruePionPionInvMassPt = new TH2F*[fnCuts];
490 fHistoTruePionPionFromEtaInvMassPt = new TH2F*[fnCuts];
491 }
492
209b710e 493 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
494 TString cutstringPion =((AliPrimaryPionCuts*)fPionCutArray->At(iCut))->GetCutNumber();
495 TString cutstringMeson= ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
496 TString cutstringGamma = ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutNumber();
497
498 fMCList[iCut] = new TList();
499 fMCList[iCut]->SetName(Form("%s_%s_%s MC histograms",cutstringGamma.Data(),cutstringPion.Data(),cutstringMeson.Data()));
500 fMCList[iCut]->SetOwner(kTRUE);
501 fCutFolder[iCut]->Add(fMCList[iCut]);
502
503 fHistoMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
504 fMCList[iCut]->Add(fHistoMCAllGammaPt[iCut]);
505 fHistoMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
506 fMCList[iCut]->Add(fHistoMCConvGammaPt[iCut]);
507 fHistoMCAllPosPionsPt[iCut] = new TH1F("MC_AllPosPions_Pt","MC_AllPosPions_Pt",1000,0,25);
508 fMCList[iCut]->Add(fHistoMCAllPosPionsPt[iCut]);
509 fHistoMCAllNegPionsPt[iCut] = new TH1F("MC_AllNegPions_Pt","MC_AllNegPions_Pt",1000,0,25);
510 fMCList[iCut]->Add(fHistoMCAllNegPionsPt[iCut]);
511 fHistoMCGammaFromEtaPt[iCut] = new TH1F("MC_GammaFromEta_Pt","MC_GammaFromEta_Pt",250,0,25);
512 fMCList[iCut]->Add(fHistoMCGammaFromEtaPt[iCut]);
513 fHistoMCPosPionsFromEtaPt[iCut] = new TH1F("MC_PosPionsFromEta_Pt","MC_PosPionsFromEta_Pt",1000,0,25);
514 fMCList[iCut]->Add(fHistoMCPosPionsFromEtaPt[iCut]);
515 fHistoMCNegPionsFromEtaPt[iCut] = new TH1F("MC_NegPionsFromEta_Pt","MC_NegPionsFromEta_Pt",1000,0,25);
516 fMCList[iCut]->Add(fHistoMCNegPionsFromEtaPt[iCut]);
517
518 fHistoMCEtaPiPlPiMiGammaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
519 fHistoMCEtaPiPlPiMiGammaPt[iCut]->Sumw2();
520 fMCList[iCut]->Add(fHistoMCEtaPiPlPiMiGammaPt[iCut]);
521
522 fHistoMCEtaDalitzPt[iCut] = new TH1F("MC_Eta_Dalitz_Pt","MC_Eta_Pt",250,0,25);
523 fHistoMCEtaDalitzPt[iCut]->Sumw2();
524 fMCList[iCut]->Add(fHistoMCEtaDalitzPt[iCut]);
525
526 fHistoMCEtaGGPt[iCut] = new TH1F("MC_Eta_GG_Pt","MC_Eta_GG_Pt",250,0,25);
527 fHistoMCEtaGGPt[iCut]->Sumw2();
528 fMCList[iCut]->Add(fHistoMCEtaGGPt[iCut]);
529
d9d6352b 530 fHistoMCEtaPiPlPiMiGammaInAccPt[iCut] = new TH1F("MC_EtaInAcc_Pt","MC_EtaInAcc_Pt",250,0,25);
209b710e 531 fHistoMCEtaPiPlPiMiGammaInAccPt[iCut]->Sumw2();
532 fMCList[iCut]->Add(fHistoMCEtaPiPlPiMiGammaInAccPt[iCut]);
533
534 fTrueList[iCut] = new TList();
535 fTrueList[iCut]->SetName(Form("%s_%s_%s True histograms",cutstringGamma.Data(),cutstringPion.Data(),cutstringMeson.Data()));
536 fTrueList[iCut]->SetOwner(kTRUE);
537 fCutFolder[iCut]->Add(fTrueList[iCut]);
538
539 fHistoTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
540 fTrueList[iCut]->Add(fHistoTrueConvGammaPt[iCut]);
541 fHistoTrueConvGammaFromEtaPt[iCut] = new TH1F("ESD_TrueConvGammaFromEta_Pt","ESD_TrueConvGammaFromEta_Pt",250,0,25);
542 fTrueList[iCut]->Add(fHistoTrueConvGammaFromEtaPt[iCut]);
543
544 fHistoTruePosPionPt[iCut] = new TH1F("ESD_TruePosPion_Pt","ESD_TruePosPion_Pt",1000,0,25);
545 fTrueList[iCut]->Add(fHistoTruePosPionPt[iCut]);
546 fHistoTrueNegPionPt[iCut] = new TH1F("ESD_TrueNegPion_Pt","ESD_TrueNegPion_Pt",1000,0,25);
547 fTrueList[iCut]->Add(fHistoTrueNegPionPt[iCut]);
548
549 fHistoTrueNegPionFromEtaPt[iCut] = new TH1F("ESD_TrueNegPionFromEta_Pt","ESD_TrueNegPionFromEta_Pt",1000,0,25);
550 fTrueList[iCut]->Add(fHistoTrueNegPionFromEtaPt[iCut]);
551 fHistoTruePosPionFromEtaPt[iCut] = new TH1F("ESD_TruePosPionFromEta_Pt","ESD_TruePosPionFromEta_Pt",1000,0,25);
552 fTrueList[iCut]->Add(fHistoTruePosPionFromEtaPt[iCut]);
553
899d014b 554 fHistoTrueMotherPiPlPiMiGammaInvMassPt[iCut] = new TH2F("ESD_TrueMotherPiPlPiMiGamma_InvMass_Pt","ESD_TrueMotherPiPlPiMiGamma_InvMass_Pt",450,0.3,0.75,250,0,25);
209b710e 555 fHistoTrueMotherPiPlPiMiGammaInvMassPt[iCut]->Sumw2();
556 fTrueList[iCut]->Add(fHistoTrueMotherPiPlPiMiGammaInvMassPt[iCut]);
557
899d014b 558 fHistoTrueMotherGammaGammaInvMassPt[iCut] = new TH2F("ESD_TrueMotherGG_InvMass_Pt","ESD_TrueMotherGG_InvMass_Pt",450,0.3,0.75,250,0,25);
209b710e 559 fHistoTrueMotherGammaGammaInvMassPt[iCut]->Sumw2();
560 fTrueList[iCut]->Add(fHistoTrueMotherGammaGammaInvMassPt[iCut]);
561
899d014b 562 fHistoTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueMotherDalitz_InvMass_Pt","ESD_TrueMotherDalitz_InvMass_Pt",450,0.3,0.75,250,0,25);
209b710e 563 fHistoTrueMotherDalitzInvMassPt[iCut]->Sumw2();
564 fTrueList[iCut]->Add(fHistoTrueMotherDalitzInvMassPt[iCut]);
899d014b 565
566 if (fDoMesonQA){
567 fHistoTruePionPionInvMassPt[iCut] = new TH2F("ESD_TruePiPlusPiNeg_InvMassPt","ESD_TruePiPlusPiNeg_InvMassPt",2000,0.,2.,200,0.,20.);
568 fTrueList[iCut]->Add(fHistoTruePionPionInvMassPt[iCut]);
569 fHistoTruePionPionFromEtaInvMassPt[iCut] = new TH2F("ESD_TruePiPlusPiNegFromEta_InvMassPt","ESD_TruePiPlusPiNegFromEta_InvMassPt",2000,0.,2.,200,0.,20.);
570 fTrueList[iCut]->Add(fHistoTruePionPionFromEtaInvMassPt[iCut]);
571 }
209b710e 572 }
573 }
574
575
576
577 InitBack(); // Init Background Handler
578
579 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
580 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
581
582 if(fV0Reader)
583 if((AliConversionCuts*)fV0Reader->GetConversionCuts())
584 if(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
585 fOutputContainer->Add(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
586
587
588
589 fPionSelector=(AliPrimaryPionSelector*)AliAnalysisManager::GetAnalysisManager()->GetTask("PionSelector");
590 if(!fPionSelector){printf("Error: No PionSelector");return;} // GetV0Reader
591
592 if( fPionSelector ){
593 if ( ((AliPrimaryPionCuts*)fPionSelector->GetPrimaryPionCuts())->GetCutHistograms() ){
594 fOutputContainer->Add( ((AliPrimaryPionCuts*)fPionSelector->GetPrimaryPionCuts())->GetCutHistograms() );
595 }
596 }
597
598 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
599 if( fPionCutArray ){
600 if( ((AliPrimaryPionCuts*)fPionCutArray->At(iCut))->GetCutHistograms() ) {
601 fCutFolder[iCut]->Add( ((AliPrimaryPionCuts*)fPionCutArray->At(iCut))->GetCutHistograms() );
602 }
603 }
604 if( fMesonCutArray ) {
605 if( ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms() ) {
606 fCutFolder[iCut]->Add( ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms());
607 }
608 }
609 if( fGammaCutArray ) {
610 if( ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutHistograms() ) {
611 fCutFolder[iCut]->Add( ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutHistograms() );
612 }
613 }
614 }
615
616 PostData(1, fOutputContainer);
617
618}
619
620//______________________________________________________________________
621void AliAnalysisTaskEtaToPiPlPiMiGamma::UserExec(Option_t *){
622
623 //
624 // Execute analysis for current event
625 //
626
627 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
628 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
629
630 Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
631
632 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
633 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
634 fHistoNEvents[iCut]->Fill(eventQuality);
635 }
636 return;
637 }
638
639 fPionSelector=(AliPrimaryPionSelector*)AliAnalysisManager::GetAnalysisManager()->GetTask("PionSelector");
640 if(!fPionSelector){printf("Error: No PionSelector");return;} // GetV0Reader
641
642 if(fIsMC) fMCEvent = MCEvent();
643 fESDEvent = (AliESDEvent*)InputEvent();
644 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
645 fSelectorNegPionIndex = fPionSelector->GetReconstructedNegPionIndex(); // Electrons from default Cut
646 fSelectorPosPionIndex = fPionSelector->GetReconstructedPosPionIndex(); // Positrons from default Cut
647
648 fNumberOfESDTracks = fV0Reader->GetNumberOfPrimaryTracks();
649 //AddTaskContainers(); //Add conatiner
650
651 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
652 fiCut = iCut;
653 Int_t eventNotAccepted =
654 ((AliConversionCuts*)fGammaCutArray->At(iCut))
655 ->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
656
657 if(eventNotAccepted){
658 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
659 fHistoNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
660 continue;
661 }
662
663 if(eventQuality != 0){// Event Not Accepted
664 // cout << "event rejected due to: " <<eventQuality << endl;
665 fHistoNEvents[iCut]->Fill(eventQuality);
666 continue;
667 }
668
669 fHistoNEvents[iCut]->Fill(eventQuality);
670 fHistoNGoodESDTracks[iCut]->Fill(fNumberOfESDTracks);
671
672 if(fMCEvent){ // Process MC Particle
673 fMCStack = fMCEvent->Stack();
674 if(((AliConversionCuts*)fGammaCutArray->At(iCut))->GetSignalRejection() != 0){
675 ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fGammaCutArray->At(iCut))->GetSignalRejection(), ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetAcceptedHeader(),
676 fMCEvent);
677 }
678 ProcessMCParticles();
679 }
680
d9d6352b 681 fIsGammaEtaCand =kFALSE;
209b710e 682// cout << "new event" << endl;
683 ProcessPhotonCandidates(); // Process this cuts gammas
684 ProcessPionCandidates(); // Process this cuts gammas
685
686
687 CalculateMesonCandidates();
688 CalculateBackground();
689 UpdateEventByEventData();
690
691 fGoodGammas->Clear(); // delete this cuts good gammas
692 fGoodVirtualParticles->Clear(); // delete this cuts good gammas
693 }
694
695 fSelectorNegPionIndex.clear();
696 fSelectorPosPionIndex.clear();
697
698 PostData( 1, fOutputContainer );
699}
700
701Bool_t AliAnalysisTaskEtaToPiPlPiMiGamma::Notify(){
702 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
703 if( !((AliConversionCuts*)fGammaCutArray->At(iCut))->GetDoEtaShift() ){
704 fProfileEtaShift[iCut]->Fill(0.,0.);
705 continue; // No Eta Shift requested, continue
706 }
707 if( ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
708 ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
709 ((AliConversionCuts*)fGammaCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
710 ((AliPrimaryPionCuts*)fPionCutArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetEtaShift() );
711 fProfileEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fGammaCutArray->At(iCut))->GetEtaShift()));
712 continue;
713 } else {
714 printf(" Eta t PiPlusPiMinus Gamma Task %s :: Eta Shift Manually Set to %f \n\n",
715 (((AliConversionCuts*)fGammaCutArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fGammaCutArray->At(iCut))->GetEtaShift());
716 ((AliConversionCuts*)fGammaCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
717 ((AliPrimaryPionCuts*)fPionCutArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fGammaCutArray->At(iCut))->GetEtaShift() );
718 fProfileEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fGammaCutArray->At(iCut))->GetEtaShift()));
719 }
720 }
721 return kTRUE;
722}
723
724
725void AliAnalysisTaskEtaToPiPlPiMiGamma::Terminate(const Option_t *){
726///Grid
727}
728
729//________________________________________________________________________
730void AliAnalysisTaskEtaToPiPlPiMiGamma::ProcessPhotonCandidates(){
731 Int_t nV0 = 0;
732 TList *GoodGammasStepOne = new TList();
733 TList *GoodGammasStepTwo = new TList();
734 // Loop over Photon Candidates allocated by ReaderV1
735
736 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
737 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
738 if(!PhotonCandidate) continue;
739
740 fIsFromMBHeader = kTRUE;
741
742 if( fMCEvent && ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetSignalRejection() != 0 ){
743 Int_t isPosFromMBHeader
744 = ((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
745 if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
746 Int_t isNegFromMBHeader
747 = ((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
748 if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
749 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
750 }
751
752 if(!((AliConversionCuts*)fGammaCutArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fESDEvent)) continue;
753
754 if(!((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseElecSharingCut() &&
755 !((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseToCloseV0sCut()){ // if no post reader loop is required add to events good gammas
756
757 fGoodGammas->Add(PhotonCandidate);
758
759 if(fIsFromMBHeader){
760 fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
761 fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
762 }
763
764 if(fMCEvent){
765 ProcessTruePhotonCandidates(PhotonCandidate);
766 }
767 } else if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
768 ((AliConversionCuts*)fGammaCutArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
769 nV0++;
770 GoodGammasStepOne->Add(PhotonCandidate);
771 } else if(!((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseElecSharingCut() &&
772 ((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
773 GoodGammasStepTwo->Add(PhotonCandidate);
774 }
775 }
776
777
778 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseElecSharingCut()){
779 for(Int_t i = 0;i<GoodGammasStepOne->GetEntries();i++){
780 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GoodGammasStepOne->At(i);
781 if(!PhotonCandidate) continue;
782 fIsFromMBHeader = kTRUE;
783 if(fMCEvent && ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetSignalRejection() != 0){
784 Int_t isPosFromMBHeader
785 = ((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack,fInputEvent);
786 Int_t isNegFromMBHeader
787 = ((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
788 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
789 }
790 if(!((AliConversionCuts*)fGammaCutArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GoodGammasStepOne->GetEntries())) continue;
791 if(!((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
792 fGoodGammas->Add(PhotonCandidate);
793 if(fIsFromMBHeader){
794 fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
795 fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
796 }
797 if(fMCEvent){
798 ProcessTruePhotonCandidates(PhotonCandidate);
799 }
800 }
801 else GoodGammasStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
802 }
803 }
804 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->UseToCloseV0sCut()){
805 for(Int_t i = 0;i<GoodGammasStepTwo->GetEntries();i++){
806 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GoodGammasStepTwo->At(i);
807 if(!PhotonCandidate) continue;
808
809 if(fMCEvent && ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetSignalRejection() != 0){
810 Int_t isPosFromMBHeader
811 = ((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack,fInputEvent);
812 Int_t isNegFromMBHeader
813 = ((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
814 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
815 }
816
817 if(!((AliConversionCuts*)fGammaCutArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GoodGammasStepTwo,i)) continue;
818 fGoodGammas->Add(PhotonCandidate); // Add gamma to current cut TList
819
820 if(fIsFromMBHeader){
821 fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt()); // Differences to old V0Reader in p_t due to conversion KF->TLorentzVector
822 fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
823 }
824
825 if(fMCEvent){
826 ProcessTruePhotonCandidates(PhotonCandidate);
827 }
828 }
829 }
830
831 delete GoodGammasStepOne;
832 GoodGammasStepOne = 0x0;
833 delete GoodGammasStepTwo;
834 GoodGammasStepTwo = 0x0;
835}
836
837//________________________________________________________________________
838void AliAnalysisTaskEtaToPiPlPiMiGamma::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
839{
840 // Process True Photons
841 AliStack *MCStack = fMCEvent->Stack();
842 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(MCStack);
843 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(MCStack);
844
845 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
846 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){ // Not Same Mother == Combinatorial Bck
847 return;
848 }
849
850 else if (posDaughter->GetMother(0) == -1){
851 return;
852 }
853
854 if(TMath::Abs(posDaughter->GetPdgCode())!=11 || TMath::Abs(negDaughter->GetPdgCode())!=11) return; //One Particle is not electron
855 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
856 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
857
858 TParticle *Photon = TruePhotonCandidate->GetMCParticle(MCStack);
859 if(Photon->GetPdgCode() != 22) return; // Mother is no Photon
860
861 // True Photon
862
863 Int_t labelGamma = TruePhotonCandidate->GetMCParticleLabel(MCStack);
864
865 if( labelGamma < MCStack->GetNprimary() ){
866 if( fIsFromMBHeader ){
867 fHistoTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
868 }
869 }
870
871 if( IsEtaPiPlPiMiGammaDaughter(labelGamma) == kTRUE ) {
872 if( labelGamma < MCStack->GetNprimary() ) {
873 if( fIsFromMBHeader ){
874 fHistoTrueConvGammaFromEtaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
d9d6352b 875
876// TParticle * gammaMC = (TParticle*)MCStack->Particle(labelGamma);
877// Int_t gammaMotherLabel=gammaMC->GetFirstMother();
878// for(Int_t index= ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetFirstDaughter();index<= ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetLastDaughter();index++){
879// TParticle* temp = (TParticle*)fMCStack->Particle( index );
880// switch( temp->GetPdgCode() ) {
881// case 211:
882// cout << "pi- " << index << "\t" << temp->Pt() << "\t" << temp->Eta() << endl;
883// break;
884// case -211:
885// cout << "pi+ " << index << "\t" << temp->Pt() << "\t" << temp->Eta() << endl;
886// break;
887// case ::kGamma:
888// cout << "gamma " << index << "\t" << temp->Pt()<< "\t" << temp->Eta() << endl;
889// break;
890// }
891// }
892 fIsGammaEtaCand = kTRUE;
209b710e 893 }
894 }
895 }
896}
897
898//________________________________________________________________________
899void AliAnalysisTaskEtaToPiPlPiMiGamma::ProcessPionCandidates(){
900
901 Double_t magField = fInputEvent->GetMagneticField();
902 if( magField < 0.0 ){
903 magField = 1.0;
904 } else {
905 magField = -1.0;
906 }
907
908 vector<Int_t> lGoodNegPionIndexPrev(0);
909 vector<Int_t> lGoodPosPionIndexPrev(0);
910
911 for(UInt_t i = 0; i < fSelectorNegPionIndex.size(); i++){
912 AliESDtrack* negPionCandidate = fESDEvent->GetTrack(fSelectorNegPionIndex[i]);
913 if(! ((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->PionIsSelected(negPionCandidate) ) continue;
914 lGoodNegPionIndexPrev.push_back( fSelectorNegPionIndex[i] );
915 fHistoNegPionPt[fiCut]->Fill(negPionCandidate->Pt());
916 fHistoNegPionPhi[fiCut]->Fill(negPionCandidate->Phi());
917 if( fMCEvent ) {
918 Int_t labelNegPion = TMath::Abs( negPionCandidate->GetLabel() );
919 if( labelNegPion < fMCStack->GetNtrack() ){
920 TParticle* negPion = fMCStack->Particle(labelNegPion);
921 if( negPion->GetPdgCode() == -211 ){
922 if( labelNegPion < fMCStack->GetNprimary() ){
923 fHistoTrueNegPionPt[fiCut]->Fill(negPionCandidate->Pt()); //primary negPion
924 }
925 if( IsEtaPiPlPiMiGammaDaughter(labelNegPion) == kTRUE ) {
926 if( labelNegPion < fMCStack->GetNprimary() ) {
927 fHistoTrueNegPionFromEtaPt[fiCut]->Fill(negPionCandidate->Pt());
d9d6352b 928// if (fIsGammaEtaCand) cout << "pi- rec" << labelNegPion << "\t" << negPionCandidate->Pt()<< endl;
209b710e 929 }
930 }
931 }
932 }
933 }
934 }
935
936 for(UInt_t i = 0; i < fSelectorPosPionIndex.size(); i++){
937 AliESDtrack* posPionCandidate = fESDEvent->GetTrack( fSelectorPosPionIndex[i] );
938 if(! ((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->PionIsSelected(posPionCandidate) ) continue;
939 lGoodPosPionIndexPrev.push_back( fSelectorPosPionIndex[i] );
940 fHistoPosPionPt[fiCut]->Fill( posPionCandidate->Pt() );
941 fHistoPosPionPhi[fiCut]->Fill( posPionCandidate->Phi() );
942
943 if( fMCEvent ) {
944 Int_t labelPosPion = TMath::Abs( posPionCandidate->GetLabel() );
945 if( labelPosPion < fMCStack->GetNtrack() ) {
946 TParticle* posPion = fMCStack->Particle(labelPosPion);
947 if( posPion->GetPdgCode() == 211 ){
948 if( labelPosPion < fMCStack->GetNprimary() ){
949 fHistoTruePosPionPt[fiCut]->Fill(posPionCandidate->Pt());
950 }
951 if( IsEtaPiPlPiMiGammaDaughter(labelPosPion) == kTRUE ) {
952 if( labelPosPion < fMCStack->GetNprimary() ){
953 fHistoTruePosPionFromEtaPt[fiCut]->Fill(posPionCandidate->Pt());
d9d6352b 954// if (fIsGammaEtaCand) cout << "pi+ rec" << labelPosPion << "\t" << posPionCandidate->Pt()<< endl;
209b710e 955 }
956 }
957 }
958 }
959 }
960 }
961
962
963 for(UInt_t i = 0; i < lGoodNegPionIndexPrev.size(); i++){
964
965 AliESDtrack *negPionCandidate = fESDEvent->GetTrack(lGoodNegPionIndexPrev[i]);
966 AliKFParticle negPionCandidateKF( *negPionCandidate->GetConstrainedParam(), 211 );
967
968 for(UInt_t j = 0; j < lGoodPosPionIndexPrev.size(); j++){
969
970 AliESDtrack *posPionCandidate = fESDEvent->GetTrack(lGoodPosPionIndexPrev[j]);
971 AliKFParticle posPionCandidateKF( *posPionCandidate->GetConstrainedParam(), 211 );
972
973 AliKFConversionPhoton* virtualPhoton = NULL;
974 virtualPhoton = new AliKFConversionPhoton(negPionCandidateKF,posPionCandidateKF);
975 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
976// primaryVertexImproved+=*virtualPhoton;
977 virtualPhoton->SetProductionVertex(primaryVertexImproved);
978 virtualPhoton->SetTrackLabels( lGoodPosPionIndexPrev[j], lGoodNegPionIndexPrev[i]);
979
980
981 if( fMCEvent ) {
982 Int_t labeln=TMath::Abs(negPionCandidate->GetLabel());
983 Int_t labelp=TMath::Abs(posPionCandidate->GetLabel());
984 TParticle *fNegativeMCParticle = fMCStack->Particle(labeln);
985 TParticle *fPositiveMCParticle = fMCStack->Particle(labelp);
986
987 if( fPositiveMCParticle && fNegativeMCParticle) {
988 virtualPhoton->SetMCLabelPositive(labelp);
989 virtualPhoton->SetMCLabelNegative(labeln);
990 }
991 }
992
d9d6352b 993 AliAODConversionPhoton *vParticle = new AliAODConversionPhoton(virtualPhoton); //To Apply PsiPairCut
994 if (((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->DoMassCut()){
995 if (vParticle->GetMass() < ((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->GetMassCut()){
996 fGoodVirtualParticles->Add( vParticle );
997 }
998 } else {
999 fGoodVirtualParticles->Add( vParticle );
1000 }
209b710e 1001 delete virtualPhoton;
1002 virtualPhoton=NULL;
1003
1004 }
1005 }
1006}
1007
1008//_____________________________________________________________________________
1009void AliAnalysisTaskEtaToPiPlPiMiGamma::ProcessMCParticles(){
1010
1011 // Loop over all primary MC particle
1012
1013 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
1014
1015 TParticle* particle = (TParticle *)fMCStack->Particle(i);
1016 if (!particle) continue;
1017
1018 Int_t isMCFromMBHeader = -1;
1019 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetSignalRejection() != 0){
1020 isMCFromMBHeader
1021 = ((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1022 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1023 }
1024
1025 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack,fInputEvent)){
1026
1027 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
1028 fHistoMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1029 if(particle->GetMother(0) >-1){
1030 if (fMCStack->Particle(particle->GetMother(0))->GetPdgCode() ==221 && fMCStack->Particle(particle->GetMother(0))->GetNDaughters()==3 ) fHistoMCGammaFromEtaPt[fiCut]->Fill(particle->Pt()); // All pos from eta
1031 }
1032 }
1033
1034 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
1035 fHistoMCConvGammaPt[fiCut]->Fill(particle->Pt());
1036 } // Converted MC Gamma
1037
1038 if(((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->PionIsSelectedMC(i,fMCStack)){
1039 if( particle->GetPdgCode() == 211){
1040 fHistoMCAllPosPionsPt[fiCut]->Fill(particle->Pt()); // All pos pions
1041 if(particle->GetMother(0) >-1){
1042 if (fMCStack->Particle(particle->GetMother(0))->GetPdgCode() ==221) fHistoMCPosPionsFromEtaPt[fiCut]->Fill(particle->Pt()); // All pos from eta
1043 }
1044 }
1045 if( particle->GetPdgCode() == -211){
1046 fHistoMCAllNegPionsPt[fiCut]->Fill(particle->Pt()); // All neg pions
1047 if(particle->GetMother(0) >-1){
1048 if (fMCStack->Particle(particle->GetMother(0))->GetPdgCode() ==221) fHistoMCNegPionsFromEtaPt[fiCut]->Fill(particle->Pt()); // All pos from eta
1049 }
1050 }
1051 }
1052
1053 // \eta -> \gamma \gamma
1054
1055 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedMC( particle,fMCStack,((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetEtaShift() ) ){
1056 Float_t weighted= 1;
1057 if( ((AliPrimaryPionCuts*) fPionCutArray->At(fiCut))->DoWeights() ) {
1058 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1059 if (particle->Pt()>0.005){
1060 weighted= ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
1061 }
1062 }
1063 }
1064 if(particle->GetPdgCode() == 221)fHistoMCEtaGGPt[fiCut]->Fill( particle->Pt() , weighted); // All MC Eta GG decay
1065 }
1066
1067 // \eta -> e+ e- \gamma
1068 Int_t labelgamma = -1;
1069 Int_t labelelectron = -1;
1070 Int_t labelpositron = -1;
1071
1072 if( ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedMCDalitz(particle,fMCStack,labelelectron,labelpositron,labelgamma,((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetEtaShift())){
1073 Float_t weighted= 1;
1074 if( ((AliPrimaryPionCuts*) fPionCutArray->At(fiCut))->DoWeights() ) {
1075 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack,fInputEvent)){
1076 if (particle->Pt()>0.005){
1077 weighted= ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
1078 }
1079 }
1080 }
1081 if(particle->GetPdgCode() == 221)fHistoMCEtaDalitzPt[fiCut]->Fill(particle->Pt(), weighted); // All MC Eta
1082 }
1083
1084
1085 // \eta -> pi+ pi- \gamma
1086 Int_t labelGamma3Body = -1;
1087 Int_t labelNegPion = -1;
1088 Int_t labelPosPion = -1;
1089
1090 if( ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedMCEtaPiPlPiMiGamma(particle,fMCStack,labelNegPion,labelPosPion,labelGamma3Body,((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetEtaShift())){
1091 Float_t weighted= 1;
1092 if( ((AliPrimaryPionCuts*) fPionCutArray->At(fiCut))->DoWeights() ) {
1093 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack,fInputEvent)){
1094 if (particle->Pt()>0.005){
1095 weighted= ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
1096 }
1097 }
1098 }
1099 if(particle->GetPdgCode() == 221)fHistoMCEtaPiPlPiMiGammaPt[fiCut]->Fill(particle->Pt(), weighted); // All MC Eta
1100
1101 TParticle *gamma = fMCStack->Particle(labelGamma3Body);
1102 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->PhotonIsSelectedMC(gamma,fMCStack,kFALSE) &&
1103 ((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->PionIsSelectedMC(labelNegPion,fMCStack) &&
1104 ((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->PionIsSelectedMC(labelPosPion,fMCStack) ) {
1105 if(particle->GetPdgCode() == 221)fHistoMCEtaPiPlPiMiGammaInAccPt[fiCut]->Fill(particle->Pt(), weighted ); // MC EtaDalitz with gamma and e+e- in acc
1106 }
1107 }
1108 }
1109 }
1110}
1111
1112
1113//________________________________________________________________________
1114void AliAnalysisTaskEtaToPiPlPiMiGamma::CalculateMesonCandidates(){
1115
1116 // Conversion Gammas
1117 if( fGoodGammas->GetEntries() > 0 && fGoodVirtualParticles->GetEntries() > 0 ){
1118
1119 vector<Bool_t> lGoodVirtualParticle(fGoodVirtualParticles->GetEntries(), kFALSE);
1120
1121 for(Int_t GammaIndex=0; GammaIndex<fGoodGammas->GetEntries(); GammaIndex++){
1122
1123 AliAODConversionPhoton *gamma=dynamic_cast<AliAODConversionPhoton*>(fGoodGammas->At(GammaIndex));
1124 if (gamma==NULL) continue;
1125 for(Int_t virtualParticleIndex=0;virtualParticleIndex<fGoodVirtualParticles->GetEntries();virtualParticleIndex++){
1126
899d014b 1127 AliAODConversionPhoton *vParticle=dynamic_cast<AliAODConversionPhoton*>(fGoodVirtualParticles->At(virtualParticleIndex));
1128 if (vParticle==NULL) continue;
209b710e 1129 //Check for same Electron ID
899d014b 1130 if(gamma->GetTrackLabelPositive() == vParticle->GetTrackLabelPositive() ||
1131 gamma->GetTrackLabelNegative() == vParticle->GetTrackLabelNegative() ||
1132 gamma->GetTrackLabelNegative() == vParticle->GetTrackLabelPositive() ||
1133 gamma->GetTrackLabelPositive() == vParticle->GetTrackLabelNegative() ) continue;
209b710e 1134
899d014b 1135 AliAODConversionMother *etacand = new AliAODConversionMother(gamma,vParticle);
209b710e 1136 etacand->SetLabels(GammaIndex,virtualParticleIndex);
d9d6352b 1137
1138// if(fMCEvent){
1139// AliESDtrack *posPionVParticle = fESDEvent->GetTrack( vParticle->GetTrackLabelNegative() );
1140// AliESDtrack *negPionVParticle = fESDEvent->GetTrack( vParticle->GetTrackLabelPositive() );
1141//
1142// Int_t labeln=TMath::Abs(negPionVParticle->GetLabel());
1143// Int_t labelp=TMath::Abs(posPionVParticle->GetLabel());
1144//
1145// cout << labeln << "\t" << labelp << endl;
1146// }
209b710e 1147
1148 if( ( ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(etacand,kTRUE,((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetEtaShift())) ){
1149
d9d6352b 1150// cout<< "Meson Accepted "<<endl;
209b710e 1151
1152 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fESDEvent->GetPrimaryVertex()->GetZ());
1153 Int_t mbin = 0;
1154 if( ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1155 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1156 } else {
1157 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGoodGammas->GetEntries());
1158 }
1159
899d014b 1160 AliESDtrack *posPionVParticle = 0;
1161 AliESDtrack *negPionVParticle = 0;
209b710e 1162
1163 Double_t clsToFPos = -1.0;
1164 Double_t clsToFNeg = -1.0;
1165
1166 Float_t dcaToVertexXYPos = -1.0;
1167 Float_t dcaToVertexZPos = -1.0;
1168 Float_t dcaToVertexXYNeg = -1.0;
1169 Float_t dcaToVertexZNeg = -1.0;
1170
1171
1172 if ( fDoMesonQA ) {
1173
899d014b 1174 fHistoPionPionInvMassPt[fiCut]->Fill( vParticle->GetMass(),vParticle->Pt());
1175
1176 posPionVParticle = fESDEvent->GetTrack( vParticle->GetTrackLabelPositive() );
1177 negPionVParticle = fESDEvent->GetTrack( vParticle->GetTrackLabelNegative() );
1178 clsToFPos = ((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->GetNFindableClustersTPC(posPionVParticle);
1179 clsToFNeg = ((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->GetNFindableClustersTPC(negPionVParticle);
209b710e 1180
1181 Float_t bPos[2];
1182 Float_t bCovPos[3];
899d014b 1183 posPionVParticle->GetImpactParameters(bPos,bCovPos);
209b710e 1184 if (bCovPos[0]<=0 || bCovPos[2]<=0) {
1185 AliDebug(1, "Estimated b resolution lower or equal zero!");
1186 bCovPos[0]=0; bCovPos[2]=0;
1187 }
1188
1189 Float_t bNeg[2];
1190 Float_t bCovNeg[3];
899d014b 1191 posPionVParticle->GetImpactParameters(bNeg,bCovNeg);
209b710e 1192 if (bCovNeg[0]<=0 || bCovNeg[2]<=0) {
1193 AliDebug(1, "Estimated b resolution lower or equal zero!");
1194 bCovNeg[0]=0; bCovNeg[2]=0;
1195 }
1196
1197 dcaToVertexXYPos = bPos[0];
1198 dcaToVertexZPos = bPos[1];
1199 dcaToVertexXYNeg = bNeg[0];
1200 dcaToVertexZNeg = bNeg[1];
1201 }
1202
1203 fHistoMotherInvMassPt[fiCut]->Fill(etacand->M(),etacand->Pt());
1204 Double_t sparesFill[4] = {etacand->M(),etacand->Pt(),(Double_t)zbin,(Double_t)mbin};
1205 fTHnSparseMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
1206
1207 if ( fDoMesonQA ) {
1208 if( lGoodVirtualParticle[virtualParticleIndex] == kFALSE ) {
1209
899d014b 1210 fHistoNegPionEta[fiCut]->Fill( negPionVParticle->Eta() );
1211 fHistoPosPionEta[fiCut]->Fill( posPionVParticle->Eta() );
209b710e 1212
899d014b 1213 fHistoNegPionClsTPC[fiCut]->Fill(clsToFNeg,negPionVParticle->Pt());
1214 fHistoPosPionClsTPC[fiCut]->Fill(clsToFPos,posPionVParticle->Pt());
209b710e 1215
899d014b 1216 fHistoPionDCAxy[fiCut]->Fill( dcaToVertexXYNeg, negPionVParticle->Pt() );
1217 fHistoPionDCAz[fiCut]->Fill( dcaToVertexZNeg, negPionVParticle->Pt() );
1218 fHistoPionDCAxy[fiCut]->Fill( dcaToVertexXYPos, posPionVParticle->Pt() );
1219 fHistoPionDCAz[fiCut]->Fill( dcaToVertexZPos, posPionVParticle->Pt() );
209b710e 1220
899d014b 1221 fHistoPionTPCdEdxNSigma[fiCut]->Fill( posPionVParticle->P(),((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(posPionVParticle, AliPID::kPion) );
1222 fHistoPionTPCdEdxNSigma[fiCut]->Fill( negPionVParticle->P(),((AliPrimaryPionCuts*)fPionCutArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(negPionVParticle, AliPID::kPion) );
209b710e 1223
899d014b 1224 fHistoPionTPCdEdx[fiCut]->Fill( posPionVParticle->P(), TMath::Abs(posPionVParticle->GetTPCsignal()));
1225 fHistoPionTPCdEdx[fiCut]->Fill( negPionVParticle->P(), TMath::Abs(negPionVParticle->GetTPCsignal()));
209b710e 1226
1227 lGoodVirtualParticle[virtualParticleIndex] = kTRUE;
1228
1229 }
1230 }
1231
1232
1233 if(fMCEvent){
899d014b 1234 ProcessTrueMesonCandidates(etacand,gamma,vParticle);
209b710e 1235 }
1236 }
1237 delete etacand;
1238 etacand=0x0;
1239 }
1240 }
1241 }
1242}
1243
1244//________________________________________________________________________
1245void AliAnalysisTaskEtaToPiPlPiMiGamma::CalculateBackground(){
1246
1247 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fESDEvent->GetPrimaryVertex()->GetZ());
1248 Int_t mbin = 0;
1249
1250
1251 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1252 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1253 } else {
1254 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGoodGammas->GetEntries());
1255 }
1256
1257 Int_t method = 1;
1258 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
1259 if( ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity() ) {
1260 for(Int_t nEventsInBG=0;nEventsInBG<fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
1261 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
1262 if(fMoveParticleAccordingToVertex == kTRUE && method == 1){
1263 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
1264 }
1265
1266 for(Int_t iCurrent=0;iCurrent<fGoodVirtualParticles->GetEntries();iCurrent++){
1267 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualParticles->At(iCurrent));
1268
1269 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
1270 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
1271
1272 if(fMoveParticleAccordingToVertex == kTRUE && method == 1 ){
1273 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
1274 }
1275
1276 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
1277
1278
1279 if( ( ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE, ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetEtaShift()))){
1280 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1281 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1282 fTHnSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1283 }
1284 delete backgroundCandidate;
1285 backgroundCandidate = 0x0;
1286 }
1287 }
1288 }
1289 } else {
1290 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
1291 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
1292 if(previousEventV0s){
1293 if(fMoveParticleAccordingToVertex == kTRUE && method == 1){
1294 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
1295 }
1296 for(Int_t iCurrent=0;iCurrent<fGoodVirtualParticles->GetEntries();iCurrent++){
1297
1298 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualParticles->At(iCurrent));
1299
1300 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
1301
1302 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
1303
1304 if(fMoveParticleAccordingToVertex == kTRUE && method ==1){
1305 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
1306 }
1307
1308 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
1309
1310 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetEtaShift()))){
1311 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1312 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1313 fTHnSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1314 }
1315 delete backgroundCandidate;
1316 backgroundCandidate = 0x0;
1317 }
1318 }
1319 }
1320 }
1321 }
1322}
1323
1324//______________________________________________________________________
1325void AliAnalysisTaskEtaToPiPlPiMiGamma::ProcessTrueMesonCandidates(AliAODConversionMother *EtaCandidate, AliAODConversionPhoton *TrueGammaCandidate, AliAODConversionPhoton *TrueVirtualParticleCandidate){
1326
1327 // Process True Mesons
1328
1329 AliStack *MCStack = fMCEvent->Stack();
1330
1331 if( TrueGammaCandidate->GetV0Index()<fESDEvent->GetNumberOfV0s() ){
1332
1333 Bool_t isTrueEta = kFALSE;
1334 Int_t gammaMCLabel = TrueGammaCandidate->GetMCParticleLabel(MCStack);
1335 Int_t gammaMotherLabel = -1;
d9d6352b 1336 Bool_t gammaEtaCand = kFALSE;
209b710e 1337
1338 if(gammaMCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1339 // Daughters Gamma 0
1340 TParticle * negativeMC = (TParticle*)TrueGammaCandidate->GetNegativeMCDaughter(MCStack);
1341 TParticle * positiveMC = (TParticle*)TrueGammaCandidate->GetPositiveMCDaughter(MCStack);
1342 TParticle * gammaMC = (TParticle*)MCStack->Particle(gammaMCLabel);
1343
1344 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1345 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1346 if(gammaMC->GetPdgCode() == 22){ // ... with Gamma Mother
1347 gammaMotherLabel=gammaMC->GetFirstMother();
d9d6352b 1348 if( ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetNDaughters() == 3 && ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetPdgCode() == 221 ) gammaEtaCand = kTRUE;
209b710e 1349 }
1350 }
1351 }
d9d6352b 1352
1353
209b710e 1354 }
1355
1356 Int_t virtualParticleMCLabel = TrueVirtualParticleCandidate->GetMCParticleLabel(MCStack);
1357 Int_t virtualParticleMotherLabel = -1;
1358
1359 Bool_t isPiPiDecay = kFALSE;
1360 Bool_t isDalitz = kFALSE;
1361 Bool_t isRealGamma = kFALSE;
1362
899d014b 1363 if (fDoMesonQA){
1364 TParticle * negativeMC = (TParticle*)TrueVirtualParticleCandidate->GetNegativeMCDaughter(MCStack);
1365 TParticle * positiveMC = (TParticle*)TrueVirtualParticleCandidate->GetPositiveMCDaughter(MCStack);
d9d6352b 1366// if (gammaEtaCand){
1367// cout << "neg Part: label - " << TrueVirtualParticleCandidate->GetMCLabelNegative() <<" pdg-code - " << negativeMC->GetPdgCode() << endl;
1368// cout << "pos Part: label - " << TrueVirtualParticleCandidate->GetMCLabelPositive() <<" pdg-code - " << positiveMC->GetPdgCode() << endl;
1369// }
899d014b 1370 if(TMath::Abs(negativeMC->GetPdgCode())==211 && TMath::Abs(positiveMC->GetPdgCode())==211){ // Pions ...
1371 fHistoTruePionPionInvMassPt[fiCut]->Fill(TrueVirtualParticleCandidate->GetMass(),TrueVirtualParticleCandidate->Pt());
1372 }
1373 }
1374
209b710e 1375 if(virtualParticleMCLabel != -1){ // if virtualParticleMCLabel==-1 particles don't have same mother
1376 TParticle * negativeMC = (TParticle*)TrueVirtualParticleCandidate->GetNegativeMCDaughter(MCStack);
1377 TParticle * positiveMC = (TParticle*)TrueVirtualParticleCandidate->GetPositiveMCDaughter(MCStack);
209b710e 1378 TParticle * virtualParticleMotherMC = (TParticle*)MCStack->Particle(virtualParticleMCLabel);
1379// cout << "pdg code same mother - " << virtualParticleMotherMC->GetPdgCode() << endl;
1380
1381 if(TMath::Abs(negativeMC->GetPdgCode())==211 && TMath::Abs(positiveMC->GetPdgCode())==211){ // Pions ...
1382 virtualParticleMotherLabel=virtualParticleMCLabel;
1383 isPiPiDecay=kTRUE;
1384 } else if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1385 if( virtualParticleMotherMC->GetPdgCode() != 22 ){
1386 virtualParticleMotherLabel=virtualParticleMCLabel;
1387 isDalitz = kTRUE;
1388 } else if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1389 virtualParticleMotherLabel=virtualParticleMotherMC->GetFirstMother();
1390 isRealGamma = kTRUE; //no virtual gamma
1391 }
1392 }
1393 }
1394
1395 if(gammaMotherLabel >= 0 && ( gammaMotherLabel == virtualParticleMotherLabel) ){
1396 if(((TParticle*)MCStack->Particle(virtualParticleMotherLabel))->GetPdgCode() == 221){
1397 isTrueEta=kTRUE;
1398 }
1399 }
1400
1401 if( isTrueEta ){ // True Eta
1402 if ( isPiPiDecay) { //real eta -> Pi+ Pi- Gamma
1403 Float_t weighted= 1;
1404 if( ((AliPrimaryPionCuts*) fPionCutArray->At(fiCut))->DoWeights() ) {
1405 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
1406 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
1407 weighted= ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
1408 }
1409 }
1410 }
899d014b 1411 fHistoTruePionPionFromEtaInvMassPt[fiCut]->Fill(TrueVirtualParticleCandidate->GetMass(),TrueVirtualParticleCandidate->Pt());
209b710e 1412 fHistoTrueMotherPiPlPiMiGammaInvMassPt[fiCut]->Fill(EtaCandidate->M(),EtaCandidate->Pt(),weighted);
1413 } else if ( isRealGamma ){
1414 Float_t weighted= 1;
1415 if( ((AliPrimaryPionCuts*) fPionCutArray->At(fiCut))->DoWeights() ) {
1416 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
1417 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
1418 weighted= ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
1419 }
1420 }
1421 }
1422
1423 fHistoTrueMotherGammaGammaInvMassPt[fiCut]->Fill(EtaCandidate->M(),EtaCandidate->Pt(),weighted);
1424 } else if (isDalitz) {
1425 Float_t weighted= 1;
1426 if( ((AliPrimaryPionCuts*) fPionCutArray->At(fiCut))->DoWeights() ) {
1427 if(((AliConversionCuts*)fGammaCutArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
1428 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
1429 weighted= ((AliConversionCuts*)fGammaCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
1430 }
1431 }
1432 }
1433 fHistoTrueMotherDalitzInvMassPt[fiCut]->Fill(EtaCandidate->M(),EtaCandidate->Pt(),weighted);
1434 }
1435 }
1436 }
1437}
1438
1439
1440//________________________________________________________________________
1441void AliAnalysisTaskEtaToPiPlPiMiGamma::UpdateEventByEventData(){
1442 //see header file for documentation
1443
1444 Int_t method = 1;
1445 if( method == 1 ) {
1446 if(fGoodGammas->GetEntries() >0 ){
1447 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1448 fBGHandler[fiCut]->AddEvent(fGoodGammas,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),0);
1449 } else{ // means we use #V0s for multiplicity
1450 fBGHandler[fiCut]->AddEvent(fGoodGammas,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGoodGammas->GetEntries(),0);
1451 }
1452 }
1453 } else if ( method == 2 ){
1454 if(fGoodVirtualParticles->GetEntries() > 0 ){
1455 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1456 fBGHandler[fiCut]->AddEvent(fGoodVirtualParticles,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),0);
1457 } else{ // means we use #V0s for multiplicity
1458 fBGHandler[fiCut]->AddEvent(fGoodVirtualParticles,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGoodVirtualParticles->GetEntries(),0);
1459 }
1460 }
1461 }
1462}
1463
1464//________________________________________________________________________
1465void AliAnalysisTaskEtaToPiPlPiMiGamma::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
1466 //see header file for documentation
1467
1468 Double_t dx = vertex->fX - fInputEvent->GetPrimaryVertex()->GetX();
1469 Double_t dy = vertex->fY - fInputEvent->GetPrimaryVertex()->GetY();
1470 Double_t dz = vertex->fZ - fInputEvent->GetPrimaryVertex()->GetZ();
1471
1472 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
1473 particle->SetConversionPoint(movedPlace);
1474}
1475
1476//_____________________________________________________________________________________
1477Bool_t AliAnalysisTaskEtaToPiPlPiMiGamma::IsEtaPiPlPiMiGammaDaughter( Int_t label ) const {
1478//
1479// Returns true if the particle comes from eta -> pi+ pi- gamma
1480//
1481 Int_t motherLabel = fMCStack->Particle( label )->GetMother(0);
1482 if( motherLabel < 0 || motherLabel >= fMCStack->GetNtrack() ) return kFALSE;
1483
1484 TParticle* mother = fMCStack->Particle( motherLabel );
1485 if( mother->GetPdgCode() != 221 ) return kFALSE;
1486 if( IsPiPlPiMiGammaDecay( mother ) ) return kTRUE;
1487 return kFALSE;
1488}
1489
1490//_____________________________________________________________________________
1491Bool_t AliAnalysisTaskEtaToPiPlPiMiGamma::IsPiPlPiMiGammaDecay(TParticle *fMCMother) const
1492{
1493
1494 if( fMCMother->GetNDaughters() != 3 ) return kFALSE;
1495 if( fMCMother->GetPdgCode() != 221 ) return kFALSE;
1496
1497
1498 TParticle *posPion = 0x0;
1499 TParticle *negPion = 0x0;
1500 TParticle *gamma = 0x0;
1501
1502 for(Int_t index= fMCMother->GetFirstDaughter();index<= fMCMother->GetLastDaughter();index++){
1503 TParticle* temp = (TParticle*)fMCStack->Particle( index );
1504
1505 switch( temp->GetPdgCode() ) {
1506 case 211:
1507 posPion = temp;
1508 break;
1509 case -211:
1510 negPion = temp;
1511 break;
1512 case ::kGamma:
1513 gamma = temp;
1514 break;
1515 }
1516 }
1517
1518 if( posPion && negPion && gamma) return kTRUE;
1519
1520 return kFALSE;
1521}