]>
Commit | Line | Data |
---|---|---|
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 | ||
58 | ClassImp( AliAnalysisTaskEtaToPiPlPiMiGamma ) | |
59 | ||
60 | //----------------------------------------------------------------------------------------------- | |
61 | AliAnalysisTaskEtaToPiPlPiMiGamma::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 | //----------------------------------------------------------------------------------------------- | |
144 | AliAnalysisTaskEtaToPiPlPiMiGamma::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 | //----------------------------------------------------------------------------------------------- | |
228 | AliAnalysisTaskEtaToPiPlPiMiGamma::~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 | //___________________________________________________________ | |
248 | void 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 | //______________________________________________________________________ | |
310 | void 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 | //______________________________________________________________________ | |
621 | void 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 | ||
701 | Bool_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 | ||
725 | void AliAnalysisTaskEtaToPiPlPiMiGamma::Terminate(const Option_t *){ | |
726 | ///Grid | |
727 | } | |
728 | ||
729 | //________________________________________________________________________ | |
730 | void 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 | //________________________________________________________________________ | |
838 | void 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 | //________________________________________________________________________ | |
899 | void 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 | //_____________________________________________________________________________ | |
1009 | void 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 | //________________________________________________________________________ | |
1114 | void 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 | //________________________________________________________________________ | |
1245 | void 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(¤tEventGoodV0,&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(¤tEventGoodV0,&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 | //______________________________________________________________________ | |
1325 | void 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 | //________________________________________________________________________ | |
1441 | void 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 | //________________________________________________________________________ | |
1465 | void 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 | //_____________________________________________________________________________________ | |
1477 | Bool_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 | //_____________________________________________________________________________ | |
1491 | Bool_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 | } |