1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: Baldo Sahlmueller, Friederike Bock *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
17 //////////////////////////////////////////////////////////////////
18 //----------------------------------------------------------------
19 // Class used to do analysis on conversion photons + calo photons
20 //----------------------------------------------------------------
21 //////////////////////////////////////////////////////////////////
29 #include "THnSparse.h"
32 #include "AliAnalysisTask.h"
33 #include "AliAnalysisManager.h"
34 #include "AliESDEvent.h"
35 #include "AliESDInputHandler.h"
36 #include "AliMCEventHandler.h"
37 #include "AliMCEvent.h"
38 #include "AliMCParticle.h"
39 #include "AliCentrality.h"
40 #include "AliESDVZERO.h"
41 #include "AliESDpid.h"
42 #include "AliAnalysisTaskGammaConvCalo.h"
43 #include "AliVParticle.h"
44 #include "AliESDtrack.h"
45 #include "AliESDtrackCuts.h"
46 #include "AliKFVertex.h"
47 #include "AliV0ReaderV1.h"
48 #include "AliGenCocktailEventHeader.h"
49 #include "AliConversionAODBGHandlerRP.h"
50 #include "AliAODMCParticle.h"
51 #include "AliAODMCHeader.h"
52 #include "AliEventplane.h"
53 #include "AliAnalysisTaskEMCALClusterizeFast.h"
54 #include "AliAODEvent.h"
55 #include "AliAODInputHandler.h"
56 #include "AliESDEvent.h"
57 #include "AliESDInputHandler.h"
58 #include "AliInputEventHandler.h"
60 ClassImp(AliAnalysisTaskGammaConvCalo)
62 //________________________________________________________________________
63 AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(): AliAnalysisTaskSE(),
68 fBGClusHandlerRP(NULL),
80 fHeaderNameList(NULL),
82 fOutputContainer(NULL),
84 fGammaCandidates(NULL),
85 fClusterCandidates(NULL),
89 fConversionCuts(NULL),
90 fClusterCutArray(NULL),
91 fCaloPhotonCuts(NULL),
94 fHistoConvGammaPt(NULL),
95 fHistoConvGammaR(NULL),
96 fHistoConvGammaEta(NULL),
97 fTreeConvGammaPtDcazCat(NULL),
103 fCharPhotonMCInfo(0),
104 fHistoMotherInvMassPt(NULL),
105 fSparseMotherInvMassPtZM(NULL),
106 fHistoMotherBackInvMassPt(NULL),
107 fSparseMotherBackInvMassPtZM(NULL),
108 fHistoMotherInvMassEalpha(NULL),
109 fHistoMotherPi0PtY(NULL),
110 fHistoMotherEtaPtY(NULL),
111 fHistoMotherPi0PtAlpha(NULL),
112 fHistoMotherEtaPtAlpha(NULL),
113 fHistoMotherPi0PtOpenAngle(NULL),
114 fHistoMotherEtaPtOpenAngle(NULL),
115 fTreeMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
122 fHistoConvGammaUntagged(NULL),
123 fHistoConvGammaTagged(NULL),
124 fHistoConvGammaPi0Tagged(NULL),
125 fHistoConvGammaEtaTagged(NULL),
126 fHistoPhotonPairAll(NULL),
127 fHistoPhotonPairAllGam(NULL),
128 fHistoClusGammaPt(NULL),
129 fHistoMCHeaders(NULL),
130 fHistoMCAllGammaPt(NULL),
131 fHistoMCDecayGammaPi0Pt(NULL),
132 fHistoMCDecayGammaRhoPt(NULL),
133 fHistoMCDecayGammaEtaPt(NULL),
134 fHistoMCDecayGammaOmegaPt(NULL),
135 fHistoMCDecayGammaEtapPt(NULL),
136 fHistoMCDecayGammaPhiPt(NULL),
137 fHistoMCDecayGammaSigmaPt(NULL),
138 fHistoMCConvGammaPt(NULL),
139 fHistoMCConvGammaR(NULL),
140 fHistoMCConvGammaEta(NULL),
142 fHistoMCPi0WOWeightPt(NULL),
144 fHistoMCEtaWOWeightPt(NULL),
145 fHistoMCPi0InAccPt(NULL),
146 fHistoMCEtaInAccPt(NULL),
147 fHistoMCPi0PtY(NULL),
148 fHistoMCEtaPtY(NULL),
150 fHistoMCK0sWOWeightPt(NULL),
151 fHistoMCK0sPtY(NULL),
152 fHistoMCSecPi0PtvsSource(NULL),
153 fHistoMCSecPi0Source(NULL),
154 fHistoMCSecEtaPt(NULL),
155 fHistoMCSecEtaSource(NULL),
156 fHistoTrueMotherInvMassPt(NULL),
157 fHistoTruePrimaryMotherInvMassPt(NULL),
158 fHistoTruePrimaryMotherW0WeightingInvMassPt(NULL),
159 fProfileTruePrimaryMotherWeightsInvMassPt(NULL),
160 fHistoTruePrimaryPi0MCPtResolPt(NULL),
161 fHistoTruePrimaryEtaMCPtResolPt(NULL),
162 fHistoTrueSecondaryMotherInvMassPt(NULL),
163 fHistoTrueSecondaryMotherFromK0sInvMassPt(NULL),
164 fHistoTrueK0sWithPi0DaughterMCPt(NULL),
165 fHistoTrueSecondaryMotherFromEtaInvMassPt(NULL),
166 fHistoTrueEtaWithPi0DaughterMCPt(NULL),
167 fHistoTrueSecondaryMotherFromLambdaInvMassPt(NULL),
168 fHistoTrueLambdaWithPi0DaughterMCPt(NULL),
169 fHistoTrueBckGGInvMassPt(NULL),
170 fHistoTrueBckContInvMassPt(NULL),
171 fHistoTruePi0PtY(NULL),
172 fHistoTrueEtaPtY(NULL),
173 fHistoTruePi0PtAlpha(NULL),
174 fHistoTrueEtaPtAlpha(NULL),
175 fHistoTruePi0PtOpenAngle(NULL),
176 fHistoTrueEtaPtOpenAngle(NULL),
177 fHistoTrueMotherDalitzInvMassPt(NULL),
178 fHistoTrueConvGammaPt(NULL),
179 fHistoTrueConvPi0GammaPt(NULL),
180 fHistoTrueConvGammaEta(NULL),
181 fHistoCombinatorialPt(NULL),
182 fHistoTruePrimaryConvGammaPt(NULL),
183 fHistoTruePrimaryConvGammaESDPtMCPt(NULL),
184 fHistoTrueSecondaryConvGammaPt(NULL),
185 fHistoTrueSecondaryConvGammaFromXFromK0sPt(NULL),
186 fHistoTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
187 fHistoTrueDalitzPsiPairDeltaPhi(NULL),
188 fHistoTrueGammaPsiPairDeltaPhi(NULL),
189 fHistoTrueClusGammaPt(NULL),
190 fHistoTruePrimaryClusGammaPt(NULL),
191 fHistoTruePrimaryClusGammaESDPtMCPt(NULL),
193 fHistoNGoodESDTracks(NULL),
194 fHistoNGammaCandidates(NULL),
195 fHistoNGoodESDTracksVsNGammaCanditates(NULL),
196 fHistoNV0Tracks(NULL),
197 fProfileEtaShift(NULL),
198 fEventPlaneAngle(-100),
200 fNGammaCandidates(0),
211 fMoveParticleAccordingToVertex(kTRUE),
213 fDoMesonAnalysis(kTRUE),
216 fIsFromMBHeader(kTRUE),
225 //________________________________________________________________________
226 AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(const char *name):
227 AliAnalysisTaskSE(name),
231 fBGClusHandler(NULL),
232 fBGClusHandlerRP(NULL),
240 fPhotonDCAList(NULL),
244 fHeaderNameList(NULL),
245 fTagOutputList(NULL),
248 fGammaCandidates(NULL),
249 fClusterCandidates(NULL),
250 fEventCutArray(NULL),
253 fConversionCuts(NULL),
254 fClusterCutArray(NULL),
255 fCaloPhotonCuts(NULL),
256 fMesonCutArray(NULL),
258 fHistoConvGammaPt(NULL),
259 fHistoConvGammaR(NULL),
260 fHistoConvGammaEta(NULL),
261 fTreeConvGammaPtDcazCat(NULL),
267 fCharPhotonMCInfo(0),
268 fHistoMotherInvMassPt(NULL),
269 fSparseMotherInvMassPtZM(NULL),
270 fHistoMotherBackInvMassPt(NULL),
271 fSparseMotherBackInvMassPtZM(NULL),
272 fHistoMotherInvMassEalpha(NULL),
273 fHistoMotherPi0PtY(NULL),
274 fHistoMotherEtaPtY(NULL),
275 fHistoMotherPi0PtAlpha(NULL),
276 fHistoMotherEtaPtAlpha(NULL),
277 fHistoMotherPi0PtOpenAngle(NULL),
278 fHistoMotherEtaPtOpenAngle(NULL),
279 fTreeMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
286 fHistoConvGammaUntagged(NULL),
287 fHistoConvGammaTagged(NULL),
288 fHistoConvGammaPi0Tagged(NULL),
289 fHistoConvGammaEtaTagged(NULL),
290 fHistoPhotonPairAll(NULL),
291 fHistoPhotonPairAllGam(NULL),
292 fHistoClusGammaPt(NULL),
293 fHistoMCHeaders(NULL),
294 fHistoMCAllGammaPt(NULL),
295 fHistoMCDecayGammaPi0Pt(NULL),
296 fHistoMCDecayGammaRhoPt(NULL),
297 fHistoMCDecayGammaEtaPt(NULL),
298 fHistoMCDecayGammaOmegaPt(NULL),
299 fHistoMCDecayGammaEtapPt(NULL),
300 fHistoMCDecayGammaPhiPt(NULL),
301 fHistoMCDecayGammaSigmaPt(NULL),
302 fHistoMCConvGammaPt(NULL),
303 fHistoMCConvGammaR(NULL),
304 fHistoMCConvGammaEta(NULL),
306 fHistoMCPi0WOWeightPt(NULL),
308 fHistoMCEtaWOWeightPt(NULL),
309 fHistoMCPi0InAccPt(NULL),
310 fHistoMCEtaInAccPt(NULL),
311 fHistoMCPi0PtY(NULL),
312 fHistoMCEtaPtY(NULL),
314 fHistoMCK0sWOWeightPt(NULL),
315 fHistoMCK0sPtY(NULL),
316 fHistoMCSecPi0PtvsSource(NULL),
317 fHistoMCSecPi0Source(NULL),
318 fHistoMCSecEtaPt(NULL),
319 fHistoMCSecEtaSource(NULL),
320 fHistoTrueMotherInvMassPt(NULL),
321 fHistoTruePrimaryMotherInvMassPt(NULL),
322 fHistoTruePrimaryMotherW0WeightingInvMassPt(NULL),
323 fProfileTruePrimaryMotherWeightsInvMassPt(NULL),
324 fHistoTruePrimaryPi0MCPtResolPt(NULL),
325 fHistoTruePrimaryEtaMCPtResolPt(NULL),
326 fHistoTrueSecondaryMotherInvMassPt(NULL),
327 fHistoTrueSecondaryMotherFromK0sInvMassPt(NULL),
328 fHistoTrueK0sWithPi0DaughterMCPt(NULL),
329 fHistoTrueSecondaryMotherFromEtaInvMassPt(NULL),
330 fHistoTrueEtaWithPi0DaughterMCPt(NULL),
331 fHistoTrueSecondaryMotherFromLambdaInvMassPt(NULL),
332 fHistoTrueLambdaWithPi0DaughterMCPt(NULL),
333 fHistoTrueBckGGInvMassPt(NULL),
334 fHistoTrueBckContInvMassPt(NULL),
335 fHistoTruePi0PtY(NULL),
336 fHistoTrueEtaPtY(NULL),
337 fHistoTruePi0PtAlpha(NULL),
338 fHistoTrueEtaPtAlpha(NULL),
339 fHistoTruePi0PtOpenAngle(NULL),
340 fHistoTrueEtaPtOpenAngle(NULL),
341 fHistoTrueMotherDalitzInvMassPt(NULL),
342 fHistoTrueConvGammaPt(NULL),
343 fHistoTrueConvPi0GammaPt(NULL),
344 fHistoTrueConvGammaEta(NULL),
345 fHistoCombinatorialPt(NULL),
346 fHistoTruePrimaryConvGammaPt(NULL),
347 fHistoTruePrimaryConvGammaESDPtMCPt(NULL),
348 fHistoTrueSecondaryConvGammaPt(NULL),
349 fHistoTrueSecondaryConvGammaFromXFromK0sPt(NULL),
350 fHistoTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
351 fHistoTrueDalitzPsiPairDeltaPhi(NULL),
352 fHistoTrueGammaPsiPairDeltaPhi(NULL),
353 fHistoTrueClusGammaPt(NULL),
354 fHistoTruePrimaryClusGammaPt(NULL),
355 fHistoTruePrimaryClusGammaESDPtMCPt(NULL),
357 fHistoNGoodESDTracks(NULL),
358 fHistoNGammaCandidates(NULL),
359 fHistoNGoodESDTracksVsNGammaCanditates(NULL),
360 fHistoNV0Tracks(NULL),
361 fProfileEtaShift(NULL),
362 fEventPlaneAngle(-100),
364 fNGammaCandidates(0),
375 fMoveParticleAccordingToVertex(kTRUE),
377 fDoMesonAnalysis(kTRUE),
380 fIsFromMBHeader(kTRUE),
386 // Define output slots here
387 DefineOutput(1, TList::Class());
390 AliAnalysisTaskGammaConvCalo::~AliAnalysisTaskGammaConvCalo()
392 if(fGammaCandidates){
393 delete fGammaCandidates;
394 fGammaCandidates = 0x0;
396 if(fClusterCandidates){
397 delete fClusterCandidates;
398 fClusterCandidates = 0x0;
405 delete[] fBGHandlerRP;
409 delete[] fBGClusHandler;
410 fBGClusHandler = 0x0;
412 if(fBGClusHandlerRP){
413 delete[] fBGClusHandlerRP;
414 fBGClusHandlerRP = 0x0;
417 //___________________________________________________________
418 void AliAnalysisTaskGammaConvCalo::InitBack(){
420 const Int_t nDim = 4;
421 Int_t nBins[nDim] = {800,250,7,4};
422 Double_t xMin[nDim] = {0,0, 0,0};
423 Double_t xMax[nDim] = {0.8,25,7,4};
425 fSparseMotherInvMassPtZM = new THnSparseF*[fnCuts];
426 fSparseMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
428 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
429 fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
431 fBGClusHandler = new AliGammaConversionAODBGHandler*[fnCuts];
432 fBGClusHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
434 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
435 if (((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
436 TString cutstringEvent = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
437 TString cutstringPhoton = ((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutNumber();
438 TString cutstringCalo = ((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutNumber();
439 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
441 Int_t collisionSystem = atoi((TString)(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber())(0,1));
442 Int_t centMin = atoi((TString)(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber())(1,1));
443 Int_t centMax = atoi((TString)(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber())(2,1));
445 if(collisionSystem == 1 || collisionSystem == 2 ||
446 collisionSystem == 5 || collisionSystem == 8 ||
447 collisionSystem == 9){
448 centMin = centMin*10;
449 centMax = centMax*10;
450 if(centMax ==0 && centMax!=centMin) centMax=100;
451 } else if(collisionSystem == 3 || collisionSystem == 6){
454 } else if(collisionSystem == 4 || collisionSystem == 7){
455 centMin = ((centMin*5)+45);
456 centMax = ((centMax*5)+45);
459 fBackList[iCut] = new TList();
460 fBackList[iCut]->SetName(Form("%s_%s_%s_%s Back histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(), cutstringMeson.Data()));
461 fBackList[iCut]->SetOwner(kTRUE);
462 fCutFolder[iCut]->Add(fBackList[iCut]);
464 fSparseMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
465 fBackList[iCut]->Add(fSparseMotherBackInvMassPtZM[iCut]);
467 fMotherList[iCut] = new TList();
468 fMotherList[iCut]->SetName(Form("%s_%s_%s_%s Mother histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
469 fMotherList[iCut]->SetOwner(kTRUE);
470 fCutFolder[iCut]->Add(fMotherList[iCut]);
472 fSparseMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
473 fMotherList[iCut]->Add(fSparseMotherInvMassPtZM[iCut]);
475 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
476 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
477 collisionSystem,centMin,centMax,
478 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents(),
479 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity());
480 fBGClusHandler[iCut] = new AliGammaConversionAODBGHandler(
481 collisionSystem,centMin,centMax,
482 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents(),
483 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity());
484 fBGHandlerRP[iCut] = NULL;
486 fBGHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
487 ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsHeavyIon(),
488 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
489 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
490 fBGClusHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
491 ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsHeavyIon(),
492 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
493 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
494 fBGHandler[iCut] = NULL;
499 //________________________________________________________________________
500 void AliAnalysisTaskGammaConvCalo::UserCreateOutputObjects(){
503 if(fOutputContainer != NULL){
504 delete fOutputContainer;
505 fOutputContainer = NULL;
507 if(fOutputContainer == NULL){
508 fOutputContainer = new TList();
509 fOutputContainer->SetOwner(kTRUE);
512 // Array of current cut's gammas
513 fGammaCandidates = new TList();
514 fClusterCandidates = new TList();
516 fCutFolder = new TList*[fnCuts];
517 fESDList = new TList*[fnCuts];
518 fBackList = new TList*[fnCuts];
519 fMotherList = new TList*[fnCuts];
520 fHistoNEvents = new TH1I*[fnCuts];
521 fHistoNGoodESDTracks = new TH1I*[fnCuts];
522 fHistoNGammaCandidates = new TH1I*[fnCuts];
523 fHistoNGoodESDTracksVsNGammaCanditates = new TH2F*[fnCuts];
524 fHistoNV0Tracks = new TH1I*[fnCuts];
525 fProfileEtaShift = new TProfile*[fnCuts];
526 fHistoConvGammaPt = new TH1F*[fnCuts];
528 if (fDoPhotonQA == 2){
529 fPhotonDCAList = new TList*[fnCuts];
530 fTreeConvGammaPtDcazCat = new TTree*[fnCuts];
532 if (fDoPhotonQA > 0){
533 fHistoConvGammaR = new TH1F*[fnCuts];
534 fHistoConvGammaEta = new TH1F*[fnCuts];
537 if(fDoMesonAnalysis){
538 fHistoMotherInvMassPt = new TH2F*[fnCuts];
539 fHistoMotherBackInvMassPt = new TH2F*[fnCuts];
540 fHistoMotherInvMassEalpha = new TH2F*[fnCuts];
541 if (fDoMesonQA == 2){
542 fMesonDCAList = new TList*[fnCuts];
543 fTreeMesonsInvMassPtDcazMinDcazMaxFlag = new TTree*[fnCuts];
546 fHistoMotherPi0PtY = new TH2F*[fnCuts];
547 fHistoMotherEtaPtY = new TH2F*[fnCuts];
548 fHistoMotherPi0PtAlpha = new TH2F*[fnCuts];
549 fHistoMotherEtaPtAlpha = new TH2F*[fnCuts];
550 fHistoMotherPi0PtOpenAngle = new TH2F*[fnCuts];
551 fHistoMotherEtaPtOpenAngle = new TH2F*[fnCuts];
554 fTagOutputList = new TList*[fnCuts];
556 fHistoConvGammaUntagged = new TH1F*[fnCuts];
557 fHistoConvGammaTagged = new TH1F*[fnCuts];
558 fHistoConvGammaPi0Tagged = new TH1F*[fnCuts];
559 fHistoConvGammaEtaTagged = new TH1F*[fnCuts];
560 fHistoPhotonPairAll = new TH2F*[fnCuts];
561 fHistoPhotonPairAllGam = new TH2F*[fnCuts];
563 fHistoClusGammaPt = new TH1F*[fnCuts];
565 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
566 TString cutstringEvent = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
567 TString cutstringPhoton = ((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutNumber();
568 TString cutstringCalo = ((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutNumber();
569 TString cutstringMeson = "NoMesonCut";
570 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
572 fCutFolder[iCut] = new TList();
573 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s_%s_%s",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
574 fCutFolder[iCut]->SetOwner(kTRUE);
575 fOutputContainer->Add(fCutFolder[iCut]);
576 fESDList[iCut] = new TList();
577 fESDList[iCut]->SetName(Form("%s_%s_%s_%s ESD histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
578 fESDList[iCut]->SetOwner(kTRUE);
579 fCutFolder[iCut]->Add(fESDList[iCut]);
581 fHistoNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
582 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
583 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
584 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
585 if (((AliConvEventCuts*)fEventCutArray->At(iCut))->IsSpecialTrigger() == 4 ){
586 TString TriggerNames = "Not Trigger: ";
587 TriggerNames = TriggerNames+ ( (AliConvEventCuts*)fEventCutArray->At(iCut))->GetSpecialTriggerName();
588 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(4,TriggerNames.Data());
590 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
592 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
593 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
594 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
595 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
596 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
597 fESDList[iCut]->Add(fHistoNEvents[iCut]);
599 if(fIsHeavyIon == 1) fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",4000,0,4000);
600 else if(fIsHeavyIon == 2) fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",400,0,400);
601 else fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
602 fESDList[iCut]->Add(fHistoNGoodESDTracks[iCut]);
603 if(fIsHeavyIon == 1) fHistoNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",100,0,100);
604 else if(fIsHeavyIon == 2) fHistoNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
605 else fHistoNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
606 fESDList[iCut]->Add(fHistoNGammaCandidates[iCut]);
607 if(fIsHeavyIon == 1) fHistoNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",4000,0,4000,100,0,100);
608 else if(fIsHeavyIon == 2) fHistoNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",400,0,400,50,0,50);
609 else fHistoNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",200,0,200,50,0,50);
610 fESDList[iCut]->Add(fHistoNGoodESDTracksVsNGammaCanditates[iCut]);
613 if(fIsHeavyIon == 1) fHistoNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
614 else if(fIsHeavyIon == 2) fHistoNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2500,0,2500);
615 else fHistoNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",1500,0,1500);
616 fESDList[iCut]->Add(fHistoNV0Tracks[iCut]);
617 fProfileEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
618 fESDList[iCut]->Add(fProfileEtaShift[iCut]);
619 fHistoConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
620 fESDList[iCut]->Add(fHistoConvGammaPt[iCut]);
622 if (fDoPhotonQA == 2){
623 fPhotonDCAList[iCut] = new TList();
624 fPhotonDCAList[iCut]->SetName(Form("%s_%s_%s_%s Photon DCA tree",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
625 fPhotonDCAList[iCut]->SetOwner(kTRUE);
626 fCutFolder[iCut]->Add(fPhotonDCAList[iCut]);
628 fTreeConvGammaPtDcazCat[iCut] = new TTree("ESD_ConvGamma_Pt_Dcaz_R_Eta","ESD_ConvGamma_Pt_Dcaz_R_Eta_Cat");
629 fTreeConvGammaPtDcazCat[iCut]->Branch("Pt",&fPtGamma,"fPtGamma/F");
630 fTreeConvGammaPtDcazCat[iCut]->Branch("DcaZPhoton",&fDCAzPhoton,"fDCAzPhoton/F");
631 // fTreeConvGammaPtDcazCat[iCut]->Branch("R",&fRConvPhoton,"fRConvPhoton/F");
632 // fTreeConvGammaPtDcazCat[iCut]->Branch("Eta",&fEtaPhoton,"fEtaPhoton/F");
634 fTreeConvGammaPtDcazCat[iCut]->Branch("cat",&fCharCatPhoton,"fCharCatPhoton/b");
636 fTreeConvGammaPtDcazCat[iCut]->Branch("photonMCInfo",&fCharPhotonMCInfo,"fCharPhotonMCInfo/b");
638 fPhotonDCAList[iCut]->Add(fTreeConvGammaPtDcazCat[iCut]);
641 if (fDoPhotonQA > 0){
642 fHistoConvGammaR[iCut] = new TH1F("ESD_ConvGamma_R","ESD_ConvGamma_R",800,0,200);
643 fESDList[iCut]->Add(fHistoConvGammaR[iCut]);
644 fHistoConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",2000,-2,2);
645 fESDList[iCut]->Add(fHistoConvGammaEta[iCut]);
648 fTagOutputList[iCut] = new TList();
649 fTagOutputList[iCut]->SetName(Form("%s_%s_%s_%s Tagging Output",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
650 fTagOutputList[iCut]->SetOwner(1);
651 fCutFolder[iCut]->Add(fTagOutputList[iCut]);
653 const Int_t nptbins = 200;
654 const Double_t ptmin = 0.;
655 const Double_t ptmax = 20.;
657 const Int_t nmbins = 180;
658 const Double_t mmin = 0.;
659 const Double_t mmax = 0.9;
662 // this is maybe not necessary ...
664 fHistoConvGammaUntagged[iCut] = new TH1F("ConvGammaUntagged","",nptbins,ptmin,ptmax);
665 fHistoConvGammaUntagged[iCut]->SetXTitle("p_{T} (GeV/c)");
666 fTagOutputList[iCut]->Add(fHistoConvGammaUntagged[iCut]);
668 fHistoConvGammaTagged[iCut] = new TH1F("ConvGammaTagged","",nptbins,ptmin,ptmax);
669 fHistoConvGammaTagged[iCut]->SetXTitle("p_{T} (GeV/c)");
670 fTagOutputList[iCut]->Add(fHistoConvGammaTagged[iCut]);
672 fHistoConvGammaPi0Tagged[iCut] = new TH1F("ConvGammaPi0Tagged","",nptbins,ptmin,ptmax);
673 fHistoConvGammaPi0Tagged[iCut]->SetXTitle("p_{T} (GeV/c)");
674 fTagOutputList[iCut]->Add(fHistoConvGammaPi0Tagged[iCut]);
676 fHistoConvGammaEtaTagged[iCut] = new TH1F("ConvGammaEtaTagged","",nptbins,ptmin,ptmax);
677 fHistoConvGammaEtaTagged[iCut]->SetXTitle("p_{T} (GeV/c)");
678 fTagOutputList[iCut]->Add(fHistoConvGammaEtaTagged[iCut]);
681 fHistoPhotonPairAll[iCut] = new TH2F("PhotonPairAll","",nmbins,mmin,mmax,nptbins,ptmin,ptmax);
682 fHistoPhotonPairAll[iCut]->SetXTitle("M_{inv} (GeV/cc)");
683 fHistoPhotonPairAll[iCut]->SetYTitle("p_{T} (GeV/c)");
684 fTagOutputList[iCut]->Add(fHistoPhotonPairAll[iCut]);
686 fHistoPhotonPairAllGam[iCut] = new TH2F("PhotonPairAllGammaConvPt","",nmbins,mmin,mmax,nptbins,ptmin,ptmax);
687 fHistoPhotonPairAllGam[iCut]->SetXTitle("M_{inv} (GeV/cc)");
688 fHistoPhotonPairAllGam[iCut]->SetYTitle("#gamma^{conv} p_{T} (GeV/c)");
689 fTagOutputList[iCut]->Add(fHistoPhotonPairAllGam[iCut]);
691 fHistoClusGammaPt[iCut] = new TH1F("ClusGamma_Pt","ClusGamma_Pt",250,0,25);
692 fTagOutputList[iCut]->Add(fHistoClusGammaPt[iCut]);
695 if(fDoMesonAnalysis){
696 fHistoMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",800,0,0.8,250,0,25);
697 fESDList[iCut]->Add(fHistoMotherInvMassPt[iCut]);
698 fHistoMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",800,0,0.8,250,0,25);
699 fESDList[iCut]->Add(fHistoMotherBackInvMassPt[iCut]);
700 fHistoMotherInvMassEalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_alpha","ESD_Mother_InvMass_vs_E_alpha",800,0,0.8,250,0,25);
701 fESDList[iCut]->Add(fHistoMotherInvMassEalpha[iCut]);
702 if (fDoMesonQA == 2){
703 fMesonDCAList[iCut] = new TList();
704 fMesonDCAList[iCut]->SetName(Form("%s_%s_%s_%s Meson DCA tree",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
705 fMesonDCAList[iCut]->SetOwner(kTRUE);
706 fCutFolder[iCut]->Add(fMesonDCAList[iCut]);
708 fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut] = new TTree("ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag","ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag");
709 fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("InvMass",&fInvMass,"fInvMass/F");
710 fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("Pt",&fPt,"fPt/F");
711 fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMin",&fDCAzGammaMin,"fDCAzGammaMin/F");
712 fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMax",&fDCAzGammaMax,"fDCAzGammaMax/F");
713 fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("kind",&fCharFlag,"fCharFlag/b");
715 fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("mesonMCInfo",&fCharMesonMCInfo,"fCharMesonMCInfo/b");
717 fMesonDCAList[iCut]->Add(fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]);
720 if (fDoMesonQA > 0 ){
721 fHistoMotherPi0PtY[iCut] = new TH2F("ESD_MotherPi0_Pt_Y","ESD_MotherPi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
722 SetLogBinningXTH2(fHistoMotherPi0PtY[iCut]);
723 fESDList[iCut]->Add(fHistoMotherPi0PtY[iCut]);
724 fHistoMotherEtaPtY[iCut] = new TH2F("ESD_MotherEta_Pt_Y","ESD_MotherEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
725 SetLogBinningXTH2(fHistoMotherEtaPtY[iCut]);
726 fESDList[iCut]->Add(fHistoMotherEtaPtY[iCut]);
727 fHistoMotherPi0PtAlpha[iCut] = new TH2F("ESD_MotherPi0_Pt_Alpha","ESD_MotherPi0_Pt_Alpha",150,0.03,15.,100,0,1);
728 SetLogBinningXTH2(fHistoMotherPi0PtAlpha[iCut]);
729 fESDList[iCut]->Add(fHistoMotherPi0PtAlpha[iCut]);
730 fHistoMotherEtaPtAlpha[iCut] = new TH2F("ESD_MotherEta_Pt_Alpha","ESD_MotherEta_Pt_Alpha",150,0.03,15.,100,0,1);
731 SetLogBinningXTH2(fHistoMotherEtaPtAlpha[iCut]);
732 fESDList[iCut]->Add(fHistoMotherEtaPtAlpha[iCut]);
733 fHistoMotherPi0PtOpenAngle[iCut] = new TH2F("ESD_MotherPi0_Pt_OpenAngle","ESD_MotherPi0_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
734 SetLogBinningXTH2(fHistoMotherPi0PtOpenAngle[iCut]);
735 fESDList[iCut]->Add(fHistoMotherPi0PtOpenAngle[iCut]);
736 fHistoMotherEtaPtOpenAngle[iCut] = new TH2F("ESD_MotherEta_Pt_OpenAngle","ESD_MotherEta_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
737 SetLogBinningXTH2(fHistoMotherEtaPtOpenAngle[iCut]);
738 fESDList[iCut]->Add(fHistoMotherEtaPtOpenAngle[iCut]);
742 if(fDoMesonAnalysis){
743 InitBack(); // Init Background Handler
748 fMCList = new TList*[fnCuts];
750 fTrueList = new TList*[fnCuts];
751 // Selected Header List
752 fHeaderNameList = new TList*[fnCuts];
753 fHistoMCHeaders = new TH1I*[fnCuts];
754 fHistoMCAllGammaPt = new TH1F*[fnCuts];
755 fHistoMCDecayGammaPi0Pt = new TH1F*[fnCuts];
756 fHistoMCDecayGammaRhoPt = new TH1F*[fnCuts];
757 fHistoMCDecayGammaEtaPt = new TH1F*[fnCuts];
758 fHistoMCDecayGammaOmegaPt = new TH1F*[fnCuts];
759 fHistoMCDecayGammaEtapPt = new TH1F*[fnCuts];
760 fHistoMCDecayGammaPhiPt = new TH1F*[fnCuts];
761 fHistoMCDecayGammaSigmaPt = new TH1F*[fnCuts];
762 fHistoMCConvGammaPt = new TH1F*[fnCuts];
763 fHistoTrueConvGammaPt = new TH1F*[fnCuts];
764 fHistoTrueConvPi0GammaPt = new TH1F*[fnCuts];
766 fHistoCombinatorialPt = new TH2F*[fnCuts];
767 fHistoTruePrimaryConvGammaPt = new TH1F*[fnCuts];
768 fHistoTruePrimaryConvGammaESDPtMCPt = new TH2F*[fnCuts];
769 fHistoTrueSecondaryConvGammaPt = new TH1F*[fnCuts];
770 fHistoTrueSecondaryConvGammaFromXFromK0sPt = new TH1F*[fnCuts];
771 fHistoTrueSecondaryConvGammaFromXFromLambdaPt = new TH1F*[fnCuts];
773 fHistoTrueDalitzPsiPairDeltaPhi= new TH2F*[fnCuts];
774 fHistoTrueGammaPsiPairDeltaPhi= new TH2F*[fnCuts];
776 fHistoTrueClusGammaPt = new TH1F*[fnCuts];
777 fHistoTruePrimaryClusGammaPt = new TH1F*[fnCuts];
778 fHistoTruePrimaryClusGammaESDPtMCPt = new TH2F*[fnCuts];
780 if (fDoPhotonQA > 0){
781 fHistoMCConvGammaR = new TH1F*[fnCuts];
782 fHistoMCConvGammaEta = new TH1F*[fnCuts];
783 fHistoTrueConvGammaEta = new TH1F*[fnCuts];
786 if(fDoMesonAnalysis){
787 fHistoMCPi0Pt = new TH1F*[fnCuts];
788 fHistoMCPi0WOWeightPt = new TH1F*[fnCuts];
789 fHistoMCEtaPt = new TH1F*[fnCuts];
790 fHistoMCEtaWOWeightPt = new TH1F*[fnCuts];
791 fHistoMCPi0InAccPt = new TH1F*[fnCuts];
792 fHistoMCEtaInAccPt = new TH1F*[fnCuts];
794 fHistoTrueMotherInvMassPt = new TH2F*[fnCuts];
795 fHistoTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
796 fHistoTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
797 fProfileTruePrimaryMotherWeightsInvMassPt = new TProfile2D*[fnCuts];
798 fHistoTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
799 fHistoTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
800 fHistoTrueSecondaryMotherFromEtaInvMassPt = new TH2F*[fnCuts];
801 fHistoTrueSecondaryMotherFromLambdaInvMassPt = new TH2F*[fnCuts];
802 fHistoTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
804 fHistoMCPi0PtY = new TH2F*[fnCuts];
805 fHistoMCEtaPtY = new TH2F*[fnCuts];
806 fHistoMCK0sPt = new TH1F*[fnCuts];
807 fHistoMCK0sWOWeightPt = new TH1F*[fnCuts];
808 fHistoMCK0sPtY = new TH2F*[fnCuts];
809 fHistoMCSecPi0PtvsSource= new TH2F*[fnCuts];
810 fHistoMCSecPi0Source = new TH1F*[fnCuts];
811 fHistoMCSecEtaPt = new TH1F*[fnCuts];
812 fHistoMCSecEtaSource = new TH1F*[fnCuts];
813 fHistoTruePrimaryPi0MCPtResolPt = new TH2F*[fnCuts];
814 fHistoTruePrimaryEtaMCPtResolPt = new TH2F*[fnCuts];
815 fHistoTrueK0sWithPi0DaughterMCPt = new TH1F*[fnCuts];
816 fHistoTrueEtaWithPi0DaughterMCPt = new TH1F*[fnCuts];
817 fHistoTrueLambdaWithPi0DaughterMCPt = new TH1F*[fnCuts];
818 fHistoTrueBckGGInvMassPt = new TH2F*[fnCuts];
819 fHistoTrueBckContInvMassPt = new TH2F*[fnCuts];
820 fHistoTruePi0PtY = new TH2F*[fnCuts];
821 fHistoTrueEtaPtY = new TH2F*[fnCuts];
822 fHistoTruePi0PtAlpha = new TH2F*[fnCuts];
823 fHistoTrueEtaPtAlpha = new TH2F*[fnCuts];
824 fHistoTruePi0PtOpenAngle = new TH2F*[fnCuts];
825 fHistoTrueEtaPtOpenAngle = new TH2F*[fnCuts];
831 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
832 TString cutstringEvent = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
833 TString cutstringPhoton = ((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutNumber();
834 TString cutstringCalo = ((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutNumber();
835 TString cutstringMeson = "NoMesonCut";
836 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
838 fMCList[iCut] = new TList();
839 fMCList[iCut]->SetName(Form("%s_%s_%s_%s MC histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
840 fMCList[iCut]->SetOwner(kTRUE);
841 fCutFolder[iCut]->Add(fMCList[iCut]);
842 fHistoMCHeaders[iCut] = new TH1I("MC_Headers","MC_Headers",20,0,20);
843 fMCList[iCut]->Add(fHistoMCHeaders[iCut]);
844 fHistoMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
845 fMCList[iCut]->Add(fHistoMCAllGammaPt[iCut]);
846 fHistoMCDecayGammaPi0Pt[iCut] = new TH1F("MC_DecayGammaPi0_Pt","MC_DecayGammaPi0_Pt",250,0,25);
847 fMCList[iCut]->Add(fHistoMCDecayGammaPi0Pt[iCut]);
848 fHistoMCDecayGammaRhoPt[iCut] = new TH1F("MC_DecayGammaRho_Pt","MC_DecayGammaRho_Pt",250,0,25);
849 fMCList[iCut]->Add(fHistoMCDecayGammaRhoPt[iCut]);
850 fHistoMCDecayGammaEtaPt[iCut] = new TH1F("MC_DecayGammaEta_Pt","MC_DecayGammaEta_Pt",250,0,25);
851 fMCList[iCut]->Add(fHistoMCDecayGammaEtaPt[iCut]);
852 fHistoMCDecayGammaOmegaPt[iCut] = new TH1F("MC_DecayGammaOmega_Pt","MC_DecayGammaOmmega_Pt",250,0,25);
853 fMCList[iCut]->Add(fHistoMCDecayGammaOmegaPt[iCut]);
854 fHistoMCDecayGammaEtapPt[iCut] = new TH1F("MC_DecayGammaEtap_Pt","MC_DecayGammaEtap_Pt",250,0,25);
855 fMCList[iCut]->Add(fHistoMCDecayGammaEtapPt[iCut]);
856 fHistoMCDecayGammaPhiPt[iCut] = new TH1F("MC_DecayGammaPhi_Pt","MC_DecayGammaPhi_Pt",250,0,25);
857 fMCList[iCut]->Add(fHistoMCDecayGammaPhiPt[iCut]);
858 fHistoMCDecayGammaSigmaPt[iCut] = new TH1F("MC_DecayGammaSigma_Pt","MC_DecayGammaSigma_Pt",250,0,25);
859 fMCList[iCut]->Add(fHistoMCDecayGammaSigmaPt[iCut]);
860 fHistoMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
861 fMCList[iCut]->Add(fHistoMCConvGammaPt[iCut]);
863 if (fDoPhotonQA > 0){
864 fHistoMCConvGammaR[iCut] = new TH1F("MC_ConvGamma_R","MC_ConvGamma_R",800,0,200);
865 fMCList[iCut]->Add(fHistoMCConvGammaR[iCut]);
866 fHistoMCConvGammaEta[iCut] = new TH1F("MC_ConvGamma_Eta","MC_ConvGamma_Eta",2000,-2,2);
867 fMCList[iCut]->Add(fHistoMCConvGammaEta[iCut]);
870 if(fDoMesonAnalysis){
871 fHistoMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
872 fHistoMCPi0Pt[iCut]->Sumw2();
873 fMCList[iCut]->Add(fHistoMCPi0Pt[iCut]);
874 fHistoMCPi0WOWeightPt[iCut] = new TH1F("MC_Pi0_WOWeights_Pt","MC_Pi0_WOWeights_Pt",250,0,25);
875 fHistoMCPi0WOWeightPt[iCut]->Sumw2();
876 fMCList[iCut]->Add(fHistoMCPi0WOWeightPt[iCut]);
878 fHistoMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
879 fHistoMCEtaPt[iCut]->Sumw2();
880 fMCList[iCut]->Add(fHistoMCEtaPt[iCut]);
881 fHistoMCEtaWOWeightPt[iCut] = new TH1F("MC_Eta_WOWeights_Pt","MC_Eta_WOWeights_Pt",250,0,25);
882 fHistoMCEtaWOWeightPt[iCut]->Sumw2();
883 fMCList[iCut]->Add(fHistoMCEtaWOWeightPt[iCut]);
884 fHistoMCPi0InAccPt[iCut] = new TH1F("MC_Pi0InAcc_Pt","MC_Pi0InAcc_Pt",250,0,25);
885 fHistoMCPi0InAccPt[iCut]->Sumw2();
886 fMCList[iCut]->Add(fHistoMCPi0InAccPt[iCut]);
887 fHistoMCEtaInAccPt[iCut] = new TH1F("MC_EtaInAcc_Pt","MC_EtaInAcc_Pt",250,0,25);
888 fHistoMCEtaInAccPt[iCut]->Sumw2();
889 fMCList[iCut]->Add(fHistoMCEtaInAccPt[iCut]);
891 fHistoMCPi0PtY[iCut] = new TH2F("MC_Pi0_Pt_Y","MC_Pi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
892 fHistoMCPi0PtY[iCut]->Sumw2();
893 SetLogBinningXTH2(fHistoMCPi0PtY[iCut]);
894 fMCList[iCut]->Add(fHistoMCPi0PtY[iCut]);
895 fHistoMCEtaPtY[iCut] = new TH2F("MC_Eta_Pt_Y","MC_Eta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
896 fHistoMCEtaPtY[iCut]->Sumw2();
897 SetLogBinningXTH2(fHistoMCEtaPtY[iCut]);
898 fMCList[iCut]->Add(fHistoMCEtaPtY[iCut]);
899 fHistoMCK0sPt[iCut] = new TH1F("MC_K0s_Pt","MC_K0s_Pt",150,0,15);
900 fHistoMCK0sPt[iCut]->Sumw2();
901 fMCList[iCut]->Add(fHistoMCK0sPt[iCut]);
902 fHistoMCK0sWOWeightPt[iCut] = new TH1F("MC_K0s_WOWeights_Pt","MC_K0s_WOWeights_Pt",150,0,15);
903 fHistoMCK0sWOWeightPt[iCut]->Sumw2();
904 fMCList[iCut]->Add(fHistoMCK0sWOWeightPt[iCut]);
905 fHistoMCK0sPtY[iCut] = new TH2F("MC_K0s_Pt_Y","MC_K0s_Pt_Y",150,0.03,15.,150,-1.5,1.5);
906 fHistoMCK0sPtY[iCut]->Sumw2();
907 SetLogBinningXTH2(fHistoMCK0sPtY[iCut]);
908 fMCList[iCut]->Add(fHistoMCK0sPtY[iCut]);
910 fHistoMCSecPi0Source[iCut] = new TH1F("MC_SecPi0_Source","MC_SecPi0_Source",5000,0.,5000);
911 fMCList[iCut]->Add(fHistoMCSecPi0Source[iCut]);
912 fHistoMCSecEtaSource[iCut] = new TH1F("MC_SecEta_Source","MC_SecEta_Source",5000,0,5000);
913 fMCList[iCut]->Add(fHistoMCSecEtaSource[iCut]);
914 fHistoMCSecPi0PtvsSource[iCut] = new TH2F("MC_SecPi0_Pt_Source","MC_SecPi0_Pt_Source",250,0.0,25.,16,-0.5,15.5);
915 fHistoMCSecPi0PtvsSource[iCut]->Sumw2();
916 fMCList[iCut]->Add(fHistoMCSecPi0PtvsSource[iCut]);
917 fHistoMCSecEtaPt[iCut] = new TH1F("MC_SecEta_Pt","MC_SecEta_Pt",250,0,25);
918 fHistoMCSecEtaPt[iCut]->Sumw2();
919 fMCList[iCut]->Add(fHistoMCSecEtaPt[iCut]);
923 fTrueList[iCut] = new TList();
924 fTrueList[iCut]->SetName(Form("%s_%s_%s_%s True histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
925 fTrueList[iCut]->SetOwner(kTRUE);
926 fCutFolder[iCut]->Add(fTrueList[iCut]);
928 fHistoTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
929 fTrueList[iCut]->Add(fHistoTrueConvGammaPt[iCut]);
931 fHistoTrueConvPi0GammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
932 fTrueList[iCut]->Add(fHistoTrueConvPi0GammaPt[iCut]);
934 fHistoCombinatorialPt[iCut] = new TH2F("ESD_TrueCombinatorial_Pt","ESD_TrueCombinatorial_Pt",250,0,25,16,-0.5,15.5);
935 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 1,"Elec+Elec");
936 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 2,"Elec+Pion");
937 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 3,"Elec+Kaon");
938 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 4,"Elec+Proton");
939 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 5,"Elec+Muon");
940 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 6,"Pion+Pion");
941 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 7,"Pion+Kaon");
942 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 8,"Pion+Proton");
943 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 9,"Pion+Muon");
944 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(10,"Kaon+Kaon");
945 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(11,"Kaon+Proton");
946 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(12,"Kaon+Muon");
947 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(13,"Proton+Proton");
948 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(14,"Proton+Muon");
949 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(15,"Muon+Muon");
950 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(16,"Rest");
951 fTrueList[iCut]->Add(fHistoCombinatorialPt[iCut]);
952 fHistoTruePrimaryConvGammaPt[iCut] = new TH1F("ESD_TruePrimaryConvGamma_Pt","ESD_TruePrimaryConvGamma_Pt",250,0,25);
953 fTrueList[iCut]->Add(fHistoTruePrimaryConvGammaPt[iCut]);
954 fHistoTrueSecondaryConvGammaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGamma_Pt","ESD_TrueSecondaryConvGamma_Pt",250,0,25);
955 fTrueList[iCut]->Add(fHistoTrueSecondaryConvGammaPt[iCut]);
957 fHistoTrueSecondaryConvGammaFromXFromK0sPt[iCut] = new TH1F("ESD_TrueSecondaryConvGammaFromXFromK0s_Pt", "ESD_TrueSecondaryConvGammaFromXFromK0s_Pt",250,0,25);
958 fTrueList[iCut]->Add(fHistoTrueSecondaryConvGammaFromXFromK0sPt[iCut]);
959 fHistoTrueSecondaryConvGammaFromXFromLambdaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGammaFromXFromLambda_Pt", "ESD_TrueSecondaryConvGammaFromXFromLambda_Pt",250,0,25);
960 fTrueList[iCut]->Add(fHistoTrueSecondaryConvGammaFromXFromLambdaPt[iCut]);
962 fHistoTrueDalitzPsiPairDeltaPhi[iCut] = new TH2F("ESD_TrueDalitzPsiPairDeltaPhi_Pt", "ESD_TrueDalitzPsiPairDeltaPhi_Pt",100,-0.5,2,100,-0.5,0.5);
963 fTrueList[iCut]->Add(fHistoTrueDalitzPsiPairDeltaPhi[iCut]);
965 fHistoTrueGammaPsiPairDeltaPhi[iCut] = new TH2F("ESD_TrueGammaPsiPairDeltaPhi_Pt", "ESD_TrueGammaPsiPairDeltaPhi_Pt",100,-0.5,2,100,-0.5,0.5);
966 fTrueList[iCut]->Add(fHistoTrueGammaPsiPairDeltaPhi[iCut]);
968 fHistoTruePrimaryConvGammaESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryConvGammaESD_PtMCPt", "ESD_TruePrimaryConvGammaESD_PtMCPt",250,0,25,250,0,25);
969 fTrueList[iCut]->Add(fHistoTruePrimaryConvGammaESDPtMCPt[iCut]);
971 fHistoTrueClusGammaPt[iCut] = new TH1F("TrueClusGamma_Pt","ESD_TruePrimaryClusGamma_Pt",250,0,25);
972 fTagOutputList[iCut]->Add(fHistoTrueClusGammaPt[iCut]);
973 fHistoTruePrimaryClusGammaPt[iCut] = new TH1F("TruePrimaryClusGamma_Pt","ESD_TruePrimaryClusGamma_Pt",250,0,25);
974 fTagOutputList[iCut]->Add(fHistoTruePrimaryClusGammaPt[iCut]);
975 fHistoTruePrimaryClusGammaESDPtMCPt[iCut] = new TH2F("TruePrimaryClusGamma_Pt_MCPt","ESD_TruePrimaryClusGamma_MCPt",250,0,25,250,0,25);
976 fTagOutputList[iCut]->Add(fHistoTruePrimaryClusGammaESDPtMCPt[iCut]);
978 if(fDoMesonAnalysis){
979 fHistoTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
980 fTrueList[iCut]->Add(fHistoTrueMotherInvMassPt[iCut]);
981 fHistoTruePrimaryMotherInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMother_InvMass_Pt", "ESD_TruePrimaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
982 fHistoTruePrimaryMotherInvMassPt[iCut]->Sumw2();
983 fTrueList[iCut]->Add(fHistoTruePrimaryMotherInvMassPt[iCut]);
984 fHistoTruePrimaryMotherW0WeightingInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMotherW0Weights_InvMass_Pt", "ESD_TruePrimaryMotherW0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
985 fHistoTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
986 fTrueList[iCut]->Add(fHistoTruePrimaryMotherW0WeightingInvMassPt[iCut]);
987 fProfileTruePrimaryMotherWeightsInvMassPt[iCut] = new TProfile2D("ESD_TruePrimaryMotherWeights_InvMass_Pt", "ESD_TruePrimaryMotherWeights_InvMass_Pt", 800,0,0.8,250,0,25);
988 fProfileTruePrimaryMotherWeightsInvMassPt[iCut]->Sumw2();
989 fTrueList[iCut]->Add(fProfileTruePrimaryMotherWeightsInvMassPt[iCut]);
990 fHistoTrueSecondaryMotherInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryMother_InvMass_Pt", "ESD_TrueSecondaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
991 fHistoTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
992 fTrueList[iCut]->Add(fHistoTrueSecondaryMotherInvMassPt[iCut]);
993 fHistoTrueSecondaryMotherFromK0sInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueSecondaryMotherFromK0s_InvMass_Pt",800,0,0.8,250,0,25);
994 fHistoTrueSecondaryMotherFromK0sInvMassPt[iCut]->Sumw2();
995 fTrueList[iCut]->Add(fHistoTrueSecondaryMotherFromK0sInvMassPt[iCut]);
996 fHistoTrueSecondaryMotherFromEtaInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryMotherFromEta_InvMass_Pt","ESD_TrueSecondaryMotherFromEta_InvMass_Pt",800,0,0.8,250,0,25);
997 fTrueList[iCut]->Add(fHistoTrueSecondaryMotherFromEtaInvMassPt[iCut]);
998 fHistoTrueSecondaryMotherFromLambdaInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryMotherFromLambda_InvMass_Pt","ESD_TrueSecondaryMotherFromLambda_InvMass_Pt",800,0,0.8,250,0,25);
999 fTrueList[iCut]->Add(fHistoTrueSecondaryMotherFromLambdaInvMassPt[iCut]);
1000 fHistoTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueDalitz_InvMass_Pt","ESD_TrueDalitz_InvMass_Pt",800,0,0.8,250,0,25);
1001 fTrueList[iCut]->Add(fHistoTrueMotherDalitzInvMassPt[iCut]);
1002 if (fDoMesonQA > 0){
1003 fHistoTruePrimaryPi0MCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryPi0_MCPt_ResolPt","ESD_TruePrimaryPi0_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
1004 fHistoTruePrimaryPi0MCPtResolPt[iCut]->Sumw2();
1005 SetLogBinningXTH2(fHistoTruePrimaryPi0MCPtResolPt[iCut]);
1006 fTrueList[iCut]->Add(fHistoTruePrimaryPi0MCPtResolPt[iCut]);
1007 fHistoTruePrimaryEtaMCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryEta_MCPt_ResolPt","ESD_TruePrimaryEta_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
1008 fHistoTruePrimaryEtaMCPtResolPt[iCut]->Sumw2();
1009 SetLogBinningXTH2(fHistoTruePrimaryEtaMCPtResolPt[iCut]);
1010 fTrueList[iCut]->Add(fHistoTruePrimaryEtaMCPtResolPt[iCut]);
1011 fHistoTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueBckGG_InvMass_Pt","ESD_TrueBckGG_InvMass_Pt",800,0,0.8,250,0,25);
1012 fTrueList[iCut]->Add(fHistoTrueBckGGInvMassPt[iCut]);
1013 fHistoTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueBckCont_InvMass_Pt","ESD_TrueBckCont_InvMass_Pt",800,0,0.8,250,0,25);
1014 fTrueList[iCut]->Add(fHistoTrueBckContInvMassPt[iCut]);
1015 fHistoTrueK0sWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueK0sWithPi0Daughter_MCPt","ESD_TrueK0sWithPi0Daughter_MCPt",250,0,25);
1016 fTrueList[iCut]->Add(fHistoTrueK0sWithPi0DaughterMCPt[iCut]);
1017 fHistoTrueEtaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueEtaWithPi0Daughter_MCPt","ESD_TrueEtaWithPi0Daughter_MCPt",250,0,25);
1018 fTrueList[iCut]->Add(fHistoTrueEtaWithPi0DaughterMCPt[iCut]);
1019 fHistoTrueLambdaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueLambdaWithPi0Daughter_MCPt","ESD_TrueLambdaWithPi0Daughter_MCPt",250,0,25);
1020 fTrueList[iCut]->Add(fHistoTrueLambdaWithPi0DaughterMCPt[iCut]);
1022 fHistoTruePi0PtY[iCut] = new TH2F("ESD_TruePi0_Pt_Y","ESD_TruePi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
1023 SetLogBinningXTH2(fHistoTruePi0PtY[iCut]);
1024 fTrueList[iCut]->Add(fHistoTruePi0PtY[iCut]);
1025 fHistoTrueEtaPtY[iCut] = new TH2F("ESD_TrueEta_Pt_Y","ESD_TrueEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
1026 SetLogBinningXTH2(fHistoTrueEtaPtY[iCut]);
1027 fTrueList[iCut]->Add(fHistoTrueEtaPtY[iCut]);
1028 fHistoTruePi0PtAlpha[iCut] = new TH2F("ESD_TruePi0_Pt_Alpha","ESD_TruePi0_Pt_Alpha",150,0.03,15.,100,0,1);
1029 SetLogBinningXTH2(fHistoTruePi0PtAlpha[iCut]);
1030 fTrueList[iCut]->Add(fHistoTruePi0PtAlpha[iCut]);
1031 fHistoTrueEtaPtAlpha[iCut] = new TH2F("ESD_TrueEta_Pt_Alpha","ESD_TrueEta_Pt_Alpha",150,0.03,15.,100,0,1);
1032 SetLogBinningXTH2(fHistoTrueEtaPtAlpha[iCut]);
1033 fTrueList[iCut]->Add(fHistoTrueEtaPtAlpha[iCut]);
1035 fHistoTruePi0PtOpenAngle[iCut] = new TH2F("ESD_TruePi0_Pt_OpenAngle","ESD_TruePi0_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
1036 SetLogBinningXTH2(fHistoTruePi0PtOpenAngle[iCut]);
1037 fTrueList[iCut]->Add(fHistoTruePi0PtOpenAngle[iCut]);
1038 fHistoTrueEtaPtOpenAngle[iCut] = new TH2F("ESD_TrueEta_Pt_OpenAngle","ESD_TrueEta_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
1039 SetLogBinningXTH2(fHistoTrueEtaPtOpenAngle[iCut]);
1040 fTrueList[iCut]->Add(fHistoTrueEtaPtOpenAngle[iCut]);
1042 fHistoTrueConvGammaEta[iCut] = new TH1F("ESD_TrueConvGamma_Eta","ESD_TrueConvGamma_Eta",2000,-2,2);
1043 fTrueList[iCut]->Add(fHistoTrueConvGammaEta[iCut]);
1050 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
1051 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
1054 if((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())
1055 if(((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
1056 fOutputContainer->Add(((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
1058 if((AliConvEventCuts*)fV0Reader->GetEventCuts())
1059 if(((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetCutHistograms())
1060 fOutputContainer->Add(((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetCutHistograms());
1063 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
1064 if(!((AliConvEventCuts*)fEventCutArray->At(iCut))) continue;
1065 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutHistograms()){
1066 fCutFolder[iCut]->Add(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutHistograms());
1068 if(!((AliConversionPhotonCuts*)fCutArray->At(iCut))) continue;
1069 if(((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutHistograms()){
1070 fCutFolder[iCut]->Add(((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutHistograms());
1072 if(!((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))) continue;
1073 if(((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutHistograms()){
1074 fCutFolder[iCut]->Add(((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutHistograms());
1076 if(fDoMesonAnalysis){
1077 if(!((AliConversionMesonCuts*)fMesonCutArray->At(iCut))) continue;
1078 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms()){
1079 fCutFolder[iCut]->Add(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms());
1083 PostData(1, fOutputContainer);
1085 //_____________________________________________________________________________
1086 Bool_t AliAnalysisTaskGammaConvCalo::Notify()
1088 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
1089 if(!((AliConvEventCuts*)fEventCutArray->At(iCut))->GetDoEtaShift()){
1090 fProfileEtaShift[iCut]->Fill(0.,(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift()));
1091 continue; // No Eta Shift requested, continue
1093 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
1094 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
1095 fProfileEtaShift[iCut]->Fill(0.,(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift()));
1096 ((AliConvEventCuts*)fEventCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1100 printf(" Gamma Conversion Task %s :: Eta Shift Manually Set to %f \n\n",
1101 (((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber()).Data(),((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift());
1102 fProfileEtaShift[iCut]->Fill(0.,(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift()));
1103 ((AliConvEventCuts*)fEventCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1109 //_____________________________________________________________________________
1110 void AliAnalysisTaskGammaConvCalo::UserExec(Option_t *)
1113 // Called for each event
1115 Int_t eventQuality = ((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetEventQuality();
1116 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
1117 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1118 fHistoNEvents[iCut]->Fill(eventQuality);
1123 if(fIsMC) fMCEvent = MCEvent();
1124 if(fMCEvent == NULL) fIsMC = kFALSE;
1126 fInputEvent = InputEvent();
1128 if(fIsMC && fInputEvent->IsA()==AliESDEvent::Class()){
1129 fMCStack = fMCEvent->Stack();
1130 if(fMCStack == NULL) fIsMC = kFALSE;
1133 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
1135 // ------------------- BeginEvent ----------------------------
1137 AliEventplane *EventPlane = fInputEvent->GetEventplane();
1138 if(fIsHeavyIon ==1)fEventPlaneAngle = EventPlane->GetEventplane("V0",fInputEvent,2);
1139 else fEventPlaneAngle=0.0;
1141 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
1142 RelabelAODPhotonCandidates(kTRUE); // In case of AODMC relabeling MC
1143 fV0Reader->RelabelAODs(kTRUE);
1147 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1150 Int_t eventNotAccepted = ((AliConvEventCuts*)fEventCutArray->At(iCut))->IsEventAcceptedByCut(fV0Reader->GetEventCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
1152 if(eventNotAccepted){
1153 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
1154 fHistoNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
1158 if(eventQuality != 0){// Event Not Accepted
1159 //cout << "event rejected due to: " <<eventQuality << endl;
1160 fHistoNEvents[iCut]->Fill(eventQuality);
1164 fHistoNEvents[iCut]->Fill(eventQuality); // Should be 0 here
1165 fHistoNGoodESDTracks[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks());
1166 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->IsHeavyIon() == 2) fHistoNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A());
1167 else fHistoNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
1170 // Process MC Particle
1171 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetSignalRejection() != 0){
1172 if(fInputEvent->IsA()==AliESDEvent::Class()){
1173 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetNotRejectedParticles(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetSignalRejection(),
1174 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader(),
1177 else if(fInputEvent->IsA()==AliAODEvent::Class()){
1178 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetNotRejectedParticles(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetSignalRejection(),
1179 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader(),
1183 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader()){
1184 for(Int_t i = 0;i<(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader())->GetEntries();i++){
1185 TString nameBin= fHistoMCHeaders[iCut]->GetXaxis()->GetBinLabel(i+1);
1186 if (nameBin.CompareTo("")== 0){
1187 TString nameHeader = ((TObjString*)((TList*)((AliConvEventCuts*)fEventCutArray->At(iCut))
1188 ->GetAcceptedHeader())->At(i))->GetString();
1189 fHistoMCHeaders[iCut]->GetXaxis()->SetBinLabel(i+1,nameHeader.Data());
1196 if(fInputEvent->IsA()==AliESDEvent::Class())
1197 ProcessMCParticles();
1198 if(fInputEvent->IsA()==AliAODEvent::Class())
1199 ProcessAODMCParticles();
1202 // it is in the loop to have the same conversion cut string (used also for MC stuff that should be same for V0 and Cluster)
1203 ProcessClusters(); // process calo clusters
1204 ProcessPhotonCandidates(); // Process this cuts gammas
1206 fHistoNGammaCandidates[iCut]->Fill(fGammaCandidates->GetEntries());
1207 fHistoNGoodESDTracksVsNGammaCanditates[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks(),fGammaCandidates->GetEntries());
1208 if(fDoMesonAnalysis){ // Meson Analysis
1209 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
1210 fUnsmearedPx = new Double_t[fGammaCandidates->GetEntries()]; // Store unsmeared Momenta
1211 fUnsmearedPy = new Double_t[fGammaCandidates->GetEntries()];
1212 fUnsmearedPz = new Double_t[fGammaCandidates->GetEntries()];
1213 fUnsmearedE = new Double_t[fGammaCandidates->GetEntries()];
1215 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1216 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Px();
1217 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Py();
1218 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Pz();
1219 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->E();
1220 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(gamma)));
1224 PhotonTagging(); // tag PCM photons with calorimeter
1226 CalculatePi0Candidates(); // Combine Gammas from conversion and from calo
1228 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
1229 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
1230 CalculateBackground(); // Combinatorial Background
1231 UpdateEventByEventData(); // Store Event for mixed Events
1234 CalculateBackgroundRP(); // Combinatorial Background
1235 fBGHandlerRP[iCut]->AddEvent(fGammaCandidates,fInputEvent); // Store Event for mixed Events
1236 fBGClusHandlerRP[iCut]->AddEvent(fClusterCandidates,fInputEvent); // Store Event for mixed Events
1239 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
1240 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1241 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
1242 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPy(fUnsmearedPy[gamma]);
1243 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPz(fUnsmearedPz[gamma]);
1244 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetE(fUnsmearedE[gamma]);
1246 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
1247 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
1248 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
1249 delete[] fUnsmearedE; fUnsmearedE = 0x0;
1253 fGammaCandidates->Clear(); // delete this cuts good gammas
1254 fClusterCandidates->Clear(); // delete cluster candidates
1257 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
1258 RelabelAODPhotonCandidates(kFALSE); // Back to ESDMC Label
1259 fV0Reader->RelabelAODs(kFALSE);
1262 PostData(1, fOutputContainer);
1265 //________________________________________________________________________
1266 void AliAnalysisTaskGammaConvCalo::ProcessClusters()
1270 nclus = fInputEvent->GetNumberOfCaloClusters();
1272 // cout << nclus << endl;
1274 if(nclus == 0) return;
1277 Double_t vertex[3] = {0};
1278 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
1280 // Loop over EMCal clusters
1281 for(Int_t i = 0; i < nclus; i++){
1283 AliVCluster* clus = fInputEvent->GetCaloCluster(i);
1284 if (!clus) continue;
1285 if(!((AliCaloPhotonCuts*)fClusterCutArray->At(fiCut))->ClusterIsSelected(clus,fInputEvent,fIsMC)) continue;
1286 // TLorentzvector with cluster
1287 TLorentzVector clusterVector;
1288 clus->GetMomentum(clusterVector,vertex);
1290 TLorentzVector* tmpvec = new TLorentzVector();
1291 tmpvec->SetPxPyPzE(clusterVector.Px(),clusterVector.Py(),clusterVector.Pz(),clusterVector.E());
1293 // convert to AODConversionPhoton
1294 AliAODConversionPhoton *PhotonCandidate=new AliAODConversionPhoton(tmpvec);
1295 if(!PhotonCandidate) continue;
1298 Int_t mclab[2] = {0,0};
1300 mclab[0] = clus->GetLabel();
1301 mclab[1] = clus->GetLabel();
1302 // cout << "mclabels: " << mclab[0] << " " << mclab[1] << endl;
1305 PhotonCandidate->SetMCLabel(mclab);
1307 // fIsFromMBHeader = kTRUE;
1309 // Int_t isPosFromMBHeader
1310 // = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(mclab, fMCStack, fInputEvent);
1311 // if(isPosFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1313 // Int_t isNegFromMBHeader
1314 // = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(mclab, fMCStack, fInputEvent);
1315 // if(isNegFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1317 // if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1320 fHistoClusGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1321 fClusterCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
1323 // if(fIsFromMBHeader){
1324 // fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1325 // if (fDoPhotonQA > 0){
1326 // fHistoConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1327 // fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1332 ProcessTrueClusterCandidates(PhotonCandidate);
1335 // if (fIsFromMBHeader && fDoPhotonQA == 2){
1336 // if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1337 // fPtGamma = PhotonCandidate->Pt();
1338 // fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1339 // fRConvPhoton = PhotonCandidate->GetConversionRadius();
1340 // fEtaPhoton = PhotonCandidate->GetPhotonEta();
1341 // fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1342 // fTreeConvGammaPtDcazCat[fiCut]->Fill();
1343 // } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1344 // fPtGamma = PhotonCandidate->Pt();
1345 // fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1346 // fRConvPhoton = PhotonCandidate->GetConversionRadius();
1347 // fEtaPhoton = PhotonCandidate->GetPhotonEta();
1348 // fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1349 // fTreeConvGammaPtDcazCat[fiCut]->Fill();
1357 //________________________________________________________________________
1358 void AliAnalysisTaskGammaConvCalo::ProcessTrueClusterCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1361 TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
1364 // cout << "no photon" << endl;
1368 if(Photon->GetPdgCode() != 22){
1369 // cout << "pdg code: " << Photon->GetPdgCode() << endl;
1370 return; // Particle is no Photon
1374 if(fIsFromMBHeader){
1375 fHistoTrueClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1376 if (fDoPhotonQA > 0) fHistoTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
1379 if(Photon->GetMother(0) <= fMCStack->GetNprimary()){
1380 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1381 if(fIsFromMBHeader){
1382 fHistoTruePrimaryClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1383 fHistoTruePrimaryClusGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1389 // if(fIsFromMBHeader){
1390 // fCharPhotonMCInfo = 2;
1391 // fHistoTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1392 // if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1393 // fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 3122){
1394 // fHistoTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1395 // fCharPhotonMCInfo = 5;
1397 // if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1398 // fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 310){
1399 // fHistoTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1400 // fCharPhotonMCInfo = 4;
1402 // if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1403 // fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 221){
1404 // fCharPhotonMCInfo = 3;
1412 //________________________________________________________________________
1413 void AliAnalysisTaskGammaConvCalo::ProcessPhotonCandidates()
1416 TList *GammaCandidatesStepOne = new TList();
1417 TList *GammaCandidatesStepTwo = new TList();
1418 // Loop over Photon Candidates allocated by ReaderV1
1419 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
1420 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
1421 if(!PhotonCandidate) continue;
1422 fIsFromMBHeader = kTRUE;
1423 if(fIsMC && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1424 Int_t isPosFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1425 if(isPosFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1426 Int_t isNegFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1427 if(isNegFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1428 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1431 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fInputEvent)) continue;
1432 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(PhotonCandidate->GetPhotonPhi(),fEventPlaneAngle)) continue;
1433 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
1434 !((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
1435 fGammaCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
1437 if(fIsFromMBHeader){
1438 fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1439 if (fDoPhotonQA > 0){
1440 fHistoConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1441 fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1445 if(fInputEvent->IsA()==AliESDEvent::Class())
1446 ProcessTruePhotonCandidates(PhotonCandidate);
1447 if(fInputEvent->IsA()==AliAODEvent::Class())
1448 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1450 if (fIsFromMBHeader && fDoPhotonQA == 2){
1451 if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1452 fPtGamma = PhotonCandidate->Pt();
1453 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1454 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1455 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1456 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1457 fTreeConvGammaPtDcazCat[fiCut]->Fill();
1458 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1459 fPtGamma = PhotonCandidate->Pt();
1460 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1461 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1462 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1463 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1464 fTreeConvGammaPtDcazCat[fiCut]->Fill();
1467 } else if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
1468 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
1470 GammaCandidatesStepOne->Add(PhotonCandidate);
1471 } else if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
1472 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
1473 GammaCandidatesStepTwo->Add(PhotonCandidate);
1476 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){
1477 for(Int_t i = 0;i<GammaCandidatesStepOne->GetEntries();i++){
1478 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GammaCandidatesStepOne->At(i);
1479 if(!PhotonCandidate) continue;
1480 fIsFromMBHeader = kTRUE;
1481 if(fMCStack && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1482 Int_t isPosFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1483 Int_t isNegFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1484 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1486 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GammaCandidatesStepOne->GetEntries())) continue;
1487 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
1488 fGammaCandidates->Add(PhotonCandidate);
1489 if(fIsFromMBHeader){
1490 fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1491 if (fDoPhotonQA > 0){
1492 fHistoConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1493 fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1498 if(fInputEvent->IsA()==AliESDEvent::Class())
1499 ProcessTruePhotonCandidates(PhotonCandidate);
1500 if(fInputEvent->IsA()==AliAODEvent::Class())
1501 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1502 } else GammaCandidatesStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
1504 if (fIsFromMBHeader && fDoPhotonQA == 2){
1505 if (fIsHeavyIon ==1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1506 fPtGamma = PhotonCandidate->Pt();
1507 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1508 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1509 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1510 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1511 fTreeConvGammaPtDcazCat[fiCut]->Fill();
1512 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1513 fPtGamma = PhotonCandidate->Pt();
1514 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1515 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1516 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1517 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1518 fTreeConvGammaPtDcazCat[fiCut]->Fill();
1523 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
1524 for(Int_t i = 0;i<GammaCandidatesStepTwo->GetEntries();i++){
1525 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GammaCandidatesStepTwo->At(i);
1526 if(!PhotonCandidate) continue;
1527 fIsFromMBHeader = kTRUE;
1528 if(fMCStack && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1529 Int_t isPosFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1530 Int_t isNegFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1531 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1533 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GammaCandidatesStepTwo,i)) continue;
1534 fGammaCandidates->Add(PhotonCandidate); // Add gamma to current cut TList
1535 if(fIsFromMBHeader){
1536 fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1537 if (fDoPhotonQA > 0){
1538 fHistoConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1539 fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1543 if(fInputEvent->IsA()==AliESDEvent::Class())
1544 ProcessTruePhotonCandidates(PhotonCandidate);
1545 if(fInputEvent->IsA()==AliAODEvent::Class())
1546 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1548 if (fIsFromMBHeader){
1549 if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1550 fPtGamma = PhotonCandidate->Pt();
1551 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1552 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1553 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1554 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1555 fTreeConvGammaPtDcazCat[fiCut]->Fill();
1556 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1557 fPtGamma = PhotonCandidate->Pt();
1558 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1559 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1560 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1561 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1562 fTreeConvGammaPtDcazCat[fiCut]->Fill();
1568 delete GammaCandidatesStepOne;
1569 GammaCandidatesStepOne = 0x0;
1570 delete GammaCandidatesStepTwo;
1571 GammaCandidatesStepTwo = 0x0;
1574 //________________________________________________________________________
1575 void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidatesAOD(AliAODConversionPhoton *TruePhotonCandidate)
1578 Double_t magField = fInputEvent->GetMagneticField();
1579 if( magField < 0.0 ){
1586 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1587 AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
1588 AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
1589 fCharPhotonMCInfo = 0;
1591 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1592 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1594 if(posDaughter->GetMother() != negDaughter->GetMother()){
1595 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1596 fCharPhotonMCInfo = 1;
1599 else if(posDaughter->GetMother() == -1){
1600 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1601 fCharPhotonMCInfo = 1;
1605 if(pdgCode[0]!=11 || pdgCode[1]!=11){
1606 fCharPhotonMCInfo = 1;
1607 return; //One Particle is not a electron
1609 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()){
1610 fCharPhotonMCInfo = 1;
1611 return; // Same Charge
1614 AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
1615 AliVTrack * electronCandidate = ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
1616 AliVTrack * positronCandidate = ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
1617 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
1619 if(Photon->GetPdgCode() != 22){
1620 fHistoTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1621 fCharPhotonMCInfo = 1;
1622 return; // Mother is no Photon
1625 if(((posDaughter->GetMCProcessCode())) != 5 || ((negDaughter->GetMCProcessCode())) != 5){
1626 fCharPhotonMCInfo = 1;
1627 return;// check if the daughters come from a conversion
1629 // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
1634 if(fIsFromMBHeader){
1635 fHistoTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1636 if (fDoPhotonQA > 0) fHistoTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
1638 fHistoTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1639 if(Photon->IsPrimary()){
1640 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1641 if(fIsFromMBHeader){
1642 fCharPhotonMCInfo = 6;
1643 fHistoTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1644 fHistoTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1646 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1648 if(fIsFromMBHeader){
1649 fHistoTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1650 fCharPhotonMCInfo = 2;
1651 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1652 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 3122){
1653 fCharPhotonMCInfo = 5;
1654 fHistoTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1656 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1657 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 310){
1658 fCharPhotonMCInfo = 4;
1659 fHistoTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1661 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1662 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 221){
1663 fCharPhotonMCInfo = 3;
1669 //________________________________________________________________________
1670 void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1673 Double_t magField = fInputEvent->GetMagneticField();
1674 if( magField < 0.0 ){
1681 // Process True Photons
1682 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
1683 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
1684 fCharPhotonMCInfo = 0;
1686 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1687 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1688 fCharPhotonMCInfo = 1;
1689 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){
1690 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1693 else if(posDaughter->GetMother(0) == -1){
1694 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1698 if(pdgCode[0]!=11 || pdgCode[1]!=11) return; //One Particle is not a electron
1700 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
1702 TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
1703 AliVTrack * electronCandidate = ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
1704 AliVTrack * positronCandidate = ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
1705 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
1707 if(Photon->GetPdgCode() != 22){
1708 fHistoTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1709 return; // Mother is no Photon
1712 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
1715 if(fIsFromMBHeader){
1716 fHistoTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1717 if (fDoPhotonQA > 0) fHistoTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
1719 fHistoTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1720 if(posDaughter->GetMother(0) <= fMCStack->GetNprimary()){
1721 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1722 if(fIsFromMBHeader){
1723 fCharPhotonMCInfo = 6;
1724 fHistoTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1725 fHistoTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1728 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1731 if(fIsFromMBHeader){
1732 fCharPhotonMCInfo = 2;
1733 fHistoTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1734 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1735 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 3122){
1736 fHistoTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1737 fCharPhotonMCInfo = 5;
1739 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1740 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 310){
1741 fHistoTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1742 fCharPhotonMCInfo = 4;
1744 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1745 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 221){
1746 fCharPhotonMCInfo = 3;
1753 Int_t imother = Photon->GetMother(0);
1754 AliMCParticle *McMother = static_cast<AliMCParticle*>(fMCEvent->GetTrack(imother));
1755 if(McMother->PdgCode() == 111){
1756 fHistoTrueConvPi0GammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1760 //________________________________________________________________________
1761 void AliAnalysisTaskGammaConvCalo::ProcessAODMCParticles()
1764 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1766 // Loop over all primary MC particle
1767 for(Int_t i = 0; i < AODMCTrackArray->GetEntriesFast(); i++) {
1769 AliAODMCParticle* particle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(i));
1770 if (!particle) continue;
1771 if (!particle->IsPrimary()) continue;
1773 Int_t isMCFromMBHeader = -1;
1774 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1775 isMCFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1776 if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1779 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
1780 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
1781 fHistoMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1782 if(particle->GetMother() >-1){ // Meson Decay Gamma
1783 switch((static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetMother())))->GetPdgCode()){
1785 fHistoMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1788 fHistoMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1791 fHistoMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1794 fHistoMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1797 fHistoMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1800 fHistoMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1803 fHistoMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
1808 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kTRUE)){
1810 for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
1811 AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(daughterIndex));
1812 if(!tmpDaughter) continue;
1813 if(abs(tmpDaughter->GetPdgCode()) == 11){
1814 rConv = sqrt( (tmpDaughter->Xv()*tmpDaughter->Xv()) + (tmpDaughter->Yv()*tmpDaughter->Yv()) );
1817 fHistoMCConvGammaPt[fiCut]->Fill(particle->Pt());
1818 if (fDoPhotonQA > 0){
1819 fHistoMCConvGammaR[fiCut]->Fill(rConv);
1820 fHistoMCConvGammaEta[fiCut]->Fill(particle->Eta());
1823 // Converted MC Gamma
1824 if(fDoMesonAnalysis){
1825 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
1826 Double_t mesonY = 10.;
1827 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1828 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1830 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1832 Float_t weightedK0s= 1;
1833 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1834 if (particle->Pt()>0.005){
1835 weightedK0s= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1836 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1839 fHistoMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1840 fHistoMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1841 fHistoMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1843 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1844 ->MesonIsSelectedAODMC(particle,AODMCTrackArray,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
1845 AliAODMCParticle* daughter0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(0)));
1846 AliAODMCParticle* daughter1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(1)));
1847 Float_t weighted= 1;
1848 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1849 if (particle->Pt()>0.005){
1850 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1851 // if(particle->GetPdgCode() == 221){
1852 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1856 Double_t mesonY = 10.;
1857 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1858 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1860 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1863 if(particle->GetPdgCode() == 111){
1864 fHistoMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1865 fHistoMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
1866 if (fDoMesonQA > 0) fHistoMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1867 } else if(particle->GetPdgCode() == 221){
1868 fHistoMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
1869 fHistoMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
1870 if (fDoMesonQA > 0) fHistoMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1873 // Check the acceptance for both gammas
1874 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter0,AODMCTrackArray,kFALSE) &&
1875 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE) &&
1876 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
1877 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
1879 if(particle->GetPdgCode() == 111){
1880 fHistoMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1881 } else if(particle->GetPdgCode() == 221){
1882 fHistoMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1890 //________________________________________________________________________
1891 void AliAnalysisTaskGammaConvCalo::ProcessMCParticles()
1893 // Loop over all primary MC particle
1894 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
1895 TParticle* particle = (TParticle *)fMCStack->Particle(i);
1896 if (!particle) continue;
1898 Int_t isMCFromMBHeader = -1;
1899 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1900 isMCFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1901 if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1904 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
1905 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
1906 fHistoMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1907 if(particle->GetMother(0) >-1){ // Meson Decay Gamma
1908 switch(fMCStack->Particle(particle->GetMother(0))->GetPdgCode()){
1910 fHistoMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1913 fHistoMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1916 fHistoMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1919 fHistoMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1922 fHistoMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1925 fHistoMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1928 fHistoMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
1933 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
1934 fHistoMCConvGammaPt[fiCut]->Fill(particle->Pt());
1935 if (fDoPhotonQA > 0){
1936 fHistoMCConvGammaR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
1937 fHistoMCConvGammaEta[fiCut]->Fill(particle->Eta());
1939 } // Converted MC Gamma
1940 if(fDoMesonAnalysis){
1941 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
1942 Double_t mesonY = 10.;
1943 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1944 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1946 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1948 Float_t weightedK0s= 1;
1949 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1950 if (particle->Pt()>0.005){
1951 weightedK0s= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1952 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1955 if (fMCStack->IsPhysicalPrimary(i)){
1956 fHistoMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1957 fHistoMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1958 fHistoMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1961 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1962 ->MesonIsSelectedMC(particle,fMCStack,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
1963 TParticle* daughter0 = (TParticle*)fMCStack->Particle(particle->GetFirstDaughter());
1964 TParticle* daughter1 = (TParticle*)fMCStack->Particle(particle->GetLastDaughter());
1966 Float_t weighted= 1;
1967 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1968 if (particle->Pt()>0.005){
1969 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1970 // if(particle->GetPdgCode() == 221){
1971 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1975 Double_t mesonY = 10.;
1976 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1977 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1979 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1982 if(particle->GetPdgCode() == 111){
1983 fHistoMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1984 fHistoMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
1985 if (fDoMesonQA > 0) fHistoMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1986 } else if(particle->GetPdgCode() == 221){
1987 fHistoMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
1988 fHistoMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
1989 if (fDoMesonQA > 0) fHistoMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1992 // Check the acceptance for both gammas
1993 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter0,fMCStack,kFALSE) &&
1994 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter1,fMCStack,kFALSE) &&
1995 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
1996 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
1998 if(particle->GetPdgCode() == 111){
1999 fHistoMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
2000 } else if(particle->GetPdgCode() == 221){
2001 fHistoMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
2009 for(Int_t i = fMCStack->GetNprimary(); i < fMCStack->GetNtrack(); i++) {
2010 TParticle* particle = (TParticle *)fMCStack->Particle(i);
2011 if (!particle) continue;
2013 Int_t isMCFromMBHeader = -1;
2014 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
2015 isMCFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
2016 if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
2019 if(fDoMesonAnalysis){
2020 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedMC(particle,fMCStack,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
2021 Float_t weighted= 1;
2022 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2023 if (particle->Pt()>0.005){
2024 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
2025 // if(particle->GetPdgCode() == 221){
2026 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2031 if(particle->GetPdgCode() == 111){
2032 Int_t pdgCode = ((TParticle*)fMCStack->Particle( particle->GetFirstMother() ))->GetPdgCode();
2033 Int_t source = GetSourceClassification(111,pdgCode);
2034 fHistoMCSecPi0PtvsSource[fiCut]->Fill(particle->Pt(),source,weighted); // All MC Pi0
2035 fHistoMCSecPi0Source[fiCut]->Fill(pdgCode);
2036 } else if(particle->GetPdgCode() == 221){
2037 Int_t pdgCode = ((TParticle*)fMCStack->Particle( particle->GetFirstMother() ))->GetPdgCode();
2038 fHistoMCSecEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
2039 fHistoMCSecEtaSource[fiCut]->Fill(pdgCode);
2047 //________________________________________________________________________
2048 void AliAnalysisTaskGammaConvCalo::PhotonTagging(){
2050 // Conversion Gammas
2051 if(fGammaCandidates->GetEntries()>0){
2053 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries()-1;firstGammaIndex++){
2055 // get conversion photon
2056 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
2057 if (gamma0==NULL) continue;
2059 TLorentzVector photonVector;
2060 photonVector.SetPxPyPzE(gamma0->GetPx(),gamma0->GetPy(),gamma0->GetPz(),gamma0->GetPhotonP());
2065 // loop over clusters
2066 for(Int_t secondGammaIndex = 0; secondGammaIndex<fClusterCandidates->GetEntries(); ++secondGammaIndex) {
2068 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fClusterCandidates->At(secondGammaIndex));
2069 if (gamma1==NULL) continue;
2071 TLorentzVector clusterVector;
2072 clusterVector.SetPxPyPzE(gamma1->GetPx(),gamma1->GetPy(),gamma1->GetPz(),gamma1->GetPhotonP());
2075 TLorentzVector pairVector = photonVector+clusterVector;
2078 if((pairVector.M() > 0.11 && pairVector.M() < 0.15)){
2082 if((pairVector.M() > 0.50 && pairVector.M() < 0.6)){
2085 }// end loop over clusters
2087 if(btagpi0 && btageta)
2088 fHistoConvGammaTagged[fiCut]->Fill(photonVector.Pt());
2089 else if(btagpi0 && !btageta)
2090 fHistoConvGammaPi0Tagged[fiCut]->Fill(photonVector.Pt());
2091 else if(btageta && !btagpi0)
2092 fHistoConvGammaEtaTagged[fiCut]->Fill(photonVector.Pt());
2094 fHistoConvGammaUntagged[fiCut]->Fill(photonVector.Pt());
2096 }// end loop over gammas
2101 //________________________________________________________________________
2102 void AliAnalysisTaskGammaConvCalo::CalculatePi0Candidates(){
2104 // Conversion Gammas
2105 if(fGammaCandidates->GetEntries()>0){
2108 Double_t vertex[3] = {0};
2109 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
2111 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
2112 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
2113 if (gamma0==NULL) continue;
2115 for(Int_t secondGammaIndex=0;secondGammaIndex<fClusterCandidates->GetEntries();secondGammaIndex++){
2117 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fClusterCandidates->At(secondGammaIndex));
2118 if (gamma1==NULL) continue;
2120 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma0,gamma1);
2121 pi0cand->SetLabels(firstGammaIndex,secondGammaIndex);
2123 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
2124 fHistoMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
2126 // fill new histograms
2127 fHistoPhotonPairAll[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
2128 fHistoPhotonPairAllGam[fiCut]->Fill(pi0cand->M(),gamma0->Pt());
2130 if(pi0cand->GetAlpha()<0.1)
2131 fHistoMotherInvMassEalpha[fiCut]->Fill(pi0cand->M(),pi0cand->E());
2133 if (fDoMesonQA > 0){
2134 if ( pi0cand->M() > 0.05 && pi0cand->M() < 0.17){
2135 fHistoMotherPi0PtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2136 fHistoMotherPi0PtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
2137 fHistoMotherPi0PtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
2139 if ( pi0cand->M() > 0.45 && pi0cand->M() < 0.65){
2140 fHistoMotherEtaPtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2141 fHistoMotherEtaPtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
2142 fHistoMotherEtaPtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
2145 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGCalculation()){
2149 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->BackgroundHandlerType() == 0){
2150 zbin = fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2151 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2152 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2154 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2157 zbin = fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2158 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2159 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2161 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2164 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
2165 fSparseMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
2170 if(fInputEvent->IsA()==AliESDEvent::Class())
2171 ProcessTrueMesonCandidates(pi0cand,gamma0,gamma1);
2172 if(fInputEvent->IsA()==AliAODEvent::Class())
2173 ProcessTrueMesonCandidatesAOD(pi0cand,gamma0,gamma1);
2175 if (fDoMesonQA == 2){
2176 fInvMass = pi0cand->M();
2177 fPt = pi0cand->Pt();
2178 if (abs(gamma0->GetDCAzToPrimVtx()) < abs(gamma1->GetDCAzToPrimVtx())){
2179 fDCAzGammaMin = gamma0->GetDCAzToPrimVtx();
2180 fDCAzGammaMax = gamma1->GetDCAzToPrimVtx();
2182 fDCAzGammaMin = gamma1->GetDCAzToPrimVtx();
2183 fDCAzGammaMax = gamma0->GetDCAzToPrimVtx();
2185 fCharFlag = pi0cand->GetMesonQuality();
2186 // cout << "gamma 0: " << gamma0->GetV0Index()<< "\t" << gamma0->GetPx() << "\t" << gamma0->GetPy() << "\t" << gamma0->GetPz() << "\t" << endl;
2187 // cout << "gamma 1: " << gamma1->GetV0Index()<< "\t"<< gamma1->GetPx() << "\t" << gamma1->GetPy() << "\t" << gamma1->GetPz() << "\t" << endl;
2188 // cout << "pi0: "<<fInvMass << "\t" << fPt <<"\t" << fDCAzGammaMin << "\t" << fDCAzGammaMax << "\t" << (Int_t)fCharFlag << "\t" << (Int_t)fCharMesonMCInfo <<endl;
2189 if (fIsHeavyIon == 1 && fPt > 0.399 && fPt < 20. ) {
2190 if (fInvMass > 0.08 && fInvMass < 0.2) fTreeMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
2191 if ((fInvMass > 0.45 && fInvMass < 0.6) && (fPt > 0.999 && fPt < 20.) )fTreeMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
2192 } else if (fPt > 0.299 && fPt < 20. ) {
2193 if ( (fInvMass > 0.08 && fInvMass < 0.2) || (fInvMass > 0.45 && fInvMass < 0.6)) fTreeMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
2203 //______________________________________________________________________
2204 void AliAnalysisTaskGammaConvCalo::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
2206 // Process True Mesons
2207 AliStack *MCStack = fMCEvent->Stack();
2208 fCharMesonMCInfo = 0;
2209 if(TrueGammaCandidate0->GetV0Index()<fInputEvent->GetNumberOfV0s()){
2210 Bool_t isTruePi0 = kFALSE;
2211 Bool_t isTrueEta = kFALSE;
2212 Bool_t isTruePi0Dalitz = kFALSE;
2213 Bool_t isTrueEtaDalitz = kFALSE;
2214 Bool_t gamma0DalitzCand = kFALSE;
2215 Bool_t gamma1DalitzCand = kFALSE;
2216 Int_t gamma0MCLabel = TrueGammaCandidate0->GetMCParticleLabel(MCStack);
2217 Int_t gamma0MotherLabel = -1;
2218 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2219 // Daughters Gamma 0
2220 TParticle * negativeMC = (TParticle*)TrueGammaCandidate0->GetNegativeMCDaughter(MCStack);
2221 TParticle * positiveMC = (TParticle*)TrueGammaCandidate0->GetPositiveMCDaughter(MCStack);
2222 TParticle * gammaMC0 = (TParticle*)MCStack->Particle(gamma0MCLabel);
2223 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2224 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
2225 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
2226 gamma0MotherLabel=gammaMC0->GetFirstMother();
2229 if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
2230 gamma0DalitzCand = kTRUE;
2231 gamma0MotherLabel=-111;
2233 if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
2234 gamma0DalitzCand = kTRUE;
2235 gamma0MotherLabel=-221;
2239 if(TrueGammaCandidate1->GetV0Index()<fInputEvent->GetNumberOfV0s()){
2240 Int_t gamma1MCLabel = TrueGammaCandidate1->GetMCParticleLabel(MCStack);
2241 Int_t gamma1MotherLabel = -1;
2242 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2243 // Daughters Gamma 1
2244 TParticle * negativeMC = (TParticle*)TrueGammaCandidate1->GetNegativeMCDaughter(MCStack);
2245 TParticle * positiveMC = (TParticle*)TrueGammaCandidate1->GetPositiveMCDaughter(MCStack);
2246 TParticle * gammaMC1 = (TParticle*)MCStack->Particle(gamma1MCLabel);
2247 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2248 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
2249 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
2250 gamma1MotherLabel=gammaMC1->GetFirstMother();
2253 if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
2254 gamma1DalitzCand = kTRUE;
2255 gamma1MotherLabel=-111;
2257 if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
2258 gamma1DalitzCand = kTRUE;
2259 gamma1MotherLabel=-221;
2263 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
2264 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
2267 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 221){
2272 //Identify Dalitz candidate
2273 if (gamma1DalitzCand || gamma0DalitzCand){
2274 if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
2275 if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
2276 if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
2278 if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
2279 if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
2280 if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
2285 if(isTruePi0 || isTrueEta){// True Pion or Eta
2286 fHistoTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2287 if (fDoMesonQA > 0){
2289 if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
2290 fHistoTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2291 fHistoTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2292 fHistoTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2294 } else if (isTrueEta){
2295 if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
2296 fHistoTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2297 fHistoTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2298 fHistoTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2302 if(gamma0MotherLabel >= MCStack->GetNprimary()){ // Secondary Meson
2303 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetMother(0);
2304 Float_t weightedSec= 1;
2305 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
2306 weightedSec= ((AliConvEventCuts*)fEventCutArray->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
2307 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2309 fHistoTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2310 fCharMesonMCInfo = 2;
2311 if (secMotherLabel >-1){
2312 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
2313 fCharMesonMCInfo = 4;
2314 fHistoTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2315 if (fDoMesonQA > 0)fHistoTrueK0sWithPi0DaughterMCPt[fiCut]->Fill(MCStack->Particle(secMotherLabel)->Pt());
2317 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==221){
2318 fCharMesonMCInfo = 3;
2319 fHistoTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2320 if (fDoMesonQA > 0)fHistoTrueEtaWithPi0DaughterMCPt[fiCut]->Fill(MCStack->Particle(secMotherLabel)->Pt());
2322 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==3122){
2323 fCharMesonMCInfo = 7;
2324 fHistoTrueSecondaryMotherFromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2325 if (fDoMesonQA > 0)fHistoTrueLambdaWithPi0DaughterMCPt[fiCut]->Fill(MCStack->Particle(secMotherLabel)->Pt());
2328 } else { // Only primary pi0 for efficiency calculation
2329 fCharMesonMCInfo = 6;
2330 Float_t weighted= 1;
2331 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, fMCStack, fInputEvent)){
2332 if (((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt()>0.005){
2333 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, fMCStack, fInputEvent);
2334 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
2337 fHistoTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2338 fHistoTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2339 fProfileTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2342 if (fDoMesonQA > 0){
2343 if(isTruePi0){ // Only primary pi0 for resolution
2344 fHistoTruePrimaryPi0MCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
2346 if (isTrueEta){ // Only primary eta for resolution
2347 fHistoTruePrimaryEtaMCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
2351 } else if(!isTruePi0 && !isTrueEta){ // Background
2352 if (fDoMesonQA > 0){
2353 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2354 fHistoTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2355 fCharMesonMCInfo = 1;
2356 } else { // No photon or without mother
2357 fHistoTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2360 if( isTruePi0Dalitz || isTrueEtaDalitz ){
2362 fCharMesonMCInfo = 5;
2363 fHistoTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2364 } else if (gamma0DalitzCand || gamma1DalitzCand){
2365 if (fDoMesonQA > 0)fHistoTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2371 //______________________________________________________________________
2372 void AliAnalysisTaskGammaConvCalo::ProcessTrueMesonCandidatesAOD(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
2375 // Process True Mesons
2376 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
2377 Bool_t isTruePi0 = kFALSE;
2378 Bool_t isTrueEta = kFALSE;
2379 Bool_t isTruePi0Dalitz = kFALSE;
2380 Bool_t isTrueEtaDalitz = kFALSE;
2381 Bool_t gamma0DalitzCand = kFALSE;
2382 Bool_t gamma1DalitzCand = kFALSE;
2384 AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelPositive()));
2385 AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelNegative()));
2387 fCharMesonMCInfo = 0;
2388 Int_t gamma0MCLabel = -1;
2389 Int_t gamma0MotherLabel = -1;
2390 if(!positiveMC||!negativeMC)
2393 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
2394 gamma0MCLabel = positiveMC->GetMother();
2397 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2398 // Daughters Gamma 0
2399 AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
2400 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2401 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
2402 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
2403 gamma0MotherLabel=gammaMC0->GetMother();
2406 if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
2407 gamma0DalitzCand = kTRUE;
2408 gamma0MotherLabel=-111;
2410 if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
2411 gamma0DalitzCand = kTRUE;
2412 gamma0MotherLabel=-221;
2416 positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelPositive()));
2417 negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelNegative()));
2419 Int_t gamma1MCLabel = -1;
2420 Int_t gamma1MotherLabel = -1;
2421 if(!positiveMC||!negativeMC)
2424 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
2425 gamma1MCLabel = positiveMC->GetMother();
2427 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2428 // Daughters Gamma 1
2429 AliAODMCParticle * gammaMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MCLabel));
2430 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2431 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
2432 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
2433 gamma1MotherLabel=gammaMC1->GetMother();
2436 if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
2437 gamma1DalitzCand = kTRUE;
2438 gamma1MotherLabel=-111;
2440 if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
2441 gamma1DalitzCand = kTRUE;
2442 gamma1MotherLabel=-221;
2446 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
2447 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
2450 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 221){
2455 //Identify Dalitz candidate
2456 if (gamma1DalitzCand || gamma0DalitzCand){
2457 if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
2458 if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
2459 if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
2461 if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
2462 if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
2463 if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
2467 if(isTruePi0 || isTrueEta){// True Pion or Eta
2468 fHistoTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2469 if (fDoMesonQA > 0){
2471 if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
2472 fHistoTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2473 fHistoTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2474 fHistoTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2476 } else if (isTrueEta){
2477 if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
2478 fHistoTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2479 fHistoTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2480 fHistoTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2484 if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
2485 Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
2486 Float_t weightedSec= 1;
2487 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
2488 weightedSec= ((AliConvEventCuts*)fEventCutArray->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
2489 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2491 fHistoTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2492 fCharMesonMCInfo = 2;
2493 if (secMotherLabel >-1){
2494 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
2495 fCharMesonMCInfo = 4;
2496 fHistoTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2497 if (fDoMesonQA > 0)fHistoTrueK0sWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2499 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221){
2500 fCharMesonMCInfo = 3;
2501 fHistoTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2502 if (fDoMesonQA > 0)fHistoTrueEtaWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2504 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==3122){
2505 fCharMesonMCInfo = 7;
2506 fHistoTrueSecondaryMotherFromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2507 if (fDoMesonQA > 0)fHistoTrueLambdaWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2510 }else{ // Only primary pi0 for efficiency calculation
2511 Float_t weighted= 1;
2512 fCharMesonMCInfo = 6;
2513 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, 0x0, fInputEvent)){
2514 if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt()>0.005){
2515 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, 0x0, fInputEvent);
2516 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
2519 fHistoTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2520 fHistoTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2521 fProfileTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2523 if (fDoMesonQA > 0){
2524 if(isTruePi0){ // Only primary pi0 for resolution
2525 fHistoTruePrimaryPi0MCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2526 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2529 if (isTrueEta){ // Only primary eta for resolution
2530 fHistoTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2531 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2535 } else if(!isTruePi0 && !isTrueEta) { // Background
2536 if (fDoMesonQA > 0){
2537 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2538 fHistoTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2539 fCharMesonMCInfo = 1;
2540 } else { // No photon or without mother
2541 fHistoTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2544 if( isTruePi0Dalitz || isTrueEtaDalitz ){
2546 fCharMesonMCInfo = 5;
2547 fHistoTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2548 } else if (gamma0DalitzCand || gamma1DalitzCand){
2549 if (fDoMesonQA > 0)fHistoTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2554 //________________________________________________________________________
2555 void AliAnalysisTaskGammaConvCalo::CalculateBackground(){
2557 Int_t zbin= fBGClusHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2560 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2561 mbin = fBGClusHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2563 mbin = fBGClusHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2566 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
2567 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2568 for(Int_t nEventsInBG=0;nEventsInBG<fBGClusHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2569 AliGammaConversionAODVector *previousEventV0s = fBGClusHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2570 if(fMoveParticleAccordingToVertex == kTRUE){
2571 bgEventVertex = fBGClusHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2574 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2575 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2576 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2577 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2578 if(fMoveParticleAccordingToVertex == kTRUE){
2579 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2581 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
2582 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
2585 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2586 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2587 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2588 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
2589 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2590 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2591 fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2593 delete backgroundCandidate;
2594 backgroundCandidate = 0x0;
2599 for(Int_t nEventsInBG=0;nEventsInBG <fBGClusHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2600 AliGammaConversionAODVector *previousEventV0s = fBGClusHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2601 if(previousEventV0s){
2602 if(fMoveParticleAccordingToVertex == kTRUE){
2603 bgEventVertex = fBGClusHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2605 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2606 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2607 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2609 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2611 if(fMoveParticleAccordingToVertex == kTRUE){
2612 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2614 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
2615 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
2619 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2620 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2621 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
2622 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2623 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2624 fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2626 delete backgroundCandidate;
2627 backgroundCandidate = 0x0;
2635 //________________________________________________________________________
2636 void AliAnalysisTaskGammaConvCalo::CalculateBackgroundRP(){
2638 Int_t zbin= fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2640 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2641 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2643 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2648 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
2649 // Correct for the number of rotations
2650 // BG is for rotation the same, except for factor NRotations
2651 Double_t weight=1./Double_t(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents());
2653 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
2655 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
2656 if (gamma0==NULL) continue;
2657 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
2658 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
2659 if (gamma1 == NULL) continue;
2660 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelected(gamma1,fInputEvent))continue;
2661 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
2663 RotateParticle(gamma1);
2664 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
2665 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2666 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2667 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
2668 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
2669 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
2670 fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
2677 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandlerRP[fiCut]->GetNBGEvents(fGammaCandidates,fInputEvent);nEventsInBG++){
2679 AliGammaConversionPhotonVector *previousEventGammas = fBGHandlerRP[fiCut]->GetBGGoodGammas(fGammaCandidates,fInputEvent,nEventsInBG);
2681 if(previousEventGammas){
2682 // test weighted background
2683 Double_t weight=1.0;
2684 // Correct for the number of eventmixing:
2685 // N gammas -> (N-1) + (N-2) +(N-3) ...+ (N-(N-1)) using sum formula sum(i)=N*(N-1)/2 -> N*(N-1)/2
2686 // real combinations (since you cannot combine a photon with its own)
2687 // but BG leads to N_{a}*N_{b} combinations
2688 weight*=0.5*(Double_t(fGammaCandidates->GetEntries()-1))/Double_t(previousEventGammas->size());
2690 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2691 AliAODConversionPhoton *gamma0 = (AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2692 for(UInt_t iPrevious=0;iPrevious<previousEventGammas->size();iPrevious++){
2694 AliAODConversionPhoton *gamma1 = (AliAODConversionPhoton*)(previousEventGammas->at(iPrevious));
2696 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
2697 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2698 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2699 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
2700 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
2701 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
2702 fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
2710 //________________________________________________________________________
2711 void AliAnalysisTaskGammaConvCalo::RotateParticle(AliAODConversionPhoton *gamma){
2712 Int_t fNDegreesPMBackground= ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->NDegreesRotation();
2713 Double_t nRadiansPM = fNDegreesPMBackground*TMath::Pi()/180;
2714 Double_t rotationValue = fRandom.Rndm()*2*nRadiansPM + TMath::Pi()-nRadiansPM;
2715 gamma->RotateZ(rotationValue);
2718 //________________________________________________________________________
2719 void AliAnalysisTaskGammaConvCalo::RotateParticleAccordingToEP(AliAODConversionPhoton *gamma, Double_t previousEventEP, Double_t thisEventEP){
2721 previousEventEP=previousEventEP+TMath::Pi();
2722 thisEventEP=thisEventEP+TMath::Pi();
2723 Double_t rotationValue= thisEventEP-previousEventEP;
2724 gamma->RotateZ(rotationValue);
2727 //________________________________________________________________________
2728 void AliAnalysisTaskGammaConvCalo::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
2729 //see header file for documentation
2731 Double_t dx = vertex->fX - fInputEvent->GetPrimaryVertex()->GetX();
2732 Double_t dy = vertex->fY - fInputEvent->GetPrimaryVertex()->GetY();
2733 Double_t dz = vertex->fZ - fInputEvent->GetPrimaryVertex()->GetZ();
2735 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
2736 particle->SetConversionPoint(movedPlace);
2738 //________________________________________________________________________
2739 void AliAnalysisTaskGammaConvCalo::UpdateEventByEventData(){
2740 //see header file for documentation
2741 if(fGammaCandidates->GetEntries() >0 ){
2742 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2743 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),fEventPlaneAngle);
2744 fBGClusHandler[fiCut]->AddEvent(fClusterCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),fEventPlaneAngle);
2745 } else { // means we use #V0s for multiplicity
2746 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries(),fEventPlaneAngle);
2747 fBGClusHandler[fiCut]->AddEvent(fClusterCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries(),fEventPlaneAngle);
2753 //________________________________________________________________________
2754 void AliAnalysisTaskGammaConvCalo::FillPhotonCombinatorialBackgroundHist(AliAODConversionPhoton *TruePhotonCandidate, Int_t pdgCode[])
2756 // 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
2757 if(pdgCode[0]==11 && pdgCode[1]==11){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),0);}
2758 else if( (pdgCode[0]==11 && pdgCode[1]==211) || (pdgCode[0]==211 && pdgCode[1]==11) )
2759 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),1);}
2760 else if( (pdgCode[0]==11 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==11) )
2761 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),2);}
2762 else if( (pdgCode[0]==11 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==11) )
2763 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),3);}
2764 else if( (pdgCode[0]==11 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==11) )
2765 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),4);}
2766 else if( pdgCode[0]==211 && pdgCode[1]==211 ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),5);}
2767 else if( (pdgCode[0]==211 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==211) )
2768 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),6);}
2769 else if( (pdgCode[0]==211 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==211) )
2770 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),7);}
2771 else if( (pdgCode[0]==211 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==211) )
2772 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),8);}
2773 else if( pdgCode[0]==321 && pdgCode[1]==321 ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),9);}
2774 else if( (pdgCode[0]==321 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==321) )
2775 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),10);}
2776 else if( (pdgCode[0]==321 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==321) )
2777 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),11);}
2778 else if( pdgCode[0]==2212 && pdgCode[1]==2212 ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),12);}
2779 else if( (pdgCode[0]==2212 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==2212) )
2780 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),13);}
2781 else if( pdgCode[0]==13 && pdgCode[1]==13 ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),14);}
2782 else {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),15);}
2784 //________________________________________________________________________
2785 void AliAnalysisTaskGammaConvCalo::RelabelAODPhotonCandidates(Bool_t mode){
2787 // Relabeling For AOD Event
2789 // MCLabel -> AODMCLabel
2792 fMCStackPos = new Int_t[fReaderGammas->GetEntries()];
2793 fMCStackNeg = new Int_t[fReaderGammas->GetEntries()];
2794 fESDArrayPos = new Int_t[fReaderGammas->GetEntries()];
2795 fESDArrayNeg = new Int_t[fReaderGammas->GetEntries()];
2798 for(Int_t iGamma = 0;iGamma<fReaderGammas->GetEntries();iGamma++){
2799 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(iGamma);
2800 if(!PhotonCandidate) continue;
2801 if(!mode){// Back to ESD Labels
2802 PhotonCandidate->SetMCLabelPositive(fMCStackPos[iGamma]);
2803 PhotonCandidate->SetMCLabelNegative(fMCStackNeg[iGamma]);
2804 PhotonCandidate->SetLabelPositive(fESDArrayPos[iGamma]);
2805 PhotonCandidate->SetLabelNegative(fESDArrayNeg[iGamma]);
2808 fMCStackPos[iGamma] = PhotonCandidate->GetMCLabelPositive();
2809 fMCStackNeg[iGamma] = PhotonCandidate->GetMCLabelNegative();
2810 fESDArrayPos[iGamma] = PhotonCandidate->GetTrackLabelPositive();
2811 fESDArrayNeg[iGamma] = PhotonCandidate->GetTrackLabelNegative();
2813 Bool_t AODLabelPos = kFALSE;
2814 Bool_t AODLabelNeg = kFALSE;
2816 for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
2817 AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i));
2819 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelPositive() ){
2820 PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel()));
2821 PhotonCandidate->SetLabelPositive(i);
2822 AODLabelPos = kTRUE;
2826 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelNegative()){
2827 PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel()));
2828 PhotonCandidate->SetLabelNegative(i);
2829 AODLabelNeg = kTRUE;
2832 if(AODLabelNeg && AODLabelPos){
2836 if(!AODLabelPos || !AODLabelNeg){
2837 cout<<"WARNING!!! AOD TRACKS NOT FOUND FOR"<<endl;
2843 delete[] fMCStackPos;
2844 delete[] fMCStackNeg;
2845 delete[] fESDArrayPos;
2846 delete[] fESDArrayNeg;
2850 void AliAnalysisTaskGammaConvCalo::SetLogBinningXTH2(TH2* histoRebin){
2851 TAxis *axisafter = histoRebin->GetXaxis();
2852 Int_t bins = axisafter->GetNbins();
2853 Double_t from = axisafter->GetXmin();
2854 Double_t to = axisafter->GetXmax();
2855 Double_t *newbins = new Double_t[bins+1];
2857 Double_t factor = TMath::Power(to/from, 1./bins);
2858 for(Int_t i=1; i<=bins; ++i) newbins[i] = factor * newbins[i-1];
2859 axisafter->Set(bins, newbins);
2863 //________________________________________________________________________
2864 void AliAnalysisTaskGammaConvCalo::Terminate(const Option_t *)
2867 //fOutputContainer->Print(); // Will crash on GRID
2870 //________________________________________________________________________
2871 Int_t AliAnalysisTaskGammaConvCalo::GetSourceClassification(Int_t daughter, Int_t pdgCode){
2873 if (daughter == 111) {
2874 if (abs(pdgCode) == 310) return 1; // k0s
2875 else if (abs(pdgCode) == 3122) return 2; // Lambda
2876 else if (abs(pdgCode) == 130) return 3; // K0L
2877 else if (abs(pdgCode) == 2212) return 4; // proton
2878 else if (abs(pdgCode) == 2112) return 5; // neutron
2879 else if (abs(pdgCode) == 211) return 6; // pion
2880 else if (abs(pdgCode) == 321) return 7; // kaon
2881 else if (abs(pdgCode) == 113 || abs(pdgCode) == 213 ) return 8; // rho 0,+,-
2882 else if (abs(pdgCode) == 3222 || abs(pdgCode) == 3212 || abs(pdgCode) == 3112 ) return 9; // Sigma
2883 else if (abs(pdgCode) == 2224 || abs(pdgCode) == 2214 || abs(pdgCode) == 2114 || abs(pdgCode) == 1114 ) return 10; // Delta
2884 else if (abs(pdgCode) == 313 || abs(pdgCode) == 323 ) return 11; // K*
2891 // //________________________________________________________________________
2892 // Double_t AliAnalysisTaskGammaConvCalo::GetMaxCellEnergy(const AliVCluster *cluster, Short_t &id) const
2894 // // Get maximum energy of attached cell.
2897 // Double_t maxe = 0;
2898 // Int_t ncells = cluster->GetNCells();
2900 // for (Int_t i=0; i<ncells; i++) {
2901 // Double_t e = fEsdCells->GetCellAmplitude(TMath::Abs(cluster->GetCellAbsId(i)));
2904 // id = cluster->GetCellAbsId(i);
2908 // for (Int_t i=0; i<ncells; i++) {
2909 // Double_t e = fAodCells->GetCellAmplitude(TMath::Abs(cluster->GetCellAbsId(i)));
2912 // id = cluster->GetCellAbsId(i);