]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/GammaConv/AliAnalysisTaskGammaConvV1.cxx
Fixing bug in lumi part
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliAnalysisTaskGammaConvV1.cxx
CommitLineData
2bb2434e 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
0a2b2b4b 4 * Author: Martin Wilde, Daniel Lohner, Friederike Bock *
2bb2434e 5 * Version 1.0 *
6 * *
0a2b2b4b 7 * based on: on older version (see aliroot up to v5-04-42-AN) *
8 * AliAnalysisTaskGammaConversion.cxx *
9 * Authors: Kathrin Koch, Kenneth Aamodt, Ana Marin *
10 * *
2bb2434e 11 * Permission to use, copy, modify and distribute this software and its *
12 * documentation strictly for non-commercial purposes is hereby granted *
13 * without fee, provided that the above copyright notice appears in all *
14 * copies and that both the copyright notice and this permission notice *
15 * appear in the supporting documentation. The authors make no claims *
16 * about the suitability of this software for any purpose. It is *
17 * provided "as is" without express or implied warranty. *
18 **************************************************************************/
19
20////////////////////////////////////////////////
21//---------------------------------------------
ae947965 22
2bb2434e 23// Class used to do analysis on conversion pairs
24//---------------------------------------------
25///////////////////////////////////////////////
26#include "TChain.h"
27#include "TTree.h"
4803eb1f 28#include "TBranch.h"
29#include "TFile.h"
2bb2434e 30#include "TH1F.h"
31#include "TH2F.h"
32#include "TH3F.h"
33#include "THnSparse.h"
34#include "TCanvas.h"
35#include "TNtuple.h"
36#include "AliAnalysisTask.h"
37#include "AliAnalysisManager.h"
38#include "AliESDEvent.h"
39#include "AliESDInputHandler.h"
40#include "AliMCEventHandler.h"
41#include "AliMCEvent.h"
42#include "AliMCParticle.h"
43#include "AliCentrality.h"
44#include "AliESDVZERO.h"
45#include "AliESDpid.h"
46#include "AliAnalysisTaskGammaConvV1.h"
47#include "AliVParticle.h"
1390f698 48#include "AliESDtrack.h"
2bb2434e 49#include "AliESDtrackCuts.h"
50#include "AliKFVertex.h"
51#include "AliV0ReaderV1.h"
ca91a3e1 52#include "AliGenCocktailEventHeader.h"
e5b6e8a6 53#include "AliConversionAODBGHandlerRP.h"
ae947965 54#include "AliAODMCParticle.h"
55#include "AliAODMCHeader.h"
ae4f2cfb 56#include "AliEventplane.h"
2bb2434e 57
58ClassImp(AliAnalysisTaskGammaConvV1)
59
60//________________________________________________________________________
61AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(): AliAnalysisTaskSE(),
62 fV0Reader(NULL),
63 fBGHandler(NULL),
e5b6e8a6 64 fBGHandlerRP(NULL),
65 fInputEvent(NULL),
2bb2434e 66 fMCEvent(NULL),
67 fMCStack(NULL),
68 fCutFolder(NULL),
69 fESDList(NULL),
70 fBackList(NULL),
ca91a3e1 71 fMotherList(NULL),
4803eb1f 72 fPhotonDCAList(NULL),
73 fMesonDCAList(NULL),
2bb2434e 74 fTrueList(NULL),
75 fMCList(NULL),
ca91a3e1 76 fHeaderNameList(NULL),
2bb2434e 77 fOutputContainer(0),
78 fReaderGammas(NULL),
a280ac15 79 fGammaCandidates(NULL),
2bb2434e 80 fCutArray(NULL),
81 fConversionCuts(NULL),
ca91a3e1 82 fMesonCutArray(NULL),
83 fMesonCuts(NULL),
2bb2434e 84 hESDConvGammaPt(NULL),
ae4f2cfb 85 hESDConvGammaR(NULL),
86 hESDConvGammaEta(NULL),
4803eb1f 87 tESDConvGammaPtDcazCat(NULL),
88 fPtGamma(0),
89 fDCAzPhoton(0),
90 fRConvPhoton(0),
91 fEtaPhoton(0),
92 iCatPhoton(0),
93 iPhotonMCInfo(0),
2bb2434e 94 hESDMotherInvMassPt(NULL),
95 sESDMotherInvMassPtZM(NULL),
96 hESDMotherBackInvMassPt(NULL),
97 sESDMotherBackInvMassPtZM(NULL),
98 hESDMotherInvMassEalpha(NULL),
ae4f2cfb 99 hESDMotherPi0PtY(NULL),
100 hESDMotherEtaPtY(NULL),
101 hESDMotherPi0PtAlpha(NULL),
102 hESDMotherEtaPtAlpha(NULL),
ca9152d4
FB
103 hESDMotherPi0PtOpenAngle(NULL),
104 hESDMotherEtaPtOpenAngle(NULL),
1186afd2 105 hMCHeaders(NULL),
2bb2434e 106 hMCAllGammaPt(NULL),
2bb2434e 107 hMCDecayGammaPi0Pt(NULL),
2bb2434e 108 hMCDecayGammaRhoPt(NULL),
2bb2434e 109 hMCDecayGammaEtaPt(NULL),
2bb2434e 110 hMCDecayGammaOmegaPt(NULL),
2bb2434e 111 hMCDecayGammaEtapPt(NULL),
2bb2434e 112 hMCDecayGammaPhiPt(NULL),
e5b6e8a6 113 hMCDecayGammaSigmaPt(NULL),
2bb2434e 114 hMCConvGammaPt(NULL),
ca91a3e1 115 hMCConvGammaR(NULL),
116 hMCConvGammaEta(NULL),
2bb2434e 117 hMCPi0Pt(NULL),
ae947965 118 hMCPi0WOWeightPt(NULL),
2bb2434e 119 hMCEtaPt(NULL),
120 hMCPi0InAccPt(NULL),
121 hMCEtaInAccPt(NULL),
0a2b2b4b 122 hMCPi0PtY(NULL),
123 hMCEtaPtY(NULL),
ae947965 124 hMCK0sPt(NULL),
125 hMCK0sWOWeightPt(NULL),
126 hMCK0sPtY(NULL),
2bb2434e 127 hESDTrueMotherInvMassPt(NULL),
a280ac15 128 hESDTruePrimaryMotherInvMassPt(NULL),
526074e4 129 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
130 pESDTruePrimaryMotherWeightsInvMassPt(NULL),
0a2b2b4b 131 hESDTruePrimaryPi0MCPtResolPt(NULL),
132 hESDTruePrimaryEtaMCPtResolPt(NULL),
2bb2434e 133 hESDTrueSecondaryMotherInvMassPt(NULL),
2bb2434e 134 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
e5b6e8a6 135 hESDTrueK0sWithPi0DaughterMCPt(NULL),
136 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
137 hESDTrueEtaWithPi0DaughterMCPt(NULL),
2bb2434e 138 hESDTrueBckGGInvMassPt(NULL),
139 hESDTrueBckContInvMassPt(NULL),
ae4f2cfb 140 hESDTruePi0PtY(NULL),
141 hESDTrueEtaPtY(NULL),
142 hESDTruePi0PtAlpha(NULL),
143 hESDTrueEtaPtAlpha(NULL),
ca9152d4
FB
144 hESDTruePi0PtOpenAngle(NULL),
145 hESDTrueEtaPtOpenAngle(NULL),
2bb2434e 146 hESDTrueMotherDalitzInvMassPt(NULL),
2bb2434e 147 hESDTrueConvGammaPt(NULL),
e5b6e8a6 148 hESDCombinatorialPt(NULL),
2bb2434e 149 hESDTruePrimaryConvGammaPt(NULL),
2bb2434e 150 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
2bb2434e 151 hESDTrueSecondaryConvGammaPt(NULL),
2bb2434e 152 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
4803eb1f 153 hESDTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
1390f698 154 hESDTrueDalitzPsiPairDeltaPhi(NULL),
155 hESDTrueGammaPsiPairDeltaPhi(NULL),
2bb2434e 156 hNEvents(NULL),
157 hNGoodESDTracks(NULL),
a280ac15 158 hNGammaCandidates(NULL),
2bb2434e 159 hNV0Tracks(NULL),
ae947965 160 hEtaShift(NULL),
4803eb1f 161 tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
162 fInvMass(0),
163 fPt(0),
164 fDCAzGammaMin(0),
165 fDCAzGammaMax(0),
166 iFlag(0),
167 iMesonMCInfo(0),
ae4f2cfb 168 fEventPlaneAngle(-100),
2bb2434e 169 fRandom(0),
a280ac15 170 fnGammaCandidates(0),
2bb2434e 171 fUnsmearedPx(NULL),
172 fUnsmearedPy(NULL),
173 fUnsmearedPz(NULL),
174 fUnsmearedE(NULL),
ae947965 175 fMCStackPos(NULL),
176 fMCStackNeg(NULL),
1186afd2 177 fESDArrayPos(NULL),
178 fESDArrayNeg(NULL),
e5b6e8a6 179 fnCuts(0),
180 fiCut(0),
e5b6e8a6 181 fMoveParticleAccordingToVertex(kTRUE),
2bb2434e 182 fIsHeavyIon(kFALSE),
e5b6e8a6 183 fDoMesonAnalysis(kTRUE),
ae4f2cfb 184 fDoMesonQA(0),
185 fDoPhotonQA(0),
ae947965 186 fIsFromMBHeader(kTRUE),
187 fIsMC(kFALSE)
2bb2434e 188{
a280ac15 189
2bb2434e 190}
191
192//________________________________________________________________________
193AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
194 AliAnalysisTaskSE(name),
195 fV0Reader(NULL),
196 fBGHandler(NULL),
e5b6e8a6 197 fBGHandlerRP(NULL),
198 fInputEvent(NULL),
2bb2434e 199 fMCEvent(NULL),
200 fMCStack(NULL),
201 fCutFolder(NULL),
202 fESDList(NULL),
203 fBackList(NULL),
ca91a3e1 204 fMotherList(NULL),
4803eb1f 205 fPhotonDCAList(NULL),
206 fMesonDCAList(NULL),
2bb2434e 207 fTrueList(NULL),
208 fMCList(NULL),
ca91a3e1 209 fHeaderNameList(NULL),
2bb2434e 210 fOutputContainer(0),
211 fReaderGammas(NULL),
a280ac15 212 fGammaCandidates(NULL),
2bb2434e 213 fCutArray(NULL),
214 fConversionCuts(NULL),
ca91a3e1 215 fMesonCutArray(NULL),
216 fMesonCuts(NULL),
2bb2434e 217 hESDConvGammaPt(NULL),
ae4f2cfb 218 hESDConvGammaR(NULL),
219 hESDConvGammaEta(NULL),
4803eb1f 220 tESDConvGammaPtDcazCat(NULL),
221 fPtGamma(0),
222 fDCAzPhoton(0),
223 fRConvPhoton(0),
224 fEtaPhoton(0),
225 iCatPhoton(0),
226 iPhotonMCInfo(0),
2bb2434e 227 hESDMotherInvMassPt(NULL),
228 sESDMotherInvMassPtZM(NULL),
229 hESDMotherBackInvMassPt(NULL),
230 sESDMotherBackInvMassPtZM(NULL),
231 hESDMotherInvMassEalpha(NULL),
ae4f2cfb 232 hESDMotherPi0PtY(NULL),
233 hESDMotherEtaPtY(NULL),
234 hESDMotherPi0PtAlpha(NULL),
235 hESDMotherEtaPtAlpha(NULL),
ca9152d4
FB
236 hESDMotherPi0PtOpenAngle(NULL),
237 hESDMotherEtaPtOpenAngle(NULL),
1186afd2 238 hMCHeaders(NULL),
2bb2434e 239 hMCAllGammaPt(NULL),
2bb2434e 240 hMCDecayGammaPi0Pt(NULL),
2bb2434e 241 hMCDecayGammaRhoPt(NULL),
2bb2434e 242 hMCDecayGammaEtaPt(NULL),
2bb2434e 243 hMCDecayGammaOmegaPt(NULL),
2bb2434e 244 hMCDecayGammaEtapPt(NULL),
2bb2434e 245 hMCDecayGammaPhiPt(NULL),
e5b6e8a6 246 hMCDecayGammaSigmaPt(NULL),
2bb2434e 247 hMCConvGammaPt(NULL),
ca91a3e1 248 hMCConvGammaR(NULL),
249 hMCConvGammaEta(NULL),
2bb2434e 250 hMCPi0Pt(NULL),
ae947965 251 hMCPi0WOWeightPt(NULL),
2bb2434e 252 hMCEtaPt(NULL),
253 hMCPi0InAccPt(NULL),
254 hMCEtaInAccPt(NULL),
0a2b2b4b 255 hMCPi0PtY(NULL),
256 hMCEtaPtY(NULL),
ae947965 257 hMCK0sPt(NULL),
258 hMCK0sWOWeightPt(NULL),
259 hMCK0sPtY(NULL),
2bb2434e 260 hESDTrueMotherInvMassPt(NULL),
a280ac15 261 hESDTruePrimaryMotherInvMassPt(NULL),
526074e4 262 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
263 pESDTruePrimaryMotherWeightsInvMassPt(NULL),
0a2b2b4b 264 hESDTruePrimaryPi0MCPtResolPt(NULL),
265 hESDTruePrimaryEtaMCPtResolPt(NULL),
2bb2434e 266 hESDTrueSecondaryMotherInvMassPt(NULL),
2bb2434e 267 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
e5b6e8a6 268 hESDTrueK0sWithPi0DaughterMCPt(NULL),
269 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
270 hESDTrueEtaWithPi0DaughterMCPt(NULL),
2bb2434e 271 hESDTrueBckGGInvMassPt(NULL),
272 hESDTrueBckContInvMassPt(NULL),
ae4f2cfb 273 hESDTruePi0PtY(NULL),
274 hESDTrueEtaPtY(NULL),
275 hESDTruePi0PtAlpha(NULL),
276 hESDTrueEtaPtAlpha(NULL),
ca9152d4
FB
277 hESDTruePi0PtOpenAngle(NULL),
278 hESDTrueEtaPtOpenAngle(NULL),
2bb2434e 279 hESDTrueMotherDalitzInvMassPt(NULL),
2bb2434e 280 hESDTrueConvGammaPt(NULL),
e5b6e8a6 281 hESDCombinatorialPt(NULL),
2bb2434e 282 hESDTruePrimaryConvGammaPt(NULL),
2bb2434e 283 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
2bb2434e 284 hESDTrueSecondaryConvGammaPt(NULL),
2bb2434e 285 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
4803eb1f 286 hESDTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
1390f698 287 hESDTrueDalitzPsiPairDeltaPhi(NULL),
288 hESDTrueGammaPsiPairDeltaPhi(NULL),
2bb2434e 289 hNEvents(NULL),
290 hNGoodESDTracks(NULL),
a280ac15 291 hNGammaCandidates(NULL),
2bb2434e 292 hNV0Tracks(NULL),
ae947965 293 hEtaShift(NULL),
4803eb1f 294 tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
295 fInvMass(0),
296 fPt(0),
297 fDCAzGammaMin(0),
298 fDCAzGammaMax(0),
299 iFlag(0),
300 iMesonMCInfo(0),
ae4f2cfb 301 fEventPlaneAngle(-100),
2bb2434e 302 fRandom(0),
a280ac15 303 fnGammaCandidates(0),
2bb2434e 304 fUnsmearedPx(NULL),
305 fUnsmearedPy(NULL),
306 fUnsmearedPz(NULL),
307 fUnsmearedE(NULL),
ae947965 308 fMCStackPos(NULL),
309 fMCStackNeg(NULL),
1186afd2 310 fESDArrayPos(NULL),
311 fESDArrayNeg(NULL),
e5b6e8a6 312 fnCuts(0),
313 fiCut(0),
e5b6e8a6 314 fMoveParticleAccordingToVertex(kTRUE),
2bb2434e 315 fIsHeavyIon(kFALSE),
e5b6e8a6 316 fDoMesonAnalysis(kTRUE),
ae4f2cfb 317 fDoMesonQA(0),
318 fDoPhotonQA(0),
ae947965 319 fIsFromMBHeader(kTRUE),
320 fIsMC(kFALSE)
2bb2434e 321{
a280ac15 322 // Define output slots here
2bb2434e 323 DefineOutput(1, TList::Class());
324}
325
326AliAnalysisTaskGammaConvV1::~AliAnalysisTaskGammaConvV1()
327{
a280ac15 328 if(fGammaCandidates){
329 delete fGammaCandidates;
330 fGammaCandidates = 0x0;
2bb2434e 331 }
332 if(fBGHandler){
333 delete[] fBGHandler;
334 fBGHandler = 0x0;
335 }
e5b6e8a6 336 if(fBGHandlerRP){
337 delete[] fBGHandlerRP;
338 fBGHandlerRP = 0x0;
339 }
2bb2434e 340}
341//___________________________________________________________
342void AliAnalysisTaskGammaConvV1::InitBack(){
343
2bb2434e 344 const Int_t nDim = 4;
11c1e680 345 Int_t nBins[nDim] = {800,250,7,4};
2bb2434e 346 Double_t xMin[nDim] = {0,0, 0,0};
11c1e680 347 Double_t xMax[nDim] = {0.8,25,7,4};
4803eb1f 348
2bb2434e 349 sESDMotherInvMassPtZM = new THnSparseF*[fnCuts];
350 sESDMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
351
352 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
e5b6e8a6 353 fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
2bb2434e 354 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
e5b6e8a6 355 if (((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
356 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
357 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
11c1e680 358
359 Int_t collisionSystem = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(0,1));
360 Int_t centMin = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(1,1));
361 Int_t centMax = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(2,1));
362
363 if(collisionSystem == 1 || collisionSystem == 2 ||
364 collisionSystem == 5 || collisionSystem == 8 ||
365 collisionSystem == 9){
366 centMin = centMin*10;
367 centMax = centMax*10;
49af2ef8 368 if(centMax ==0 && centMax!=centMin) centMax=100;
11c1e680 369 }
370 else if(collisionSystem == 3 || collisionSystem == 6){
371 centMin = centMin*5;
372 centMax = centMax*5;
373 }
374 else if(collisionSystem == 4 || collisionSystem == 7){
375 centMin = ((centMin*5)+45);
376 centMax = ((centMax*5)+45);
377 }
378
e5b6e8a6 379 fBackList[iCut] = new TList();
380 fBackList[iCut]->SetName(Form("%s_%s Back histograms",cutstring.Data(),cutstringMeson.Data()));
381 fBackList[iCut]->SetOwner(kTRUE);
382 fCutFolder[iCut]->Add(fBackList[iCut]);
383
384 sESDMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
e5b6e8a6 385 fBackList[iCut]->Add(sESDMotherBackInvMassPtZM[iCut]);
386
387 fMotherList[iCut] = new TList();
388 fMotherList[iCut]->SetName(Form("%s_%s Mother histograms",cutstring.Data(),cutstringMeson.Data()));
389 fMotherList[iCut]->SetOwner(kTRUE);
390 fCutFolder[iCut]->Add(fMotherList[iCut]);
391
392 sESDMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
e5b6e8a6 393 fMotherList[iCut]->Add(sESDMotherInvMassPtZM[iCut]);
394
395 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
11c1e680 396 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
397 collisionSystem,centMin,centMax,
398 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents(),
399 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity());
400 fBGHandlerRP[iCut] = NULL;
e5b6e8a6 401 }
402 else{
403 fBGHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
404 ((AliConversionCuts*)fCutArray->At(fiCut))->IsHeavyIon(),
405 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
406 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
407 fBGHandler[iCut] = NULL;
408 }
2bb2434e 409 }
410 }
411}
412//________________________________________________________________________
413void AliAnalysisTaskGammaConvV1::UserCreateOutputObjects()
414{
415
416 // Create histograms
417 if(fOutputContainer != NULL){
418 delete fOutputContainer;
419 fOutputContainer = NULL;
420 }
421 if(fOutputContainer == NULL){
422 fOutputContainer = new TList();
423 fOutputContainer->SetOwner(kTRUE);
424 }
425
426 // Array of current cut's gammas
a280ac15 427 fGammaCandidates = new TList();
2bb2434e 428
429 fCutFolder = new TList*[fnCuts];
430 fESDList = new TList*[fnCuts];
431 fBackList = new TList*[fnCuts];
ca91a3e1 432 fMotherList = new TList*[fnCuts];
2bb2434e 433 hNEvents = new TH1I*[fnCuts];
434 hNGoodESDTracks = new TH1I*[fnCuts];
a280ac15 435 hNGammaCandidates = new TH1I*[fnCuts];
ca91a3e1 436 hNV0Tracks = new TH1I*[fnCuts];
4803eb1f 437 hEtaShift = new TProfile*[fnCuts];
0a2b2b4b 438 hESDConvGammaPt = new TH1F*[fnCuts];
ae947965 439
ae4f2cfb 440 if (fDoPhotonQA == 2){
4803eb1f 441 fPhotonDCAList = new TList*[fnCuts];
442 tESDConvGammaPtDcazCat = new TTree*[fnCuts];
0a2b2b4b 443 }
ae4f2cfb 444 if (fDoPhotonQA > 0){
445 hESDConvGammaR = new TH1F*[fnCuts];
446 hESDConvGammaEta = new TH1F*[fnCuts];
447 }
4803eb1f 448
2bb2434e 449 if(fDoMesonAnalysis){
450 hESDMotherInvMassPt = new TH2F*[fnCuts];
451 hESDMotherBackInvMassPt = new TH2F*[fnCuts];
452 hESDMotherInvMassEalpha = new TH2F*[fnCuts];
ae4f2cfb 453 if (fDoMesonQA == 2){
4803eb1f 454 fMesonDCAList = new TList*[fnCuts];
455 tESDMesonsInvMassPtDcazMinDcazMaxFlag = new TTree*[fnCuts];
0a2b2b4b 456 }
ae4f2cfb 457 if (fDoMesonQA > 0){
458 hESDMotherPi0PtY = new TH2F*[fnCuts];
459 hESDMotherEtaPtY = new TH2F*[fnCuts];
460 hESDMotherPi0PtAlpha = new TH2F*[fnCuts];
461 hESDMotherEtaPtAlpha = new TH2F*[fnCuts];
ca9152d4
FB
462 hESDMotherPi0PtOpenAngle = new TH2F*[fnCuts];
463 hESDMotherEtaPtOpenAngle = new TH2F*[fnCuts];
ae4f2cfb 464 }
2bb2434e 465 }
0a2b2b4b 466
2bb2434e 467 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
468
469 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
4803eb1f 470 TString cutstringMeson = "NoMesonCut";
471 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
e5b6e8a6 472
2bb2434e 473 fCutFolder[iCut] = new TList();
ca91a3e1 474 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s",cutstring.Data(),cutstringMeson.Data()));
2bb2434e 475 fCutFolder[iCut]->SetOwner(kTRUE);
476 fOutputContainer->Add(fCutFolder[iCut]);
477 fESDList[iCut] = new TList();
ca91a3e1 478 fESDList[iCut]->SetName(Form("%s_%s ESD histograms",cutstring.Data(),cutstringMeson.Data()));
2bb2434e 479 fESDList[iCut]->SetOwner(kTRUE);
a280ac15 480 fCutFolder[iCut]->Add(fESDList[iCut]);
2bb2434e 481
e5b6e8a6 482 hNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
483 hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
484 hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
485 hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
1186afd2 486 if (((AliConversionCuts*)fCutArray->At(iCut))->IsSpecialTrigger() == 4 ){
487 TString TriggerNames = "Not Trigger: ";
488 TriggerNames = TriggerNames+ ( (AliConversionCuts*)fCutArray->At(iCut))->GetSpecialTriggerName();
489 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,TriggerNames.Data());
490 } else {
491 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
492 }
e5b6e8a6 493 hNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
494 hNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
495 hNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
496 hNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
497 hNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
2bb2434e 498 fESDList[iCut]->Add(hNEvents[iCut]);
4803eb1f 499 if(fIsHeavyIon) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",4000,0,4000);
2bb2434e 500 else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
501 fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
a280ac15 502 if(fIsHeavyIon) hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",100,0,100);
503 else hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
504 fESDList[iCut]->Add(hNGammaCandidates[iCut]);
e5b6e8a6 505 if(fIsHeavyIon) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
2bb2434e 506 else hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2000,0,2000);
507 fESDList[iCut]->Add(hNV0Tracks[iCut]);
4803eb1f 508 hEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
ae947965 509 fESDList[iCut]->Add(hEtaShift[iCut]);
2bb2434e 510 hESDConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
511 fESDList[iCut]->Add(hESDConvGammaPt[iCut]);
0a2b2b4b 512
ae4f2cfb 513 if (fDoPhotonQA == 2){
4803eb1f 514 fPhotonDCAList[iCut] = new TList();
515 fPhotonDCAList[iCut]->SetName(Form("%s_%s Photon DCA tree",cutstring.Data(),cutstringMeson.Data()));
516 fPhotonDCAList[iCut]->SetOwner(kTRUE);
517 fCutFolder[iCut]->Add(fPhotonDCAList[iCut]);
518
519 tESDConvGammaPtDcazCat[iCut] = new TTree("ESD_ConvGamma_Pt_Dcaz_R_Eta","ESD_ConvGamma_Pt_Dcaz_R_Eta_Cat");
520 tESDConvGammaPtDcazCat[iCut]->Branch("Pt",&fPtGamma,"fPtGamma/F");
521 tESDConvGammaPtDcazCat[iCut]->Branch("DcaZPhoton",&fDCAzPhoton,"fDCAzPhoton/F");
522// tESDConvGammaPtDcazCat[iCut]->Branch("R",&fRConvPhoton,"fRConvPhoton/F");
523// tESDConvGammaPtDcazCat[iCut]->Branch("Eta",&fEtaPhoton,"fEtaPhoton/F");
524
525 tESDConvGammaPtDcazCat[iCut]->Branch("cat",&iCatPhoton,"iCatPhoton/b");
526 if(fIsMC){
527 tESDConvGammaPtDcazCat[iCut]->Branch("photonMCInfo",&iPhotonMCInfo,"iPhotonMCInfo/b");
528 }
529 fPhotonDCAList[iCut]->Add(tESDConvGammaPtDcazCat[iCut]);
0a2b2b4b 530 }
2bb2434e 531
ae4f2cfb 532 if (fDoPhotonQA > 0){
533 hESDConvGammaR[iCut] = new TH1F("ESD_ConvGamma_R","ESD_ConvGamma_R",800,0,200);
534 fESDList[iCut]->Add(hESDConvGammaR[iCut]);
d8b864f8 535 hESDConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",2000,-2,2);
ae4f2cfb 536 fESDList[iCut]->Add(hESDConvGammaEta[iCut]);
537 }
538
2bb2434e 539 if(fDoMesonAnalysis){
e5b6e8a6 540 hESDMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",800,0,0.8,250,0,25);
2bb2434e 541 fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
e5b6e8a6 542 hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",800,0,0.8,250,0,25);
2bb2434e 543 fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
e5b6e8a6 544 hESDMotherInvMassEalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_alpha","ESD_Mother_InvMass_vs_E_alpha",800,0,0.8,250,0,25);
2bb2434e 545 fESDList[iCut]->Add(hESDMotherInvMassEalpha[iCut]);
ae4f2cfb 546 if (fDoMesonQA == 2){
4803eb1f 547 fMesonDCAList[iCut] = new TList();
548 fMesonDCAList[iCut]->SetName(Form("%s_%s Meson DCA tree",cutstring.Data(),cutstringMeson.Data()));
549 fMesonDCAList[iCut]->SetOwner(kTRUE);
550 fCutFolder[iCut]->Add(fMesonDCAList[iCut]);
551
552 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut] = new TTree("ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag","ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag");
553 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("InvMass",&fInvMass,"fInvMass/F");
554 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("Pt",&fPt,"fPt/F");
555 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMin",&fDCAzGammaMin,"fDCAzGammaMin/F");
556 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMax",&fDCAzGammaMax,"fDCAzGammaMax/F");
557 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("kind",&iFlag,"iFlag/b");
558 if(fIsMC){
559 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("mesonMCInfo",&iMesonMCInfo,"iMesonMCInfo/b");
560 }
561 fMesonDCAList[iCut]->Add(tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]);
562
0a2b2b4b 563 }
ae4f2cfb 564 if (fDoMesonQA > 0 ){
d8b864f8
FB
565 hESDMotherPi0PtY[iCut] = new TH2F("ESD_MotherPi0_Pt_Y","ESD_MotherPi0_Pt_Y",250,0.03,25.,150,-1.5,1.5);
566 SetLogBinningXTH2(hESDMotherPi0PtY[iCut]);
ae4f2cfb 567 fESDList[iCut]->Add(hESDMotherPi0PtY[iCut]);
d8b864f8
FB
568 hESDMotherEtaPtY[iCut] = new TH2F("ESD_MotherEta_Pt_Y","ESD_MotherEta_Pt_Y",250,0.03,25.,150,-1.5,1.5);
569 SetLogBinningXTH2(hESDMotherEtaPtY[iCut]);
ae4f2cfb 570 fESDList[iCut]->Add(hESDMotherEtaPtY[iCut]);
d8b864f8
FB
571 hESDMotherPi0PtAlpha[iCut] = new TH2F("ESD_MotherPi0_Pt_Alpha","ESD_MotherPi0_Pt_Alpha",250,0.03,25.,100,0,1);
572 SetLogBinningXTH2(hESDMotherPi0PtAlpha[iCut]);
ae4f2cfb 573 fESDList[iCut]->Add(hESDMotherPi0PtAlpha[iCut]);
d8b864f8
FB
574 hESDMotherEtaPtAlpha[iCut] = new TH2F("ESD_MotherEta_Pt_Alpha","ESD_MotherEta_Pt_Alpha",250,0.03,25.,100,0,1);
575 SetLogBinningXTH2(hESDMotherEtaPtAlpha[iCut]);
ae4f2cfb 576 fESDList[iCut]->Add(hESDMotherEtaPtAlpha[iCut]);
ca9152d4
FB
577 hESDMotherPi0PtOpenAngle[iCut] = new TH2F("ESD_MotherPi0_Pt_OpenAngle","ESD_MotherPi0_Pt_OpenAngle",250,0.03,25.,200,0,2*TMath::Pi());
578 SetLogBinningXTH2(hESDMotherPi0PtOpenAngle[iCut]);
579 fESDList[iCut]->Add(hESDMotherPi0PtOpenAngle[iCut]);
580 hESDMotherEtaPtOpenAngle[iCut] = new TH2F("ESD_MotherEta_Pt_OpenAngle","ESD_MotherEta_Pt_OpenAngle",250,0.03,25.,200,0,2*TMath::Pi());
581 SetLogBinningXTH2(hESDMotherEtaPtOpenAngle[iCut]);
582 fESDList[iCut]->Add(hESDMotherEtaPtOpenAngle[iCut]);
ae4f2cfb 583 }
584
585
2bb2434e 586 }
587
0a2b2b4b 588
2bb2434e 589 }
2bb2434e 590 if(fDoMesonAnalysis){
591 InitBack(); // Init Background Handler
592 }
593
ae947965 594 if(fIsMC){
2bb2434e 595 // MC Histogramms
596 fMCList = new TList*[fnCuts];
597 // True Histogramms
598 fTrueList = new TList*[fnCuts];
ca91a3e1 599 // Selected Header List
600 fHeaderNameList = new TList*[fnCuts];
1186afd2 601 hMCHeaders = new TH1I*[fnCuts];
2bb2434e 602 hMCAllGammaPt = new TH1F*[fnCuts];
2bb2434e 603 hMCDecayGammaPi0Pt = new TH1F*[fnCuts];
2bb2434e 604 hMCDecayGammaRhoPt = new TH1F*[fnCuts];
ca91a3e1 605 hMCDecayGammaEtaPt = new TH1F*[fnCuts];
2bb2434e 606 hMCDecayGammaOmegaPt = new TH1F*[fnCuts];
2bb2434e 607 hMCDecayGammaEtapPt = new TH1F*[fnCuts];
2bb2434e 608 hMCDecayGammaPhiPt = new TH1F*[fnCuts];
e5b6e8a6 609 hMCDecayGammaSigmaPt = new TH1F*[fnCuts];
2bb2434e 610 hMCConvGammaPt = new TH1F*[fnCuts];
2bb2434e 611 hESDTrueConvGammaPt = new TH1F*[fnCuts];
e5b6e8a6 612
613 hESDCombinatorialPt = new TH2F*[fnCuts];
ca91a3e1 614 hESDTruePrimaryConvGammaPt = new TH1F*[fnCuts];
2bb2434e 615 hESDTruePrimaryConvGammaESDPtMCPt = new TH2F*[fnCuts];
2bb2434e 616 hESDTrueSecondaryConvGammaPt = new TH1F*[fnCuts];
2bb2434e 617 hESDTrueSecondaryConvGammaFromXFromK0sPt = new TH1F*[fnCuts];
4803eb1f 618 hESDTrueSecondaryConvGammaFromXFromLambdaPt = new TH1F*[fnCuts];
ca91a3e1 619
1390f698 620 hESDTrueDalitzPsiPairDeltaPhi= new TH2F*[fnCuts];
621 hESDTrueGammaPsiPairDeltaPhi= new TH2F*[fnCuts];
622
ae4f2cfb 623 if (fDoPhotonQA > 0){
0a2b2b4b 624 hMCConvGammaR = new TH1F*[fnCuts];
625 hMCConvGammaEta = new TH1F*[fnCuts];
0a2b2b4b 626 }
627
2bb2434e 628 if(fDoMesonAnalysis){
629 hMCPi0Pt = new TH1F*[fnCuts];
ae947965 630 hMCPi0WOWeightPt = new TH1F*[fnCuts];
2bb2434e 631 hMCEtaPt = new TH1F*[fnCuts];
632 hMCPi0InAccPt = new TH1F*[fnCuts];
633 hMCEtaInAccPt = new TH1F*[fnCuts];
2bb2434e 634
635 hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
a280ac15 636 hESDTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
526074e4 637 hESDTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
638 pESDTruePrimaryMotherWeightsInvMassPt = new TProfile2D*[fnCuts];
2bb2434e 639 hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
2bb2434e 640 hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
e5b6e8a6 641 hESDTrueSecondaryMotherFromEtaInvMassPt = new TH2F*[fnCuts];
86eaf9ae 642 hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
ae4f2cfb 643 if (fDoMesonQA > 0){
0a2b2b4b 644 hMCPi0PtY = new TH2F*[fnCuts];
645 hMCEtaPtY = new TH2F*[fnCuts];
ae947965 646 hMCK0sPt = new TH1F*[fnCuts];
647 hMCK0sWOWeightPt = new TH1F*[fnCuts];
648 hMCK0sPtY = new TH2F*[fnCuts];
0a2b2b4b 649 hESDTruePrimaryPi0MCPtResolPt = new TH2F*[fnCuts];
650 hESDTruePrimaryEtaMCPtResolPt = new TH2F*[fnCuts];
651 hESDTrueK0sWithPi0DaughterMCPt = new TH1F*[fnCuts];
652 hESDTrueEtaWithPi0DaughterMCPt = new TH1F*[fnCuts];
653 hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
654 hESDTrueBckContInvMassPt = new TH2F*[fnCuts];
ae4f2cfb 655 hESDTruePi0PtY = new TH2F*[fnCuts];
656 hESDTrueEtaPtY = new TH2F*[fnCuts];
657 hESDTruePi0PtAlpha = new TH2F*[fnCuts];
658 hESDTrueEtaPtAlpha = new TH2F*[fnCuts];
ca9152d4
FB
659 hESDTruePi0PtOpenAngle = new TH2F*[fnCuts];
660 hESDTrueEtaPtOpenAngle = new TH2F*[fnCuts];
0a2b2b4b 661 }
2bb2434e 662 }
663
664 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
665 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
4803eb1f 666 TString cutstringMeson = "NoMesonCut";
667 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
e5b6e8a6 668
669 fMCList[iCut] = new TList();
ca91a3e1 670 fMCList[iCut]->SetName(Form("%s_%s MC histograms",cutstring.Data(),cutstringMeson.Data()));
2bb2434e 671 fMCList[iCut]->SetOwner(kTRUE);
672 fCutFolder[iCut]->Add(fMCList[iCut]);
1186afd2 673 hMCHeaders[iCut] = new TH1I("MC_Headers","MC_Headers",20,0,20);
674 fMCList[iCut]->Add(hMCHeaders[iCut]);
2bb2434e 675 hMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
676 fMCList[iCut]->Add(hMCAllGammaPt[iCut]);
2bb2434e 677 hMCDecayGammaPi0Pt[iCut] = new TH1F("MC_DecayGammaPi0_Pt","MC_DecayGammaPi0_Pt",250,0,25);
678 fMCList[iCut]->Add(hMCDecayGammaPi0Pt[iCut]);
2bb2434e 679 hMCDecayGammaRhoPt[iCut] = new TH1F("MC_DecayGammaRho_Pt","MC_DecayGammaRho_Pt",250,0,25);
680 fMCList[iCut]->Add(hMCDecayGammaRhoPt[iCut]);
2bb2434e 681 hMCDecayGammaEtaPt[iCut] = new TH1F("MC_DecayGammaEta_Pt","MC_DecayGammaEta_Pt",250,0,25);
682 fMCList[iCut]->Add(hMCDecayGammaEtaPt[iCut]);
2bb2434e 683 hMCDecayGammaOmegaPt[iCut] = new TH1F("MC_DecayGammaOmega_Pt","MC_DecayGammaOmmega_Pt",250,0,25);
684 fMCList[iCut]->Add(hMCDecayGammaOmegaPt[iCut]);
2bb2434e 685 hMCDecayGammaEtapPt[iCut] = new TH1F("MC_DecayGammaEtap_Pt","MC_DecayGammaEtap_Pt",250,0,25);
686 fMCList[iCut]->Add(hMCDecayGammaEtapPt[iCut]);
2bb2434e 687 hMCDecayGammaPhiPt[iCut] = new TH1F("MC_DecayGammaPhi_Pt","MC_DecayGammaPhi_Pt",250,0,25);
688 fMCList[iCut]->Add(hMCDecayGammaPhiPt[iCut]);
e5b6e8a6 689 hMCDecayGammaSigmaPt[iCut] = new TH1F("MC_DecayGammaSigma_Pt","MC_DecayGammaSigma_Pt",250,0,25);
690 fMCList[iCut]->Add(hMCDecayGammaSigmaPt[iCut]);
2bb2434e 691 hMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
692 fMCList[iCut]->Add(hMCConvGammaPt[iCut]);
ae4f2cfb 693
694 if (fDoPhotonQA > 0){
0a2b2b4b 695 hMCConvGammaR[iCut] = new TH1F("MC_ConvGamma_R","MC_ConvGamma_R",800,0,200);
696 fMCList[iCut]->Add(hMCConvGammaR[iCut]);
697 hMCConvGammaEta[iCut] = new TH1F("MC_ConvGamma_Eta","MC_ConvGamma_Eta",100,-4,4);
698 fMCList[iCut]->Add(hMCConvGammaEta[iCut]);
0a2b2b4b 699 }
e5b6e8a6 700
2bb2434e 701 if(fDoMesonAnalysis){
702 hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
0a2b2b4b 703 hMCPi0Pt[iCut]->Sumw2();
2bb2434e 704 fMCList[iCut]->Add(hMCPi0Pt[iCut]);
ae947965 705 hMCPi0WOWeightPt[iCut] = new TH1F("MC_Pi0_WOWeights_Pt","MC_Pi0_WOWeights_Pt",250,0,25);
706 hMCPi0WOWeightPt[iCut]->Sumw2();
707 fMCList[iCut]->Add(hMCPi0WOWeightPt[iCut]);
708
2bb2434e 709 hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
0a2b2b4b 710 hMCEtaPt[iCut]->Sumw2();
2bb2434e 711 fMCList[iCut]->Add(hMCEtaPt[iCut]);
712 hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0InAcc_Pt","MC_Pi0InAcc_Pt",250,0,25);
0a2b2b4b 713 hMCPi0InAccPt[iCut]->Sumw2();
2bb2434e 714 fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
715 hMCEtaInAccPt[iCut] = new TH1F("MC_EtaInAcc_Pt","MC_EtaInAcc_Pt",250,0,25);
0a2b2b4b 716 hMCEtaInAccPt[iCut]->Sumw2();
2bb2434e 717 fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
ae4f2cfb 718 if (fDoMesonQA > 0){
d8b864f8 719 hMCPi0PtY[iCut] = new TH2F("MC_Pi0_Pt_Y","MC_Pi0_Pt_Y",250,0.03,25.,150,-1.5,1.5);
0a2b2b4b 720 hMCPi0PtY[iCut]->Sumw2();
d8b864f8 721 SetLogBinningXTH2(hMCPi0PtY[iCut]);
0a2b2b4b 722 fMCList[iCut]->Add(hMCPi0PtY[iCut]);
d8b864f8 723 hMCEtaPtY[iCut] = new TH2F("MC_Eta_Pt_Y","MC_Eta_Pt_Y",250,0.03,25.,150,-1.5,1.5);
0a2b2b4b 724 hMCEtaPtY[iCut]->Sumw2();
d8b864f8 725 SetLogBinningXTH2(hMCEtaPtY[iCut]);
0a2b2b4b 726 fMCList[iCut]->Add(hMCEtaPtY[iCut]);
ae947965 727 hMCK0sPt[iCut] = new TH1F("MC_K0s_Pt","MC_K0s_Pt",250,0,25);
728 hMCK0sPt[iCut]->Sumw2();
729 fMCList[iCut]->Add(hMCK0sPt[iCut]);
730 hMCK0sWOWeightPt[iCut] = new TH1F("MC_K0s_WOWeights_Pt","MC_K0s_WOWeights_Pt",250,0,25);
731 hMCK0sWOWeightPt[iCut]->Sumw2();
732 fMCList[iCut]->Add(hMCK0sWOWeightPt[iCut]);
d8b864f8 733 hMCK0sPtY[iCut] = new TH2F("MC_K0s_Pt_Y","MC_K0s_Pt_Y",250,0.03,25.,150,-1.5,1.5);
ae947965 734 hMCK0sPtY[iCut]->Sumw2();
d8b864f8 735 SetLogBinningXTH2(hMCK0sPtY[iCut]);
ae947965 736 fMCList[iCut]->Add(hMCK0sPtY[iCut]);
737
0a2b2b4b 738 }
739
2bb2434e 740 }
741 fTrueList[iCut] = new TList();
ca91a3e1 742 fTrueList[iCut]->SetName(Form("%s_%s True histograms",cutstring.Data(),cutstringMeson.Data()));
2bb2434e 743 fTrueList[iCut]->SetOwner(kTRUE);
744 fCutFolder[iCut]->Add(fTrueList[iCut]);
745
746 hESDTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
747 fTrueList[iCut]->Add(hESDTrueConvGammaPt[iCut]);
e5b6e8a6 748
749 hESDCombinatorialPt[iCut] = new TH2F("ESD_TrueCombinatorial_Pt","ESD_TrueCombinatorial_Pt",250,0,25,16,-0.5,15.5);
750 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 1,"Elec+Elec");
751 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 2,"Elec+Pion");
752 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 3,"Elec+Kaon");
753 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 4,"Elec+Proton");
754 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 5,"Elec+Muon");
755 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 6,"Pion+Pion");
756 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 7,"Pion+Kaon");
757 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 8,"Pion+Proton");
758 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 9,"Pion+Muon");
759 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(10,"Kaon+Kaon");
760 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(11,"Kaon+Proton");
761 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(12,"Kaon+Muon");
762 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(13,"Proton+Proton");
763 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(14,"Proton+Muon");
764 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(15,"Muon+Muon");
765 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(16,"Rest");
766 fTrueList[iCut]->Add(hESDCombinatorialPt[iCut]);
2bb2434e 767 hESDTruePrimaryConvGammaPt[iCut] = new TH1F("ESD_TruePrimaryConvGamma_Pt","ESD_TruePrimaryConvGamma_Pt",250,0,25);
768 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaPt[iCut]);
2bb2434e 769 hESDTrueSecondaryConvGammaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGamma_Pt","ESD_TrueSecondaryConvGamma_Pt",250,0,25);
770 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaPt[iCut]);
0a2b2b4b 771
e5b6e8a6 772 hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]
773 = new TH1F("ESD_TrueSecondaryConvGammaFromXFromK0s_Pt", "ESD_TrueSecondaryConvGammaFromXFromK0s_Pt",250,0,25);
2bb2434e 774 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]);
4803eb1f 775 hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]
776 = new TH1F("ESD_TrueSecondaryConvGammaFromXFromLambda_Pt", "ESD_TrueSecondaryConvGammaFromXFromLambda_Pt",250,0,25);
777 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]);
778
1390f698 779 hESDTrueDalitzPsiPairDeltaPhi[iCut]
780 = new TH2F("ESD_TrueDalitzPsiPairDeltaPhi_Pt", "ESD_TrueDalitzPsiPairDeltaPhi_Pt",400,-2,2,400,-2,2);
781 fTrueList[iCut]->Add(hESDTrueDalitzPsiPairDeltaPhi[iCut]);
782
783 hESDTrueGammaPsiPairDeltaPhi[iCut]
784 = new TH2F("ESD_TrueGammaPsiPairDeltaPhi_Pt", "ESD_TrueGammaPsiPairDeltaPhi_Pt",200,-2,2,400,-2,2);
785 fTrueList[iCut]->Add(hESDTrueGammaPsiPairDeltaPhi[iCut]);
786
787
2bb2434e 788 hESDTruePrimaryConvGammaESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryConvGammaESD_PtMCPt", "ESD_TruePrimaryConvGammaESD_PtMCPt",250,0,25,250,0,25);
789 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaESDPtMCPt[iCut]);
ae4f2cfb 790
2bb2434e 791 if(fDoMesonAnalysis){
e5b6e8a6 792 hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
2bb2434e 793 fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
a280ac15 794 hESDTruePrimaryMotherInvMassPt[iCut]
795 = new TH2F("ESD_TruePrimaryMother_InvMass_Pt", "ESD_TruePrimaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
0a2b2b4b 796 hESDTruePrimaryMotherInvMassPt[iCut]->Sumw2();
a280ac15 797 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassPt[iCut]);
526074e4 798 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]
799 = new TH2F("ESD_TruePrimaryMotherW0Weights_InvMass_Pt", "ESD_TruePrimaryMotherW0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
800 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
801 fTrueList[iCut]->Add(hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]);
802 pESDTruePrimaryMotherWeightsInvMassPt[iCut]
803 = new TProfile2D("ESD_TruePrimaryMotherWeights_InvMass_Pt", "ESD_TruePrimaryMotherWeights_InvMass_Pt", 800,0,0.8,250,0,25);
804 pESDTruePrimaryMotherWeightsInvMassPt[iCut]->Sumw2();
805 fTrueList[iCut]->Add(pESDTruePrimaryMotherWeightsInvMassPt[iCut]);
e5b6e8a6 806 hESDTrueSecondaryMotherInvMassPt[iCut]
807 = new TH2F("ESD_TrueSecondaryMother_InvMass_Pt", "ESD_TrueSecondaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
ae947965 808 hESDTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
2bb2434e 809 fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
e5b6e8a6 810 hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]
811 = new TH2F("ESD_TrueSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueSecondaryMotherFromK0s_InvMass_Pt",800,0,0.8,250,0,25);
ae947965 812 hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]->Sumw2();
2bb2434e 813 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
e5b6e8a6 814 hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]
815 = new TH2F("ESD_TrueSecondaryMotherFromEta_InvMass_Pt","ESD_TrueSecondaryMotherFromEta_InvMass_Pt",800,0,0.8,250,0,25);
816 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]);
86eaf9ae 817 hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueDalitz_InvMass_Pt","ESD_TrueDalitz_InvMass_Pt",800,0,0.8,250,0,25);
818 fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);
ae4f2cfb 819 if (fDoMesonQA > 0){
d8b864f8 820 hESDTruePrimaryPi0MCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryPi0_MCPt_ResolPt","ESD_TruePrimaryPi0_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
0a2b2b4b 821 hESDTruePrimaryPi0MCPtResolPt[iCut]->Sumw2();
d8b864f8 822 SetLogBinningXTH2(hESDTruePrimaryPi0MCPtResolPt[iCut]);
0a2b2b4b 823 fTrueList[iCut]->Add(hESDTruePrimaryPi0MCPtResolPt[iCut]);
d8b864f8 824 hESDTruePrimaryEtaMCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryEta_MCPt_ResolPt","ESD_TruePrimaryEta_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
0a2b2b4b 825 hESDTruePrimaryEtaMCPtResolPt[iCut]->Sumw2();
d8b864f8 826 SetLogBinningXTH2(hESDTruePrimaryEtaMCPtResolPt[iCut]);
0a2b2b4b 827 fTrueList[iCut]->Add(hESDTruePrimaryEtaMCPtResolPt[iCut]);
828 hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueBckGG_InvMass_Pt","ESD_TrueBckGG_InvMass_Pt",800,0,0.8,250,0,25);
829 fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
830 hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueBckCont_InvMass_Pt","ESD_TrueBckCont_InvMass_Pt",800,0,0.8,250,0,25);
831 fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
0a2b2b4b 832 hESDTrueK0sWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueK0sWithPi0Daughter_MCPt","ESD_TrueK0sWithPi0Daughter_MCPt",250,0,25);
833 fTrueList[iCut]->Add(hESDTrueK0sWithPi0DaughterMCPt[iCut]);
834 hESDTrueEtaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueEtaWithPi0Daughter_MCPt","ESD_TrueEtaWithPi0Daughter_MCPt",250,0,25);
835 fTrueList[iCut]->Add(hESDTrueEtaWithPi0DaughterMCPt[iCut]);
d8b864f8
FB
836 hESDTruePi0PtY[iCut] = new TH2F("ESD_TruePi0_Pt_Y","ESD_TruePi0_Pt_Y",250,0.03,25.,150,-1.5,1.5);
837 SetLogBinningXTH2(hESDTruePi0PtY[iCut]);
ae4f2cfb 838 fTrueList[iCut]->Add(hESDTruePi0PtY[iCut]);
d8b864f8
FB
839 hESDTrueEtaPtY[iCut] = new TH2F("ESD_TrueEta_Pt_Y","ESD_TrueEta_Pt_Y",250,0.03,25.,150,-1.5,1.5);
840 SetLogBinningXTH2(hESDTrueEtaPtY[iCut]);
ae4f2cfb 841 fTrueList[iCut]->Add(hESDTrueEtaPtY[iCut]);
d8b864f8
FB
842 hESDTruePi0PtAlpha[iCut] = new TH2F("ESD_TruePi0_Pt_Alpha","ESD_TruePi0_Pt_Alpha",250,0.03,25.,100,0,1);
843 SetLogBinningXTH2(hESDTruePi0PtAlpha[iCut]);
ae4f2cfb 844 fTrueList[iCut]->Add(hESDTruePi0PtAlpha[iCut]);
d8b864f8
FB
845 hESDTrueEtaPtAlpha[iCut] = new TH2F("ESD_TrueEta_Pt_Alpha","ESD_TrueEta_Pt_Alpha",250,0.03,25.,100,0,1);
846 SetLogBinningXTH2(hESDTrueEtaPtAlpha[iCut]);
ae4f2cfb 847 fTrueList[iCut]->Add(hESDTrueEtaPtAlpha[iCut]);
848
ca9152d4
FB
849 hESDTruePi0PtOpenAngle[iCut] = new TH2F("ESD_TruePi0_Pt_OpenAngle","ESD_TruePi0_Pt_OpenAngle",250,0.03,25.,200,0,2*TMath::Pi());
850 SetLogBinningXTH2(hESDTruePi0PtOpenAngle[iCut]);
851 fTrueList[iCut]->Add(hESDTruePi0PtOpenAngle[iCut]);
852 hESDTrueEtaPtOpenAngle[iCut] = new TH2F("ESD_TrueEta_Pt_OpenAngle","ESD_TrueEta_Pt_OpenAngle",250,0.03,25.,200,0,2*TMath::Pi());
853 SetLogBinningXTH2(hESDTrueEtaPtOpenAngle[iCut]);
854 fTrueList[iCut]->Add(hESDTrueEtaPtOpenAngle[iCut]);
855
0a2b2b4b 856 }
ca91a3e1 857 }
a280ac15 858 }
859 }
860
a280ac15 861 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
862 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
e5b6e8a6 863
a280ac15 864 if(fV0Reader)
865 if((AliConversionCuts*)fV0Reader->GetConversionCuts())
866 if(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
867 fOutputContainer->Add(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
e5b6e8a6 868
a280ac15 869 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
870 if(!((AliConversionCuts*)fCutArray->At(iCut))) continue;
871 if(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms()){
872 fCutFolder[iCut]->Add(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms());
873 }
4803eb1f 874 if(fDoMesonAnalysis){
875 if(!((AliConversionMesonCuts*)fMesonCutArray->At(iCut))) continue;
876 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms()){
877 fCutFolder[iCut]->Add(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms());
878 }
2bb2434e 879 }
880 }
2bb2434e 881 PostData(1, fOutputContainer);
882}
11c1e680 883//_____________________________________________________________________________
884Bool_t AliAnalysisTaskGammaConvV1::Notify()
885{
ccfa8c0d 886 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
4803eb1f 887 if(!((AliConversionCuts*)fCutArray->At(iCut))->GetDoEtaShift()){
1390f698 888 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
4803eb1f 889 continue; // No Eta Shift requested, continue
890 }
ccfa8c0d 891 if(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
4803eb1f 892 ((AliConversionCuts*)fCutArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
893 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
ccfa8c0d 894 ((AliConversionCuts*)fCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
895 continue;
896 }
897 else{
898 printf(" Gamma Conversion Task %s :: Eta Shift Manually Set to %f \n\n",
899 (((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift());
4803eb1f 900 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
ccfa8c0d 901 ((AliConversionCuts*)fCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
11c1e680 902 }
903 }
ccfa8c0d 904
11c1e680 905 return kTRUE;
906}
2bb2434e 907//_____________________________________________________________________________
908void AliAnalysisTaskGammaConvV1::UserExec(Option_t *)
909{
910 //
911 // Called for each event
912 //
2bb2434e 913 Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
e5b6e8a6 914 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
2bb2434e 915 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
916 hNEvents[iCut]->Fill(eventQuality);
917 }
918 return;
919 }
920
ae947965 921 if(fIsMC) fMCEvent = MCEvent();
4803eb1f 922 if(fMCEvent == NULL) fIsMC = kFALSE;
923
ae947965 924 fInputEvent = InputEvent();
925
4803eb1f 926 if(fIsMC && fInputEvent->IsA()==AliESDEvent::Class()){
e5b6e8a6 927 fMCStack = fMCEvent->Stack();
4803eb1f 928 if(fMCStack == NULL) fIsMC = kFALSE;
e5b6e8a6 929 }
e5b6e8a6 930
2bb2434e 931 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
4803eb1f 932
e5b6e8a6 933 // ------------------- BeginEvent ----------------------------
934
ae4f2cfb 935 AliEventplane *EventPlane = fInputEvent->GetEventplane();
936 if(fIsHeavyIon)fEventPlaneAngle = EventPlane->GetEventplane("V0",fInputEvent,2);
937 else fEventPlaneAngle=0.0;
938
4803eb1f 939 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
ae947965 940 RelabelAODPhotonCandidates(kTRUE); // In case of AODMC relabeling MC
1186afd2 941 fV0Reader->RelabelAODs(kTRUE);
942 }
2bb2434e 943 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
944 fiCut = iCut;
e5b6e8a6 945 Int_t eventNotAccepted =
946 ((AliConversionCuts*)fCutArray->At(iCut))
947 ->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
948 if(eventNotAccepted){
ccfa8c0d 949 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
e5b6e8a6 950 hNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
2bb2434e 951 continue;
952 }
e5b6e8a6 953
954 if(eventQuality != 0){// Event Not Accepted
ccfa8c0d 955 // cout << "event rejected due to: " <<eventQuality << endl;
e5b6e8a6 956 hNEvents[iCut]->Fill(eventQuality);
957 continue;
958 }
2bb2434e 959
a280ac15 960 hNEvents[iCut]->Fill(eventQuality); // Should be 0 here
4803eb1f 961 hNGoodESDTracks[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks());
ccfa8c0d 962 if(((AliConversionCuts*)fCutArray->At(iCut))->IsHeavyIon() == 2) hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A());
963 else hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
e5b6e8a6 964
4803eb1f 965 if(fIsMC){
ae947965 966 // Process MC Particle
ca91a3e1 967 if(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection() != 0){
ae947965 968 if(fInputEvent->IsA()==AliESDEvent::Class()){
969 ((AliConversionCuts*)fCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection(),
970 ((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader(),
971 fMCEvent);
972 }
973 else if(fInputEvent->IsA()==AliAODEvent::Class()){
974 ((AliConversionCuts*)fCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection(),
975 ((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader(),
976 fInputEvent);
977 }
1186afd2 978
4803eb1f 979 if(((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader()){
980 for(Int_t i = 0;i<(((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader())->GetEntries();i++){
981 TString nameBin= hMCHeaders[iCut]->GetXaxis()->GetBinLabel(i+1);
982 if (nameBin.CompareTo("")== 0){
983 TString nameHeader = ((TObjString*)((TList*)((AliConversionCuts*)fCutArray->At(iCut))
984 ->GetAcceptedHeader())->At(i))->GetString();
985 hMCHeaders[iCut]->GetXaxis()->SetBinLabel(i+1,nameHeader.Data());
986 }
1186afd2 987 }
988 }
ca91a3e1 989 }
ae947965 990 }
4803eb1f 991 if(fIsMC){
ae947965 992 if(fInputEvent->IsA()==AliESDEvent::Class())
993 ProcessMCParticles();
994 if(fInputEvent->IsA()==AliAODEvent::Class())
995 ProcessAODMCParticles();
2bb2434e 996 }
a280ac15 997
2bb2434e 998 ProcessPhotonCandidates(); // Process this cuts gammas
999
a280ac15 1000 hNGammaCandidates[iCut]->Fill(fGammaCandidates->GetEntries());
2bb2434e 1001 if(fDoMesonAnalysis){ // Meson Analysis
4803eb1f 1002 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
a280ac15 1003 fUnsmearedPx = new Double_t[fGammaCandidates->GetEntries()]; // Store unsmeared Momenta
1004 fUnsmearedPy = new Double_t[fGammaCandidates->GetEntries()];
1005 fUnsmearedPz = new Double_t[fGammaCandidates->GetEntries()];
1006 fUnsmearedE = new Double_t[fGammaCandidates->GetEntries()];
1007
1008 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1009 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Px();
1010 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Py();
1011 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Pz();
1012 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->E();
1013 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(gamma)));
2bb2434e 1014 }
1015 }
ca91a3e1 1016
2bb2434e 1017 CalculatePi0Candidates(); // Combine Gammas
e5b6e8a6 1018 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
1019 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
1020 CalculateBackground(); // Combinatorial Background
1021 UpdateEventByEventData(); // Store Event for mixed Events
1022 }
1023 else{
1024 CalculateBackgroundRP(); // Combinatorial Background
a280ac15 1025 fBGHandlerRP[iCut]->AddEvent(fGammaCandidates,fInputEvent); // Store Event for mixed Events
e5b6e8a6 1026 }
1027 }
4803eb1f 1028 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
a280ac15 1029 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1030 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
1031 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPy(fUnsmearedPy[gamma]);
1032 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPz(fUnsmearedPz[gamma]);
1033 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetE(fUnsmearedE[gamma]);
2bb2434e 1034 }
1035 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
1036 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
1037 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
1038 delete[] fUnsmearedE; fUnsmearedE = 0x0;
1039 }
1040 }
a280ac15 1041 fGammaCandidates->Clear(); // delete this cuts good gammas
ca91a3e1 1042 }
e5b6e8a6 1043
4803eb1f 1044 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
ae947965 1045 RelabelAODPhotonCandidates(kFALSE); // Back to ESDMC Label
1186afd2 1046 fV0Reader->RelabelAODs(kFALSE);
1047 }
1048
2bb2434e 1049 PostData(1, fOutputContainer);
1050}
1051//________________________________________________________________________
1052void AliAnalysisTaskGammaConvV1::ProcessPhotonCandidates()
1053{
1054 Int_t nV0 = 0;
a280ac15 1055 TList *GammaCandidatesStepOne = new TList();
1056 TList *GammaCandidatesStepTwo = new TList();
2bb2434e 1057 // Loop over Photon Candidates allocated by ReaderV1
1058 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
1059 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
1060 if(!PhotonCandidate) continue;
a280ac15 1061 fIsFromMBHeader = kTRUE;
4803eb1f 1062 if(fIsMC && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
a280ac15 1063 Int_t isPosFromMBHeader
ae947965 1064 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
a280ac15 1065 if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1066 Int_t isNegFromMBHeader
ae947965 1067 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
a280ac15 1068 if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1069
1070 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
ca91a3e1 1071 }
1072
e5b6e8a6 1073 if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fInputEvent)) continue;
ae4f2cfb 1074 if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(PhotonCandidate->GetPhotonPhi(),fEventPlaneAngle)) continue;
ca91a3e1 1075 if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
e5b6e8a6 1076 !((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
a280ac15 1077 fGammaCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
e5b6e8a6 1078
a280ac15 1079 if(fIsFromMBHeader){
e5b6e8a6 1080 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
ae4f2cfb 1081 if (fDoPhotonQA > 0){
1082 hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1083 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1084 }
e5b6e8a6 1085 }
4803eb1f 1086 if(fIsMC){
ae947965 1087 if(fInputEvent->IsA()==AliESDEvent::Class())
1088 ProcessTruePhotonCandidates(PhotonCandidate);
1089 if(fInputEvent->IsA()==AliAODEvent::Class())
1090 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
2bb2434e 1091 }
ae4f2cfb 1092 if (fIsFromMBHeader && fDoPhotonQA == 2){
4803eb1f 1093 if (fIsHeavyIon && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1094 fPtGamma = PhotonCandidate->Pt();
1095 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1096 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1097 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1098 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1099 tESDConvGammaPtDcazCat[fiCut]->Fill();
1100 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1101 fPtGamma = PhotonCandidate->Pt();
1102 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1103 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1104 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1105 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1106 tESDConvGammaPtDcazCat[fiCut]->Fill();
1107 }
1108 }
1109 } else if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
2bb2434e 1110 ((AliConversionCuts*)fCutArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
1111 nV0++;
a280ac15 1112 GammaCandidatesStepOne->Add(PhotonCandidate);
4803eb1f 1113 } else if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
2bb2434e 1114 ((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
a280ac15 1115 GammaCandidatesStepTwo->Add(PhotonCandidate);
2bb2434e 1116 }
1117 }
1118 if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){
a280ac15 1119 for(Int_t i = 0;i<GammaCandidatesStepOne->GetEntries();i++){
1120 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GammaCandidatesStepOne->At(i);
2bb2434e 1121 if(!PhotonCandidate) continue;
a280ac15 1122 fIsFromMBHeader = kTRUE;
ae947965 1123 if(fMCStack && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
a280ac15 1124 Int_t isPosFromMBHeader
ae947965 1125 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
a280ac15 1126 Int_t isNegFromMBHeader
ae947965 1127 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
a280ac15 1128 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
e5b6e8a6 1129 }
a280ac15 1130 if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GammaCandidatesStepOne->GetEntries())) continue;
ca91a3e1 1131 if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
a280ac15 1132 fGammaCandidates->Add(PhotonCandidate);
1133 if(fIsFromMBHeader){
e5b6e8a6 1134 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
ae4f2cfb 1135 if (fDoPhotonQA > 0){
1136 hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1137 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1138 }
e5b6e8a6 1139 }
ae947965 1140 }
4803eb1f 1141 if(fIsMC){
ae947965 1142 if(fInputEvent->IsA()==AliESDEvent::Class())
2bb2434e 1143 ProcessTruePhotonCandidates(PhotonCandidate);
ae947965 1144 if(fInputEvent->IsA()==AliAODEvent::Class())
1145 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
4803eb1f 1146 } else GammaCandidatesStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
1147
ae4f2cfb 1148 if (fIsFromMBHeader && fDoPhotonQA == 2){
4803eb1f 1149 if (fIsHeavyIon && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1150 fPtGamma = PhotonCandidate->Pt();
1151 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1152 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1153 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1154 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1155 tESDConvGammaPtDcazCat[fiCut]->Fill();
1156 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1157 fPtGamma = PhotonCandidate->Pt();
1158 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1159 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1160 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1161 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1162 tESDConvGammaPtDcazCat[fiCut]->Fill();
1163 }
2bb2434e 1164 }
2bb2434e 1165 }
1166 }
1167 if(((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
a280ac15 1168 for(Int_t i = 0;i<GammaCandidatesStepTwo->GetEntries();i++){
1169 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GammaCandidatesStepTwo->At(i);
2bb2434e 1170 if(!PhotonCandidate) continue;
a280ac15 1171 fIsFromMBHeader = kTRUE;
ae947965 1172 if(fMCStack && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
a280ac15 1173 Int_t isPosFromMBHeader
ae947965 1174 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
a280ac15 1175 Int_t isNegFromMBHeader
ae947965 1176 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
a280ac15 1177 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
e5b6e8a6 1178 }
a280ac15 1179 if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GammaCandidatesStepTwo,i)) continue;
1180 fGammaCandidates->Add(PhotonCandidate); // Add gamma to current cut TList
1181 if(fIsFromMBHeader){
e5b6e8a6 1182 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
ae4f2cfb 1183 if (fDoPhotonQA > 0){
1184 hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1185 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1186 }
e5b6e8a6 1187 }
4803eb1f 1188 if(fIsMC){
ae947965 1189 if(fInputEvent->IsA()==AliESDEvent::Class())
1190 ProcessTruePhotonCandidates(PhotonCandidate);
1191 if(fInputEvent->IsA()==AliAODEvent::Class())
1192 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
2bb2434e 1193 }
4803eb1f 1194 if (fIsFromMBHeader){
1195 if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1196 fPtGamma = PhotonCandidate->Pt();
1197 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1198 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1199 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1200 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1201 tESDConvGammaPtDcazCat[fiCut]->Fill();
1202 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1203 fPtGamma = PhotonCandidate->Pt();
1204 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1205 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1206 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1207 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1208 tESDConvGammaPtDcazCat[fiCut]->Fill();
1209 }
1210 }
2bb2434e 1211 }
1212 }
1213
a280ac15 1214 delete GammaCandidatesStepOne;
1215 GammaCandidatesStepOne = 0x0;
1216 delete GammaCandidatesStepTwo;
1217 GammaCandidatesStepTwo = 0x0;
2bb2434e 1218
ae947965 1219}
1220//________________________________________________________________________
1221void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidatesAOD(AliAODConversionPhoton *TruePhotonCandidate)
1222{
1223
1390f698 1224 Double_t magField = fInputEvent->GetMagneticField();
1225 if( magField < 0.0 ){
1226 magField = 1.0;
1227 }
1228 else {
1229 magField = -1.0;
1230 }
1231
ae947965 1232 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1233 AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
1234 AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
4803eb1f 1235 iPhotonMCInfo = 0;
ae947965 1236
1237 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1238 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1239
1240 if(posDaughter->GetMother() != negDaughter->GetMother()){
1241 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
4803eb1f 1242 iPhotonMCInfo = 1;
ae947965 1243 return;
1244 }
1245 else if(posDaughter->GetMother() == -1){
1246 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
4803eb1f 1247 iPhotonMCInfo = 1;
ae947965 1248 return;
1249 }
1250
4803eb1f 1251 if(pdgCode[0]!=11 || pdgCode[1]!=11){
1252 iPhotonMCInfo = 1;
1253 return; //One Particle is not a electron
1254 }
1255 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()){
1256 iPhotonMCInfo = 1;
1257 return; // Same Charge
1258 }
1259
1390f698 1260 AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
1261 AliVTrack * electronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
1262 AliVTrack * positronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
1263 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
1264
1265 if(Photon->GetPdgCode() != 22){
1266 hESDTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1267 iPhotonMCInfo = 1;
1268 return; // Mother is no Photon
1269 }
1270
4803eb1f 1271 if(((posDaughter->GetMCProcessCode())) != 5 || ((negDaughter->GetMCProcessCode())) != 5){
1272 iPhotonMCInfo = 1;
1273 return;// check if the daughters come from a conversion
1274 }
ae947965 1275 // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
1276
1390f698 1277
1278
ae947965 1279 // True Photon
1280 if(fIsFromMBHeader)hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1390f698 1281 hESDTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
4803eb1f 1282 if(Photon->IsPrimary()){
ae947965 1283 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1284 if(fIsFromMBHeader){
4803eb1f 1285 iPhotonMCInfo = 6;
ae947965 1286 hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
ae4f2cfb 1287 hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
ae947965 1288 }
ae947965 1289 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1290 }
1291 else{
1292 if(fIsFromMBHeader){
1293 hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
4803eb1f 1294 iPhotonMCInfo = 2;
1295 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1296 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 3122){
1297 iPhotonMCInfo = 5;
1298 hESDTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1299 }
ae947965 1300 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1301 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 310){
4803eb1f 1302 iPhotonMCInfo = 4;
ae947965 1303 hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1304 }
4803eb1f 1305 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1306 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 221){
1307 iPhotonMCInfo = 3;
1308 }
ae947965 1309 }
1310 }
4803eb1f 1311
2bb2434e 1312}
1313//________________________________________________________________________
1314void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1315{
1390f698 1316
1317 Double_t magField = fInputEvent->GetMagneticField();
1318 if( magField < 0.0 ){
1319 magField = 1.0;
1320 }
1321 else {
1322 magField = -1.0;
1323 }
1324
2bb2434e 1325 // Process True Photons
ae947965 1326 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
1327 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
2bb2434e 1328
4803eb1f 1329 iPhotonMCInfo = 0;
1330
2bb2434e 1331 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
e5b6e8a6 1332 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
4803eb1f 1333 iPhotonMCInfo = 1;
e5b6e8a6 1334 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){
ae947965 1335 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
ca91a3e1 1336 return;
1337 }
1338 else if(posDaughter->GetMother(0) == -1){
ae947965 1339 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
2bb2434e 1340 return;
1341 }
e5b6e8a6 1342
1343 if(pdgCode[0]!=11 || pdgCode[1]!=11) return; //One Particle is not a electron
1390f698 1344
2bb2434e 1345 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
e5b6e8a6 1346
ae947965 1347 TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
1390f698 1348 AliVTrack * electronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
1349 AliVTrack * positronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
1350 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
1351
1352 if(Photon->GetPdgCode() != 22){
1353 hESDTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1354 return; // Mother is no Photon
1355 }
1356
1357 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
2bb2434e 1358
1390f698 1359
1360
ca91a3e1 1361 // True Photon
1390f698 1362 if(fIsFromMBHeader){
1363 hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1364 }
1365 hESDTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
ae947965 1366 if(posDaughter->GetMother(0) <= fMCStack->GetNprimary()){
ca91a3e1 1367 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
a280ac15 1368 if(fIsFromMBHeader){
4803eb1f 1369 iPhotonMCInfo = 6;
ae4f2cfb 1370 hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1371 hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1372
e5b6e8a6 1373 }
e5b6e8a6 1374 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
ca91a3e1 1375 }
1376 else{
a280ac15 1377 if(fIsFromMBHeader){
4803eb1f 1378 iPhotonMCInfo = 2;
e5b6e8a6 1379 hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
4803eb1f 1380 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1381 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 3122){
1382 hESDTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1383 iPhotonMCInfo = 5;
1384 }
ae947965 1385 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1386 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 310){
e5b6e8a6 1387 hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
4803eb1f 1388 iPhotonMCInfo = 4;
1389 }
1390 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1391 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 221){
1392 iPhotonMCInfo = 3;
e5b6e8a6 1393 }
ca91a3e1 1394 }
1395 }
2bb2434e 1396}
1397//________________________________________________________________________
ae947965 1398void AliAnalysisTaskGammaConvV1::ProcessAODMCParticles()
1399{
1400
1401 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1402
1403 // Loop over all primary MC particle
1404 for(Int_t i = 0; i < AODMCTrackArray->GetEntriesFast(); i++) {
1405
1406 AliAODMCParticle* particle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(i));
1407 if (!particle) continue;
1408 if (!particle->IsPrimary()) continue;
1409
ae947965 1410 Int_t isMCFromMBHeader = -1;
1411 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1412 isMCFromMBHeader
1413 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1414 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
ae947965 1415 }
ae4f2cfb 1416
1417 if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
ae947965 1418 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
1419 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1420 if(particle->GetMother() >-1){ // Meson Decay Gamma
1421 switch((static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetMother())))->GetPdgCode()){
1422 case 111: // Pi0
1423 hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1424 break;
1425 case 113: // Rho0
1426 hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1427 break;
1428 case 221: // Eta
1429 hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1430 break;
1431 case 223: // Omega
1432 hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1433 break;
1434 case 331: // Eta'
1435 hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1436 break;
1437 case 333: // Phi
1438 hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1439 break;
1440 case 3212: // Sigma
1441 hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
1442 break;
1443 }
1444 }
1445 }
1446 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kTRUE)){
1447 Double_t rConv = 0;
1448 for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
1449 AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(daughterIndex));
1450 if(!tmpDaughter) continue;
1451 if(abs(tmpDaughter->GetPdgCode()) == 11){
1452 rConv = sqrt( (tmpDaughter->Xv()*tmpDaughter->Xv()) + (tmpDaughter->Yv()*tmpDaughter->Yv()) );
1453 }
1454 }
1455 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
ae4f2cfb 1456 if (fDoPhotonQA > 0){
ae947965 1457 hMCConvGammaR[fiCut]->Fill(rConv);
1458 hMCConvGammaEta[fiCut]->Fill(particle->Eta());
1459 }
ae947965 1460 }
1461 // Converted MC Gamma
1462 if(fDoMesonAnalysis){
ae4f2cfb 1463 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
ae947965 1464 Double_t mesonY = 10.;
1465 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1466 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1467 } else{
4803eb1f 1468 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
1469 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
ae947965 1470 }
1471 Float_t weightedK0s= 1;
1472 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1473 if (particle->Pt()>0.005){
1474 weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1475 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1476 }
1477 }
1478 hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1479 hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1480 hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1481 }
4803eb1f 1482 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1483 ->MesonIsSelectedAODMC(particle,AODMCTrackArray,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
ae947965 1484 AliAODMCParticle* daughter0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(0)));
1485 AliAODMCParticle* daughter1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(1)));
1486 Float_t weighted= 1;
1487 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1488 if (particle->Pt()>0.005){
1489 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1490 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1491 }
1492 }
1493 Double_t mesonY = 10.;
1494 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1495 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1496 } else{
4803eb1f 1497 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
1498 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
ae947965 1499 }
1500
1501 if(particle->GetPdgCode() == 111){
1502 hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1503 hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
ae4f2cfb 1504 if (fDoMesonQA > 0) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
ae947965 1505 } else if(particle->GetPdgCode() == 221){
1506 hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
ae4f2cfb 1507 if (fDoMesonQA > 0) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
ae947965 1508 }
1509
1510 // Check the acceptance for both gammas
1511 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter0,AODMCTrackArray,kFALSE) &&
ae4f2cfb 1512 ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE) &&
1513 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
1514 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
ae947965 1515
1516 if(particle->GetPdgCode() == 111){
1517 hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1518 } else if(particle->GetPdgCode() == 221){
1519 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1520 }
1521 }
1522 }
1523 }
1524 }
1525}
1526//________________________________________________________________________
2bb2434e 1527void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
1528{
2bb2434e 1529 // Loop over all primary MC particle
1530 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
1531 TParticle* particle = (TParticle *)fMCStack->Particle(i);
1532 if (!particle) continue;
1533
a280ac15 1534 Int_t isMCFromMBHeader = -1;
ca91a3e1 1535 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
a280ac15 1536 isMCFromMBHeader
ae947965 1537 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
a280ac15 1538 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
ca91a3e1 1539 }
1540
ae4f2cfb 1541 if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
ca91a3e1 1542 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
1543 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1544 if(particle->GetMother(0) >-1){ // Meson Decay Gamma
1545 switch(fMCStack->Particle(particle->GetMother(0))->GetPdgCode()){
1546 case 111: // Pi0
1547 hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1548 break;
1549 case 113: // Rho0
1550 hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1551 break;
1552 case 221: // Eta
1553 hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1554 break;
1555 case 223: // Omega
1556 hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1557 break;
1558 case 331: // Eta'
1559 hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1560 break;
1561 case 333: // Phi
1562 hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1563 break;
e5b6e8a6 1564 case 3212: // Sigma
a280ac15 1565 hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
e5b6e8a6 1566 break;
ca91a3e1 1567 }
1568 }
1569 }
1570 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
1571 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
ae4f2cfb 1572 if (fDoPhotonQA > 0){
0a2b2b4b 1573 hMCConvGammaR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
1574 hMCConvGammaEta[fiCut]->Fill(particle->Eta());
1575 }
ca91a3e1 1576 } // Converted MC Gamma
1577 if(fDoMesonAnalysis){
ae4f2cfb 1578 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
ae947965 1579 Double_t mesonY = 10.;
1580 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1581 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1582 } else{
4803eb1f 1583 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))
1584 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
ae947965 1585 }
1586 Float_t weightedK0s= 1;
1587 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1588 if (particle->Pt()>0.005){
1589 weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1590 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1591 }
1592 }
1593 hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1594 hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1595 hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1596 }
4803eb1f 1597 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1598 ->MesonIsSelectedMC(particle,fMCStack,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
e5b6e8a6 1599 TParticle* daughter0 = (TParticle*)fMCStack->Particle(particle->GetFirstDaughter());
1600 TParticle* daughter1 = (TParticle*)fMCStack->Particle(particle->GetLastDaughter());
1601
a280ac15 1602 Float_t weighted= 1;
ae947965 1603 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
a280ac15 1604 if (particle->Pt()>0.005){
ae947965 1605 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1606 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
a280ac15 1607 }
1608 }
0a2b2b4b 1609 Double_t mesonY = 10.;
1610 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
11c1e680 1611 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
0a2b2b4b 1612 } else{
4803eb1f 1613 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))
1614 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
0a2b2b4b 1615 }
1616
a280ac15 1617 if(particle->GetPdgCode() == 111){
1618 hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
ae947965 1619 hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
ae4f2cfb 1620 if (fDoMesonQA > 0) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
a280ac15 1621 } else if(particle->GetPdgCode() == 221){
1622 hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
ae4f2cfb 1623 if (fDoMesonQA > 0) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
ae947965 1624 }
e5b6e8a6 1625
ca91a3e1 1626 // Check the acceptance for both gammas
e5b6e8a6 1627 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter0,fMCStack,kFALSE) &&
ae4f2cfb 1628 ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter1,fMCStack,kFALSE) &&
1629 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
1630 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
0a2b2b4b 1631
a280ac15 1632 if(particle->GetPdgCode() == 111){
1633 hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1634 } else if(particle->GetPdgCode() == 221){
1635 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1636 }
ca91a3e1 1637 }
1638 }
1639 }
2bb2434e 1640 }
1641}
1642//________________________________________________________________________
1643void AliAnalysisTaskGammaConvV1::CalculatePi0Candidates(){
1644
1645 // Conversion Gammas
a280ac15 1646 if(fGammaCandidates->GetEntries()>1){
1647 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries()-1;firstGammaIndex++){
1648 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
0a2b2b4b 1649 if (gamma0==NULL) continue;
a280ac15 1650 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
1651 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
2bb2434e 1652 //Check for same Electron ID
0a2b2b4b 1653 if (gamma1==NULL) continue;
2bb2434e 1654 if(gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelPositive() ||
1655 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelNegative() ||
1656 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelPositive() ||
1657 gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelNegative() ) continue;
1658
1659 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma0,gamma1);
1660 pi0cand->SetLabels(firstGammaIndex,secondGammaIndex);
1661
4803eb1f 1662 pi0cand->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
1663 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1664 ->MesonIsSelected(pi0cand,kTRUE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
2bb2434e 1665 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
e5b6e8a6 1666 if(pi0cand->GetAlpha()<0.1)
2bb2434e 1667 hESDMotherInvMassEalpha[fiCut]->Fill(pi0cand->M(),pi0cand->E());
ae4f2cfb 1668
1669 if (fDoMesonQA > 0){
d8b864f8 1670 if ( pi0cand->M() > 0.05 && pi0cand->M() < 0.17){
bacaa826 1671 hESDMotherPi0PtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
ae4f2cfb 1672 hESDMotherPi0PtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
ca9152d4
FB
1673 hESDMotherPi0PtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
1674
ae4f2cfb 1675 }
d8b864f8 1676 if ( pi0cand->M() > 0.45 && pi0cand->M() < 0.65){
bacaa826 1677 hESDMotherEtaPtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
ae4f2cfb 1678 hESDMotherEtaPtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
ca9152d4 1679 hESDMotherEtaPtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
ae4f2cfb 1680 }
1681 }
e5b6e8a6 1682 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGCalculation()){
1683 Int_t zbin = 0;
1684 Int_t mbin = 0;
a280ac15 1685
e5b6e8a6 1686 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->BackgroundHandlerType() == 0){
1687 zbin = fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1688 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
4803eb1f 1689 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
e5b6e8a6 1690 } else {
a280ac15 1691 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
e5b6e8a6 1692 }
1693 }
1694 else{
1695 zbin = fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1696 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
4803eb1f 1697 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
e5b6e8a6 1698 } else {
a280ac15 1699 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
e5b6e8a6 1700 }
1701 }
1702 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
1703 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
2bb2434e 1704 }
ae947965 1705
1706
4803eb1f 1707 if(fIsMC){
ae947965 1708 if(fInputEvent->IsA()==AliESDEvent::Class())
1709 ProcessTrueMesonCandidates(pi0cand,gamma0,gamma1);
1710 if(fInputEvent->IsA()==AliAODEvent::Class())
1711 ProcessTrueMesonCandidatesAOD(pi0cand,gamma0,gamma1);
2bb2434e 1712 }
ae4f2cfb 1713 if (fDoMesonQA == 2){
4803eb1f 1714 fInvMass = pi0cand->M();
1715 fPt = pi0cand->Pt();
1716 if (abs(gamma0->GetDCAzToPrimVtx()) < abs(gamma1->GetDCAzToPrimVtx())){
1717 fDCAzGammaMin = gamma0->GetDCAzToPrimVtx();
1718 fDCAzGammaMax = gamma1->GetDCAzToPrimVtx();
1719 } else {
1720 fDCAzGammaMin = gamma1->GetDCAzToPrimVtx();
1721 fDCAzGammaMax = gamma0->GetDCAzToPrimVtx();
1722 }
1723 iFlag = pi0cand->GetMesonQuality();
1724// cout << "gamma 0: " << gamma0->GetV0Index()<< "\t" << gamma0->GetPx() << "\t" << gamma0->GetPy() << "\t" << gamma0->GetPz() << "\t" << endl;
1725// cout << "gamma 1: " << gamma1->GetV0Index()<< "\t"<< gamma1->GetPx() << "\t" << gamma1->GetPy() << "\t" << gamma1->GetPz() << "\t" << endl;
1726// cout << "pi0: "<<fInvMass << "\t" << fPt <<"\t" << fDCAzGammaMin << "\t" << fDCAzGammaMax << "\t" << (Int_t)iFlag << "\t" << (Int_t)iMesonMCInfo <<endl;
39e8c2ce 1727 if (fIsHeavyIon == 1 && fPt > 0.399 && fPt < 20. ) {
1728 if (fInvMass > 0.08 && fInvMass < 0.2) tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1729 if ((fInvMass > 0.45 && fInvMass < 0.6) && (fPt > 0.999 && fPt < 20.) )tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1730 } else if (fPt > 0.299 && fPt < 20. ) {
4803eb1f 1731 if ( (fInvMass > 0.08 && fInvMass < 0.2) || (fInvMass > 0.45 && fInvMass < 0.6)) tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1732 }
1733 }
2bb2434e 1734 }
1735 delete pi0cand;
1736 pi0cand=0x0;
1737 }
1738 }
1739 }
1740}
1741//______________________________________________________________________
1742void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
1743{
1744 // Process True Mesons
1745 AliStack *MCStack = fMCEvent->Stack();
4803eb1f 1746 iMesonMCInfo = 0;
e5b6e8a6 1747 if(TrueGammaCandidate0->GetV0Index()<fInputEvent->GetNumberOfV0s()){
2bb2434e 1748 Bool_t isTruePi0 = kFALSE;
1749 Bool_t isTrueEta = kFALSE;
86eaf9ae 1750 Bool_t isTruePi0Dalitz = kFALSE;
1751 Bool_t isTrueEtaDalitz = kFALSE;
1752 Bool_t gamma0DalitzCand = kFALSE;
1753 Bool_t gamma1DalitzCand = kFALSE;
2bb2434e 1754 Int_t gamma0MCLabel = TrueGammaCandidate0->GetMCParticleLabel(MCStack);
1755 Int_t gamma0MotherLabel = -1;
1756 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1757 // Daughters Gamma 0
1758 TParticle * negativeMC = (TParticle*)TrueGammaCandidate0->GetNegativeMCDaughter(MCStack);
1759 TParticle * positiveMC = (TParticle*)TrueGammaCandidate0->GetPositiveMCDaughter(MCStack);
1760 TParticle * gammaMC0 = (TParticle*)MCStack->Particle(gamma0MCLabel);
e5b6e8a6 1761 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2bb2434e 1762 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1763 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
1764 gamma0MotherLabel=gammaMC0->GetFirstMother();
1765 }
1766 }
86eaf9ae 1767 if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
1768 gamma0DalitzCand = kTRUE;
2bb2434e 1769 gamma0MotherLabel=-111;
1770 }
86eaf9ae 1771 if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
1772 gamma0DalitzCand = kTRUE;
2bb2434e 1773 gamma0MotherLabel=-221;
1774 }
1775 }
1776 }
e5b6e8a6 1777 if(TrueGammaCandidate1->GetV0Index()<fInputEvent->GetNumberOfV0s()){
2bb2434e 1778 Int_t gamma1MCLabel = TrueGammaCandidate1->GetMCParticleLabel(MCStack);
1779 Int_t gamma1MotherLabel = -1;
1780 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1781 // Daughters Gamma 1
1782 TParticle * negativeMC = (TParticle*)TrueGammaCandidate1->GetNegativeMCDaughter(MCStack);
1783 TParticle * positiveMC = (TParticle*)TrueGammaCandidate1->GetPositiveMCDaughter(MCStack);
1784 TParticle * gammaMC1 = (TParticle*)MCStack->Particle(gamma1MCLabel);
e5b6e8a6 1785 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2bb2434e 1786 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1787 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
1788 gamma1MotherLabel=gammaMC1->GetFirstMother();
1789 }
1790 }
86eaf9ae 1791 if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
1792 gamma1DalitzCand = kTRUE;
1793 gamma1MotherLabel=-111;
2bb2434e 1794 }
86eaf9ae 1795 if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
1796 gamma1DalitzCand = kTRUE;
1797 gamma1MotherLabel=-221;
2bb2434e 1798 }
1799 }
1800 }
1801 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1802 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
1803 isTruePi0=kTRUE;
1804 }
1805 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 221){
1806 isTrueEta=kTRUE;
1807 }
1808 }
86eaf9ae 1809
1810 //Identify Dalitz candidate
1811 if (gamma1DalitzCand || gamma0DalitzCand){
1812 if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
1813 if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
1814 if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
1815 }
1816 if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
1817 if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
1818 if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
1819 }
1820 }
1821
1822
e5b6e8a6 1823 if(isTruePi0 || isTrueEta){// True Pion or Eta
4803eb1f 1824 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
ae4f2cfb 1825 if (fDoMesonQA > 0){
1826 if (isTruePi0){
d8b864f8
FB
1827 if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
1828 hESDTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
1829 hESDTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
ca9152d4 1830 hESDTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
d8b864f8 1831 }
ae4f2cfb 1832 } else if (isTrueEta){
d8b864f8
FB
1833 if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
1834 hESDTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
1835 hESDTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
ca9152d4 1836 hESDTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
ae4f2cfb 1837 }
1838 }
1839 }
e5b6e8a6 1840 if(gamma0MotherLabel >= MCStack->GetNprimary()){ // Secondary Meson
ae947965 1841 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetMother(0);
1842 Float_t weightedSec= 1;
1843 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
1844 weightedSec= ((AliConversionCuts*)fCutArray->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
1845 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1846 }
1847 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
4803eb1f 1848 iMesonMCInfo = 2;
ae947965 1849 if (secMotherLabel >-1){
1850 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
4803eb1f 1851 iMesonMCInfo = 4;
ae947965 1852 hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
ae4f2cfb 1853 if (fDoMesonQA > 0)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
ae947965 1854 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
e5b6e8a6 1855 }
ae947965 1856 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==221){
4803eb1f 1857 iMesonMCInfo = 3;
ae947965 1858 hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
ae4f2cfb 1859 if (fDoMesonQA > 0)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
ae947965 1860 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
ca91a3e1 1861 }
1862 }
0a2b2b4b 1863 }else{ // Only primary pi0 for efficiency calculation
4803eb1f 1864 iMesonMCInfo = 6;
a280ac15 1865 Float_t weighted= 1;
ae947965 1866 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, fMCStack, fInputEvent)){
a280ac15 1867 if (((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt()>0.005){
ae947965 1868 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, fMCStack, fInputEvent);
1869// cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
a280ac15 1870 }
1871 }
1872 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
526074e4 1873 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1874 pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
ae4f2cfb 1875
1876
1877 if (fDoMesonQA > 0){
0a2b2b4b 1878 if(isTruePi0){ // Only primary pi0 for resolution
1879 hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
1880 }
1881 if (isTrueEta){ // Only primary eta for resolution
1882 hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
1883 }
ca91a3e1 1884 }
1885 }
86eaf9ae 1886 } else if(!isTruePi0 && !isTrueEta){ // Background
ae4f2cfb 1887 if (fDoMesonQA > 0){
86eaf9ae 1888 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
1889 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1890 iMesonMCInfo = 1;
1891 } else { // No photon or without mother
1892 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1893 }
2bb2434e 1894 }
86eaf9ae 1895 if( isTruePi0Dalitz || isTrueEtaDalitz ){
2bb2434e 1896 // Dalitz
4803eb1f 1897 iMesonMCInfo = 5;
2bb2434e 1898 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
86eaf9ae 1899 } else if (gamma0DalitzCand || gamma1DalitzCand){
ae4f2cfb 1900 if (fDoMesonQA > 0)hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
86eaf9ae 1901 }
2bb2434e 1902 }
1903 }
1904 }
1905}
ae947965 1906//______________________________________________________________________
1907void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidatesAOD(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
1908{
1909
1910 // Process True Mesons
1911 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1912 Bool_t isTruePi0 = kFALSE;
1913 Bool_t isTrueEta = kFALSE;
86eaf9ae 1914 Bool_t isTruePi0Dalitz = kFALSE;
1915 Bool_t isTrueEtaDalitz = kFALSE;
1916 Bool_t gamma0DalitzCand = kFALSE;
1917 Bool_t gamma1DalitzCand = kFALSE;
ae947965 1918
1919 AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelPositive()));
1920 AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelNegative()));
2bb2434e 1921
4803eb1f 1922 iMesonMCInfo = 0;
ae947965 1923 Int_t gamma0MCLabel = -1;
1924 Int_t gamma0MotherLabel = -1;
1925 if(!positiveMC||!negativeMC)
1926 return;
1927
1928 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
1929 gamma0MCLabel = positiveMC->GetMother();
1930 }
1931
1932 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1933 // Daughters Gamma 0
1934 AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
1935 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
86eaf9ae 1936 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
ae947965 1937 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
1938 gamma0MotherLabel=gammaMC0->GetMother();
1939 }
1940 }
86eaf9ae 1941 if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
1942 gamma0DalitzCand = kTRUE;
ae947965 1943 gamma0MotherLabel=-111;
1944 }
86eaf9ae 1945 if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
1946 gamma0DalitzCand = kTRUE;
ae947965 1947 gamma0MotherLabel=-221;
1948 }
1949 }
1950 }
1951 positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelPositive()));
1952 negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelNegative()));
1953
1954 Int_t gamma1MCLabel = -1;
1955 Int_t gamma1MotherLabel = -1;
1956 if(!positiveMC||!negativeMC)
1957 return;
1958
1959 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
1960 gamma1MCLabel = positiveMC->GetMother();
1961 }
1962 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1963 // Daughters Gamma 1
1964 AliAODMCParticle * gammaMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MCLabel));
1965 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
86eaf9ae 1966 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
ae947965 1967 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
1968 gamma1MotherLabel=gammaMC1->GetMother();
1969 }
1970 }
86eaf9ae 1971 if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
1972 gamma1DalitzCand = kTRUE;
1973 gamma1MotherLabel=-111;
ae947965 1974 }
86eaf9ae 1975 if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
1976 gamma1DalitzCand = kTRUE;
ae947965 1977 gamma1MotherLabel=-221;
1978 }
1979 }
1980 }
1981 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1982 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
1983 isTruePi0=kTRUE;
1984 }
1985 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 221){
1986 isTrueEta=kTRUE;
1987 }
1988 }
86eaf9ae 1989
1990 //Identify Dalitz candidate
1991 if (gamma1DalitzCand || gamma0DalitzCand){
1992 if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
1993 if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
1994 if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
1995 }
1996 if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
1997 if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
1998 if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
1999 }
2000 }
2001
ae947965 2002 if(isTruePi0 || isTrueEta){// True Pion or Eta
2003 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
ae4f2cfb 2004 if (fDoMesonQA > 0){
2005 if (isTruePi0){
d8b864f8
FB
2006 if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
2007 hESDTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
2008 hESDTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
ca9152d4 2009 hESDTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
ae4f2cfb 2010 }
2011 } else if (isTrueEta){
d8b864f8
FB
2012 if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
2013 hESDTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
2014 hESDTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
ca9152d4 2015 hESDTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
ae4f2cfb 2016 }
ae4f2cfb 2017 }
2018 }
ae947965 2019 if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
2020 Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
2021 Float_t weightedSec= 1;
2022 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
2023 weightedSec= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, 0x0, 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
2024 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2025 }
2026 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
4803eb1f 2027 iMesonMCInfo = 2;
ae947965 2028 if (secMotherLabel >-1){
2029 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
4803eb1f 2030 iMesonMCInfo = 4;
ae947965 2031 hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
ae4f2cfb 2032 if (fDoMesonQA > 0)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
ae947965 2033 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2034 }
2035 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221){
4803eb1f 2036 iMesonMCInfo = 3;
ae947965 2037 hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
ae4f2cfb 2038 if (fDoMesonQA > 0)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
ae947965 2039 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2040 }
2041 }
2042 }else{ // Only primary pi0 for efficiency calculation
2043 Float_t weighted= 1;
4803eb1f 2044 iMesonMCInfo = 6;
ae947965 2045 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, 0x0, fInputEvent)){
2046 if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt()>0.005){
2047 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, 0x0, fInputEvent);
2048 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
2049 }
2050 }
2051 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
4803eb1f 2052 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2053 pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2054
ae4f2cfb 2055 if (fDoMesonQA > 0){
ae947965 2056 if(isTruePi0){ // Only primary pi0 for resolution
2057 hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2058 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
ae4f2cfb 2059
ae947965 2060 }
2061 if (isTrueEta){ // Only primary eta for resolution
2062 hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2063 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2064 }
2065 }
2066 }
86eaf9ae 2067 } else if(!isTruePi0 && !isTrueEta) { // Background
ae4f2cfb 2068 if (fDoMesonQA > 0){
86eaf9ae 2069 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2070 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2071 iMesonMCInfo = 1;
2072 } else { // No photon or without mother
2073 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2074 }
ae947965 2075 }
86eaf9ae 2076 if( isTruePi0Dalitz || isTrueEtaDalitz ){
ae947965 2077 // Dalitz
4803eb1f 2078 iMesonMCInfo = 5;
ae947965 2079 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
86eaf9ae 2080 } else if (gamma0DalitzCand || gamma1DalitzCand){
ae4f2cfb 2081 if (fDoMesonQA > 0)hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
ae947965 2082 }
2083 }
2084}
2bb2434e 2085//________________________________________________________________________
2086void AliAnalysisTaskGammaConvV1::CalculateBackground(){
2087
e5b6e8a6 2088 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2bb2434e 2089 Int_t mbin = 0;
2090
ca91a3e1 2091 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
4803eb1f 2092 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2bb2434e 2093 } else {
a280ac15 2094 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2bb2434e 2095 }
2096
ca91a3e1 2097 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
2bb2434e 2098
a280ac15 2099 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2100 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2101 for(Int_t iCurrent2=iCurrent+1;iCurrent2<fGammaCandidates->GetEntries();iCurrent2++){
e5b6e8a6 2102 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
a280ac15 2103 AliAODConversionPhoton currentEventGoodV02 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent2));
2bb2434e 2104
ca91a3e1 2105 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGProbability()){
2bb2434e 2106 AliAODConversionMother *backgroundCandidateProb = new AliAODConversionMother(&currentEventGoodV0,&currentEventGoodV02);
2107 Double_t massBGprob = backgroundCandidateProb->M();
2108 if(massBGprob>0.1 && massBGprob<0.14){
2109 if(fRandom.Rndm()>fBGHandler[fiCut]->GetBGProb(zbin,mbin)){
2110 delete backgroundCandidateProb;
2111 continue;
2112 }
2113 }
2114 delete backgroundCandidateProb;
2115 backgroundCandidateProb = 0x0;
2116 }
2117
2118 RotateParticle(&currentEventGoodV02);
2119 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&currentEventGoodV02);
4803eb1f 2120 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2121 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2122 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
2bb2434e 2123 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
e5b6e8a6 2124 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2bb2434e 2125 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2126 }
2127 delete backgroundCandidate;
2128 backgroundCandidate = 0x0;
2129 }
2130 }
2131 }
ca91a3e1 2132 }else{
2bb2434e 2133 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
2134
ca91a3e1 2135 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2bb2434e 2136 for(Int_t nEventsInBG=0;nEventsInBG<fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2137 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2138 if(fMoveParticleAccordingToVertex == kTRUE){
2139 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2140 }
2141
a280ac15 2142 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2143 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2bb2434e 2144 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2145 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2146 if(fMoveParticleAccordingToVertex == kTRUE){
2147 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2148 }
ca9152d4 2149 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
ae4f2cfb 2150 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
2151 }
2bb2434e 2152
2153 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
4803eb1f 2154 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2155 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2156 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
2bb2434e 2157 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
e5b6e8a6 2158 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2bb2434e 2159 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2160 }
2161 delete backgroundCandidate;
2162 backgroundCandidate = 0x0;
2163 }
2164 }
2165 }
2166 }
2167 else{
2168 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2169 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2170 if(previousEventV0s){
2171 if(fMoveParticleAccordingToVertex == kTRUE){
2172 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2173 }
a280ac15 2174 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2175 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2bb2434e 2176 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2177
2178 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2179
2180 if(fMoveParticleAccordingToVertex == kTRUE){
2181 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2182 }
ca9152d4 2183 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
ae4f2cfb 2184 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
2185 }
2186
2bb2434e 2187
2188 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
4803eb1f 2189 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2190 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2191 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
2bb2434e 2192 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
e5b6e8a6 2193 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2bb2434e 2194 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2195 }
2196 delete backgroundCandidate;
2197 backgroundCandidate = 0x0;
2198 }
2199 }
2200 }
2201 }
2202 }
2203 }
2204}
e5b6e8a6 2205//________________________________________________________________________
2206void AliAnalysisTaskGammaConvV1::CalculateBackgroundRP(){
2207
2208 Int_t zbin= fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2209 Int_t mbin = 0;
2210 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
4803eb1f 2211 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
e5b6e8a6 2212 } else {
a280ac15 2213 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
e5b6e8a6 2214 }
2215
2216
2217 //Rotation Method
2218 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
2219 // Correct for the number of rotations
2220 // BG is for rotation the same, except for factor NRotations
2221 Double_t weight=1./Double_t(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents());
2222
a280ac15 2223 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
e5b6e8a6 2224
a280ac15 2225 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
0a2b2b4b 2226 if (gamma0==NULL) continue;
a280ac15 2227 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
2228 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
0a2b2b4b 2229 if (gamma1 == NULL) continue;
e5b6e8a6 2230 if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(gamma1,fInputEvent))continue;
2231 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
2232
2233 RotateParticle(gamma1);
2234
2235 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
4803eb1f 2236 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2237 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2238 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
e5b6e8a6 2239 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
2240 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
2241 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
e5b6e8a6 2242 }
2243 }
2244 }
2245 }
2246 }
2247 else{
2248 // Do Event Mixing
a280ac15 2249 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandlerRP[fiCut]->GetNBGEvents(fGammaCandidates,fInputEvent);nEventsInBG++){
e5b6e8a6 2250
a280ac15 2251 AliGammaConversionPhotonVector *previousEventGammas = fBGHandlerRP[fiCut]->GetBGGoodGammas(fGammaCandidates,fInputEvent,nEventsInBG);
e5b6e8a6 2252
2253 if(previousEventGammas){
2254 // test weighted background
2255 Double_t weight=1.0;
2256 // Correct for the number of eventmixing:
2257 // N gammas -> (N-1) + (N-2) +(N-3) ...+ (N-(N-1)) using sum formula sum(i)=N*(N-1)/2 -> N*(N-1)/2
2258 // real combinations (since you cannot combine a photon with its own)
2259 // but BG leads to N_{a}*N_{b} combinations
a280ac15 2260 weight*=0.5*(Double_t(fGammaCandidates->GetEntries()-1))/Double_t(previousEventGammas->size());
e5b6e8a6 2261
a280ac15 2262 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
e5b6e8a6 2263
a280ac15 2264 AliAODConversionPhoton *gamma0 = (AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
e5b6e8a6 2265
2266 for(UInt_t iPrevious=0;iPrevious<previousEventGammas->size();iPrevious++){
ca91a3e1 2267
e5b6e8a6 2268 AliAODConversionPhoton *gamma1 = (AliAODConversionPhoton*)(previousEventGammas->at(iPrevious));
2269
2270 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
4803eb1f 2271 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2272 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2273 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
e5b6e8a6 2274 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
2275 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
2276 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
e5b6e8a6 2277 }
2278 }
2279 }
2280 }
2281 }
2282 }
2283}
2bb2434e 2284//________________________________________________________________________
2285void AliAnalysisTaskGammaConvV1::RotateParticle(AliAODConversionPhoton *gamma){
ca91a3e1 2286 Int_t fNDegreesPMBackground= ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->NDegreesRotation();
2bb2434e 2287 Double_t nRadiansPM = fNDegreesPMBackground*TMath::Pi()/180;
2288 Double_t rotationValue = fRandom.Rndm()*2*nRadiansPM + TMath::Pi()-nRadiansPM;
2289 gamma->RotateZ(rotationValue);
2290}
ae4f2cfb 2291
2292//________________________________________________________________________
2293void AliAnalysisTaskGammaConvV1::RotateParticleAccordingToEP(AliAODConversionPhoton *gamma, Double_t previousEventEP, Double_t thisEventEP){
2294
2295 previousEventEP=previousEventEP+TMath::Pi();
2296 thisEventEP=thisEventEP+TMath::Pi();
2297 Double_t rotationValue= thisEventEP-previousEventEP;
2298 gamma->RotateZ(rotationValue);
2299}
2300
2bb2434e 2301//________________________________________________________________________
2302void AliAnalysisTaskGammaConvV1::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
2303 //see header file for documentation
2304
e5b6e8a6 2305 Double_t dx = vertex->fX - fInputEvent->GetPrimaryVertex()->GetX();
2306 Double_t dy = vertex->fY - fInputEvent->GetPrimaryVertex()->GetY();
2307 Double_t dz = vertex->fZ - fInputEvent->GetPrimaryVertex()->GetZ();
2bb2434e 2308
2309 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
2310 particle->SetConversionPoint(movedPlace);
2311}
2312//________________________________________________________________________
2313void AliAnalysisTaskGammaConvV1::UpdateEventByEventData(){
2314 //see header file for documentation
a280ac15 2315 if(fGammaCandidates->GetEntries() >0 ){
ca91a3e1 2316 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
ae4f2cfb 2317 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),fEventPlaneAngle);
2bb2434e 2318 }
2319 else{ // means we use #V0s for multiplicity
ae4f2cfb 2320 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries(),fEventPlaneAngle);
2bb2434e 2321 }
2322 }
2323}
2324
2bb2434e 2325
2bb2434e 2326//________________________________________________________________________
ae947965 2327void AliAnalysisTaskGammaConvV1::FillPhotonCombinatorialBackgroundHist(AliAODConversionPhoton *TruePhotonCandidate, Int_t pdgCode[])
2328{
2329 // Combinatorial Bck = 0 ee, 1 ep,i 2 ek, 3 ep, 4 emu, 5 pipi, 6 pik, 7 pip, 8 pimu, 9 kk, 10 kp, 11 kmu, 12 pp, 13 pmu, 14 mumu, 15 Rest
2330 if(pdgCode[0]==11 && pdgCode[1]==11){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),0);}
2331 else if( (pdgCode[0]==11 && pdgCode[1]==211) || (pdgCode[0]==211 && pdgCode[1]==11) )
2332 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),1);}
2333 else if( (pdgCode[0]==11 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==11) )
2334 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),2);}
2335 else if( (pdgCode[0]==11 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==11) )
2336 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),3);}
2337 else if( (pdgCode[0]==11 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==11) )
2338 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),4);}
2339 else if( pdgCode[0]==211 && pdgCode[1]==211 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),5);}
2340 else if( (pdgCode[0]==211 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==211) )
2341 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),6);}
2342 else if( (pdgCode[0]==211 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==211) )
2343 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),7);}
2344 else if( (pdgCode[0]==211 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==211) )
2345 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),8);}
2346 else if( pdgCode[0]==321 && pdgCode[1]==321 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),9);}
2347 else if( (pdgCode[0]==321 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==321) )
2348 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),10);}
2349 else if( (pdgCode[0]==321 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==321) )
2350 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),11);}
2351 else if( pdgCode[0]==2212 && pdgCode[1]==2212 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),12);}
2352 else if( (pdgCode[0]==2212 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==2212) )
2353 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),13);}
2354 else if( pdgCode[0]==13 && pdgCode[1]==13 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),14);}
2355 else {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),15);}
2356}
2357//________________________________________________________________________
2358void AliAnalysisTaskGammaConvV1::RelabelAODPhotonCandidates(Bool_t mode){
2359
2360 // Relabeling For AOD Event
2361 // ESDiD -> AODiD
2362 // MCLabel -> AODMCLabel
2363
2364 if(mode){
2365 fMCStackPos = new Int_t[fReaderGammas->GetEntries()];
2366 fMCStackNeg = new Int_t[fReaderGammas->GetEntries()];
1186afd2 2367 fESDArrayPos = new Int_t[fReaderGammas->GetEntries()];
2368 fESDArrayNeg = new Int_t[fReaderGammas->GetEntries()];
ae947965 2369 }
2370
2371 for(Int_t iGamma = 0;iGamma<fReaderGammas->GetEntries();iGamma++){
2372 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(iGamma);
2373 if(!PhotonCandidate) continue;
2374 if(!mode){// Back to ESD Labels
2375 PhotonCandidate->SetMCLabelPositive(fMCStackPos[iGamma]);
2376 PhotonCandidate->SetMCLabelNegative(fMCStackNeg[iGamma]);
1186afd2 2377 PhotonCandidate->SetLabelPositive(fESDArrayPos[iGamma]);
2378 PhotonCandidate->SetLabelNegative(fESDArrayNeg[iGamma]);
ae947965 2379 continue;
2380 }
2381 fMCStackPos[iGamma] = PhotonCandidate->GetMCLabelPositive();
2382 fMCStackNeg[iGamma] = PhotonCandidate->GetMCLabelNegative();
1186afd2 2383 fESDArrayPos[iGamma] = PhotonCandidate->GetTrackLabelPositive();
2384 fESDArrayNeg[iGamma] = PhotonCandidate->GetTrackLabelNegative();
ae947965 2385
2386 Bool_t AODLabelPos = kFALSE;
2387 Bool_t AODLabelNeg = kFALSE;
2388
2389 for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
2390 AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i));
2391 if(!AODLabelPos){
2392 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelPositive() ){
2393 PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel()));
1186afd2 2394 PhotonCandidate->SetLabelPositive(i);
ae947965 2395 AODLabelPos = kTRUE;
2396 }
2397 }
2398 if(!AODLabelNeg){
2399 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelNegative()){
2400 PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel()));
1186afd2 2401 PhotonCandidate->SetLabelNegative(i);
ae947965 2402 AODLabelNeg = kTRUE;
2403 }
2404 }
2405 if(AODLabelNeg && AODLabelPos){
2406 break;
2407 }
1186afd2 2408 }
ae947965 2409 if(!AODLabelPos || !AODLabelNeg){
1186afd2 2410 cout<<"WARNING!!! AOD TRACKS NOT FOUND FOR"<<endl;
ae947965 2411 }
2412 }
2413
1186afd2 2414
ae947965 2415 if(!mode){
2416 delete[] fMCStackPos;
2417 delete[] fMCStackNeg;
1186afd2 2418 delete[] fESDArrayPos;
2419 delete[] fESDArrayNeg;
ae947965 2420 }
2421}
d8b864f8
FB
2422
2423void AliAnalysisTaskGammaConvV1::SetLogBinningXTH2(TH2* histoRebin){
2424 TAxis *axisafter = histoRebin->GetXaxis();
2425 Int_t bins = axisafter->GetNbins();
2426 Double_t from = axisafter->GetXmin();
2427 Double_t to = axisafter->GetXmax();
2428 Double_t *newbins = new Double_t[bins+1];
2429 newbins[0] = from;
2430 Double_t factor = TMath::Power(to/from, 1./bins);
2431 for(Int_t i=1; i<=bins; ++i) newbins[i] = factor * newbins[i-1];
2432 axisafter->Set(bins, newbins);
2433 delete [] newbins;
2434
2435}
2436
ae947965 2437//________________________________________________________________________
2bb2434e 2438void AliAnalysisTaskGammaConvV1::Terminate(const Option_t *)
2439{
e5b6e8a6 2440
a280ac15 2441 //fOutputContainer->Print(); // Will crash on GRID
2bb2434e 2442}