]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/GammaConv/AliAnalysisTaskGammaConvDalitzV1.cxx
V0 Multiplicity histo and new cuts for kAny, kFirst and NoPsiPair added
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliAnalysisTaskGammaConvDalitzV1.cxx
CommitLineData
2bb2434e 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4803eb1f 4 * Author: Pedro Gonz??lez, Pedro Ladr??n de Guevara, Ernesto L??pez Torres, *
0f8c33c1 5 * Eulogio Serradilla, Ana Marin, Friederike Bock *
6 * Version 2 *
2bb2434e 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)
0f8c33c1 18// Analysis task for chic->JPsi+gamma
2bb2434e 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"
0a2b2b4b 29#include "TTree.h"
30#include "TH1.h"
31#include "TH1F.h"
32#include "THnSparse.h"
33#include "TH2F.h"
2bb2434e 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 "AliAnalysisTaskGammaConvDalitzV1.h"
0a2b2b4b 56
2bb2434e 57
58ClassImp( AliAnalysisTaskGammaConvDalitzV1 )
59
60//-----------------------------------------------------------------------------------------------
61AliAnalysisTaskGammaConvDalitzV1::AliAnalysisTaskGammaConvDalitzV1():
a280ac15 62fV0Reader(NULL),
2bb2434e 63 fElecSelector(NULL),
64 fBGHandler(NULL),
65 fESDEvent(NULL),
66 fMCEvent(NULL),
67 fMCStack(NULL),
68 fCutFolder(NULL),
69 fESDList(NULL),
70 fBackList(NULL),
fcc79cf5 71 fMotherList(NULL),
2bb2434e 72 fTrueList(NULL),
73 fMCList(NULL),
d9d6352b 74 fQAFolder(NULL),
2bb2434e 75 fOutputContainer(0),
76 fReaderGammas(NULL),
77 fSelectorElectronIndex(0),
78 fSelectorPositronIndex(0),
79 fGoodGammas(NULL),
80 fGoodVirtualGammas(NULL),
81 fGoodElectrons(NULL),
82 fGoodPositrons(NULL),
83 fCutGammaArray(NULL),
84 fCutElectronArray(NULL),
85 fCutMesonArray(NULL),
86 fGammasPool(NULL),
87 fConversionCuts(NULL),
88 hESDConvGammaPt(NULL),
2279d237 89 hESDConvGammaEta(NULL),
90 hESDConvGammaZR(NULL),
2bb2434e 91 hESDDalitzElectronPt(NULL),
92 hESDDalitzPositronPt(NULL),
4803eb1f 93 hESDDalitzElectronPhi(NULL),
94 hESDDalitzPositronPhi(NULL),
95 hESDDalitzElectronAfterPt(NULL),
96 hESDDalitzPositronAfterPt(NULL),
2279d237 97 hESDDalitzElectronAfterEta(NULL),
98 hESDDalitzPositronAfterEta(NULL),
4803eb1f 99 hESDDalitzElectronAfterPhi(NULL),
100 hESDDalitzPositronAfterPhi(NULL),
d9d6352b 101 hESDDalitzElectronAfterNClsITS(NULL),
102 hESDDalitzPositronAfterNClsITS(NULL),
4803eb1f 103 hESDDalitzElectronAfterNFindClsTPC(NULL),
104 hESDDalitzPositronAfterNFindClsTPC(NULL),
d9d6352b 105 hESDDalitzElectronAfterNClsTPC(NULL),
106 hESDDalitzPositronAfterNClsTPC(NULL),
f47b2bb5 107 hESDDalitzElectronAfterNCrossedRowsTPC(NULL),
108 hESDDalitzPositronAfterNCrossedRowsTPC(NULL),
4803eb1f 109 hESDDalitzPosEleAfterDCAxy(NULL),
110 hESDDalitzPosEleAfterDCAz(NULL),
d9d6352b 111 hESDDalitzElectronAfterTPCdEdxVsP(NULL),
112 hESDDalitzPositronAfterTPCdEdxVsP(NULL),
113 hESDDalitzElectronAfterTPCdEdxSignalVsP(NULL),
114 hESDDalitzPositronAfterTPCdEdxSignalVsP(NULL),
115 hESDDalitzElectronAfterTPCdEdxVsEta(NULL),
116 hESDDalitzPositronAfterTPCdEdxVsEta(NULL),
117 hESDDalitzElectronAfterTPCdEdxVsPhi(NULL),
118 hESDDalitzPositronAfterTPCdEdxVsPhi(NULL),
4803eb1f 119 hESDMotherPhi(NULL),
2bb2434e 120 hESDEposEnegPsiPairDPhi(NULL),
a280ac15 121 hESDEposEnegInvMassPt(NULL),
0a2b2b4b 122 hESDEposEnegLikeSignBackInvMassPt(NULL),
2bb2434e 123 hESDMotherInvMassPt(NULL),
a280ac15 124 hESDPi0MotherInvMassPt(NULL),
125 hESDPi0MotherDiffInvMassPt(NULL),
ae947965 126 hESDPi0MotherDiffLimInvMassPt(NULL),
2bb2434e 127 sESDMotherInvMassPtZM(NULL),
128 hESDMotherBackInvMassPt(NULL),
129 sESDMotherBackInvMassPtZM(NULL),
ccfa8c0d 130 hMCAllGammaPt(NULL),
ae947965 131 hMCConvGammaPt(NULL),
132 hMCConvGammaRSPt(NULL),
ccfa8c0d 133 hMCAllPositronsPt(NULL),
134 hMCAllElectronsPt(NULL),
2d49ea4c 135 hMCConvGammaEta(NULL),
136 hMCAllPositronsEta(NULL),
137 hMCAllElectronsEta(NULL),
ccfa8c0d 138 hMCPi0DalitzGammaPt(NULL),
139 hMCPi0DalitzElectronPt(NULL),
140 hMCPi0DalitzPositronPt(NULL),
2bb2434e 141 hMCPi0Pt(NULL),
a280ac15 142 hMCPi0GGPt(NULL),
2bb2434e 143 hMCEtaPt(NULL),
a280ac15 144 hMCEtaGGPt(NULL),
2bb2434e 145 hMCPi0InAccPt(NULL),
146 hMCEtaInAccPt(NULL),
0f8c33c1 147 hMCChiCPt(NULL),
148 hMCChiCInAccPt(NULL),
f4d5bd23 149 hMCPi0EposEnegInvMassPt(NULL),
150 hMCEtaEposEnegInvMassPt(NULL),
ccfa8c0d 151 hESDEposEnegTruePi0DalitzInvMassPt(NULL),
2d49ea4c 152 hESDEposEnegTruePrimPi0DalitzInvMass(NULL),
a072aeaa 153 hESDEposEnegTruePi0DalitzPsiPairDPhi(NULL),
ccfa8c0d 154 hESDEposEnegTrueEtaDalitzInvMassPt(NULL),
2d49ea4c 155 hESDEposEnegTruePrimEtaDalitzInvMass(NULL),
a072aeaa 156 hESDEposEnegTrueEtaDalitzPsiPairDPhi(NULL),
ccfa8c0d 157 hESDEposEnegTruePhotonInvMassPt(NULL),
f4d5bd23 158 hESDEposEnegTrueInvMassPt(NULL),
a072aeaa 159 hESDEposEnegTruePhotonPsiPairDPhi(NULL),
0f8c33c1 160 hESDEposEnegTrueJPsiInvMassPt(NULL),
161 hESDTrueMotherChiCInvMassPt(NULL),
ae947965 162 hESDTrueMotherChiCDiffInvMassPt(NULL),
2bb2434e 163 hESDTrueMotherInvMassPt(NULL),
4803eb1f 164 hESDTrueMotherDalitzInvMassPt(NULL),
2bb2434e 165 hESDTrueMotherPi0GGInvMassPt(NULL),
86eaf9ae 166 hESDTruePrimaryMotherPi0GGInvMassPt(NULL),
167 hESDTrueSecondaryMotherPi0GGInvMassPt(NULL),
2bb2434e 168 hESDTruePrimaryMotherInvMassMCPt(NULL),
86eaf9ae 169 hESDTruePrimaryMotherInvMassPt(NULL),
170 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
2bb2434e 171 hESDTruePrimaryPi0DalitzESDPtMCPt(NULL),
172 hESDTrueSecondaryMotherInvMassPt(NULL),
173 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
174 hESDTrueBckGGInvMassPt(NULL),
175 hESDTrueBckContInvMassPt(NULL),
176 hESDTrueMotherGGInvMassPt(NULL),
177 hESDTrueConvGammaPt(NULL),
ccfa8c0d 178 hESDTruePositronPt(NULL),
179 hESDTrueElectronPt(NULL),
ae947965 180 hESDTrueSecConvGammaPt(NULL),
181 hESDTrueSecPositronPt(NULL),
182 hESDTrueSecElectronPt(NULL),
ccfa8c0d 183 hESDTruePi0DalitzConvGammaPt(NULL),
184 hESDTruePi0DalitzPositronPt(NULL),
185 hESDTruePi0DalitzElectronPt(NULL),
ae947965 186 hESDTruePi0DalitzSecConvGammaPt(NULL),
187 hESDTruePi0DalitzSecPositronPt(NULL),
188 hESDTruePi0DalitzSecElectronPt(NULL),
2bb2434e 189 hNEvents(NULL),
190 hNGoodESDTracks(NULL),
58326f11 191 hNGoodESDTracksVsNGoodGammas(NULL),
192 hNGoodESDTracksVsNGoodVGammas(NULL),
7b3733f6 193 hNV0Tracks(NULL),
8a52eed5 194 hEtaShift(NULL),
2bb2434e 195 fRandom(0),
196 fUnsmearedPx(NULL),
197 fUnsmearedPy(NULL),
198 fUnsmearedPz(NULL),
199 fUnsmearedE(NULL),
200 fnCuts(0),
201 fiCut(0),
202 fNumberOfESDTracks(0),
58326f11 203 fNumberOfESDTrackskBoth(0),
2bb2434e 204 fMoveParticleAccordingToVertex(kFALSE),
205 fIsHeavyIon(kFALSE),
ae947965 206 fDoMesonAnalysis(kTRUE),
fcc79cf5 207 fDoChicAnalysis(kFALSE),
208 fDoMesonQA(kFALSE),
2d49ea4c 209 fSetProductionVertextoVGamma(kTRUE),
ae947965 210 fIsFromMBHeader(kTRUE),
211 fIsMC(kFALSE)
2bb2434e 212{
a280ac15 213
2bb2434e 214}
215
216//-----------------------------------------------------------------------------------------------
217AliAnalysisTaskGammaConvDalitzV1::AliAnalysisTaskGammaConvDalitzV1( const char* name ):
218 AliAnalysisTaskSE(name),
219 fV0Reader(NULL),
220 fElecSelector(NULL),
221 fBGHandler(NULL),
222 fESDEvent(NULL),
223 fMCEvent(NULL),
224 fMCStack(NULL),
225 fCutFolder(NULL),
226 fESDList(NULL),
227 fBackList(NULL),
fcc79cf5 228 fMotherList(NULL),
2bb2434e 229 fTrueList(NULL),
230 fMCList(NULL),
d9d6352b 231 fQAFolder(NULL),
2bb2434e 232 fOutputContainer(0),
233 fReaderGammas(NULL),
234 fSelectorElectronIndex(0),
235 fSelectorPositronIndex(0),
236 fGoodGammas(NULL),
237 fGoodVirtualGammas(NULL),
238 fGoodElectrons(NULL),
239 fGoodPositrons(NULL),
240 fCutGammaArray(NULL),
241 fCutElectronArray(NULL),
242 fCutMesonArray(NULL),
243 fGammasPool(NULL),
244 fConversionCuts(NULL),
245 hESDConvGammaPt(NULL),
2279d237 246 hESDConvGammaEta(NULL),
247 hESDConvGammaZR(NULL),
2bb2434e 248 hESDDalitzElectronPt(NULL),
249 hESDDalitzPositronPt(NULL),
4803eb1f 250 hESDDalitzElectronPhi(NULL),
251 hESDDalitzPositronPhi(NULL),
252 hESDDalitzElectronAfterPt(NULL),
253 hESDDalitzPositronAfterPt(NULL),
2279d237 254 hESDDalitzElectronAfterEta(NULL),
255 hESDDalitzPositronAfterEta(NULL),
4803eb1f 256 hESDDalitzElectronAfterPhi(NULL),
257 hESDDalitzPositronAfterPhi(NULL),
d9d6352b 258 hESDDalitzElectronAfterNClsITS(NULL),
259 hESDDalitzPositronAfterNClsITS(NULL),
4803eb1f 260 hESDDalitzElectronAfterNFindClsTPC(NULL),
261 hESDDalitzPositronAfterNFindClsTPC(NULL),
d9d6352b 262 hESDDalitzElectronAfterNClsTPC(NULL),
263 hESDDalitzPositronAfterNClsTPC(NULL),
f47b2bb5 264 hESDDalitzElectronAfterNCrossedRowsTPC(NULL),
265 hESDDalitzPositronAfterNCrossedRowsTPC(NULL),
4803eb1f 266 hESDDalitzPosEleAfterDCAxy(NULL),
267 hESDDalitzPosEleAfterDCAz(NULL),
d9d6352b 268 hESDDalitzElectronAfterTPCdEdxVsP(NULL),
269 hESDDalitzPositronAfterTPCdEdxVsP(NULL),
270 hESDDalitzElectronAfterTPCdEdxSignalVsP(NULL),
271 hESDDalitzPositronAfterTPCdEdxSignalVsP(NULL),
272 hESDDalitzElectronAfterTPCdEdxVsEta(NULL),
273 hESDDalitzPositronAfterTPCdEdxVsEta(NULL),
274 hESDDalitzElectronAfterTPCdEdxVsPhi(NULL),
275 hESDDalitzPositronAfterTPCdEdxVsPhi(NULL),
4803eb1f 276 hESDMotherPhi(NULL),
2bb2434e 277 hESDEposEnegPsiPairDPhi(NULL),
a280ac15 278 hESDEposEnegInvMassPt(NULL),
0a2b2b4b 279 hESDEposEnegLikeSignBackInvMassPt(NULL),
2bb2434e 280 hESDMotherInvMassPt(NULL),
a280ac15 281 hESDPi0MotherInvMassPt(NULL),
282 hESDPi0MotherDiffInvMassPt(NULL),
ae947965 283 hESDPi0MotherDiffLimInvMassPt(NULL),
2bb2434e 284 sESDMotherInvMassPtZM(NULL),
285 hESDMotherBackInvMassPt(NULL),
286 sESDMotherBackInvMassPtZM(NULL),
ccfa8c0d 287 hMCAllGammaPt(NULL),
ae947965 288 hMCConvGammaPt(NULL),
289 hMCConvGammaRSPt(NULL),
ccfa8c0d 290 hMCAllPositronsPt(NULL),
291 hMCAllElectronsPt(NULL),
2d49ea4c 292 hMCConvGammaEta(NULL),
293 hMCAllPositronsEta(NULL),
294 hMCAllElectronsEta(NULL),
ccfa8c0d 295 hMCPi0DalitzGammaPt(NULL),
296 hMCPi0DalitzElectronPt(NULL),
297 hMCPi0DalitzPositronPt(NULL),
2bb2434e 298 hMCPi0Pt(NULL),
a280ac15 299 hMCPi0GGPt(NULL),
2bb2434e 300 hMCEtaPt(NULL),
a280ac15 301 hMCEtaGGPt(NULL),
2bb2434e 302 hMCPi0InAccPt(NULL),
303 hMCEtaInAccPt(NULL),
0f8c33c1 304 hMCChiCPt(NULL),
305 hMCChiCInAccPt(NULL),
f4d5bd23 306 hMCPi0EposEnegInvMassPt(NULL),
307 hMCEtaEposEnegInvMassPt(NULL),
ccfa8c0d 308 hESDEposEnegTruePi0DalitzInvMassPt(NULL),
2d49ea4c 309 hESDEposEnegTruePrimPi0DalitzInvMass(NULL),
a072aeaa 310 hESDEposEnegTruePi0DalitzPsiPairDPhi(NULL),
ccfa8c0d 311 hESDEposEnegTrueEtaDalitzInvMassPt(NULL),
2d49ea4c 312 hESDEposEnegTruePrimEtaDalitzInvMass(NULL),
a072aeaa 313 hESDEposEnegTrueEtaDalitzPsiPairDPhi(NULL),
ccfa8c0d 314 hESDEposEnegTruePhotonInvMassPt(NULL),
f4d5bd23 315 hESDEposEnegTrueInvMassPt(NULL),
a072aeaa 316 hESDEposEnegTruePhotonPsiPairDPhi(NULL),
0f8c33c1 317 hESDEposEnegTrueJPsiInvMassPt(NULL),
318 hESDTrueMotherChiCInvMassPt(NULL),
ae947965 319 hESDTrueMotherChiCDiffInvMassPt(NULL),
2bb2434e 320 hESDTrueMotherInvMassPt(NULL),
4803eb1f 321 hESDTrueMotherDalitzInvMassPt(NULL),
2bb2434e 322 hESDTrueMotherPi0GGInvMassPt(NULL),
86eaf9ae 323 hESDTruePrimaryMotherPi0GGInvMassPt(NULL),
324 hESDTrueSecondaryMotherPi0GGInvMassPt(NULL),
2bb2434e 325 hESDTruePrimaryMotherInvMassMCPt(NULL),
86eaf9ae 326 hESDTruePrimaryMotherInvMassPt(NULL),
327 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
2bb2434e 328 hESDTruePrimaryPi0DalitzESDPtMCPt(NULL),
329 hESDTrueSecondaryMotherInvMassPt(NULL),
330 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
331 hESDTrueBckGGInvMassPt(NULL),
332 hESDTrueBckContInvMassPt(NULL),
333 hESDTrueMotherGGInvMassPt(NULL),
334 hESDTrueConvGammaPt(NULL),
ccfa8c0d 335 hESDTruePositronPt(NULL),
336 hESDTrueElectronPt(NULL),
ae947965 337 hESDTrueSecConvGammaPt(NULL),
338 hESDTrueSecPositronPt(NULL),
339 hESDTrueSecElectronPt(NULL),
ccfa8c0d 340 hESDTruePi0DalitzConvGammaPt(NULL),
341 hESDTruePi0DalitzPositronPt(NULL),
342 hESDTruePi0DalitzElectronPt(NULL),
ae947965 343 hESDTruePi0DalitzSecConvGammaPt(NULL),
344 hESDTruePi0DalitzSecPositronPt(NULL),
345 hESDTruePi0DalitzSecElectronPt(NULL),
2bb2434e 346 hNEvents(NULL),
347 hNGoodESDTracks(NULL),
58326f11 348 hNGoodESDTracksVsNGoodGammas(NULL),
349 hNGoodESDTracksVsNGoodVGammas(NULL),
7b3733f6 350 hNV0Tracks(NULL),
8a52eed5 351 hEtaShift(NULL),
2bb2434e 352 fRandom(0),
353 fUnsmearedPx(NULL),
354 fUnsmearedPy(NULL),
355 fUnsmearedPz(NULL),
356 fUnsmearedE(NULL),
357 fnCuts(0),
358 fiCut(0),
359 fNumberOfESDTracks(0),
58326f11 360 fNumberOfESDTrackskBoth(0),
2bb2434e 361 fMoveParticleAccordingToVertex(kFALSE),
362 fIsHeavyIon(kFALSE),
ae947965 363 fDoMesonAnalysis(kTRUE),
fcc79cf5 364 fDoChicAnalysis(kFALSE),
365 fDoMesonQA(kFALSE),
2d49ea4c 366 fSetProductionVertextoVGamma(kTRUE),
ae947965 367 fIsFromMBHeader(kTRUE),
368 fIsMC(kFALSE)
2bb2434e 369{
a280ac15 370 DefineOutput(1, TList::Class());
2bb2434e 371}
372
373//-----------------------------------------------------------------------------------------------
374AliAnalysisTaskGammaConvDalitzV1::~AliAnalysisTaskGammaConvDalitzV1()
375{
a280ac15 376 //
377 // virtual destructor
378 //
2d49ea4c 379
a280ac15 380 cout<<"Destructor"<<endl;
2bb2434e 381
382 if(fGoodGammas){
383 delete fGoodGammas;
384 fGoodGammas = 0x0;
385 }
386 if(fGoodVirtualGammas){
387 delete fGoodVirtualGammas;
388 fGoodGammas = 0x0;
389 }
390 if(fGoodElectrons){
391 delete fGoodGammas;
392 fGoodGammas = 0x0;
393 }
394 if(fGoodPositrons){
395 delete fGoodGammas;
396 fGoodGammas = 0x0;
397 }
398 if(fBGHandler){
399 delete[] fBGHandler;
400 fBGHandler = 0x0;
401 }
a280ac15 402 if( fGammasPool ){
403 delete[] fGammasPool;
404 fGammasPool = 0x0;
405 }
2bb2434e 406}
2bb2434e 407//___________________________________________________________
408void AliAnalysisTaskGammaConvDalitzV1::InitBack(){
409
2bb2434e 410 const Int_t nDim = 4;
fcc79cf5 411 Int_t nBins[nDim] = {800,250,7,4};
412 Double_t xMin[nDim] = {0,0, 0,0};
413 Double_t xMax[nDim] = {0.8,25,7,4};
414
415 sESDMotherInvMassPtZM = new THnSparseF*[fnCuts];
2bb2434e 416 sESDMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
417
418 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
fcc79cf5 419 //fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
2bb2434e 420 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
fcc79cf5 421 //if (((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->DoBGCalculation()){
422
423
424 TString cutstringElectron = ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
425 TString cutstringMeson = ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
426 TString cutstringGamma = ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
427
428
429
430 Int_t collisionSystem = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(0,1));
431 Int_t centMin = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(1,1));
432 Int_t centMax = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(2,1));
433
434 if(collisionSystem == 1 || collisionSystem == 2 ||
435 collisionSystem == 5 || collisionSystem == 8 ||
436 collisionSystem == 9){
437 centMin = centMin*10;
438 centMax = centMax*10;
439 }
440 else if(collisionSystem == 3 || collisionSystem == 6){
441 centMin = centMin*5;
442 centMax = centMax*5;
443 }
444 else if(collisionSystem == 4 || collisionSystem == 7){
445 centMin = ((centMin*5)+45);
446 centMax = ((centMax*5)+45);
447 }
2bb2434e 448
449
fcc79cf5 450 fBackList[iCut] = new TList();
451 fBackList[iCut]->SetName(Form("%s_%s_%s Back histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
452 fBackList[iCut]->SetOwner(kTRUE);
453 fCutFolder[iCut]->Add(fBackList[iCut]);
2bb2434e 454
fcc79cf5 455 sESDMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
456 fBackList[iCut]->Add(sESDMotherBackInvMassPtZM[iCut]);
2bb2434e 457
fcc79cf5 458 fMotherList[iCut] = new TList();
459 fMotherList[iCut]->SetName(Form("%s_%s_%s Mother histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
460 fMotherList[iCut]->SetOwner(kTRUE);
461 fCutFolder[iCut]->Add(fMotherList[iCut]);
2bb2434e 462
fcc79cf5 463 sESDMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
464 fMotherList[iCut]->Add(sESDMotherInvMassPtZM[iCut]);
2bb2434e 465
fcc79cf5 466
467 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
468 collisionSystem,centMin,centMax,
469 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->NumberOfRotationEvents(),
470 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->UseTrackMultiplicity());
471
472 if( ( (AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetBKGMethod() == 3 ){
a280ac15 473 fGammasPool[iCut] = new TList();
fcc79cf5 474 }
a280ac15 475
fcc79cf5 476 //}
477 }
2bb2434e 478}
479
480//______________________________________________________________________
481void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
482{
a280ac15 483 //
484 // Create ouput objects
485 //
486
487 // Create the output container
488 if(fOutputContainer != NULL){
489 delete fOutputContainer;
490 fOutputContainer = NULL;
491 }
492 if(fOutputContainer == NULL){
493 fOutputContainer = new TList();
494 fOutputContainer->SetOwner(kTRUE);
495 }
496
497 fGoodGammas = new TList();
498 //fGoodGammas->SetOwner(kTRUE);
499
500
501 fGoodVirtualGammas = new TList();
502 //fGoodVirtualGammas->SetOwner(kTRUE);
503
504
505
a280ac15 506 fGammasPool = new TList*[fnCuts];
507 fCutFolder = new TList*[fnCuts];
508 fESDList = new TList*[fnCuts];
509 fBackList = new TList*[fnCuts];
fcc79cf5 510 fMotherList = new TList*[fnCuts];
d9d6352b 511 //fQAFolder = new TList*[fnCuts];
a280ac15 512 hNEvents = new TH1I*[fnCuts];
513 hNGoodESDTracks = new TH1I*[fnCuts];
7b3733f6 514 hNV0Tracks = new TH1I*[fnCuts];
8a52eed5 515 hEtaShift = new TProfile*[fnCuts];
a280ac15 516 hESDConvGammaPt = new TH1F*[fnCuts];
2279d237 517 hESDConvGammaEta = new TH1F*[fnCuts];
d9d6352b 518
a280ac15 519 hESDDalitzElectronPt = new TH1F*[fnCuts];
520 hESDDalitzPositronPt = new TH1F*[fnCuts];
4803eb1f 521 hESDDalitzElectronPhi = new TH1F*[fnCuts];
522 hESDDalitzPositronPhi = new TH1F*[fnCuts];
fcc79cf5 523
524 if( fDoMesonQA ) {
2279d237 525
d9d6352b 526 fQAFolder = new TList*[fnCuts];
58326f11 527
528 hNGoodESDTracksVsNGoodGammas = new TH2F*[fnCuts];
529 hNGoodESDTracksVsNGoodVGammas = new TH2F*[fnCuts];
4803eb1f 530 hESDDalitzElectronAfterPt = new TH1F*[fnCuts];
531 hESDDalitzPositronAfterPt = new TH1F*[fnCuts];
2279d237 532 hESDDalitzElectronAfterEta = new TH1F*[fnCuts];
533 hESDDalitzPositronAfterEta = new TH1F*[fnCuts];
4803eb1f 534 hESDDalitzElectronAfterPhi = new TH1F*[fnCuts];
535 hESDDalitzPositronAfterPhi = new TH1F*[fnCuts];
d9d6352b 536 hESDDalitzElectronAfterNClsITS = new TH1F*[fnCuts];
537 hESDDalitzPositronAfterNClsITS = new TH1F*[fnCuts];
4803eb1f 538 hESDDalitzElectronAfterNFindClsTPC = new TH2F*[fnCuts];
539 hESDDalitzPositronAfterNFindClsTPC = new TH2F*[fnCuts];
d9d6352b 540 hESDDalitzElectronAfterNClsTPC = new TH2F*[fnCuts];
541 hESDDalitzPositronAfterNClsTPC = new TH2F*[fnCuts];
f47b2bb5 542 hESDDalitzElectronAfterNCrossedRowsTPC = new TH2F*[fnCuts];
543 hESDDalitzPositronAfterNCrossedRowsTPC = new TH2F*[fnCuts];
4803eb1f 544 hESDDalitzPosEleAfterDCAxy = new TH2F*[fnCuts];
545 hESDDalitzPosEleAfterDCAz = new TH2F*[fnCuts];
d9d6352b 546 hESDDalitzElectronAfterTPCdEdxVsP = new TH2F*[fnCuts];
547 hESDDalitzPositronAfterTPCdEdxVsP = new TH2F*[fnCuts];
548 hESDDalitzElectronAfterTPCdEdxSignalVsP = new TH2F*[fnCuts];
549 hESDDalitzPositronAfterTPCdEdxSignalVsP = new TH2F*[fnCuts];
550 hESDDalitzElectronAfterTPCdEdxVsEta = new TH2F*[fnCuts];
551 hESDDalitzPositronAfterTPCdEdxVsEta = new TH2F*[fnCuts];
552 hESDDalitzElectronAfterTPCdEdxVsPhi = new TH2F*[fnCuts];
553 hESDDalitzPositronAfterTPCdEdxVsPhi = new TH2F*[fnCuts];
4803eb1f 554 hESDMotherPhi = new TH1F*[fnCuts];
a280ac15 555 hESDEposEnegPsiPairDPhi = new TH2F*[fnCuts];
258b4572 556 hESDEposEnegInvMassPt = new TH2F*[fnCuts];
557 hESDEposEnegLikeSignBackInvMassPt = new TH2F*[fnCuts];
d9d6352b 558 hESDConvGammaZR = new TH2F*[fnCuts];
fcc79cf5 559
560 }
561
562
563
a280ac15 564 hESDMotherInvMassPt = new TH2F*[fnCuts];
fcc79cf5 565
566 if(fDoChicAnalysis) {
a280ac15 567 hESDPi0MotherInvMassPt = new TH2F*[fnCuts];
568 hESDPi0MotherDiffInvMassPt = new TH2F*[fnCuts];
fcc79cf5 569 hESDPi0MotherDiffLimInvMassPt = new TH2F*[fnCuts];
570 }
571
572
a280ac15 573 hESDMotherBackInvMassPt = new TH2F*[fnCuts];
574
575
576 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
577
578
579 TString cutstringElectron =((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
580 TString cutstringMeson= ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
581 TString cutstringGamma = ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
582
583 fCutFolder[iCut] = new TList();
584 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s_%s",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
585 fCutFolder[iCut]->SetOwner(kTRUE);
586 fOutputContainer->Add(fCutFolder[iCut]);
587
588 fESDList[iCut] = new TList();
589 fESDList[iCut]->SetName(Form("%s_%s_%s ESD histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
590 fESDList[iCut]->SetOwner(kTRUE);
d9d6352b 591
592
a280ac15 593 hNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
594 hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
595 hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
596 hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
597 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
598 hNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
599 hNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
600 hNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
601 hNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
602 hNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
603 fESDList[iCut]->Add(hNEvents[iCut]);
604
605
606
a280ac15 607 if(fIsHeavyIon) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",3000,0,3000);
608 else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
609 fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
7b3733f6 610
611
612 if(fIsHeavyIon == 1) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
613 else if(fIsHeavyIon == 2) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2500,0,2500);
614 else hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",1500,0,1500);
615 fESDList[iCut]->Add(hNV0Tracks[iCut]);
616
a280ac15 617
8a52eed5 618 hEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
619 fESDList[iCut]->Add(hEtaShift[iCut]);
620
a280ac15 621 hESDConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
622 fESDList[iCut]->Add(hESDConvGammaPt[iCut]);
2279d237 623
624 hESDConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",600,-1.5,1.5);
625 fESDList[iCut]->Add(hESDConvGammaEta[iCut]);
626
ae947965 627 hESDDalitzElectronPt[iCut] = new TH1F("ESD_DalitzElectron_Pt","ESD_DalitzElectron_Pt",1000,0,25);
a280ac15 628 fESDList[iCut]->Add(hESDDalitzElectronPt[iCut]);
629
ae947965 630 hESDDalitzPositronPt[iCut] = new TH1F("ESD_DalitzPositron_Pt","ESD_DalitzPositron_Pt",1000,0,25);
a280ac15 631 fESDList[iCut]->Add(hESDDalitzPositronPt[iCut]);
4803eb1f 632
633
634 hESDDalitzElectronPhi[iCut] = new TH1F("ESD_DalitzElectron_Phi","ESD_DalitzElectron_Phi",360,0,2*TMath::Pi());
635 fESDList[iCut]->Add(hESDDalitzElectronPhi[iCut]);
636
637 hESDDalitzPositronPhi[iCut] = new TH1F("ESD_DalitzPositron_Phi","ESD_DalitzPositron_Phi",360,0,2*TMath::Pi());
638 fESDList[iCut]->Add(hESDDalitzPositronPhi[iCut]);
639
fcc79cf5 640
4803eb1f 641
fcc79cf5 642 if ( fDoMesonQA ) {
d9d6352b 643
644 fQAFolder[iCut] = new TList();
645 fQAFolder[iCut]->SetName(Form("%s_%s_%s QA histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
646 fQAFolder[iCut]->SetOwner(kTRUE);
647
648
fcc79cf5 649
2d49ea4c 650 //const Int_t kDCABins=62;
651 //Double_t binsDCADummy[63]={-3.0,-2.7,-2.4,-2.1,-1.8,-1.5,-1.2,-0.9,-0.6,-0.3,-0.25,-0.2,-0.19,-0.18,-0.17,-0.16,-0.15,-0.14,-0.13,-0.12,-0.11,-0.10,-0.09,-0.08,-0.07,-0.06,-0.05,-0.04,-0.03,-0.02,-0.01,0.0,0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.19,0.2,0.25,0.3,0.6,0.9,1.2,1.5,1.8,2.1,2.4,2.7,3.0};
d9d6352b 652
653 const Int_t kPtBins=110;
654 Double_t binsPtDummy[kPtBins+1];
655 const Int_t kPBins = 109;
656 Double_t binsPDummy[kPBins+1];
657 binsPtDummy[0]=0.0;
658 binsPDummy[0]=0.05;
659
660 for(Int_t i=1;i<kPtBins+1;i++)
661 {
662 if(binsPtDummy[i-1]+0.05<1.01)
663 binsPtDummy[i]=binsPtDummy[i-1]+0.05;
664 else
665 binsPtDummy[i]=binsPtDummy[i-1]+0.1;
666
667 }
668 for(Int_t i=1; i<kPBins+1;i++){
669
670 if( binsPDummy[i-1]+0.05<1.01)
671 binsPDummy[i] = binsPDummy[i-1]+0.05;
672 else
673 binsPDummy[i] = binsPDummy[i-1]+0.1;
674
675 }
676
58326f11 677 hNGoodESDTracksVsNGoodGammas[iCut] = new TH2F("hNGoodESDTracksVsNGoodGammas","hNGoodESDTracksVsNGoodGammas",200,-0.5,199.5,100,-0.5,99.5);
678 fQAFolder[iCut]->Add(hNGoodESDTracksVsNGoodGammas[iCut]);
679
680 hNGoodESDTracksVsNGoodVGammas[iCut] = new TH2F("hNGoodESDTracksVsNVGoodVGammas","hNGoodESDTracksVsNGoodVGammas",200,-0.5,199.5,100,-0.5,99.5);
681 fQAFolder[iCut]->Add(hNGoodESDTracksVsNGoodVGammas[iCut]);
7b3733f6 682
258b4572 683 hESDConvGammaZR[iCut]= new TH2F("ESD_ConvGamma_ConversionPoint_ZR","ESD_ConvGamma_ConversionPoint_ZR",1200,-150,150,480,0,120);
d9d6352b 684 fQAFolder[iCut]->Add(hESDConvGammaZR[iCut]);
685
4803eb1f 686 hESDDalitzElectronAfterPt[iCut] = new TH1F("ESD_DalitzElectron_After_Pt","ESD_DalitzElectron_After_Pt",1000,0,25);
d9d6352b 687 fQAFolder[iCut]->Add(hESDDalitzElectronAfterPt[iCut]);
a280ac15 688
4803eb1f 689 hESDDalitzPositronAfterPt[iCut] = new TH1F("ESD_DalitzPositron_After_Pt","ESD_DalitzPositron_After_Pt",1000,0,25);
d9d6352b 690 fQAFolder[iCut]->Add(hESDDalitzPositronAfterPt[iCut]);
2279d237 691
692 hESDDalitzElectronAfterEta[iCut] = new TH1F("ESD_DalitzElectron_After_Eta","ESD_DalitzElectron_After_Eta",600,-1.5,1.5);
d9d6352b 693 fQAFolder[iCut]->Add(hESDDalitzElectronAfterEta[iCut]);
2279d237 694
695 hESDDalitzPositronAfterEta[iCut] = new TH1F("ESD_DalitzPositron_After_Eta","ESD_DalitzElectron_After_Eta",600,-1.5,1.5);
d9d6352b 696 fQAFolder[iCut]->Add(hESDDalitzPositronAfterEta[iCut]);
2279d237 697
fcc79cf5 698
4803eb1f 699 hESDDalitzElectronAfterPhi[iCut] = new TH1F("ESD_DalitzElectron_After_Phi","ESD_DalitzElectron_After_Phi",360,0,2*TMath::Pi());
d9d6352b 700 fQAFolder[iCut]->Add(hESDDalitzElectronAfterPhi[iCut]);
a280ac15 701
4803eb1f 702 hESDDalitzPositronAfterPhi[iCut] = new TH1F("ESD_DalitzPositron_After_Phi","ESD_DalitzPositron_After_Phi",360,0,2*TMath::Pi());
d9d6352b 703 fQAFolder[iCut]->Add(hESDDalitzPositronAfterPhi[iCut]);
704
f47b2bb5 705 hESDDalitzElectronAfterNClsITS[iCut] = new TH1F("ESD_DalitzElectron_After_NClsITS","ESD_DalitzElectron_After_NClsITS",7,0.,7.);
d9d6352b 706 fQAFolder[iCut]->Add(hESDDalitzElectronAfterNClsITS[iCut]);
707
f47b2bb5 708 hESDDalitzPositronAfterNClsITS[iCut] = new TH1F("ESD_DalitzPositron_After_NClsITS","ESD_DalitzPositron_After_NClsITS",7,0.,7.);
d9d6352b 709 fQAFolder[iCut]->Add(hESDDalitzPositronAfterNClsITS[iCut]);
710
4803eb1f 711
f47b2bb5 712 hESDDalitzElectronAfterNFindClsTPC[iCut] = new TH2F("ESD_DalitzElectron_After_NFindClsTPC","ESD_DalitzElectron_After_NFindClsTPC",60,0,1.5,kPtBins,binsPtDummy);
d9d6352b 713 fQAFolder[iCut]->Add(hESDDalitzElectronAfterNFindClsTPC[iCut]);
4803eb1f 714
f47b2bb5 715 hESDDalitzPositronAfterNFindClsTPC[iCut] = new TH2F("ESD_DalitzPositron_After_NFindClsTPC","ESD_DalitzPositron_After_NFindClsTPC",60,0,1.5,kPtBins,binsPtDummy);
d9d6352b 716 fQAFolder[iCut]->Add(hESDDalitzPositronAfterNFindClsTPC[iCut]);
717
718
719 hESDDalitzElectronAfterNClsTPC[iCut] = new TH2F("ESD_DalitzElectron_After_NClsTPC","ESD_DalitzElectron_After_NClsTPC",200,0,200,kPtBins,binsPtDummy);
720 fQAFolder[iCut]->Add(hESDDalitzElectronAfterNClsTPC[iCut]);
721
722 hESDDalitzPositronAfterNClsTPC[iCut] = new TH2F("ESD_DalitzPositron_After_NClsTPC","ESD_DalitzPositron_After_NClsTPC",200,0,200,kPtBins,binsPtDummy);
723 fQAFolder[iCut]->Add(hESDDalitzPositronAfterNClsTPC[iCut]);
f47b2bb5 724
725 hESDDalitzPositronAfterNCrossedRowsTPC[iCut] = new TH2F("ESD_DalitzPositron_After_NCrossedRowsTPC","ESD_DalitzPositron_After_NCrossedRowsTPC",165,-0.5,164.5,kPtBins,binsPtDummy);
726 fQAFolder[iCut]->Add(hESDDalitzPositronAfterNCrossedRowsTPC[iCut]);
d9d6352b 727
f47b2bb5 728 hESDDalitzElectronAfterNCrossedRowsTPC[iCut] = new TH2F("ESD_DalitzElectron_After_NCrossedRowsTPC","ESD_DalitzElectron_After_NCrossedRowsTPC",165,-0.5,164.5,kPtBins,binsPtDummy);
729 fQAFolder[iCut]->Add(hESDDalitzElectronAfterNCrossedRowsTPC[iCut]);
730
2d49ea4c 731 hESDDalitzPosEleAfterDCAxy[iCut] = new TH2F("ESD_DalitzPosEle_After_DCAxy","ESD_DalitzPosEle_After_DCAxy",124,-0.62,0.62,kPtBins,binsPtDummy);
d9d6352b 732 fQAFolder[iCut]->Add(hESDDalitzPosEleAfterDCAxy[iCut]);
4803eb1f 733
2d49ea4c 734 hESDDalitzPosEleAfterDCAz[iCut] = new TH2F("ESD_DalitzPosEle_After_DCAz","ESD_DalitzPosEle_After_DCAz",200,-1.0,1.0,kPtBins,binsPtDummy);
d9d6352b 735 fQAFolder[iCut]->Add(hESDDalitzPosEleAfterDCAz[iCut]);
4803eb1f 736
d9d6352b 737 hESDDalitzElectronAfterTPCdEdxVsP[iCut] = new TH2F("ESD_DalitzElectron_After_TPCdEdxVsP","ESD_DalitzElectron_After_TPCdEdxVsP_After_TPCdEdx",kPBins,binsPDummy,200,-10,10);
738 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxVsP[iCut]);
4803eb1f 739
d9d6352b 740 hESDDalitzPositronAfterTPCdEdxVsP[iCut] = new TH2F("ESD_DalitzPositron_After_TPCdEdxVsP","ESD_DalitzPositron_After_TPCdEdxVsP",kPBins,binsPDummy,200,-10,10);
741 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxVsP[iCut]);
4803eb1f 742
d9d6352b 743 hESDDalitzElectronAfterTPCdEdxSignalVsP[iCut] =new TH2F("ESD_DalitzElectron_After_TPCdEdxSignalVsP","ESD_DalitzElectron_After_TPCdEdxSignalVsP" ,kPBins,binsPDummy,200,0.0,200);
744 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxSignalVsP[iCut]);
745
746 hESDDalitzPositronAfterTPCdEdxSignalVsP[iCut] =new TH2F("ESD_DalitzPositron_After_TPCdEdxSignalVsP","ESD_DalitzPositron_After_TPCdEdxSignalVsP" ,kPBins,binsPDummy,200,0.0,200);
747 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxSignalVsP[iCut]);
748
749 hESDDalitzElectronAfterTPCdEdxVsEta[iCut] = new TH2F("ESD_DalitzElectron_After_TPCdEdxVsEta","ESD_DalitzElectron_After_TPCdEdxVsEta",140,-1.4,1.4,200,-10,10);
750 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxVsEta[iCut]);
751
752 hESDDalitzPositronAfterTPCdEdxVsEta[iCut] = new TH2F("ESD_DalitzPositron_After_TPCdEdxVsEta","ESD_DalitzPositron_After_TPCdEdxVsEta",140,-1.4,1.4,200,-10,10);
753 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxVsEta[iCut]);
754
755 hESDDalitzElectronAfterTPCdEdxVsPhi[iCut] = new TH2F("ESD_DalitzElectron_After_TPCdEdxVsPhi","ESD_DalitzElectron_After_TPCdEdxVsPhi",180,0,2*TMath::Pi(),200,-10,10);
756 fQAFolder[iCut]->Add(hESDDalitzElectronAfterTPCdEdxVsPhi[iCut]);
757
758 hESDDalitzPositronAfterTPCdEdxVsPhi[iCut] = new TH2F("ESD_DalitzPositron_After_TPCdEdxVsPhi","ESD_DalitzPositron_After_TPCdEdxVsPhi",180,0,2*TMath::Pi(),200,-10,10);
759 fQAFolder[iCut]->Add(hESDDalitzPositronAfterTPCdEdxVsPhi[iCut]);
760
fcc79cf5 761 hESDMotherPhi[iCut] = new TH1F("ESD_DalitzMother_Phi","ESD_DalitzMother_Phi",360,0,2*TMath::Pi());
d9d6352b 762 fQAFolder[iCut]->Add(hESDMotherPhi[iCut]);
fcc79cf5 763
a280ac15 764 hESDEposEnegPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_PsiPair_DPhi","ESD_EposEneg_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
d9d6352b 765 fQAFolder[iCut]->Add(hESDEposEnegPsiPairDPhi[iCut]);
a280ac15 766
e3d15e19 767 hESDEposEnegInvMassPt[iCut] = new TH2F("ESD_EposEneg_InvMassPt","ESD_EposEneg_InvMassPt",4999,0.001,5.,100,0.,10.);
258b4572 768 fQAFolder[iCut]->Add(hESDEposEnegInvMassPt[iCut]);
0a2b2b4b 769
e3d15e19 770 hESDEposEnegLikeSignBackInvMassPt[iCut] = new TH2F("ESD_EposEneg_LikeSignBack_InvMassPt","ESD_EposEneg_LikeSignBack_InvMassPt",4999,0.001,5.,100,0.,10.);
258b4572 771 fQAFolder[iCut]->Add(hESDEposEnegLikeSignBackInvMassPt[iCut]);
fcc79cf5 772
fcc79cf5 773
d9d6352b 774 TAxis *AxisAfter = hESDDalitzElectronAfterTPCdEdxVsP[iCut]->GetXaxis();
775 Int_t bins = AxisAfter->GetNbins();
776 Double_t from = AxisAfter->GetXmin();
777 Double_t to = AxisAfter->GetXmax();
778 Double_t *newBins = new Double_t[bins+1];
779 newBins[0] = from;
780 Double_t factor = TMath::Power(to/from, 1./bins);
781 for(Int_t i=1; i<=bins; ++i) newBins[i] = factor * newBins[i-1];
782
783 AxisAfter->Set(bins, newBins);
784 AxisAfter = hESDDalitzElectronAfterTPCdEdxSignalVsP[iCut]->GetXaxis();
785 AxisAfter->Set(bins, newBins);
786
787 AxisAfter = hESDDalitzPositronAfterTPCdEdxVsP[iCut]->GetXaxis();
788 AxisAfter->Set(bins, newBins);
fcc79cf5 789
d9d6352b 790 AxisAfter = hESDDalitzPositronAfterTPCdEdxSignalVsP[iCut]->GetXaxis();
791 AxisAfter->Set(bins,newBins);
e3d15e19 792
793
d9d6352b 794
795 delete [] newBins;
fcc79cf5 796
e3d15e19 797
798 TAxis *MassAxisAfter = hESDEposEnegInvMassPt[iCut]->GetXaxis();
799 bins = MassAxisAfter->GetNbins();
800
801 from = MassAxisAfter->GetXmin();
802 to = MassAxisAfter->GetXmax();
803 Double_t *MassnewBins = new Double_t[bins+1];
804 MassnewBins[0] = from;
805
806 // cout<<"from: "<<from<<"to: "<<to<<endl;
807 factor = TMath::Power(to/from, 1./bins);
808
809 for(Int_t i=1; i<=bins; ++i) MassnewBins[i] = factor * MassnewBins[i-1];
810
811
812 MassAxisAfter->Set(bins,MassnewBins);
813
814
815 MassAxisAfter = hESDEposEnegLikeSignBackInvMassPt[iCut]->GetXaxis();
816 MassAxisAfter->Set(bins,MassnewBins);
817
818
819 delete [] MassnewBins;
820
821
822
823
824 //hESDEposEnegInvMassPt[iCut] = new TH2F("ESD_EposEneg_InvMassPt","ESD_EposEneg_InvMassPt",5000,0.,5.,100,0.,10.);
825
826
827
828
d9d6352b 829 fCutFolder[iCut]->Add(fQAFolder[iCut]);
fcc79cf5 830
d9d6352b 831
fcc79cf5 832
d9d6352b 833 }
fcc79cf5 834
d9d6352b 835
836
fcc79cf5 837
a280ac15 838
8a52eed5 839 hESDMotherInvMassPt[iCut] = new TH2F("ESD_DalitzMother_InvMass_Pt","ESD_DalitzMother_InvMass_Pt",800,0,0.8,250,0,25);
a280ac15 840 fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
4803eb1f 841
fcc79cf5 842
843 if( fDoChicAnalysis) {
4803eb1f 844
a280ac15 845 hESDPi0MotherInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_InvMass_Pt","ESD_Pi0Mother_InvMass_Pt",4000,0,4,250,0,25);
846 fESDList[iCut]->Add(hESDPi0MotherInvMassPt[iCut]);
ccfa8c0d 847
a280ac15 848 hESDPi0MotherDiffInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_DiffInvMass_Pt","ESD_Pi0Mother_DiffInvMass_Pt",2000,0,2,250,0,25);
849 fESDList[iCut]->Add(hESDPi0MotherDiffInvMassPt[iCut]);
2bb2434e 850
ae947965 851 hESDPi0MotherDiffLimInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_DiffLimInvMass_Pt","ESD_Pi0Mother_DiffLimInvMass_Pt",2000,0,2,250,0,25);
852 fESDList[iCut]->Add(hESDPi0MotherDiffLimInvMassPt[iCut]);
fcc79cf5 853
854 }
855
2bb2434e 856
8a52eed5 857 hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_DalitzBackground_InvMass_Pt","ESD_DalitzBackground_InvMass_Pt",800,0,0.8,250,0,25);
a280ac15 858 fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
2bb2434e 859
d9d6352b 860
4803eb1f 861
862 fCutFolder[iCut]->Add(fESDList[iCut]);
d9d6352b 863
864
2bb2434e 865
a280ac15 866 }
2bb2434e 867
a280ac15 868
869 InitBack(); // Init Background Handler
870
871
ae947965 872 //if(MCEvent()){
873 if( fIsMC ){
a280ac15 874 // MC Histogramms
875 fMCList = new TList*[fnCuts];
876 // True Histogramms
877 fTrueList = new TList*[fnCuts];
878 hESDTrueConvGammaPt = new TH1F*[fnCuts];
ccfa8c0d 879 hESDTruePositronPt = new TH1F*[fnCuts];
880 hESDTrueElectronPt = new TH1F*[fnCuts];
ae947965 881 hESDTrueSecConvGammaPt = new TH1F*[fnCuts];
882 hESDTrueSecPositronPt = new TH1F*[fnCuts];
883 hESDTrueSecElectronPt = new TH1F*[fnCuts];
ccfa8c0d 884 hESDTruePi0DalitzConvGammaPt = new TH1F*[fnCuts];
885 hESDTruePi0DalitzPositronPt = new TH1F*[fnCuts];
886 hESDTruePi0DalitzElectronPt = new TH1F*[fnCuts];
ae947965 887 hESDTruePi0DalitzSecConvGammaPt = new TH1F*[fnCuts];
888 hESDTruePi0DalitzSecPositronPt = new TH1F*[fnCuts];
889 hESDTruePi0DalitzSecElectronPt = new TH1F*[fnCuts];
a280ac15 890 //if(fDoMesonAnalysis){
ae947965 891 hMCAllGammaPt = new TH1F*[fnCuts];
892 hMCConvGammaPt = new TH1F*[fnCuts];
893 hMCConvGammaRSPt = new TH1F*[fnCuts];
ccfa8c0d 894 hMCAllPositronsPt = new TH1F*[fnCuts];
895 hMCAllElectronsPt = new TH1F*[fnCuts];
2d49ea4c 896
897 if( fDoMesonQA ) {
898
899 hMCConvGammaEta = new TH1F*[fnCuts];
900 hMCAllPositronsEta = new TH1F*[fnCuts];
901 hMCAllElectronsEta = new TH1F*[fnCuts];
902
903 }
ccfa8c0d 904 hMCPi0DalitzGammaPt = new TH1F*[fnCuts];
905 hMCPi0DalitzElectronPt = new TH1F*[fnCuts];
906 hMCPi0DalitzPositronPt = new TH1F*[fnCuts];
907
a280ac15 908 hMCPi0Pt = new TH1F*[fnCuts];
909 hMCPi0GGPt = new TH1F*[fnCuts];
910 hMCEtaPt = new TH1F*[fnCuts];
911 hMCEtaGGPt = new TH1F*[fnCuts];
912 hMCPi0InAccPt = new TH1F*[fnCuts];
913 hMCEtaInAccPt = new TH1F*[fnCuts];
0f8c33c1 914 hMCChiCPt = new TH1F*[fnCuts];
915 hMCChiCInAccPt = new TH1F*[fnCuts];
fcc79cf5 916
917
918 if ( fDoMesonQA ) {
f4d5bd23 919
920 hMCPi0EposEnegInvMassPt = new TH2F*[fnCuts];
921 hMCEtaEposEnegInvMassPt = new TH2F*[fnCuts];
922
fcc79cf5 923 hESDEposEnegTruePi0DalitzInvMassPt = new TH2F*[fnCuts];
2d49ea4c 924 hESDEposEnegTruePrimPi0DalitzInvMass = new TH1F*[fnCuts];
a072aeaa 925 hESDEposEnegTruePi0DalitzPsiPairDPhi = new TH2F*[fnCuts];
fcc79cf5 926 hESDEposEnegTrueEtaDalitzInvMassPt = new TH2F*[fnCuts];
2d49ea4c 927 hESDEposEnegTruePrimEtaDalitzInvMass = new TH1F*[fnCuts];
a072aeaa 928 hESDEposEnegTrueEtaDalitzPsiPairDPhi = new TH2F*[fnCuts];
fcc79cf5 929 hESDEposEnegTruePhotonInvMassPt = new TH2F*[fnCuts];
f4d5bd23 930 hESDEposEnegTrueInvMassPt = new TH2F*[fnCuts];
a072aeaa 931 hESDEposEnegTruePhotonPsiPairDPhi = new TH2F*[fnCuts];
fcc79cf5 932 hESDEposEnegTrueJPsiInvMassPt = new TH2F*[fnCuts];
933 }
ccfa8c0d 934
ccfa8c0d 935
fcc79cf5 936 if( fDoChicAnalysis ){
0f8c33c1 937 hESDTrueMotherChiCInvMassPt = new TH2F*[fnCuts];
ae947965 938 hESDTrueMotherChiCDiffInvMassPt = new TH2F*[fnCuts];
fcc79cf5 939 }
940
941
a280ac15 942 hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
4803eb1f 943 hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
a280ac15 944 hESDTrueMotherPi0GGInvMassPt = new TH2F*[fnCuts];
86eaf9ae 945 hESDTruePrimaryMotherPi0GGInvMassPt = new TH2F*[fnCuts];
946 hESDTrueSecondaryMotherPi0GGInvMassPt = new TH2F*[fnCuts];
a280ac15 947 hESDTruePrimaryPi0DalitzESDPtMCPt = new TH2F*[fnCuts];
948 hESDTruePrimaryMotherInvMassMCPt = new TH2F*[fnCuts];
86eaf9ae 949 hESDTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
950 hESDTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
a280ac15 951 hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
952 hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
953 hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
954 hESDTrueBckContInvMassPt = new TH2F*[fnCuts];
955 hESDTrueMotherGGInvMassPt = new TH2F*[fnCuts];
956 //}
957
958 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
959 TString cutstringElectron =((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
960 TString cutstringMeson= ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
961 TString cutstringGamma = ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
962
963 fMCList[iCut] = new TList();
964 fMCList[iCut]->SetName(Form("%s_%s_%s MC histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
965 fMCList[iCut]->SetOwner(kTRUE);
966 fCutFolder[iCut]->Add(fMCList[iCut]);
967
ccfa8c0d 968
ae947965 969 hMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
970 fMCList[iCut]->Add(hMCAllGammaPt[iCut]);
971
972 hMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
973 fMCList[iCut]->Add(hMCConvGammaPt[iCut]);
974
2d49ea4c 975
ae947965 976 hMCConvGammaRSPt[iCut] = new TH1F("MC_ConvGamma_RS_Pt","MC_ConvGamma_RS_Pt",250,0,25);
977 fMCList[iCut]->Add(hMCConvGammaRSPt[iCut]);
978
0f8c33c1 979
ae947965 980 hMCAllPositronsPt[iCut] = new TH1F("MC_AllPositrons_Pt","MC_AllPositrons_Pt",1000,0,25);
981 fMCList[iCut]->Add(hMCAllPositronsPt[iCut]);
0f8c33c1 982
ae947965 983 hMCAllElectronsPt[iCut] = new TH1F("MC_AllElectrons_Pt","MC_AllElectrons_Pt",1000,0,25);
0f8c33c1 984 fMCList[iCut]->Add(hMCAllElectronsPt[iCut]);
985
986 hMCPi0DalitzGammaPt[iCut] = new TH1F("MC_Pi0DalitzGamma_Pt","MC_Pi0DalitzGamma_Pt",250,0,25);
86eaf9ae 987 hMCPi0DalitzGammaPt[iCut]->Sumw2();
0f8c33c1 988 fMCList[iCut]->Add(hMCPi0DalitzGammaPt[iCut]);
989
2d49ea4c 990 if ( fDoMesonQA ){
991
992 hMCConvGammaEta[iCut] = new TH1F("MC_ConvGamma_Eta","MC_ConvGamma_Eta",600,-1.5,1.5);
993 fMCList[iCut]->Add(hMCConvGammaEta[iCut]);
994
995 hMCAllPositronsEta[iCut] = new TH1F("MC_AllPositrons_Eta","MC_AllPositrons_Eta",600,-1.5,1.5);
996 fMCList[iCut]->Add(hMCAllPositronsEta[iCut]);
997
998 hMCAllElectronsEta[iCut] = new TH1F("MC_AllElectrons_Eta","MC_AllElectrons_Eta",600,-1.5,1.5);
999 fMCList[iCut]->Add(hMCAllElectronsEta[iCut]);
1000
1001
1002 }
1003
1004
ae947965 1005 hMCPi0DalitzPositronPt[iCut] = new TH1F("MC_Pi0DalitzPositron_Pt","MC_Pi0DalitzPositron_Pt",1000,0,25);
86eaf9ae 1006 hMCPi0DalitzPositronPt[iCut]->Sumw2();
0f8c33c1 1007 fMCList[iCut]->Add(hMCPi0DalitzPositronPt[iCut]);
1008
ae947965 1009 hMCPi0DalitzElectronPt[iCut] = new TH1F("MC_Pi0DalitzElectron_Pt","MC_Pi0DalitzElectron_Pt",1000,0,25);
86eaf9ae 1010 hMCPi0DalitzElectronPt[iCut]->Sumw2();
0f8c33c1 1011 fMCList[iCut]->Add(hMCPi0DalitzElectronPt[iCut]);
1012
1013
1014 hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
86eaf9ae 1015 hMCPi0Pt[iCut]->Sumw2();
0f8c33c1 1016 fMCList[iCut]->Add(hMCPi0Pt[iCut]);
1017
1018 hMCPi0GGPt[iCut] = new TH1F("MC_Pi0_GG_Pt","MC_Pi0_GG_Pt",250,0,25);
86eaf9ae 1019 hMCPi0GGPt[iCut]->Sumw2();
0f8c33c1 1020 fMCList[iCut]->Add(hMCPi0GGPt[iCut]);
1021
1022 hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
86eaf9ae 1023 hMCEtaPt[iCut]->Sumw2();
0f8c33c1 1024 fMCList[iCut]->Add(hMCEtaPt[iCut]);
1025
1026 hMCEtaGGPt[iCut] = new TH1F("MC_Eta_GG_Pt","MC_Eta_GG_Pt",250,0,25);
86eaf9ae 1027 hMCEtaGGPt[iCut]->Sumw2();
0f8c33c1 1028 fMCList[iCut]->Add(hMCEtaGGPt[iCut]);
1029
1030 hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0DalitzInAcc_Pt","MC_Pi0DalitzInAcc_Pt",250,0,25);
86eaf9ae 1031 hMCPi0InAccPt[iCut]->Sumw2();
0f8c33c1 1032 fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
1033
1034 hMCEtaInAccPt[iCut] = new TH1F("MC_EtaDalitzInAcc_Pt","MC_EtaDalitzInAcc_Pt",250,0,25);
86eaf9ae 1035 hMCEtaInAccPt[iCut]->Sumw2();
0f8c33c1 1036 fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
f4d5bd23 1037
1038
0f8c33c1 1039
1040 hMCChiCPt[iCut] = new TH1F("MC_ChiC_Pt","MC_ChiC_Pt",250,0,25);
1041 fMCList[iCut]->Add(hMCChiCPt[iCut]);
1042
1043 hMCChiCInAccPt[iCut] = new TH1F("MC_ChiCInAcc_Pt","MC_ChiCInAcc_Pt",250,0,25);
1044 fMCList[iCut]->Add(hMCChiCInAccPt[iCut]);
f4d5bd23 1045
1046 if ( fDoMesonQA ) {
1047
e3d15e19 1048 hMCPi0EposEnegInvMassPt[iCut] = new TH2F("MC_Pi0EposEneg_InvMassPt","MC_Pi0EposEneg_InvMassPt",499,0.001,0.5,100,0.,10.);
f4d5bd23 1049 fMCList[iCut]->Add(hMCPi0EposEnegInvMassPt[iCut]);
1050
1051 hMCEtaEposEnegInvMassPt[iCut] = new TH2F("MC_EtaEposEneg_InvMassPt","MC_EtaEposEneg_InvMassPt",800,0.,0.8,100,0.,10.);
1052 fMCList[iCut]->Add(hMCEtaEposEnegInvMassPt[iCut]);
1053
e3d15e19 1054
1055
1056 TAxis *MassMCAxisAfter = hMCPi0EposEnegInvMassPt[iCut]->GetXaxis();
1057 Int_t bins = MassMCAxisAfter->GetNbins();
1058 Double_t from = MassMCAxisAfter->GetXmin();
1059 Double_t to = MassMCAxisAfter->GetXmax();
1060 Double_t *MassMCnewBins = new Double_t[bins+1];
1061 MassMCnewBins[0] = from;
1062 Double_t factor = TMath::Power(to/from, 1./bins);
1063
1064 for(Int_t i=1; i<=bins; ++i) MassMCnewBins[i] = factor * MassMCnewBins[i-1];
1065 MassMCAxisAfter->Set(bins,MassMCnewBins);
1066 //MassMCAxisAfter = hMCEtaEposEnegInvMassPt[iCut]->GetXaxis();
1067 //MassMCAxisAfter->Set(bins,MassMCnewBins);
1068 delete [] MassMCnewBins;
1069
1070
1071
1072
1073
1074
f4d5bd23 1075 }
1076
1077
a280ac15 1078
1079 fTrueList[iCut] = new TList();
1080 fTrueList[iCut]->SetName(Form("%s_%s_%s True histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
1081 fTrueList[iCut]->SetOwner(kTRUE);
1082 fCutFolder[iCut]->Add(fTrueList[iCut]);
1083
fcc79cf5 1084 if ( fDoMesonQA ) {
a072aeaa 1085
1086
e3d15e19 1087 hESDEposEnegTruePi0DalitzInvMassPt[iCut] = new TH2F("ESD_EposEneg_TruePi0Dalitz_InvMassPt","ESD_EposEneg_TruePi0Dalitz_InvMassPt",499,0.001,0.5,100,0.,10.);
ae947965 1088 fTrueList[iCut]->Add(hESDEposEnegTruePi0DalitzInvMassPt[iCut]);
2d49ea4c 1089
1090 hESDEposEnegTruePrimPi0DalitzInvMass[iCut] = new TH1F("ESD_EposEneg_TruePrimPi0Dalitz_InvMass","ESD_EposEneg_TruePrimPi0Dalitz_InvMass",500,0.,0.5);
1091 fTrueList[iCut]->Add(hESDEposEnegTruePrimPi0DalitzInvMass[iCut]);
a072aeaa 1092
1093 hESDEposEnegTruePi0DalitzPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TruePi0Dalitz_PsiPair_DPhi","ESD_EposEneg_TruePi0Dalitz_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
1094 fTrueList[iCut]->Add(hESDEposEnegTruePi0DalitzPsiPairDPhi[iCut]);
1095
ccfa8c0d 1096
2d49ea4c 1097 hESDEposEnegTrueEtaDalitzInvMassPt[iCut] = new TH2F("ESD_EposEneg_TrueEtaDalitz_InvMassPt","ESD_EposEneg_TrueEtaDalitz_InvMassPt",700,0.,0.7,100,0.,10.);
ae947965 1098 fTrueList[iCut]->Add(hESDEposEnegTrueEtaDalitzInvMassPt[iCut]);
2d49ea4c 1099
1100 hESDEposEnegTruePrimEtaDalitzInvMass[iCut] = new TH1F("ESD_EposEneg_TruePrimEtaDalitz_InvMass","ESD_EposEneg_TruePrimEtaDalitz_InvMass",700,0.,0.7);
1101 fTrueList[iCut]->Add(hESDEposEnegTruePrimEtaDalitzInvMass[iCut]);
a072aeaa 1102
1103 hESDEposEnegTrueEtaDalitzPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TrueEtaDalitz_PsiPair_DPhi","ESD_EposEneg_TrueEtaDalitz_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
1104 fTrueList[iCut]->Add(hESDEposEnegTrueEtaDalitzPsiPairDPhi[iCut]);
ccfa8c0d 1105
f4d5bd23 1106 hESDEposEnegTruePhotonInvMassPt[iCut] = new TH2F("ESD_EposEneg_TruePhoton_InvMassPt","ESD_EposEneg_TruePhoton_InvMassPt",500,0.,0.5,100,0.,10.);
ae947965 1107 fTrueList[iCut]->Add(hESDEposEnegTruePhotonInvMassPt[iCut]);
f4d5bd23 1108
1109 hESDEposEnegTrueInvMassPt[iCut] = new TH2F("ESD_EposEneg_True_InvMassPt","ESD_EposEneg_True_InvMassPt",5000,0.,5.,100,0.,10.);
1110 fTrueList[iCut]->Add(hESDEposEnegTrueInvMassPt[iCut]);
a072aeaa 1111
1112 hESDEposEnegTruePhotonPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TruePhoton_PsiPair_DPhi","ESD_EposEneg_TruePhoton_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
1113 fTrueList[iCut]->Add(hESDEposEnegTruePhotonPsiPairDPhi[iCut]);
1114
ae947965 1115 hESDEposEnegTrueJPsiInvMassPt[iCut] = new TH2F("ESD_EposEneg_TrueJPsi_InvMassPt","ESD_EposEneg_TrueJPsi_InvMassPt",5000,0.,5.,100,0.,10.);
1116 fTrueList[iCut]->Add(hESDEposEnegTrueJPsiInvMassPt[iCut]);
e3d15e19 1117
1118
1119
1120 TAxis *MassTrueAxisAfter = hESDEposEnegTruePi0DalitzInvMassPt[iCut]->GetXaxis();
1121 Int_t bins = MassTrueAxisAfter->GetNbins();
1122 Double_t from = MassTrueAxisAfter->GetXmin();
1123 Double_t to = MassTrueAxisAfter->GetXmax();
1124 Double_t *MassMCnewBins = new Double_t[bins+1];
1125
1126 MassMCnewBins[0] = from;
1127 Double_t factor = TMath::Power(to/from, 1./bins);
1128
1129 for(Int_t i=1; i<=bins; ++i) MassMCnewBins[i] = factor * MassMCnewBins[i-1];
1130 MassTrueAxisAfter->Set(bins,MassMCnewBins);
1131 //MassTrueAxisAfter = hMCEtaEposEnegInvMassPt[iCut]->GetXaxis();
1132 //MassTrueAxisAfter->Set(bins,MassMCnewBins);
1133
1134 delete [] MassMCnewBins;
a072aeaa 1135
1136
1137
fcc79cf5 1138 }
0f8c33c1 1139
ccfa8c0d 1140
ae947965 1141 hESDTruePositronPt[iCut] = new TH1F("ESD_TruePositron_Pt","ESD_TruePositron_Pt",1000,0,25);
ccfa8c0d 1142 fTrueList[iCut]->Add(hESDTruePositronPt[iCut]);
1143
ae947965 1144 hESDTrueElectronPt[iCut] = new TH1F("ESD_TrueElectron_Pt","ESD_TrueElectron_Pt",1000,0,25);
ccfa8c0d 1145 fTrueList[iCut]->Add(hESDTrueElectronPt[iCut]);
ae947965 1146
1147 hESDTrueSecPositronPt[iCut] = new TH1F("ESD_TrueSecPositron_Pt","ESD_TrueSecPositron_Pt",1000,0,25);
1148 fTrueList[iCut]->Add(hESDTrueSecPositronPt[iCut]);
1149
1150 hESDTrueSecElectronPt[iCut] = new TH1F("ESD_TrueSecElectron_Pt","ESD_TrueSecElectron_Pt",1000,0,25);
1151 fTrueList[iCut]->Add(hESDTrueSecElectronPt[iCut]);
ccfa8c0d 1152
a280ac15 1153 hESDTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
1154 fTrueList[iCut]->Add(hESDTrueConvGammaPt[iCut]);
ae947965 1155
1156 hESDTrueSecConvGammaPt[iCut] = new TH1F("ESD_TrueSecConvGamma_Pt","ESD_TrueSecConvGamma_Pt",250,0,25);
1157 fTrueList[iCut]->Add(hESDTrueSecConvGammaPt[iCut]);
a280ac15 1158
ccfa8c0d 1159 hESDTruePi0DalitzConvGammaPt[iCut] = new TH1F("ESD_TruePi0DalitzConvGamma_Pt","ESD_TruePi0DalitzConvGamma_Pt",250,0,25);
1160 fTrueList[iCut]->Add(hESDTruePi0DalitzConvGammaPt[iCut]);
1161
ae947965 1162 hESDTruePi0DalitzElectronPt[iCut] = new TH1F("ESD_TruePi0DalitzElectron_Pt","ESD_TruePi0DalitzElectron_Pt",1000,0,25);
ccfa8c0d 1163 fTrueList[iCut]->Add(hESDTruePi0DalitzElectronPt[iCut]);
1164
ae947965 1165 hESDTruePi0DalitzPositronPt[iCut] = new TH1F("ESD_TruePi0DalitzPositron_Pt","ESD_TruePi0DalitzPositron_Pt",1000,0,25);
ccfa8c0d 1166 fTrueList[iCut]->Add(hESDTruePi0DalitzPositronPt[iCut]);
ae947965 1167
1168 hESDTruePi0DalitzSecConvGammaPt[iCut] = new TH1F("ESD_TruePi0DalitzSecConvGamma_Pt","ESD_TruePi0DalitzSecConvGamma_Pt",250,0,25);
1169 fTrueList[iCut]->Add(hESDTruePi0DalitzSecConvGammaPt[iCut]);
1170
1171 hESDTruePi0DalitzSecElectronPt[iCut] = new TH1F("ESD_TruePi0DalitzSecElectron_Pt","ESD_TruePi0DalitzSecElectron_Pt",1000,0,25);
1172 fTrueList[iCut]->Add(hESDTruePi0DalitzSecElectronPt[iCut]);
ccfa8c0d 1173
ae947965 1174 hESDTruePi0DalitzSecPositronPt[iCut] = new TH1F("ESD_TruePi0DalitzSecPositron_Pt","ESD_TruePi0DalitzSecPositron_Pt",1000,0,25);
1175 fTrueList[iCut]->Add(hESDTruePi0DalitzSecPositronPt[iCut]);
ccfa8c0d 1176
fcc79cf5 1177 if( fDoChicAnalysis) {
1178
1179 hESDTrueMotherChiCInvMassPt[iCut] = new TH2F("ESD_TrueMotherChiC_InvMass_Pt","ESD_TrueMotherChiC_InvMass_Pt",4000,0,4,250,0,25);
0f8c33c1 1180 fTrueList[iCut]->Add(hESDTrueMotherChiCInvMassPt[iCut]);
ccfa8c0d 1181
fcc79cf5 1182 hESDTrueMotherChiCDiffInvMassPt[iCut] = new TH2F("ESD_TrueMotherChiCDiff_InvMass_Pt","ESD_TrueMotherChiCDiff_InvMass_Pt",2000,0,2,250,0,25);
ae947965 1183 fTrueList[iCut]->Add(hESDTrueMotherChiCDiffInvMassPt[iCut]);
fcc79cf5 1184
1185 }
ccfa8c0d 1186
8a52eed5 1187 hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
86eaf9ae 1188 hESDTrueMotherInvMassPt[iCut]->Sumw2();
a280ac15 1189 fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
4803eb1f 1190
8a52eed5 1191 hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueMother_Dalitz_InvMass_Pt","ESD_TrueMother_Dalitz_InvMass_Pt",800,0,0.8,250,0,25);
86eaf9ae 1192 hESDTrueMotherDalitzInvMassPt[iCut]->Sumw2();
4803eb1f 1193 fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);
1194
1195
1196
1197
a280ac15 1198
8a52eed5 1199 hESDTrueMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TrueMotherPi0GG_InvMass_Pt","ESD_TrueMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
86eaf9ae 1200 hESDTrueMotherPi0GGInvMassPt[iCut]->Sumw2();
a280ac15 1201 fTrueList[iCut]->Add(hESDTrueMotherPi0GGInvMassPt[iCut]);
86eaf9ae 1202
1203 hESDTruePrimaryMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMotherPi0GG_InvMass_Pt","ESD_TruePrimaryMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
1204 hESDTruePrimaryMotherPi0GGInvMassPt[iCut]->Sumw2();
1205 fTrueList[iCut]->Add(hESDTruePrimaryMotherPi0GGInvMassPt[iCut]);
1206
1207 hESDTrueSecondaryMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryMotherPi0GG_InvMass_Pt","ESD_TrueSecondaryMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
1208 hESDTrueSecondaryMotherPi0GGInvMassPt[iCut]->Sumw2();
1209 fTrueList[iCut]->Add(hESDTrueSecondaryMotherPi0GGInvMassPt[iCut]);
1210
a280ac15 1211 hESDTruePrimaryPi0DalitzESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryPi0Dalitz_ESDPt_MCPt","ESD_TruePrimaryPi0Dalitz_ESDPt_MCPt",250,0,25,250,0,25);
86eaf9ae 1212 hESDTruePrimaryPi0DalitzESDPtMCPt[iCut]->Sumw2();
a280ac15 1213 fTrueList[iCut]->Add(hESDTruePrimaryPi0DalitzESDPtMCPt[iCut]);
8a52eed5 1214 hESDTruePrimaryMotherInvMassMCPt[iCut] = new TH2F("ESD_TruePrimaryMother_InvMass_MCPt","ESD_TrueDalitzPrimaryMother_InvMass_MCPt",800,0,0.8,250,0,25);
86eaf9ae 1215 hESDTruePrimaryMotherInvMassMCPt[iCut]->Sumw2();
a280ac15 1216 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassMCPt[iCut]);
86eaf9ae 1217 hESDTruePrimaryMotherInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMother_InvMass_Pt","ESD_TruePrimaryMother_InvMass_Pt",800,0,0.8,250,0,25);
1218 hESDTruePrimaryMotherInvMassPt[iCut]->Sumw2();
1219 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassPt[iCut]);
1220 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMotherW0Weighting_InvMass_Pt","ESD_TruePrimaryMotherW0Weighting_InvMass_Pt",800,0,0.8,250,0,25);
1221 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
1222 fTrueList[iCut]->Add(hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]);
1223
8a52eed5 1224 hESDTrueSecondaryMotherInvMassPt[iCut] = new TH2F("ESD_TrueDalitzSecondaryMother_InvMass_Pt","ESD_TrueDalitzSecondaryMother_InvMass_Pt",800,0,0.8,250,0,25);
86eaf9ae 1225 hESDTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
a280ac15 1226 fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
1227 // hESDTrueSecondaryMotherFromK0sInvMassPt[iCut] = new TH2F("ESD_TrueDalitzSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueDalitzSecondaryMotherFromK0s_InvMass_Pt",1000,0,1,250,0,25);
1228 // fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
8a52eed5 1229 hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueDalitzBckGG_InvMass_Pt","ESD_TrueDalitzBckGG_InvMass_Pt",800,0,0.8,250,0,25);
a280ac15 1230 fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
8a52eed5 1231 hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueDalitzBckCont_InvMass_Pt","ESD_TrueDalitzBckCont_InvMass_Pt",800,0,0.8,250,0,25);
a280ac15 1232 fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
1233 // hESDTrueMotherGGInvMassPt[iCut] = new TH2F("ESD_TrueGammaGamma_InvMass_Pt","ESD_TrueGammaGamma_InvMass_Pt",1000,0,1,250,0,25);
1234 // fTrueList[iCut]->Add(hESDTrueMotherGGInvMassPt[iCut]);
1235
1236 }
1237 }
03adb3ac 1238
1239 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
1240 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
1241
1242 if(fV0Reader)
1243 if((AliConversionCuts*)fV0Reader->GetConversionCuts())
1244 if(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
1245 fOutputContainer->Add(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
1246
1247
1248
1249 fElecSelector=(AliDalitzElectronSelector*)AliAnalysisManager::GetAnalysisManager()->GetTask("ElectronSelector");
1250 if(!fElecSelector){printf("Error: No ElectronSelector");return;} // GetV0Reader
1251
1252 if( fElecSelector ){
1253
1254 if ( ((AliDalitzElectronCuts*)fElecSelector->GetDalitzElectronCuts())->GetCutHistograms() ){
1255 fOutputContainer->Add( ((AliDalitzElectronCuts*)fElecSelector->GetDalitzElectronCuts())->GetCutHistograms() );
1256 }
1257 }
1258
1259 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
1260
1261 if( fCutElectronArray ){
1262 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutHistograms() ) {
1263 fCutFolder[iCut]->Add( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutHistograms() );
1264 }
1265 }
1266
1267 if( fCutMesonArray ) {
1268 if( ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutHistograms() ) {
1269 fCutFolder[iCut]->Add( ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutHistograms());
1270 }
1271 }
1272
1273 if( fCutGammaArray ) {
1274 if( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutHistograms() ) {
1275 fCutFolder[iCut]->Add( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutHistograms() );
1276 }
1277 }
1278 }
a280ac15 1279
1280 PostData(1, fOutputContainer);
2bb2434e 1281
1282}
1283
1284//______________________________________________________________________
1285void AliAnalysisTaskGammaConvDalitzV1::UserExec(Option_t *)
1286{
a280ac15 1287
1288 //
1289 // Execute analysis for current event
1290 //
1291
2bb2434e 1292 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
1293 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
1294
a280ac15 1295
2bb2434e 1296 Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
1297
a280ac15 1298 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
ae947965 1299 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1300 hNEvents[iCut]->Fill(eventQuality);
1301 }
2bb2434e 1302 return;
1303 }
1304
a280ac15 1305
2bb2434e 1306 fElecSelector=(AliDalitzElectronSelector*)AliAnalysisManager::GetAnalysisManager()->GetTask("ElectronSelector");
1307 if(!fElecSelector){printf("Error: No ElectronSelector");return;} // GetV0Reader
1308
1309
ae947965 1310 if(fIsMC) fMCEvent = MCEvent();
a280ac15 1311 fESDEvent = (AliESDEvent*)InputEvent();
1312 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
2bb2434e 1313 fSelectorElectronIndex = fElecSelector->GetReconstructedElectronsIndex(); // Electrons from default Cut
1314 fSelectorPositronIndex = fElecSelector->GetReconstructedPositronsIndex(); // Positrons from default Cut
2bb2434e 1315
58326f11 1316 CountESDTracks(); // Estimate Event Multiplicity
fcc79cf5 1317 fNumberOfESDTracks = fV0Reader->GetNumberOfPrimaryTracks();
a280ac15 1318 //AddTaskContainers(); //Add conatiner
2bb2434e 1319
a280ac15 1320 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
2bb2434e 1321 fiCut = iCut;
1322
a280ac15 1323 Int_t eventNotAccepted =
1324 ((AliConversionCuts*)fCutGammaArray->At(iCut))
1325 ->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
ae947965 1326
a280ac15 1327 if(eventNotAccepted){
1328 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
1329 hNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
2bb2434e 1330 continue;
a280ac15 1331 }
2bb2434e 1332
a280ac15 1333 if(eventQuality != 0){// Event Not Accepted
1334 // cout << "event rejected due to: " <<eventQuality << endl;
1335 hNEvents[iCut]->Fill(eventQuality);
1336 continue;
2bb2434e 1337 }
a280ac15 1338
2bb2434e 1339 hNEvents[iCut]->Fill(eventQuality);
1340
1341 hNGoodESDTracks[iCut]->Fill(fNumberOfESDTracks);
7b3733f6 1342
1343 if(((AliConversionCuts*)fCutGammaArray->At(iCut))->IsHeavyIon() == 2) hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A());
1344 else hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
1345
2bb2434e 1346
1347 if(fMCEvent){ // Process MC Particle
ae947965 1348
1349
1350
1351 fMCStack = fMCEvent->Stack();
1352
1353 if(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetSignalRejection() != 0){
1354 ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetSignalRejection(),
1355 ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetAcceptedHeader(),
1356 fMCEvent);
1357 }
1358
2bb2434e 1359 ProcessMCParticles();
1360 }
1361
1362 ProcessPhotonCandidates(); // Process this cuts gammas
1363 ProcessElectronCandidates(); // Process this cuts gammas
ae947965 1364
1365 if(((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->UseMCPSmearing() && fMCEvent){
1366
1367 fUnsmearedPx = new Double_t[fGoodGammas->GetEntries()]; // Store unsmeared Momenta
1368 fUnsmearedPy = new Double_t[fGoodGammas->GetEntries()];
1369 fUnsmearedPz = new Double_t[fGoodGammas->GetEntries()];
1370 fUnsmearedE = new Double_t[fGoodGammas->GetEntries()];
1371
1372 for(Int_t gamma=0;gamma<fGoodGammas->GetEntries();gamma++){ // Smear the AODPhotons in MC
1373
1374 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->Px();
1375 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->Py();
1376 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->Pz();
1377 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->E();
1378 ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGoodGammas->At(gamma)));
1379
1380 }
1381 }
1382
1383
2bb2434e 1384 CalculatePi0DalitzCandidates();
1385 CalculateBackground();
1386 UpdateEventByEventData();
ae947965 1387
58326f11 1388 if ( fDoMesonQA ) {
1389
1390 hNGoodESDTracksVsNGoodGammas[iCut]->Fill(fNumberOfESDTrackskBoth,fGoodGammas->GetEntries());
1391 hNGoodESDTracksVsNGoodVGammas[iCut]->Fill(fNumberOfESDTrackskBoth,fGoodVirtualGammas->GetEntries());
1392
1393
1394 }
1395
ae947965 1396
1397 if(((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->UseMCPSmearing() && fMCEvent){
1398
1399 for(Int_t gamma=0;gamma<fGoodGammas->GetEntries();gamma++){ // Smear the AODPhotons in MC
1400 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
1401 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetPy(fUnsmearedPy[gamma]);
1402 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetPz(fUnsmearedPz[gamma]);
1403 ((AliAODConversionPhoton*)fGoodGammas->At(gamma))->SetE(fUnsmearedE[gamma]);
1404 }
1405 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
1406 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
1407 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
1408 delete[] fUnsmearedE; fUnsmearedE = 0x0;
1409
1410 }
a280ac15 1411
1412
2bb2434e 1413 fGoodGammas->Clear(); // delete this cuts good gammas
1414 fGoodVirtualGammas->Clear(); // delete this cuts good gammas
1415 }
1416
a280ac15 1417 fSelectorElectronIndex.clear();
1418 fSelectorPositronIndex.clear();
2bb2434e 1419
a280ac15 1420 PostData( 1, fOutputContainer );
2bb2434e 1421}
1422
ae947965 1423Bool_t AliAnalysisTaskGammaConvDalitzV1::Notify()
1424{
1425 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
8a52eed5 1426
1427
1428 if( !((AliConversionCuts*)fCutGammaArray->At(iCut))->GetDoEtaShift() ){
1429
1430 /*if (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() != 0.){
1431 printf("Error: Gamma Conversion Dalitz Task %s :: Eta Shift not requested but set to %f, reset to 00. \n\n",
1432 (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift());
1433 ((AliConversionCuts*)fCutGammaArray->At(iCut))->SetEtaShift(0.);
1434 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift(0.);
1435
1436
1437 }*/
1438 hEtaShift[iCut]->Fill(0.,0.);
1439 continue; // No Eta Shift requested, continue
1440 }
1441
ae947965 1442
1443 if( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
1444 ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
1445 ((AliConversionCuts*)fCutGammaArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1446 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() );
8a52eed5 1447 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift()));
ae947965 1448 continue;
1449 }
1450 else{
fcc79cf5 1451 printf(" Gamma Conversion Dalitz Task %s :: Eta Shift Manually Set to %f \n\n",
ae947965 1452 (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift());
1453 ((AliConversionCuts*)fCutGammaArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1454 ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() );
8a52eed5 1455 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift()));
ae947965 1456 }
1457 }
1458
1459 return kTRUE;
1460}
1461
1462
2bb2434e 1463void AliAnalysisTaskGammaConvDalitzV1::Terminate(const Option_t *)
1464{
1465
a072aeaa 1466///Grid
2bb2434e 1467
2bb2434e 1468}
2bb2434e 1469//________________________________________________________________________
1470void AliAnalysisTaskGammaConvDalitzV1::ProcessPhotonCandidates()
1471{
1472 Int_t nV0 = 0;
1473 TList *GoodGammasStepOne = new TList();
1474 TList *GoodGammasStepTwo = new TList();
1475 // Loop over Photon Candidates allocated by ReaderV1
ae947965 1476
2bb2434e 1477 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
1478 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
1479 if(!PhotonCandidate) continue;
ae947965 1480
ae947965 1481 fIsFromMBHeader = kTRUE;
1482
1483 if( fMCEvent && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0 ){
1484
1485 Int_t isPosFromMBHeader
1486 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1487 if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
1488
1489 Int_t isNegFromMBHeader
1490 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
1491 if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
1492
ae947965 1493 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
2279d237 1494
ae947965 1495 }
1496
2bb2434e 1497 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fESDEvent)) continue;
a280ac15 1498
1499 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut() &&
2bb2434e 1500 !((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){ // if no post reader loop is required add to events good gammas
ae947965 1501
2bb2434e 1502 fGoodGammas->Add(PhotonCandidate);
2279d237 1503
ae947965 1504 if(fIsFromMBHeader){
1505 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
2279d237 1506 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
d9d6352b 1507 if( fDoMesonQA ) hESDConvGammaZR[fiCut]->Fill(PhotonCandidate->GetConversionZ(),PhotonCandidate->GetConversionRadius());
ae947965 1508 }
2279d237 1509
2bb2434e 1510 if(fMCEvent){
1511 ProcessTruePhotonCandidates(PhotonCandidate);
1512 }
1513 }
1514 else if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
1515 ((AliConversionCuts*)fCutGammaArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
1516 nV0++;
1517 GoodGammasStepOne->Add(PhotonCandidate);
1518 }
a280ac15 1519 else if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut() &&
ae947965 1520 ((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
2bb2434e 1521 GoodGammasStepTwo->Add(PhotonCandidate);
1522 }
1523 }
2279d237 1524
1525
2bb2434e 1526 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseElecSharingCut()){
1527 for(Int_t i = 0;i<GoodGammasStepOne->GetEntries();i++){
1528 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GoodGammasStepOne->At(i);
1529 if(!PhotonCandidate) continue;
ae947965 1530
1531
1532 fIsFromMBHeader = kTRUE;
1533 if(fMCEvent && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0){
1534 Int_t isPosFromMBHeader
1535 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack,fInputEvent);
1536 Int_t isNegFromMBHeader
1537 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
1538 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1539 }
1540
1541
2bb2434e 1542 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GoodGammasStepOne->GetEntries())) continue;
a280ac15 1543 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
2bb2434e 1544 fGoodGammas->Add(PhotonCandidate);
ae947965 1545
1546 if(fIsFromMBHeader){
1547 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
2279d237 1548 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
d9d6352b 1549 if( fDoMesonQA )hESDConvGammaZR[fiCut]->Fill(PhotonCandidate->GetConversionZ(),PhotonCandidate->GetConversionRadius());
ae947965 1550 }
1551
2bb2434e 1552 if(fMCEvent){
1553 ProcessTruePhotonCandidates(PhotonCandidate);
1554 }
1555 }
1556 else GoodGammasStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
1557 }
1558 }
1559 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->UseToCloseV0sCut()){
1560 for(Int_t i = 0;i<GoodGammasStepTwo->GetEntries();i++){
1561 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GoodGammasStepTwo->At(i);
1562 if(!PhotonCandidate) continue;
ae947965 1563
1564 if(fMCEvent && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0){
1565 Int_t isPosFromMBHeader
1566 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack,fInputEvent);
1567 Int_t isNegFromMBHeader
1568 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack,fInputEvent);
1569 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1570 }
1571
2bb2434e 1572 if(!((AliConversionCuts*)fCutGammaArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GoodGammasStepTwo,i)) continue;
1573 fGoodGammas->Add(PhotonCandidate); // Add gamma to current cut TList
ae947965 1574
1575 if(fIsFromMBHeader){
1576 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt()); // Differences to old V0Reader in p_t due to conversion KF->TLorentzVector
2279d237 1577 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
d9d6352b 1578 if(fDoMesonQA)hESDConvGammaZR[fiCut]->Fill(PhotonCandidate->GetConversionZ(),PhotonCandidate->GetConversionRadius());
ae947965 1579 }
1580
2bb2434e 1581 if(fMCEvent){
1582 ProcessTruePhotonCandidates(PhotonCandidate);
1583 }
1584 }
1585 }
1586
1587 delete GoodGammasStepOne;
1588 GoodGammasStepOne = 0x0;
1589 delete GoodGammasStepTwo;
1590 GoodGammasStepTwo = 0x0;
1591}
1592
1593//________________________________________________________________________
1594void AliAnalysisTaskGammaConvDalitzV1::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1595{
1596 // Process True Photons
1597 AliStack *MCStack = fMCEvent->Stack();
1598 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(MCStack);
1599 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(MCStack);
1600
1601 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1602 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){ // Not Same Mother == Combinatorial Bck
1603 return;
1604 }
ae947965 1605
1606 else if (posDaughter->GetMother(0) == -1){
1607 return;
1608 }
1609
2bb2434e 1610 if(TMath::Abs(posDaughter->GetPdgCode())!=11 || TMath::Abs(negDaughter->GetPdgCode())!=11) return; //One Particle is not electron
1611 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
1612 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
1613
1614 TParticle *Photon = TruePhotonCandidate->GetMCParticle(MCStack);
1615 if(Photon->GetPdgCode() != 22) return; // Mother is no Photon
1616
1617 // True Photon
ccfa8c0d 1618
ae947965 1619 Int_t labelGamma = TruePhotonCandidate->GetMCParticleLabel(MCStack);
1620
1621 if( labelGamma < MCStack->GetNprimary() ){
1622 if( fIsFromMBHeader ){
1623 hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1624 }
1625 }
1626 else {
1627 if( fIsFromMBHeader){
1628 hESDTrueSecConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1629 }
1630 }
1631
1632 if( IsPi0DalitzDaughter(labelGamma) == kTRUE ) {
1633 if( labelGamma < MCStack->GetNprimary() ) {
1634 if( fIsFromMBHeader ){
1635 hESDTruePi0DalitzConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1636 }
1637 }
1638 else {
1639 if( fIsFromMBHeader ) {
1640 hESDTruePi0DalitzSecConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1641 }
1642 }
1643 }
ccfa8c0d 1644
1645
2bb2434e 1646}
1647
2bb2434e 1648//________________________________________________________________________
1649void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
1650
a280ac15 1651 Double_t magField = fInputEvent->GetMagneticField();
2bb2434e 1652
1653
1654 if( magField < 0.0 ){
a280ac15 1655 magField = 1.0;
2bb2434e 1656 }
1657 else {
a280ac15 1658 magField = -1.0;
2bb2434e 1659 }
2bb2434e 1660
2bb2434e 1661
fcc79cf5 1662 vector<Int_t> lGoodElectronIndexPrev(0);
1663 vector<Int_t> lGoodPositronIndexPrev(0);
1664
1665
1666
2bb2434e 1667
a280ac15 1668 for(UInt_t i = 0; i < fSelectorElectronIndex.size(); i++){
78cea1d2 1669
ae947965 1670 AliESDtrack* electronCandidate = fESDEvent->GetTrack(fSelectorElectronIndex[i]);
9897e2f5 1671
78cea1d2 1672 if( fMCEvent ) {
1673
1674 Int_t labelelectron = TMath::Abs( electronCandidate->GetLabel() );
9897e2f5 1675 Int_t isMCFromMBHeader = -1;
1676 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0) {
1677 isMCFromMBHeader
1678 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(labelelectron,fMCStack,fInputEvent);
78cea1d2 1679 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
9897e2f5 1680 }
78cea1d2 1681 }
1682
1683 if(! ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelected(electronCandidate) ) continue;
9897e2f5 1684
78cea1d2 1685 lGoodElectronIndexPrev.push_back( fSelectorElectronIndex[i] );
1686 hESDDalitzElectronPt[fiCut]->Fill(electronCandidate->Pt());
1687 hESDDalitzElectronPhi[fiCut]->Fill(electronCandidate->Phi());
9897e2f5 1688
78cea1d2 1689
1690 if( fMCEvent ) {
1691
1692 Int_t labelelectron = TMath::Abs( electronCandidate->GetLabel() );
ae947965 1693 if( labelelectron < fMCStack->GetNtrack() ){
1694 TParticle* electron = fMCStack->Particle(labelelectron);
1695 if( electron->GetPdgCode() == 11 ){
1696 if( labelelectron < fMCStack->GetNprimary() ){
1697 hESDTrueElectronPt[fiCut]->Fill(electronCandidate->Pt()); //primary electron
1698 }
1699 else{
1700 hESDTrueSecElectronPt[fiCut]->Fill(electronCandidate->Pt()); //secondary electron
1701 }
1702 if( IsPi0DalitzDaughter(labelelectron) == kTRUE ) {
1703 if( labelelectron < fMCStack->GetNprimary() ) {
1704 hESDTruePi0DalitzElectronPt[fiCut]->Fill(electronCandidate->Pt());
1705 }
1706 else{
1707 hESDTruePi0DalitzSecElectronPt[fiCut]->Fill(electronCandidate->Pt());
1708 }
1709 }
1710 }
1711 }
1712 }
9897e2f5 1713
9897e2f5 1714
a280ac15 1715 }
1716
1717 for(UInt_t i = 0; i < fSelectorPositronIndex.size(); i++){
1718
ccfa8c0d 1719 AliESDtrack* positronCandidate = fESDEvent->GetTrack( fSelectorPositronIndex[i] );
4803eb1f 1720
78cea1d2 1721 if( fMCEvent ) {
1722
1723 Int_t labelpositron = TMath::Abs( positronCandidate->GetLabel() );
1724 Int_t isMCFromMBHeader = -1;
9897e2f5 1725
1726 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0) {
1727 isMCFromMBHeader
1728 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(labelpositron,fMCStack,fInputEvent);
1729 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
78cea1d2 1730
9897e2f5 1731 }
78cea1d2 1732 }
1733
1734
1735
1736 if(! ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelected(positronCandidate) ) continue;
1737
1738 lGoodPositronIndexPrev.push_back( fSelectorPositronIndex[i] );
1739 hESDDalitzPositronPt[fiCut]->Fill( positronCandidate->Pt() );
1740 hESDDalitzPositronPhi[fiCut]->Fill( positronCandidate->Phi() );
1741
1742
1743 if( fMCEvent ) {
1744
1745 Int_t labelpositron = TMath::Abs( positronCandidate->GetLabel() );
9897e2f5 1746
ae947965 1747 if( labelpositron < fMCStack->GetNtrack() ) {
1748 TParticle* positron = fMCStack->Particle(labelpositron);
1749 if( positron->GetPdgCode() == -11 ){
1750 if( labelpositron < fMCStack->GetNprimary() ){
1751 hESDTruePositronPt[fiCut]->Fill(positronCandidate->Pt());
1752 }
1753 else{
1754 hESDTrueSecPositronPt[fiCut]->Fill(positronCandidate->Pt());
1755 }
1756 if( IsPi0DalitzDaughter(labelpositron) == kTRUE ) {
1757 if( labelpositron < fMCStack->GetNprimary() ){
1758 hESDTruePi0DalitzPositronPt[fiCut]->Fill(positronCandidate->Pt());
1759 }
1760 else{
1761 hESDTruePi0DalitzSecPositronPt[fiCut]->Fill(positronCandidate->Pt());
1762 }
1763 }
1764 }
1765 }
ccfa8c0d 1766 }
78cea1d2 1767 }
a280ac15 1768
1769
fcc79cf5 1770 vector<Bool_t> lElectronPsiIndex(lGoodElectronIndexPrev.size(), kTRUE);
1771 vector<Bool_t> lPositronPsiIndex(lGoodPositronIndexPrev.size(), kTRUE);
a280ac15 1772
1773
1774 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->DoPsiPairCut() == kTRUE ){
1775
fcc79cf5 1776 for( UInt_t i = 0; i < lGoodElectronIndexPrev.size(); i++ ) {
a280ac15 1777
fcc79cf5 1778 AliESDtrack *electronCandidate = fESDEvent->GetTrack(lGoodElectronIndexPrev[i]);
a280ac15 1779
fcc79cf5 1780 for(UInt_t j = 0; j < lGoodPositronIndexPrev.size(); j++){
1781 AliESDtrack *positronCandidate = fESDEvent->GetTrack(lGoodPositronIndexPrev[j]);
a280ac15 1782 Double_t psiPair = GetPsiPair(positronCandidate,electronCandidate);
1783 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->GetConstrainedParam()->Phi()-positronCandidate->GetConstrainedParam()->Phi());
1784
1785 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->IsFromGammaConversion(psiPair,deltaPhi ) ){
1786 lElectronPsiIndex[i] = kFALSE;
1787 lPositronPsiIndex[j] = kFALSE;
1788 }
a280ac15 1789 }
1790 }
1791 }
2bb2434e 1792
2bb2434e 1793
fcc79cf5 1794 vector<Int_t> lGoodElectronIndex(0);
1795 vector<Int_t> lGoodPositronIndex(0);
1796
1797
1798 for( UInt_t i = 0; i < lGoodElectronIndexPrev.size(); i++ ) {
1799
1800 if( lElectronPsiIndex[i] == kTRUE )
1801 lGoodElectronIndex.push_back( lGoodElectronIndexPrev[i] );
1802 }
1803
1804 for( UInt_t i = 0; i < lGoodPositronIndexPrev.size(); i++ ) {
1805
1806 if( lPositronPsiIndex[i] == kTRUE )
1807 lGoodPositronIndex.push_back( lGoodPositronIndexPrev[i] );
1808 }
1809
2bb2434e 1810
1811
fcc79cf5 1812
1813
2bb2434e 1814 for(UInt_t i = 0; i < lGoodElectronIndex.size(); i++){
1815
fcc79cf5 1816 //if( lElectronPsiIndex[i] == kFALSE ) continue;
2bb2434e 1817
2bb2434e 1818
a280ac15 1819 AliESDtrack *electronCandidate = fESDEvent->GetTrack(lGoodElectronIndex[i]);
1820
1821 AliKFParticle electronCandidateKF( *electronCandidate->GetConstrainedParam(), ::kElectron );
1822
1823 for(UInt_t j = 0; j < lGoodPositronIndex.size(); j++){
1824
fcc79cf5 1825 //if( lPositronPsiIndex[j] == kFALSE ) continue;
a280ac15 1826
1827 AliESDtrack *positronCandidate = fESDEvent->GetTrack(lGoodPositronIndex[j]);
1828 AliKFParticle positronCandidateKF( *positronCandidate->GetConstrainedParam(), ::kPositron );
0f8c33c1 1829 Bool_t isPhoton = kFALSE;
1830 Bool_t isPi0Dalitz = kFALSE;
1831 Bool_t isEtaDalitz = kFALSE;
1832 Bool_t isJPsi = kFALSE;
f4d5bd23 1833 Bool_t isTrueEposENeg = kFALSE;
a280ac15 1834
1835 Double_t psiPair = GetPsiPair(positronCandidate,electronCandidate);
1836 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->GetConstrainedParam()->Phi()-positronCandidate->GetConstrainedParam()->Phi());
ccfa8c0d 1837
a280ac15 1838
fcc79cf5 1839 AliKFConversionPhoton* virtualPhoton = NULL;
1840 virtualPhoton = new AliKFConversionPhoton(electronCandidateKF,positronCandidateKF);
a280ac15 1841
2d49ea4c 1842 if( fSetProductionVertextoVGamma == kTRUE ){
1843
1844 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
1845 primaryVertexImproved+=*virtualPhoton;
1846 virtualPhoton->SetProductionVertex(primaryVertexImproved);
1847
1848 }
a280ac15 1849
1850 virtualPhoton->SetTrackLabels( lGoodPositronIndex[j], lGoodElectronIndex[i]);
fcc79cf5 1851
2d49ea4c 1852 Bool_t isMotherPrimary = kFALSE;
1853
8a52eed5 1854
fcc79cf5 1855 if( fMCEvent ) {
1856
1857 Int_t labeln=TMath::Abs(electronCandidate->GetLabel());
1858 Int_t labelp=TMath::Abs(positronCandidate->GetLabel());
1859 TParticle *fNegativeMCParticle = fMCStack->Particle(labeln);
1860 TParticle *fPositiveMCParticle = fMCStack->Particle(labelp);
2d49ea4c 1861
fcc79cf5 1862
1863 if( fPositiveMCParticle && fNegativeMCParticle) {
1864 virtualPhoton->SetMCLabelPositive(labelp);
1865 virtualPhoton->SetMCLabelNegative(labeln);
f4d5bd23 1866
1867 if( fPositiveMCParticle->GetPdgCode() == ::kPositron && fNegativeMCParticle->GetPdgCode() == ::kElectron ) isTrueEposENeg = kTRUE;
1868
2d49ea4c 1869 if( fPositiveMCParticle->GetMother(0) > -1 && fPositiveMCParticle->GetMother(0) < fMCStack->GetNprimary() )
1870 isMotherPrimary = kTRUE;
1871
fcc79cf5 1872 }
f4d5bd23 1873
1874
2d49ea4c 1875
8a52eed5 1876 }
1877
1878 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton); //To Apply PsiPairCut
1879
a072aeaa 1880 if ( fDoMesonQA ) {
1881
8a52eed5 1882 if( fMCEvent ) {
a072aeaa 1883
8a52eed5 1884 TParticle *mcVgamma=virtualPhoton->GetMCParticle(fMCStack);
fcc79cf5 1885
8a52eed5 1886 if(mcVgamma){
1887 // Check if it is a true photon
fcc79cf5 1888 if(mcVgamma->GetPdgCode() == 22){
1889 isPhoton = kTRUE;
1890 }else if(mcVgamma->GetPdgCode() == 443){
1891 isJPsi = kTRUE;
1892 }
1893 else if( IsDalitz( mcVgamma ) ){
1894 if ( mcVgamma->GetPdgCode() == 111 ) isPi0Dalitz = kTRUE;
1895 else if( mcVgamma->GetPdgCode() == 221 ) isEtaDalitz = kTRUE;
1896 }
8a52eed5 1897 }
a072aeaa 1898
1899 if(isPhoton){
1900 hESDEposEnegTruePhotonInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
2d49ea4c 1901
a072aeaa 1902 hESDEposEnegTruePhotonPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1903 }
1904 else if(isJPsi){
1905 hESDEposEnegTrueJPsiInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1906 }
1907 else if(isPi0Dalitz){
1908 hESDEposEnegTruePi0DalitzInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1909 hESDEposEnegTruePi0DalitzPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
2d49ea4c 1910 if( isMotherPrimary ) hESDEposEnegTruePrimPi0DalitzInvMass[fiCut]->Fill( vphoton->GetMass() );
a072aeaa 1911 }
1912 else if(isEtaDalitz){
1913 hESDEposEnegTrueEtaDalitzInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1914 hESDEposEnegTrueEtaDalitzPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
2d49ea4c 1915 if( isMotherPrimary ) hESDEposEnegTruePrimEtaDalitzInvMass[fiCut]->Fill( vphoton->GetMass() );
a072aeaa 1916 }
f4d5bd23 1917
1918 if( isTrueEposENeg ) hESDEposEnegTrueInvMassPt[fiCut]->Fill(vphoton->GetMass(), vphoton->Pt());
1919
fcc79cf5 1920 }
8a52eed5 1921 }
1922
1923
1924
258b4572 1925 if ( fDoMesonQA ) {
8a52eed5 1926
258b4572 1927 hESDEposEnegPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
1928 hESDEposEnegInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
1929
1930 }
0f8c33c1 1931
fcc79cf5 1932 if( ! fDoChicAnalysis ) {
1933
1934 if ( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
1935
1936 Double_t MassCutMax = 1000.0;
1937 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutLowPt() >= ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutHighPt() ){
1938 MassCutMax = ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutLowPt();
1939 }
1940 else {
1941 MassCutMax = ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutHighPt();
1942 }
1943
258b4572 1944 Bool_t DoMassMinCut = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->DoMassMinCut();
1945 Double_t MassMinCut = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetMassMinCut();
1946
1947 if( vphoton->GetMass() > MassCutMax || ( DoMassMinCut && vphoton->GetMass() < MassMinCut ) ) {
fcc79cf5 1948
1949
1950 delete vphoton;
1951 vphoton = 0x0;
1952 delete virtualPhoton;
1953 virtualPhoton = 0x0;
1954 continue;
1955
1956 }
1957
1958 }
1959 }
1960
1961
1962 fGoodVirtualGammas->Add( vphoton );
1963 delete virtualPhoton;
1964 virtualPhoton=NULL;
0f8c33c1 1965
a280ac15 1966 }
2bb2434e 1967 }
0a2b2b4b 1968
fcc79cf5 1969
0a2b2b4b 1970 //Computing mixing event
fcc79cf5 1971
258b4572 1972 if( fDoMesonQA ) {
0a2b2b4b 1973
fcc79cf5 1974 for(UInt_t i = 0; i < lGoodElectronIndex.size(); i++){
0a2b2b4b 1975
fcc79cf5 1976 //if( lElectronPsiIndex[i] == kFALSE ) continue;
0a2b2b4b 1977
1978 AliESDtrack *electronCandidate1 = fESDEvent->GetTrack(lGoodElectronIndex[i]);
1979
1980 AliKFParticle electronCandidate1KF( *electronCandidate1->GetConstrainedParam(), ::kElectron );
1981
1982
1983 for(UInt_t j = i+1; j < lGoodElectronIndex.size(); j++){
1984
fcc79cf5 1985 //if( lElectronPsiIndex[j] == kFALSE ) continue;
0a2b2b4b 1986
1987
1988 AliESDtrack *electronCandidate2 = fESDEvent->GetTrack(lGoodElectronIndex[j]);
1989
1990 AliKFParticle electronCandidate2KF( *electronCandidate2->GetConstrainedParam(), ::kElectron );
1991
1992 AliKFConversionPhoton* virtualPhoton = new AliKFConversionPhoton(electronCandidate1KF,electronCandidate2KF);
1993
2d49ea4c 1994 //AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
1995 //primaryVertexImproved+=*virtualPhoton;
1996 //virtualPhoton->SetProductionVertex(primaryVertexImproved);
0a2b2b4b 1997
1998
1999 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton);
2000 hESDEposEnegLikeSignBackInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
2001 delete vphoton;
2002 delete virtualPhoton;
fcc79cf5 2003 vphoton = 0x0;
2004 virtualPhoton = 0x0;
0a2b2b4b 2005
2006 }
2007 }
2008
2009
fcc79cf5 2010 for(UInt_t i = 0; i < lGoodPositronIndex.size(); i++){
2011
2012
0a2b2b4b 2013
fcc79cf5 2014 //if( lPositronPsiIndex[i] == kFALSE ) continue;
0a2b2b4b 2015
2016 AliESDtrack *positronCandidate1 = fESDEvent->GetTrack(lGoodPositronIndex[i]);
2017
2018 AliKFParticle positronCandidate1KF( *positronCandidate1->GetConstrainedParam(), ::kPositron );
2019
2020
2021 for(UInt_t j = i+1; j < lGoodPositronIndex.size(); j++){
2022
fcc79cf5 2023 // if( lPositronPsiIndex[j] == kFALSE ) continue;
0a2b2b4b 2024
2025 AliESDtrack *positronCandidate2 = fESDEvent->GetTrack(lGoodPositronIndex[j]);
2026
2027 AliKFParticle positronCandidate2KF( *positronCandidate2->GetConstrainedParam(), ::kPositron );
2028
2029 AliKFConversionPhoton* virtualPhoton = new AliKFConversionPhoton(positronCandidate1KF,positronCandidate2KF);
2d49ea4c 2030 //AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
2031 //primaryVertexImproved+=*virtualPhoton;
2032 //virtualPhoton->SetProductionVertex(primaryVertexImproved);
0a2b2b4b 2033
2034 AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton);
2035 hESDEposEnegLikeSignBackInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
2036
2037
2038 delete vphoton;
fcc79cf5 2039 delete virtualPhoton;
2040 vphoton = 0x0;
2041 virtualPhoton = 0x0;
0a2b2b4b 2042
2043 }
258b4572 2044 }
0a2b2b4b 2045
fcc79cf5 2046 }
2bb2434e 2047}
2048
2049//________________________________________________________________________
2050void AliAnalysisTaskGammaConvDalitzV1::CalculatePi0DalitzCandidates(){
2051
2052 // Conversion Gammas
2053
a280ac15 2054
2bb2434e 2055
2056
2057 if( fGoodGammas->GetEntries() > 0 && fGoodVirtualGammas->GetEntries() > 0 ){
2058
4803eb1f 2059 vector<Bool_t> lGoodVirtualGamma(fGoodVirtualGammas->GetEntries(), kFALSE);
2060
2bb2434e 2061 for(Int_t GammaIndex=0; GammaIndex<fGoodGammas->GetEntries(); GammaIndex++){
2062
2063 AliAODConversionPhoton *gamma=dynamic_cast<AliAODConversionPhoton*>(fGoodGammas->At(GammaIndex));
0a2b2b4b 2064 if (gamma==NULL) continue;
2bb2434e 2065 for(Int_t virtualGammaIndex=0;virtualGammaIndex<fGoodVirtualGammas->GetEntries();virtualGammaIndex++){
2066
2067 AliAODConversionPhoton *Vgamma=dynamic_cast<AliAODConversionPhoton*>(fGoodVirtualGammas->At(virtualGammaIndex));
0a2b2b4b 2068 if (Vgamma==NULL) continue;
2bb2434e 2069 //Check for same Electron ID
2070 if(gamma->GetTrackLabelPositive() == Vgamma->GetTrackLabelPositive() ||
2071 gamma->GetTrackLabelNegative() == Vgamma->GetTrackLabelNegative() ||
2072 gamma->GetTrackLabelNegative() == Vgamma->GetTrackLabelPositive() ||
2073 gamma->GetTrackLabelPositive() == Vgamma->GetTrackLabelNegative() ) continue;
2074
2075 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma,Vgamma);
2076 pi0cand->SetLabels(GammaIndex,virtualGammaIndex);
8a52eed5 2077
2bb2434e 2078
8a52eed5 2079 if( ( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift())) ){
2080
2081 //cout<< "Meson Accepted "<<endl;
ae947965 2082
2083 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fESDEvent->GetPrimaryVertex()->GetZ());
2bb2434e 2084 Int_t mbin = 0;
a280ac15 2085 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity() ){
2bb2434e 2086 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
2087 } else {
2088 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGoodGammas->GetEntries());
2089 }
ae947965 2090
4803eb1f 2091
ae947965 2092
2093 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
4803eb1f 2094
2095
2096 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( pi0cand->Pt() , Vgamma->GetMass() ) == kTRUE ){
2097
ae947965 2098 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
fcc79cf5 2099
ae947965 2100 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
2101 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
4803eb1f 2102
4803eb1f 2103
fcc79cf5 2104 if ( fDoMesonQA ) {
2105
d9d6352b 2106 hESDMotherPhi[fiCut]->Fill(pi0cand->Phi());
4803eb1f 2107
fcc79cf5 2108 if( lGoodVirtualGamma[virtualGammaIndex] == kFALSE ) {
2109
d9d6352b 2110 FillElectronQAHistos(Vgamma);
2279d237 2111
fcc79cf5 2112 lGoodVirtualGamma[virtualGammaIndex] = kTRUE;
2113 }
2279d237 2114 }
ae947965 2115 }
2116 }
2117 else {
2118 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
2119 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
2120 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
4803eb1f 2121
fcc79cf5 2122
2123 if ( fDoMesonQA ) {
2124
2125 hESDMotherPhi[fiCut]->Fill(pi0cand->Phi());
2126
2127 if( lGoodVirtualGamma[virtualGammaIndex] == kFALSE ) {
2279d237 2128
d9d6352b 2129 FillElectronQAHistos(Vgamma);
4803eb1f 2130
4803eb1f 2131 lGoodVirtualGamma[virtualGammaIndex] = kTRUE;
2132
fcc79cf5 2133 }
2279d237 2134 }
ae947965 2135 }
2136
fcc79cf5 2137 if( fDoChicAnalysis) {
ae947965 2138
2139 hESDPi0MotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
2140
2141 Double_t diffMass = pi0cand->M() - Vgamma->GetMass();
2142
2143 hESDPi0MotherDiffInvMassPt[fiCut]->Fill( diffMass , pi0cand->Pt() );
2144
fcc79cf5 2145 if( Vgamma->GetMass() > 2.5 && Vgamma->GetMass() < 3.4){
ae947965 2146 hESDPi0MotherDiffLimInvMassPt[fiCut]->Fill( diffMass , pi0cand->Pt() );
fcc79cf5 2147 }
2148 }
ae947965 2149
2150 if(fMCEvent){
2bb2434e 2151 ProcessTrueMesonCandidates(pi0cand,gamma,Vgamma);
ae947965 2152 }
a280ac15 2153 }
2bb2434e 2154 delete pi0cand;
2155 pi0cand=0x0;
2156 }
2157 }
a280ac15 2158 }
2bb2434e 2159}
2160
2161//________________________________________________________________________
2162void AliAnalysisTaskGammaConvDalitzV1::CalculateBackground(){
2163
2164 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fESDEvent->GetPrimaryVertex()->GetZ());
2165 Int_t mbin = 0;
a280ac15 2166
2bb2434e 2167 Int_t method = 0;
2168
2169 method = ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetBKGMethod();
2170
2171
2172 if(((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity()){
2173 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
2174 } else {
2175 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGoodGammas->GetEntries());
2176 }
2177
2178 if( method == 1 || method == 2 ) {
2179
2180 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
2181
2182 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity() ) {
2183
2184 for(Int_t nEventsInBG=0;nEventsInBG<fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2185
2186 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2187
2188 if(fMoveParticleAccordingToVertex == kTRUE && method == 1){
2189 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2190 }
2191
2192 for(Int_t iCurrent=0;iCurrent<fGoodVirtualGammas->GetEntries();iCurrent++){
2193 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualGammas->At(iCurrent));
a280ac15 2194
2195 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2bb2434e 2196 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2197
2198 if(fMoveParticleAccordingToVertex == kTRUE && method == 1 ){
2199 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2200 }
2201
2202 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
8a52eed5 2203
2204
2205 if( ( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE, ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
ae947965 2206 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
4803eb1f 2207
2208 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.GetMass() ) == kTRUE ){
2209
2210 // cout<<" Mass dalitz: "<<currentEventGoodV0.GetMass()<<endl;
ae947965 2211 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2212 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2213 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2214 }
2215 }
2216 else {
2217 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2218 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2219 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2220 }
2bb2434e 2221 }
2222 delete backgroundCandidate;
2223 backgroundCandidate = 0x0;
2224 }
2225 }
2226 }
2227 }
2228 else{
2229 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2230 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2231 if(previousEventV0s){
2232 if(fMoveParticleAccordingToVertex == kTRUE && method == 1){
2233 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2234 }
2235 for(Int_t iCurrent=0;iCurrent<fGoodVirtualGammas->GetEntries();iCurrent++){
a280ac15 2236
2bb2434e 2237 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualGammas->At(iCurrent));
a280ac15 2238
2bb2434e 2239 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2240
2241 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2242
2243 if(fMoveParticleAccordingToVertex == kTRUE && method ==1){
2244 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2245 }
2246
2247 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
8a52eed5 2248
2249 if((((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
ae947965 2250
2251 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
4803eb1f 2252
2253 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.GetMass() ) == kTRUE ){
2254
ae947965 2255
2256 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2257 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2258 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2259 }
2260 }
2261 else {
2262 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2263 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2264 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2265 }
2bb2434e 2266 }
2267 delete backgroundCandidate;
2268 backgroundCandidate = 0x0;
2269 }
2270 }
2271 }
2272 }
2273 }
2274 }
2275
2276 else if( method == 3 ){
2277
a280ac15 2278 for(Int_t iCurrent=0;iCurrent<fGoodVirtualGammas->GetEntries();iCurrent++){
2bb2434e 2279
a280ac15 2280 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGoodVirtualGammas->At(iCurrent));
2bb2434e 2281
a280ac15 2282 for(Int_t iPrevious=0;iPrevious<fGammasPool[fiCut]->GetEntries();iPrevious++){
2bb2434e 2283
a280ac15 2284 AliAODConversionPhoton previousGoodV0 = *(AliAODConversionPhoton*)((fGammasPool[fiCut]->At(iPrevious) ));
2bb2434e 2285
2bb2434e 2286
a280ac15 2287 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
8a52eed5 2288
a280ac15 2289
8a52eed5 2290 if((((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE, ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
ae947965 2291
2292 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
4803eb1f 2293
2294 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.GetMass() ) == kTRUE ){
2295
ae947965 2296
2297 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2298 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2299 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2300
2301 }
2302 }
2303 else{
2304
2305 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2306 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2307 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2308
2309 }
2bb2434e 2310 }
a280ac15 2311 delete backgroundCandidate;
2312 backgroundCandidate = 0x0;
2313 }
2314 }
2bb2434e 2315 }
2316
2317}
2318//________________________________________________________________________
2319void AliAnalysisTaskGammaConvDalitzV1::UpdateEventByEventData(){
2320 //see header file for documentation
2321
2322 Int_t method = 0;
2323
2324 method = ( (AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetBKGMethod();
a280ac15 2325
fcc79cf5 2326
2327
2328
2bb2434e 2329 if( method == 1 ) {
2330
a280ac15 2331 if(fGoodGammas->GetEntries() > 0 ){
2bb2434e 2332
a280ac15 2333 if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity() ){
2334 fBGHandler[fiCut]->AddEvent(fGoodGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fNumberOfESDTracks);
2335 }
2bb2434e 2336
a280ac15 2337 else{ // means we use #V0s for multiplicity
2338 fBGHandler[fiCut]->AddEvent(fGoodGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fGoodGammas->GetEntries());
2339 }
2bb2434e 2340 }
2bb2434e 2341 }
2342
2343 else if ( method == 2 ){
a280ac15 2344
2345 if(fGoodVirtualGammas->GetEntries() > 0 ){
2346 if(((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->UseTrackMultiplicity()){
2347 fBGHandler[fiCut]->AddEvent(fGoodVirtualGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fNumberOfESDTracks);
2348 }
2349 else{ // means we use #V0s for multiplicity
2350 fBGHandler[fiCut]->AddEvent(fGoodVirtualGammas,fESDEvent->GetPrimaryVertex()->GetX(),fESDEvent->GetPrimaryVertex()->GetY(),fESDEvent->GetPrimaryVertex()->GetZ(),fGoodVirtualGammas->GetEntries());
2351 }
2bb2434e 2352 }
2bb2434e 2353 }
a280ac15 2354 else if ( method == 3 ) {
2355
2356
2357
2358 for(Int_t index = 0; index < fGoodGammas->GetEntries(); index++){
2359
2360
2361 if ( fGammasPool[fiCut]->GetEntries() > ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->NumberOfRotationEvents() ){
2362 fGammasPool[fiCut]->RemoveLast();
2363 }
2364 fGammasPool[fiCut]->AddFirst( new AliAODConversionPhoton(*(AliAODConversionPhoton*)(fGoodGammas->At(index)) ) );
2bb2434e 2365
2bb2434e 2366 }
a280ac15 2367 }
2bb2434e 2368}
2369//______________________________________________________________________
2370void AliAnalysisTaskGammaConvDalitzV1::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate, AliAODConversionPhoton *TrueVirtualGammaCandidate)
2371{
2372
2373 // Process True Mesons
2374
2375 AliStack *MCStack = fMCEvent->Stack();
2376
ae947965 2377 if( TrueGammaCandidate->GetV0Index()<fESDEvent->GetNumberOfV0s() ){
8a52eed5 2378
2379
2380 //cout<<"Entro True Meson"<<endl;
2bb2434e 2381
2382
2383 Bool_t isTruePi0 = kFALSE;
2384 Bool_t isTrueEta = kFALSE;
ae947965 2385 Bool_t massCutAccept = kFALSE;
86eaf9ae 2386 //Bool_t isTrueChiC = kFALSE;
2bb2434e 2387 Int_t gammaMCLabel = TrueGammaCandidate->GetMCParticleLabel(MCStack);
2388 Int_t gammaMotherLabel = -1;
2389
2390
ae947965 2391 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
2392
4803eb1f 2393 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( Pi0Candidate->Pt() , TrueVirtualGammaCandidate->GetMass() ) == kTRUE ){
2394
ae947965 2395 massCutAccept = kTRUE;
2396 }
2397 }
2398 else {
2399 massCutAccept = kTRUE;
2400 }
2401
2402
2403
2bb2434e 2404
2405
2406 if(gammaMCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2407
2408
2409 // Daughters Gamma 0
2410 TParticle * negativeMC = (TParticle*)TrueGammaCandidate->GetNegativeMCDaughter(MCStack);
2411 TParticle * positiveMC = (TParticle*)TrueGammaCandidate->GetPositiveMCDaughter(MCStack);
2412 TParticle * gammaMC = (TParticle*)MCStack->Particle(gammaMCLabel);
2413
2414
2415 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2416
2417 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
2bb2434e 2418
a280ac15 2419 if(gammaMC->GetPdgCode() == 22){ // ... with Gamma Mother
2420 gammaMotherLabel=gammaMC->GetFirstMother();
2421 }
2bb2434e 2422 }
2423 }
a280ac15 2424 }
2425
2426
2427 Int_t virtualGammaMCLabel = TrueVirtualGammaCandidate->GetMCParticleLabel(MCStack);
2428 Int_t virtualGammaMotherLabel = -1;
2429 Int_t virtualGamma = 1;
ae947965 2430 Int_t virtualGammaGrandMotherLabel =-1;
2431
2bb2434e 2432
a280ac15 2433 if(virtualGammaMCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2434 // Daughters Gamma 1
2435 TParticle * negativeMC = (TParticle*)TrueVirtualGammaCandidate->GetNegativeMCDaughter(MCStack);
2436 TParticle * positiveMC = (TParticle*)TrueVirtualGammaCandidate->GetPositiveMCDaughter(MCStack);
2437 TParticle * virtualGammaMotherMC = (TParticle*)MCStack->Particle(virtualGammaMCLabel);
2bb2434e 2438
a280ac15 2439 if(TMath::Abs(negativeMC->GetPdgCode())==11 && TMath::Abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2bb2434e 2440
a280ac15 2441 if( virtualGammaMotherMC->GetPdgCode() != 22 ){
2442 virtualGammaMotherLabel=virtualGammaMCLabel;
ae947965 2443 if(virtualGammaMotherMC->GetPdgCode() == 443){
2444 virtualGammaGrandMotherLabel=virtualGammaMotherMC->GetFirstMother();
2445 }
2446 }
2bb2434e 2447
a280ac15 2448 else if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
a280ac15 2449 virtualGammaMotherLabel=virtualGammaMotherMC->GetFirstMother();
2450 virtualGamma = 0; //no virtual gamma
2bb2434e 2451 }
a280ac15 2452 }
2453 }
2454
2455
ae947965 2456 if(gammaMotherLabel >= 0 && ( gammaMotherLabel == virtualGammaMotherLabel) ){
2bb2434e 2457
a280ac15 2458 if(((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->GetPdgCode() == 111){
2459 isTruePi0=kTRUE;
2bb2434e 2460 }
2461
a280ac15 2462 if(((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->GetPdgCode() == 221){
2463 isTrueEta=kTRUE;
2464 }
ae947965 2465
2466
2467 }
a280ac15 2468
fcc79cf5 2469 if( fDoChicAnalysis) {
2470 if(gammaMotherLabel>=0 && ( gammaMotherLabel == virtualGammaGrandMotherLabel) ){
2471 if(((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 445 ||
2472 ((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 10443 ||
2473 ((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 20443 ){
86eaf9ae 2474 //isTrueChiC=kTRUE;
fcc79cf5 2475 hESDTrueMotherChiCInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2476 hESDTrueMotherChiCDiffInvMassPt[fiCut]->Fill(Pi0Candidate->M()-TrueVirtualGammaCandidate->GetMass(),Pi0Candidate->Pt());
2477 }
2478 }
2479 }
a280ac15 2480
ae947965 2481 if( ( isTruePi0 || isTrueEta) && massCutAccept ){ // True Pion or Eta
2482
86eaf9ae 2483 if ( virtualGamma == 1 ) { //True Dalitz
2484
2485 Float_t weighted= 1;
2486
2279d237 2487 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
86eaf9ae 2488 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
2489 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
2490 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
2491 }
2492 }
2493 }
2494
2495 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2496 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill( TrueVirtualGammaCandidate->GetMass(),Pi0Candidate->Pt(),weighted);
2497
ae947965 2498 if(gammaMotherLabel < MCStack->GetNprimary()){ // Only primary pi0 for efficiency calculation
2499
86eaf9ae 2500
2501 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill( Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2502 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill( Pi0Candidate->M(), Pi0Candidate->Pt() );
2503
ae947965 2504 hESDTruePrimaryMotherInvMassMCPt[fiCut]->Fill(Pi0Candidate->M(),((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->Pt(),weighted);
2bb2434e 2505 if(isTruePi0){ // Only primaries for unfolding
ae947965 2506 hESDTruePrimaryPi0DalitzESDPtMCPt[fiCut]->Fill(Pi0Candidate->Pt(),((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->Pt(),weighted);
2bb2434e 2507 }
2508 }
ae947965 2509 else { // Secondary Meson
86eaf9ae 2510 Float_t weightedSec= 1;
2511
2512 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2513 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetMother(0);
2514 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(gammaMotherLabel)->GetPdgCode()==310){
2515 weightedSec= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, fMCStack, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
2516 }
2517 }
2518
2519 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2bb2434e 2520 }
2521 }
86eaf9ae 2522
2523
a280ac15 2524 else if ( virtualGamma == 0 ){
86eaf9ae 2525
2526 Float_t weighted= 1;
2527
2528 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2529 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
2530 if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
2531 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
2532 }
2533 }
2534 }
2535
2536 hESDTrueMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted); // Pi0 from GG
2537
2538 if( gammaMotherLabel < MCStack->GetNprimary() ){
2539 hESDTruePrimaryMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2540 }
2541 else {
2542
2543 Float_t weightedSec= 1;
2544
2545 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
2546 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetMother(0);
2547 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(gammaMotherLabel)->GetPdgCode()==310){
2548 weightedSec= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, fMCStack, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
2549 }
2550 }
2551 hESDTrueSecondaryMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2552 }
a280ac15 2553 }
2554 }
2555
ae947965 2556 if(!isTruePi0 && !isTrueEta && massCutAccept ){ // Background
a280ac15 2557 if(gammaMotherLabel>-1 && virtualGammaMotherLabel>-1 && virtualGamma == 0){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2558 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2559 } else { // No photon or without mother
2560 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2561 }
2562 }
2563 }
2bb2434e 2564}
0f8c33c1 2565
2566
2bb2434e 2567//________________________________________________________________________
2568void AliAnalysisTaskGammaConvDalitzV1::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
2569 //see header file for documentation
2570
2571 Double_t dx = vertex->fX - fESDEvent->GetPrimaryVertex()->GetX();
2572 Double_t dy = vertex->fY - fESDEvent->GetPrimaryVertex()->GetY();
2573 Double_t dz = vertex->fZ - fESDEvent->GetPrimaryVertex()->GetZ();
2574
2575 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
2576 particle->SetConversionPoint(movedPlace);
2577}
2578
2579
2580//________________________________________________________________________
2581void AliAnalysisTaskGammaConvDalitzV1::CountESDTracks(){
2582
2bb2434e 2583 // Using standard function for setting Cuts
2584 Bool_t selectPrimaries=kTRUE;
0a2b2b4b 2585 AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
2bb2434e 2586 EsdTrackCuts->SetMaxDCAToVertexZ(2);
2587 EsdTrackCuts->SetEtaRange(-0.8, 0.8);
2588 EsdTrackCuts->SetPtRange(0.15);
58326f11 2589 EsdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kBoth);
2bb2434e 2590
58326f11 2591 fNumberOfESDTrackskBoth = 0;
2bb2434e 2592 for(Int_t iTracks = 0; iTracks < fESDEvent->GetNumberOfTracks(); iTracks++){
2593 AliESDtrack* curTrack = fESDEvent->GetTrack(iTracks);
2594 if(!curTrack) continue;
58326f11 2595 if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTrackskBoth++;
2bb2434e 2596 }
2597 delete EsdTrackCuts;
2598 EsdTrackCuts=0x0;
2599
2600 return;
2601}
2602
2603//_____________________________________________________________________________
2604void AliAnalysisTaskGammaConvDalitzV1::ProcessMCParticles()
2605{
2606
2bb2434e 2607 // Loop over all primary MC particle
ccfa8c0d 2608
ae947965 2609 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
2610
2611
2612 TParticle* particle = (TParticle *)fMCStack->Particle(i);
2613 if (!particle) continue;
2614
2615
2616 Bool_t mcIsFromMB = kTRUE;
2617 Int_t isMCFromMBHeader = -1;
2618
2619 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 0) {
2620 isMCFromMBHeader
2621 = ((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i,fMCStack,fInputEvent);
2622 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetSignalRejection() != 3) continue;
2623 if(isMCFromMBHeader != 2) mcIsFromMB = kFALSE;
2624 }
2625
2626 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
2627 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
2628 }
2629
2630 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
2631 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
2d49ea4c 2632 if(fDoMesonQA) hMCConvGammaEta[fiCut]->Fill( particle->Eta());
2633
ae947965 2634 if(mcIsFromMB){
2635 hMCConvGammaRSPt[fiCut]->Fill(particle->Pt());
2636 }
2637 } // Converted MC Gamma
2638
2639 if(((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(i,fMCStack)){
2d49ea4c 2640 if( particle->GetPdgCode() == -11) {
2641 hMCAllPositronsPt[fiCut]->Fill(particle->Pt()); // All positrons
2642 if(fDoMesonQA) hMCAllPositronsEta[fiCut]->Fill( particle->Eta() );
2643 }
2644 if( particle->GetPdgCode() == 11){
2645 hMCAllElectronsPt[fiCut]->Fill(particle->Pt()); // All electrons
2646 if (fDoMesonQA) hMCAllElectronsEta[fiCut]->Fill(particle->Eta()); // All electrons
2647 }
2648
ae947965 2649 }
2650
86eaf9ae 2651 if(((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMC( particle,fMCStack,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift() ) ){
ae947965 2652
2d49ea4c 2653 Float_t weighted= 1;
86eaf9ae 2654
2655 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
ae947965 2656 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2657 if (particle->Pt()>0.005){
2658 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
2659 }
2660 }
86eaf9ae 2661 }
2662
ae947965 2663 if(particle->GetPdgCode() == 111)hMCPi0GGPt[fiCut]->Fill( particle->Pt() , weighted); // All MC Pi0 GG decay
2664 if(particle->GetPdgCode() == 221)hMCEtaGGPt[fiCut]->Fill( particle->Pt() , weighted); // All MC Eta GG decay
2665 }
2666
2667
2668 Int_t labelgamma = -1;
2669 Int_t labelelectron = -1;
2670 Int_t labelpositron = -1;
2671
a280ac15 2672
ae947965 2673 if( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMCDalitz(particle,fMCStack,labelelectron,labelpositron,labelgamma,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()) )
2674 {
2675
2676
2d49ea4c 2677 Float_t weighted= 1;
86eaf9ae 2678 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
ae947965 2679 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack,fInputEvent)){
2680 if (particle->Pt()>0.005){
2681 weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
2682 }
2683 }
86eaf9ae 2684 }
ae947965 2685 if(particle->GetPdgCode() == 111)hMCPi0Pt[fiCut]->Fill(particle->Pt(), weighted); // All MC Pi0
2686 if(particle->GetPdgCode() == 221)hMCEtaPt[fiCut]->Fill(particle->Pt(), weighted); // All MC Eta
0f8c33c1 2687
2688 // Check the acceptance for gamma and electrons
2689
0f8c33c1 2690
2691 TParticle *gamma = fMCStack->Particle(labelgamma);
2692 TParticle *electron = fMCStack->Particle(labelelectron);
2693 TParticle *positron = fMCStack->Particle(labelpositron);
2694
2695
2696 if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC(gamma,fMCStack,kFALSE) &&
ae947965 2697 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelelectron,fMCStack) &&
2698 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelpositron,fMCStack) ) {
f4d5bd23 2699
2700 Double_t massDalitz = -1;
2701
2702 if( fDoMesonQA){
2703
2704 TLorentzVector TLVEpos,TLVEneg,TLVDalitz;
2705 Double_t electronMass = TDatabasePDG::Instance()->GetParticle( ::kElectron )->Mass();
2706
2707 TLVEpos.SetXYZM(positron->Px(),positron->Py(),positron->Pz(),electronMass);
2708 TLVEneg.SetXYZM(electron->Px(),electron->Py(),electron->Pz(),electronMass);
2709 TLVDalitz = TLVEpos + TLVEneg ;
2710 massDalitz = TLVDalitz.M();
2711 }
2712
2713
2714
ae947965 2715
0f8c33c1 2716 if(particle->GetPdgCode() == 111){
ae947965 2717
2718 hMCPi0InAccPt[fiCut]->Fill(particle->Pt() , weighted); // MC Pi0Dalitz with gamma and e+e- in acc
2d49ea4c 2719 hMCPi0DalitzGammaPt[fiCut]->Fill( gamma->Pt() );
2720 hMCPi0DalitzPositronPt[fiCut]->Fill( positron->Pt() );
2721 hMCPi0DalitzElectronPt[fiCut]->Fill( electron->Pt() );
ae947965 2722
f4d5bd23 2723 if ( fDoMesonQA )hMCPi0EposEnegInvMassPt[fiCut]->Fill(massDalitz,particle->Pt());
2724
2725
2726 }
2727 if(particle->GetPdgCode() == 221){
2728 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(), weighted ); // MC EtaDalitz with gamma and e+e- in acc
2d49ea4c 2729 if( fDoMesonQA ) hMCEtaEposEnegInvMassPt[fiCut]->Fill( massDalitz, particle->Pt());
0f8c33c1 2730 }
0f8c33c1 2731 }
ae947965 2732
2733
2734 }
0f8c33c1 2735 Int_t labelgammaChiC=-1;
2736 Int_t labelpositronChiC=-1;
2737 Int_t labelelectronChiC=-1;
2738
ae947965 2739 if(((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMCChiC(particle,fMCStack,labelelectronChiC,labelpositronChiC,labelgammaChiC,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift())){
2740
0f8c33c1 2741 hMCChiCPt[fiCut]->Fill(particle->Pt()); // All MC ChiC
2742 TParticle * gammaChiC =fMCStack->Particle(labelgammaChiC);
2743
2744 if( ((AliConversionCuts*)fCutGammaArray->At(fiCut))->PhotonIsSelectedMC( gammaChiC,fMCStack,kFALSE) &&
ae947965 2745 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelelectronChiC,fMCStack) &&
2746 ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelectedMC(labelpositronChiC,fMCStack) ){
0f8c33c1 2747 hMCChiCInAccPt[fiCut]->Fill(particle->Pt()); // All MC ChiC
2748 }
2749 }
2750 }
ccfa8c0d 2751}
2752//_____________________________________________________________________________
ae947965 2753Bool_t AliAnalysisTaskGammaConvDalitzV1::IsDalitz(TParticle *fMCMother) const
ccfa8c0d 2754{
2755
0f8c33c1 2756 if( fMCMother->GetNDaughters() != 3 ) return kFALSE;
2757 if( fMCMother->GetPdgCode() != 111 && fMCMother->GetPdgCode() != 221 ) return kFALSE;
2758
ae947965 2759
0f8c33c1 2760 TParticle *positron = 0x0;
2761 TParticle *electron = 0x0;
ae947965 2762 TParticle *gamma = 0x0;
0f8c33c1 2763
2764 for(Int_t index= fMCMother->GetFirstDaughter();index<= fMCMother->GetLastDaughter();index++){
2bb2434e 2765
0f8c33c1 2766 TParticle* temp = (TParticle*)fMCStack->Particle( index );
2767
2768 switch( temp->GetPdgCode() ) {
2769 case ::kPositron:
2770 positron = temp;
0f8c33c1 2771 break;
2772 case ::kElectron:
2773 electron = temp;
0f8c33c1 2774 break;
2775 case ::kGamma:
2776 gamma = temp;
0f8c33c1 2777 break;
2778 }
2779 }
2780
2781 if( positron && electron && gamma) return kTRUE;
2782
2783 return kFALSE;
a280ac15 2784}
ccfa8c0d 2785//_____________________________________________________________________________________
2786Bool_t AliAnalysisTaskGammaConvDalitzV1::IsPi0DalitzDaughter( Int_t label ) const
2787{
2788//
2789// Returns true if the particle comes from Pi0 -> e+ e- gamma
2790//
ccfa8c0d 2791
2792 Int_t motherLabel = fMCStack->Particle( label )->GetMother(0);
2793
ae947965 2794 if( motherLabel < 0 || motherLabel >= fMCStack->GetNtrack() ) return kFALSE;
ccfa8c0d 2795
2796 TParticle* mother = fMCStack->Particle( motherLabel );
ae947965 2797
2798 if( mother->GetPdgCode() != 111 ) return kFALSE;
2799
2800 if( IsDalitz( mother ) ) return kTRUE;
2801
2802
2803 return kFALSE;
ccfa8c0d 2804
ae947965 2805
d9d6352b 2806}
2807
2808void AliAnalysisTaskGammaConvDalitzV1::FillElectronQAHistos(AliAODConversionPhoton *Vgamma) const
2809{
2810
2811
2812 AliESDtrack *positronVgamma = 0;
2813 AliESDtrack *electronVgamma = 0;
2814
2815 Double_t clsToFPos = -1.0;
2816 Double_t clsToFNeg = -1.0;
f47b2bb5 2817
d9d6352b 2818
2819 Double_t NumClsITSPos = -1.0;
2820 Double_t NumClsITSNeg = -1.0;
2821 Double_t NumClsTPCPos = -1.0;
2822 Double_t NumClsTPCNeg = -1.0;
f47b2bb5 2823 Double_t nCrossedRowsTPCPos = -1.0;
2824 Double_t nCrossedRowsTPCNeg = -1.0;
2825
2826
d9d6352b 2827
2828 Float_t dcaToVertexXYPos = -1.0;
2829 Float_t dcaToVertexZPos = -1.0;
2830 Float_t dcaToVertexXYNeg = -1.0;
2831 Float_t dcaToVertexZNeg = -1.0;
2832
2833 Double_t nSigmaPosTPC = -999.;
2834 Double_t nSigmaNegTPC = -999.;
2835
2836 positronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelPositive() );
2837 electronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelNegative() );
2838 clsToFPos = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetNFindableClustersTPC(positronVgamma);
2839 clsToFNeg = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetNFindableClustersTPC(electronVgamma);
2840
2841 nSigmaPosTPC = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(positronVgamma, AliPID::kElectron) ;
2842 nSigmaNegTPC = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(electronVgamma, AliPID::kElectron) ;
2843
2844
2845
2846 NumClsITSPos = positronVgamma->GetNcls(0); //Get number of ITS clusters
2847 NumClsITSNeg = electronVgamma->GetNcls(0);
2848 NumClsTPCPos = positronVgamma->GetNcls(1); //Get number of TPC clusters
2849 NumClsTPCNeg = electronVgamma->GetNcls(1);
2850
f47b2bb5 2851 nCrossedRowsTPCPos = positronVgamma->GetTPCCrossedRows();
2852 nCrossedRowsTPCNeg = electronVgamma->GetTPCCrossedRows();
2853
2854
d9d6352b 2855
2856 Float_t bPos[2];
2857 Float_t bCovPos[3];
2858 positronVgamma->GetImpactParameters(bPos,bCovPos);
2859
2860 if (bCovPos[0]<=0 || bCovPos[2]<=0) {
2861 AliDebug(1, "Estimated b resolution lower or equal zero!");
2862 bCovPos[0]=0; bCovPos[2]=0;
2863 }
2864
2865 Float_t bNeg[2];
2866 Float_t bCovNeg[3];
2867 positronVgamma->GetImpactParameters(bNeg,bCovNeg);
2868
2869 if (bCovNeg[0]<=0 || bCovNeg[2]<=0) {
2870 AliDebug(1, "Estimated b resolution lower or equal zero!");
2871 bCovNeg[0]=0; bCovNeg[2]=0;
2872 }
2873
2874 dcaToVertexXYPos = bPos[0];
2875 dcaToVertexZPos = bPos[1];
2876 dcaToVertexXYNeg = bNeg[0];
2877 dcaToVertexZNeg = bNeg[1];
2878
2879 hESDDalitzElectronAfterPt[fiCut]->Fill( electronVgamma->Pt() );
2880 hESDDalitzPositronAfterPt[fiCut]->Fill( positronVgamma->Pt() );
2881
2882 hESDDalitzElectronAfterEta[fiCut]->Fill( electronVgamma->Eta() );
2883 hESDDalitzPositronAfterEta[fiCut]->Fill( positronVgamma->Eta() );
2884
2885 hESDDalitzElectronAfterPhi[fiCut]->Fill( electronVgamma->Phi() );
2886 hESDDalitzPositronAfterPhi[fiCut]->Fill( positronVgamma->Phi() );
2887
2888 hESDDalitzElectronAfterNFindClsTPC[fiCut]->Fill(clsToFNeg,electronVgamma->Pt());
2889 hESDDalitzPositronAfterNFindClsTPC[fiCut]->Fill(clsToFPos,positronVgamma->Pt());
2890
f47b2bb5 2891 hESDDalitzElectronAfterNClsTPC[fiCut]->Fill( NumClsTPCNeg,electronVgamma->Pt());
2892 hESDDalitzPositronAfterNClsTPC[fiCut]->Fill( NumClsTPCPos,positronVgamma->Pt());
2893
2894 hESDDalitzElectronAfterNCrossedRowsTPC[fiCut]->Fill( nCrossedRowsTPCNeg, electronVgamma->Pt() );
2895 hESDDalitzPositronAfterNCrossedRowsTPC[fiCut]->Fill( nCrossedRowsTPCPos, positronVgamma->Pt() );
d9d6352b 2896
2897 hESDDalitzElectronAfterNClsITS[fiCut]->Fill( NumClsITSNeg);
2898 hESDDalitzPositronAfterNClsITS[fiCut]->Fill( NumClsITSPos);
2899
2900 hESDDalitzPosEleAfterDCAxy[fiCut]->Fill( dcaToVertexXYNeg, electronVgamma->Pt() );
2901 hESDDalitzPosEleAfterDCAz[fiCut]->Fill( dcaToVertexZNeg, electronVgamma->Pt() );
2902 hESDDalitzPosEleAfterDCAxy[fiCut]->Fill( dcaToVertexXYPos, positronVgamma->Pt() );
2903 hESDDalitzPosEleAfterDCAz[fiCut]->Fill( dcaToVertexZPos, positronVgamma->Pt() );
2904
2905 hESDDalitzElectronAfterTPCdEdxVsP[fiCut]->Fill( electronVgamma->P(),nSigmaNegTPC);
2906 hESDDalitzPositronAfterTPCdEdxVsP[fiCut]->Fill( positronVgamma->P(), nSigmaPosTPC);
2907
2908 hESDDalitzElectronAfterTPCdEdxVsEta[fiCut]->Fill( electronVgamma->Eta(),nSigmaNegTPC);
2909 hESDDalitzPositronAfterTPCdEdxVsEta[fiCut]->Fill( positronVgamma->Eta(),nSigmaPosTPC);
2910
2911 hESDDalitzElectronAfterTPCdEdxVsPhi[fiCut]->Fill( electronVgamma->Phi(),nSigmaNegTPC);
2912 hESDDalitzPositronAfterTPCdEdxVsPhi[fiCut]->Fill( positronVgamma->Phi(),nSigmaPosTPC);
2913
2914
2915 hESDDalitzElectronAfterTPCdEdxSignalVsP[fiCut]->Fill( electronVgamma->P(), TMath::Abs(electronVgamma->GetTPCsignal()));
2916 hESDDalitzPositronAfterTPCdEdxSignalVsP[fiCut]->Fill( positronVgamma->P(), TMath::Abs(positronVgamma->GetTPCsignal()));
2917
2918
2919
ccfa8c0d 2920}
2921
2922
a280ac15 2923//_____________________________________________________________________________
2924Double_t AliAnalysisTaskGammaConvDalitzV1::GetPsiPair( const AliESDtrack *trackPos, const AliESDtrack *trackNeg ) const
2925{
2926 //
2927 // This angle is a measure for the contribution of the opening in polar
ae947965 2928 // direction ?0 to the opening angle ? Pair
a280ac15 2929 //
2930 // Ref. Measurement of photons via conversion pairs with the PHENIX experiment at RHIC
d9d6352b 2931 // Mas ter Thesis. Thorsten Dahms. 2005
a280ac15 2932 // https://twiki.cern.ch/twiki/pub/ALICE/GammaPhysicsPublications/tdahms_thesis.pdf
2933 //
2934 Double_t momPos[3];
2935 Double_t momNeg[3];
2936 if( trackPos->GetConstrainedPxPyPz(momPos) == 0 ) trackPos->GetPxPyPz( momPos );
2937 if( trackNeg->GetConstrainedPxPyPz(momNeg) == 0 ) trackNeg->GetPxPyPz( momNeg );
2938
2939 TVector3 posDaughter;
2940 TVector3 negDaughter;
2941
2942 posDaughter.SetXYZ( momPos[0], momPos[1], momPos[2] );
2943 negDaughter.SetXYZ( momNeg[0], momNeg[1], momNeg[2] );
2944
2945 Double_t deltaTheta = negDaughter.Theta() - posDaughter.Theta();
2946 Double_t openingAngle = posDaughter.Angle( negDaughter ); //TMath::ACos( posDaughter.Dot(negDaughter)/(negDaughter.Mag()*posDaughter.Mag()) );
2947
2948 if( openingAngle < 1e-20 ) return 0.;
2949
2950 Double_t psiAngle = TMath::ASin( deltaTheta/openingAngle );
2951
2952 return psiAngle;
4803eb1f 2953}