]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/GammaConv/AliAnalysisTaskGammaConvV1.cxx
removed old software from directory, fixed Addtask macro for main task, applied cover...
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliAnalysisTaskGammaConvV1.cxx
CommitLineData
2bb2434e 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
0a2b2b4b 4 * Author: Martin Wilde, Daniel Lohner, Friederike Bock *
2bb2434e 5 * Version 1.0 *
6 * *
0a2b2b4b 7 * based on: on older version (see aliroot up to v5-04-42-AN) *
8 * AliAnalysisTaskGammaConversion.cxx *
9 * Authors: Kathrin Koch, Kenneth Aamodt, Ana Marin *
10 * *
2bb2434e 11 * Permission to use, copy, modify and distribute this software and its *
12 * documentation strictly for non-commercial purposes is hereby granted *
13 * without fee, provided that the above copyright notice appears in all *
14 * copies and that both the copyright notice and this permission notice *
15 * appear in the supporting documentation. The authors make no claims *
16 * about the suitability of this software for any purpose. It is *
17 * provided "as is" without express or implied warranty. *
18 **************************************************************************/
19
20////////////////////////////////////////////////
21//---------------------------------------------
22// Class used to do analysis on conversion pairs
23//---------------------------------------------
24///////////////////////////////////////////////
25#include "TChain.h"
26#include "TTree.h"
27#include "TH1F.h"
28#include "TH2F.h"
29#include "TH3F.h"
30#include "THnSparse.h"
31#include "TCanvas.h"
32#include "TNtuple.h"
33#include "AliAnalysisTask.h"
34#include "AliAnalysisManager.h"
35#include "AliESDEvent.h"
36#include "AliESDInputHandler.h"
37#include "AliMCEventHandler.h"
38#include "AliMCEvent.h"
39#include "AliMCParticle.h"
40#include "AliCentrality.h"
41#include "AliESDVZERO.h"
42#include "AliESDpid.h"
43#include "AliAnalysisTaskGammaConvV1.h"
44#include "AliVParticle.h"
45#include "AliESDtrackCuts.h"
46#include "AliKFVertex.h"
47#include "AliV0ReaderV1.h"
ca91a3e1 48#include "AliGenCocktailEventHeader.h"
e5b6e8a6 49#include "AliConversionAODBGHandlerRP.h"
2bb2434e 50
51ClassImp(AliAnalysisTaskGammaConvV1)
52
53//________________________________________________________________________
54AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(): AliAnalysisTaskSE(),
55 fV0Reader(NULL),
56 fBGHandler(NULL),
e5b6e8a6 57 fBGHandlerRP(NULL),
58 fInputEvent(NULL),
2bb2434e 59 fMCEvent(NULL),
60 fMCStack(NULL),
61 fCutFolder(NULL),
62 fESDList(NULL),
63 fBackList(NULL),
ca91a3e1 64 fMotherList(NULL),
0a2b2b4b 65 fMotherRapList(NULL),
2bb2434e 66 fTrueList(NULL),
0a2b2b4b 67 fTrueMotherRapList(NULL),
2bb2434e 68 fMCList(NULL),
ca91a3e1 69 fHeaderNameList(NULL),
2bb2434e 70 fOutputContainer(0),
71 fReaderGammas(NULL),
a280ac15 72 fGammaCandidates(NULL),
2bb2434e 73 fCutArray(NULL),
74 fConversionCuts(NULL),
ca91a3e1 75 fMesonCutArray(NULL),
76 fMesonCuts(NULL),
2bb2434e 77 hESDConvGammaPt(NULL),
e5b6e8a6 78 hESDConvGammaR(NULL),
2bb2434e 79 hESDMotherInvMassPt(NULL),
80 sESDMotherInvMassPtZM(NULL),
0a2b2b4b 81 sESDMotherInvMassPtY(NULL),
2bb2434e 82 hESDMotherBackInvMassPt(NULL),
83 sESDMotherBackInvMassPtZM(NULL),
84 hESDMotherInvMassEalpha(NULL),
85 hMCAllGammaPt(NULL),
2bb2434e 86 hMCDecayGammaPi0Pt(NULL),
2bb2434e 87 hMCDecayGammaRhoPt(NULL),
2bb2434e 88 hMCDecayGammaEtaPt(NULL),
2bb2434e 89 hMCDecayGammaOmegaPt(NULL),
2bb2434e 90 hMCDecayGammaEtapPt(NULL),
2bb2434e 91 hMCDecayGammaPhiPt(NULL),
e5b6e8a6 92 hMCDecayGammaSigmaPt(NULL),
2bb2434e 93 hMCConvGammaPt(NULL),
ca91a3e1 94 hMCConvGammaR(NULL),
95 hMCConvGammaEta(NULL),
e5b6e8a6 96 hMCConvGammaRSPt(NULL),
97 hMCConvGammaRSR(NULL),
98 hMCConvGammaRSEta(NULL),
2bb2434e 99 hMCPi0Pt(NULL),
100 hMCEtaPt(NULL),
101 hMCPi0InAccPt(NULL),
102 hMCEtaInAccPt(NULL),
0a2b2b4b 103 hMCPi0PtY(NULL),
104 hMCEtaPtY(NULL),
2bb2434e 105 hESDTrueMotherInvMassPt(NULL),
a280ac15 106 hESDTruePrimaryMotherInvMassPt(NULL),
0a2b2b4b 107 hESDTruePrimaryPi0MCPtResolPt(NULL),
108 hESDTruePrimaryEtaMCPtResolPt(NULL),
109 sESDTruePrimaryMotherInvMassPtY(NULL),
2bb2434e 110 hESDTrueSecondaryMotherInvMassPt(NULL),
2bb2434e 111 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
e5b6e8a6 112 hESDTrueK0sWithPi0DaughterMCPt(NULL),
113 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
114 hESDTrueEtaWithPi0DaughterMCPt(NULL),
2bb2434e 115 hESDTrueBckGGInvMassPt(NULL),
116 hESDTrueBckContInvMassPt(NULL),
117 hESDTrueMotherDalitzInvMassPt(NULL),
2bb2434e 118 hESDTrueConvGammaPt(NULL),
e5b6e8a6 119 hESDCombinatorialPt(NULL),
2bb2434e 120 hESDTruePrimaryConvGammaPt(NULL),
ca91a3e1 121 hESDTruePrimaryConvGammaR(NULL),
122 hESDTruePrimaryConvGammaEta(NULL),
2bb2434e 123 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
e5b6e8a6 124 hESDTruePrimaryConvGammaRSESDPtMCPt(NULL),
2bb2434e 125 hESDTrueSecondaryConvGammaPt(NULL),
e5b6e8a6 126 hESDTrueSecondaryConvGammaR(NULL),
2bb2434e 127 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
2bb2434e 128 hNEvents(NULL),
129 hNGoodESDTracks(NULL),
a280ac15 130 hNGammaCandidates(NULL),
2bb2434e 131 hNV0Tracks(NULL),
132 fRandom(0),
a280ac15 133 fnGammaCandidates(0),
2bb2434e 134 fUnsmearedPx(NULL),
135 fUnsmearedPy(NULL),
136 fUnsmearedPz(NULL),
137 fUnsmearedE(NULL),
e5b6e8a6 138 fnCuts(0),
139 fiCut(0),
140 fNumberOfESDTracks(0),
141 fMoveParticleAccordingToVertex(kTRUE),
2bb2434e 142 fIsHeavyIon(kFALSE),
e5b6e8a6 143 fDoMesonAnalysis(kTRUE),
0a2b2b4b 144 fDoMesonQA(kFALSE),
145 fDoPhotonQA(kFALSE),
a280ac15 146 fIsFromMBHeader(kTRUE)
2bb2434e 147{
a280ac15 148
2bb2434e 149}
150
151//________________________________________________________________________
152AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
153 AliAnalysisTaskSE(name),
154 fV0Reader(NULL),
155 fBGHandler(NULL),
e5b6e8a6 156 fBGHandlerRP(NULL),
157 fInputEvent(NULL),
2bb2434e 158 fMCEvent(NULL),
159 fMCStack(NULL),
160 fCutFolder(NULL),
161 fESDList(NULL),
162 fBackList(NULL),
ca91a3e1 163 fMotherList(NULL),
0a2b2b4b 164 fMotherRapList(NULL),
2bb2434e 165 fTrueList(NULL),
0a2b2b4b 166 fTrueMotherRapList(NULL),
2bb2434e 167 fMCList(NULL),
ca91a3e1 168 fHeaderNameList(NULL),
2bb2434e 169 fOutputContainer(0),
170 fReaderGammas(NULL),
a280ac15 171 fGammaCandidates(NULL),
2bb2434e 172 fCutArray(NULL),
173 fConversionCuts(NULL),
ca91a3e1 174 fMesonCutArray(NULL),
175 fMesonCuts(NULL),
2bb2434e 176 hESDConvGammaPt(NULL),
e5b6e8a6 177 hESDConvGammaR(NULL),
2bb2434e 178 hESDMotherInvMassPt(NULL),
179 sESDMotherInvMassPtZM(NULL),
0a2b2b4b 180 sESDMotherInvMassPtY(NULL),
2bb2434e 181 hESDMotherBackInvMassPt(NULL),
182 sESDMotherBackInvMassPtZM(NULL),
183 hESDMotherInvMassEalpha(NULL),
184 hMCAllGammaPt(NULL),
2bb2434e 185 hMCDecayGammaPi0Pt(NULL),
2bb2434e 186 hMCDecayGammaRhoPt(NULL),
2bb2434e 187 hMCDecayGammaEtaPt(NULL),
2bb2434e 188 hMCDecayGammaOmegaPt(NULL),
2bb2434e 189 hMCDecayGammaEtapPt(NULL),
2bb2434e 190 hMCDecayGammaPhiPt(NULL),
e5b6e8a6 191 hMCDecayGammaSigmaPt(NULL),
2bb2434e 192 hMCConvGammaPt(NULL),
ca91a3e1 193 hMCConvGammaR(NULL),
194 hMCConvGammaEta(NULL),
e5b6e8a6 195 hMCConvGammaRSPt(NULL),
196 hMCConvGammaRSR(NULL),
197 hMCConvGammaRSEta(NULL),
2bb2434e 198 hMCPi0Pt(NULL),
199 hMCEtaPt(NULL),
200 hMCPi0InAccPt(NULL),
201 hMCEtaInAccPt(NULL),
0a2b2b4b 202 hMCPi0PtY(NULL),
203 hMCEtaPtY(NULL),
2bb2434e 204 hESDTrueMotherInvMassPt(NULL),
a280ac15 205 hESDTruePrimaryMotherInvMassPt(NULL),
0a2b2b4b 206 hESDTruePrimaryPi0MCPtResolPt(NULL),
207 hESDTruePrimaryEtaMCPtResolPt(NULL),
208 sESDTruePrimaryMotherInvMassPtY(NULL),
2bb2434e 209 hESDTrueSecondaryMotherInvMassPt(NULL),
2bb2434e 210 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
e5b6e8a6 211 hESDTrueK0sWithPi0DaughterMCPt(NULL),
212 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
213 hESDTrueEtaWithPi0DaughterMCPt(NULL),
2bb2434e 214 hESDTrueBckGGInvMassPt(NULL),
215 hESDTrueBckContInvMassPt(NULL),
216 hESDTrueMotherDalitzInvMassPt(NULL),
2bb2434e 217 hESDTrueConvGammaPt(NULL),
e5b6e8a6 218 hESDCombinatorialPt(NULL),
2bb2434e 219 hESDTruePrimaryConvGammaPt(NULL),
ca91a3e1 220 hESDTruePrimaryConvGammaR(NULL),
221 hESDTruePrimaryConvGammaEta(NULL),
2bb2434e 222 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
e5b6e8a6 223 hESDTruePrimaryConvGammaRSESDPtMCPt(NULL),
2bb2434e 224 hESDTrueSecondaryConvGammaPt(NULL),
e5b6e8a6 225 hESDTrueSecondaryConvGammaR(NULL),
2bb2434e 226 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
2bb2434e 227 hNEvents(NULL),
228 hNGoodESDTracks(NULL),
a280ac15 229 hNGammaCandidates(NULL),
2bb2434e 230 hNV0Tracks(NULL),
231 fRandom(0),
a280ac15 232 fnGammaCandidates(0),
2bb2434e 233 fUnsmearedPx(NULL),
234 fUnsmearedPy(NULL),
235 fUnsmearedPz(NULL),
236 fUnsmearedE(NULL),
e5b6e8a6 237 fnCuts(0),
238 fiCut(0),
239 fNumberOfESDTracks(0),
240 fMoveParticleAccordingToVertex(kTRUE),
2bb2434e 241 fIsHeavyIon(kFALSE),
e5b6e8a6 242 fDoMesonAnalysis(kTRUE),
0a2b2b4b 243 fDoMesonQA(kFALSE),
244 fDoPhotonQA(kFALSE),
a280ac15 245 fIsFromMBHeader(kTRUE)
2bb2434e 246{
a280ac15 247 // Define output slots here
2bb2434e 248 DefineOutput(1, TList::Class());
249}
250
251AliAnalysisTaskGammaConvV1::~AliAnalysisTaskGammaConvV1()
252{
a280ac15 253 if(fGammaCandidates){
254 delete fGammaCandidates;
255 fGammaCandidates = 0x0;
2bb2434e 256 }
257 if(fBGHandler){
258 delete[] fBGHandler;
259 fBGHandler = 0x0;
260 }
e5b6e8a6 261 if(fBGHandlerRP){
262 delete[] fBGHandlerRP;
263 fBGHandlerRP = 0x0;
264 }
2bb2434e 265}
266//___________________________________________________________
267void AliAnalysisTaskGammaConvV1::InitBack(){
268
0a2b2b4b 269 Double_t *zBinLimitsArray= new Double_t[9] ;
2bb2434e 270 zBinLimitsArray[0] = -50.00;
271 zBinLimitsArray[1] = -3.375;
272 zBinLimitsArray[2] = -1.605;
273 zBinLimitsArray[3] = -0.225;
274 zBinLimitsArray[4] = 1.065;
275 zBinLimitsArray[5] = 2.445;
276 zBinLimitsArray[6] = 4.245;
277 zBinLimitsArray[7] = 50.00;
278 zBinLimitsArray[8] = 1000.00;
279
0a2b2b4b 280 Double_t *multiplicityBinLimitsArrayTracks= new Double_t[6];
2bb2434e 281 multiplicityBinLimitsArrayTracks[0] = 0;
282 multiplicityBinLimitsArrayTracks[1] = 8.5;
283 multiplicityBinLimitsArrayTracks[2] = 16.5;
284 multiplicityBinLimitsArrayTracks[3] = 27.5;
285 multiplicityBinLimitsArrayTracks[4] = 41.5;
286 multiplicityBinLimitsArrayTracks[5] = 200.;
287 if(fIsHeavyIon){
288 multiplicityBinLimitsArrayTracks[0] = 0;
289 multiplicityBinLimitsArrayTracks[1] = 200.;
290 multiplicityBinLimitsArrayTracks[2] = 500.;
291 multiplicityBinLimitsArrayTracks[3] = 1000.;
292 multiplicityBinLimitsArrayTracks[4] = 1500.;
293 multiplicityBinLimitsArrayTracks[5] = 5000.;
294 }
295
0a2b2b4b 296 Double_t *multiplicityBinLimitsArrayV0s= new Double_t[5];
2bb2434e 297 multiplicityBinLimitsArrayV0s[0] = 2;
298 multiplicityBinLimitsArrayV0s[1] = 3;
299 multiplicityBinLimitsArrayV0s[2] = 4;
300 multiplicityBinLimitsArrayV0s[3] = 5;
301 multiplicityBinLimitsArrayV0s[4] = 9999;
302 if(fIsHeavyIon){
303 multiplicityBinLimitsArrayV0s[0] = 2;
304 multiplicityBinLimitsArrayV0s[1] = 10;
305 multiplicityBinLimitsArrayV0s[2] = 30;
306 multiplicityBinLimitsArrayV0s[3] = 50;
307 multiplicityBinLimitsArrayV0s[4] = 9999;
308 }
309
310 const Int_t nDim = 4;
e5b6e8a6 311 Int_t nBins[nDim] = {800,250,8,5};
2bb2434e 312 Double_t xMin[nDim] = {0,0, 0,0};
e5b6e8a6 313 Double_t xMax[nDim] = {0.8,25,8,5};
2bb2434e 314
315 sESDMotherInvMassPtZM = new THnSparseF*[fnCuts];
316 sESDMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
317
318 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
e5b6e8a6 319 fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
2bb2434e 320 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
e5b6e8a6 321 if (((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
322 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
323 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
324 fBackList[iCut] = new TList();
325 fBackList[iCut]->SetName(Form("%s_%s Back histograms",cutstring.Data(),cutstringMeson.Data()));
326 fBackList[iCut]->SetOwner(kTRUE);
327 fCutFolder[iCut]->Add(fBackList[iCut]);
328
329 sESDMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
e5b6e8a6 330 fBackList[iCut]->Add(sESDMotherBackInvMassPtZM[iCut]);
331
332 fMotherList[iCut] = new TList();
333 fMotherList[iCut]->SetName(Form("%s_%s Mother histograms",cutstring.Data(),cutstringMeson.Data()));
334 fMotherList[iCut]->SetOwner(kTRUE);
335 fCutFolder[iCut]->Add(fMotherList[iCut]);
336
337 sESDMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
e5b6e8a6 338 fMotherList[iCut]->Add(sESDMotherInvMassPtZM[iCut]);
339
340 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
341 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity()){
342 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(9,6,((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
343 fBGHandler[iCut]->Initialize(zBinLimitsArray, multiplicityBinLimitsArrayTracks);
344 fBGHandlerRP[iCut] = NULL;
345 }
346 else{
347 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(9,5,((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
348 fBGHandler[iCut]->Initialize(zBinLimitsArray, multiplicityBinLimitsArrayV0s);
349 fBGHandlerRP[iCut] = NULL;
350 }
351 }
352 else{
353 fBGHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
354 ((AliConversionCuts*)fCutArray->At(fiCut))->IsHeavyIon(),
355 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
356 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
357 fBGHandler[iCut] = NULL;
358 }
2bb2434e 359 }
360 }
361}
362//________________________________________________________________________
363void AliAnalysisTaskGammaConvV1::UserCreateOutputObjects()
364{
365
366 // Create histograms
367 if(fOutputContainer != NULL){
368 delete fOutputContainer;
369 fOutputContainer = NULL;
370 }
371 if(fOutputContainer == NULL){
372 fOutputContainer = new TList();
373 fOutputContainer->SetOwner(kTRUE);
374 }
375
376 // Array of current cut's gammas
a280ac15 377 fGammaCandidates = new TList();
2bb2434e 378
379 fCutFolder = new TList*[fnCuts];
380 fESDList = new TList*[fnCuts];
381 fBackList = new TList*[fnCuts];
ca91a3e1 382 fMotherList = new TList*[fnCuts];
2bb2434e 383 hNEvents = new TH1I*[fnCuts];
384 hNGoodESDTracks = new TH1I*[fnCuts];
a280ac15 385 hNGammaCandidates = new TH1I*[fnCuts];
ca91a3e1 386 hNV0Tracks = new TH1I*[fnCuts];
0a2b2b4b 387 hESDConvGammaPt = new TH1F*[fnCuts];
388 if (fDoPhotonQA){
389 hESDConvGammaR = new TH1F*[fnCuts];
390 }
391 const Int_t nDim = 3;
392 Int_t nBins[nDim] = {800,250,40};
393 Double_t xMin[nDim] = {0,0, -1};
394 Double_t xMax[nDim] = {0.8,25,1};
ca91a3e1 395
2bb2434e 396 if(fDoMesonAnalysis){
397 hESDMotherInvMassPt = new TH2F*[fnCuts];
398 hESDMotherBackInvMassPt = new TH2F*[fnCuts];
399 hESDMotherInvMassEalpha = new TH2F*[fnCuts];
0a2b2b4b 400 if (fDoMesonQA){
401 fMotherRapList = new TList*[fnCuts];
402 sESDMotherInvMassPtY = new THnSparseF*[fnCuts];
403 }
2bb2434e 404 }
0a2b2b4b 405
2bb2434e 406 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
407
408 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
e5b6e8a6 409 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
410
2bb2434e 411 fCutFolder[iCut] = new TList();
ca91a3e1 412 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s",cutstring.Data(),cutstringMeson.Data()));
2bb2434e 413 fCutFolder[iCut]->SetOwner(kTRUE);
414 fOutputContainer->Add(fCutFolder[iCut]);
415 fESDList[iCut] = new TList();
ca91a3e1 416 fESDList[iCut]->SetName(Form("%s_%s ESD histograms",cutstring.Data(),cutstringMeson.Data()));
2bb2434e 417 fESDList[iCut]->SetOwner(kTRUE);
a280ac15 418 fCutFolder[iCut]->Add(fESDList[iCut]);
2bb2434e 419
e5b6e8a6 420 hNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
421 hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
422 hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
423 hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
424 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
425 hNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
426 hNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
427 hNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
428 hNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
429 hNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
2bb2434e 430 fESDList[iCut]->Add(hNEvents[iCut]);
431 if(fIsHeavyIon) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",3000,0,3000);
432 else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
433 fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
a280ac15 434 if(fIsHeavyIon) hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",100,0,100);
435 else hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
436 fESDList[iCut]->Add(hNGammaCandidates[iCut]);
e5b6e8a6 437 if(fIsHeavyIon) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
2bb2434e 438 else hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2000,0,2000);
439 fESDList[iCut]->Add(hNV0Tracks[iCut]);
2bb2434e 440 hESDConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
441 fESDList[iCut]->Add(hESDConvGammaPt[iCut]);
0a2b2b4b 442
443 if (fDoPhotonQA){
444 hESDConvGammaR[iCut] = new TH1F("ESD_ConvGamma_R","ESD_ConvGamma_R",800,0,200);
445 fESDList[iCut]->Add(hESDConvGammaR[iCut]);
446 }
2bb2434e 447
448 if(fDoMesonAnalysis){
e5b6e8a6 449 hESDMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",800,0,0.8,250,0,25);
2bb2434e 450 fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
e5b6e8a6 451 hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",800,0,0.8,250,0,25);
2bb2434e 452 fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
e5b6e8a6 453 hESDMotherInvMassEalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_alpha","ESD_Mother_InvMass_vs_E_alpha",800,0,0.8,250,0,25);
2bb2434e 454 fESDList[iCut]->Add(hESDMotherInvMassEalpha[iCut]);
0a2b2b4b 455 if (fDoMesonQA){
456 fMotherRapList[iCut] = new TList();
457 fMotherRapList[iCut]->SetName(Form("%s_%s Mother Y histograms",cutstring.Data(),cutstringMeson.Data()));
458 fMotherRapList[iCut]->SetOwner(kTRUE);
459 fCutFolder[iCut]->Add(fMotherRapList[iCut]);
460 sESDMotherInvMassPtY[iCut] = new THnSparseF("Mother_InvMass_Pt_Y","Mother_InvMass_Pt_Y",nDim,nBins,xMin,xMax);
461 fMotherRapList[iCut]->Add(sESDMotherInvMassPtY[iCut]);
462 }
2bb2434e 463 }
464
0a2b2b4b 465
2bb2434e 466 }
2bb2434e 467 if(fDoMesonAnalysis){
468 InitBack(); // Init Background Handler
469 }
470
471 if(MCEvent()){
472 // MC Histogramms
473 fMCList = new TList*[fnCuts];
474 // True Histogramms
475 fTrueList = new TList*[fnCuts];
ca91a3e1 476 // Selected Header List
477 fHeaderNameList = new TList*[fnCuts];
2bb2434e 478
479 hMCAllGammaPt = new TH1F*[fnCuts];
2bb2434e 480 hMCDecayGammaPi0Pt = new TH1F*[fnCuts];
2bb2434e 481 hMCDecayGammaRhoPt = new TH1F*[fnCuts];
ca91a3e1 482 hMCDecayGammaEtaPt = new TH1F*[fnCuts];
2bb2434e 483 hMCDecayGammaOmegaPt = new TH1F*[fnCuts];
2bb2434e 484 hMCDecayGammaEtapPt = new TH1F*[fnCuts];
2bb2434e 485 hMCDecayGammaPhiPt = new TH1F*[fnCuts];
e5b6e8a6 486 hMCDecayGammaSigmaPt = new TH1F*[fnCuts];
2bb2434e 487 hMCConvGammaPt = new TH1F*[fnCuts];
e5b6e8a6 488 hMCConvGammaRSPt = new TH1F*[fnCuts];
2bb2434e 489 hESDTrueConvGammaPt = new TH1F*[fnCuts];
e5b6e8a6 490
491 hESDCombinatorialPt = new TH2F*[fnCuts];
ca91a3e1 492 hESDTruePrimaryConvGammaPt = new TH1F*[fnCuts];
2bb2434e 493 hESDTruePrimaryConvGammaESDPtMCPt = new TH2F*[fnCuts];
e5b6e8a6 494 hESDTruePrimaryConvGammaRSESDPtMCPt = new TH2F*[fnCuts];
2bb2434e 495 hESDTrueSecondaryConvGammaPt = new TH1F*[fnCuts];
0a2b2b4b 496
2bb2434e 497 hESDTrueSecondaryConvGammaFromXFromK0sPt = new TH1F*[fnCuts];
ca91a3e1 498
0a2b2b4b 499 if (fDoPhotonQA){
500 hMCConvGammaR = new TH1F*[fnCuts];
501 hMCConvGammaEta = new TH1F*[fnCuts];
502 hMCConvGammaRSR = new TH1F*[fnCuts];
503 hMCConvGammaRSEta = new TH1F*[fnCuts];
504 hESDTruePrimaryConvGammaR = new TH1F*[fnCuts];
505 hESDTruePrimaryConvGammaEta = new TH1F*[fnCuts];
506 hESDTrueSecondaryConvGammaR = new TH1F*[fnCuts];
507 }
508
2bb2434e 509 if(fDoMesonAnalysis){
510 hMCPi0Pt = new TH1F*[fnCuts];
511 hMCEtaPt = new TH1F*[fnCuts];
512 hMCPi0InAccPt = new TH1F*[fnCuts];
513 hMCEtaInAccPt = new TH1F*[fnCuts];
2bb2434e 514
515 hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
a280ac15 516 hESDTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
2bb2434e 517 hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
2bb2434e 518 hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
e5b6e8a6 519 hESDTrueSecondaryMotherFromEtaInvMassPt = new TH2F*[fnCuts];
0a2b2b4b 520 if (fDoMesonQA){
521 hMCPi0PtY = new TH2F*[fnCuts];
522 hMCEtaPtY = new TH2F*[fnCuts];
523 hESDTruePrimaryPi0MCPtResolPt = new TH2F*[fnCuts];
524 hESDTruePrimaryEtaMCPtResolPt = new TH2F*[fnCuts];
525 hESDTrueK0sWithPi0DaughterMCPt = new TH1F*[fnCuts];
526 hESDTrueEtaWithPi0DaughterMCPt = new TH1F*[fnCuts];
527 hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
528 hESDTrueBckContInvMassPt = new TH2F*[fnCuts];
529 hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
530 fTrueMotherRapList = new TList*[fnCuts];
531 sESDTruePrimaryMotherInvMassPtY = new THnSparseF*[fnCuts];
532 }
2bb2434e 533 }
534
535 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
536 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
e5b6e8a6 537 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
538
539 fMCList[iCut] = new TList();
ca91a3e1 540 fMCList[iCut]->SetName(Form("%s_%s MC histograms",cutstring.Data(),cutstringMeson.Data()));
2bb2434e 541 fMCList[iCut]->SetOwner(kTRUE);
542 fCutFolder[iCut]->Add(fMCList[iCut]);
543
544 hMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
545 fMCList[iCut]->Add(hMCAllGammaPt[iCut]);
2bb2434e 546 hMCDecayGammaPi0Pt[iCut] = new TH1F("MC_DecayGammaPi0_Pt","MC_DecayGammaPi0_Pt",250,0,25);
547 fMCList[iCut]->Add(hMCDecayGammaPi0Pt[iCut]);
2bb2434e 548 hMCDecayGammaRhoPt[iCut] = new TH1F("MC_DecayGammaRho_Pt","MC_DecayGammaRho_Pt",250,0,25);
549 fMCList[iCut]->Add(hMCDecayGammaRhoPt[iCut]);
2bb2434e 550 hMCDecayGammaEtaPt[iCut] = new TH1F("MC_DecayGammaEta_Pt","MC_DecayGammaEta_Pt",250,0,25);
551 fMCList[iCut]->Add(hMCDecayGammaEtaPt[iCut]);
2bb2434e 552 hMCDecayGammaOmegaPt[iCut] = new TH1F("MC_DecayGammaOmega_Pt","MC_DecayGammaOmmega_Pt",250,0,25);
553 fMCList[iCut]->Add(hMCDecayGammaOmegaPt[iCut]);
2bb2434e 554 hMCDecayGammaEtapPt[iCut] = new TH1F("MC_DecayGammaEtap_Pt","MC_DecayGammaEtap_Pt",250,0,25);
555 fMCList[iCut]->Add(hMCDecayGammaEtapPt[iCut]);
2bb2434e 556 hMCDecayGammaPhiPt[iCut] = new TH1F("MC_DecayGammaPhi_Pt","MC_DecayGammaPhi_Pt",250,0,25);
557 fMCList[iCut]->Add(hMCDecayGammaPhiPt[iCut]);
e5b6e8a6 558 hMCDecayGammaSigmaPt[iCut] = new TH1F("MC_DecayGammaSigma_Pt","MC_DecayGammaSigma_Pt",250,0,25);
559 fMCList[iCut]->Add(hMCDecayGammaSigmaPt[iCut]);
2bb2434e 560 hMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
561 fMCList[iCut]->Add(hMCConvGammaPt[iCut]);
e5b6e8a6 562 hMCConvGammaRSPt[iCut] = new TH1F("MC_ConvGamma_RS_Pt","MC_ConvGamma_RS_Pt",250,0,25);
563 fMCList[iCut]->Add(hMCConvGammaRSPt[iCut]);
0a2b2b4b 564
565 if (fDoPhotonQA){
566 hMCConvGammaR[iCut] = new TH1F("MC_ConvGamma_R","MC_ConvGamma_R",800,0,200);
567 fMCList[iCut]->Add(hMCConvGammaR[iCut]);
568 hMCConvGammaEta[iCut] = new TH1F("MC_ConvGamma_Eta","MC_ConvGamma_Eta",100,-4,4);
569 fMCList[iCut]->Add(hMCConvGammaEta[iCut]);
570 hMCConvGammaRSR[iCut] = new TH1F("MC_ConvGamma_RS_R","MC_ConvGamma_RS_R",800,0,200);
571 fMCList[iCut]->Add(hMCConvGammaRSR[iCut]);
572 hMCConvGammaRSEta[iCut] = new TH1F("MC_ConvGamma_RS_Eta","MC_ConvGamma_RS_Eta",100,-4,4);
573 fMCList[iCut]->Add(hMCConvGammaRSEta[iCut]);
574 }
e5b6e8a6 575
2bb2434e 576 if(fDoMesonAnalysis){
577 hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
0a2b2b4b 578 hMCPi0Pt[iCut]->Sumw2();
2bb2434e 579 fMCList[iCut]->Add(hMCPi0Pt[iCut]);
580 hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
0a2b2b4b 581 hMCEtaPt[iCut]->Sumw2();
2bb2434e 582 fMCList[iCut]->Add(hMCEtaPt[iCut]);
583 hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0InAcc_Pt","MC_Pi0InAcc_Pt",250,0,25);
0a2b2b4b 584 hMCPi0InAccPt[iCut]->Sumw2();
2bb2434e 585 fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
586 hMCEtaInAccPt[iCut] = new TH1F("MC_EtaInAcc_Pt","MC_EtaInAcc_Pt",250,0,25);
0a2b2b4b 587 hMCEtaInAccPt[iCut]->Sumw2();
2bb2434e 588 fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
0a2b2b4b 589 if (fDoMesonQA){
590 hMCPi0PtY[iCut] = new TH2F("MC_Pi0_Pt_Y","MC_Pi0_Pt_Y",250,0,25,20,-1,1);
591 hMCPi0PtY[iCut]->Sumw2();
592 fMCList[iCut]->Add(hMCPi0PtY[iCut]);
593 hMCEtaPtY[iCut] = new TH2F("MC_Eta_Pt_Y","MC_Eta_Pt_Y",250,0,25,20,-1,1);
594 hMCEtaPtY[iCut]->Sumw2();
595 fMCList[iCut]->Add(hMCEtaPtY[iCut]);
596 }
597
2bb2434e 598 }
599 fTrueList[iCut] = new TList();
ca91a3e1 600 fTrueList[iCut]->SetName(Form("%s_%s True histograms",cutstring.Data(),cutstringMeson.Data()));
2bb2434e 601 fTrueList[iCut]->SetOwner(kTRUE);
602 fCutFolder[iCut]->Add(fTrueList[iCut]);
603
604 hESDTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
605 fTrueList[iCut]->Add(hESDTrueConvGammaPt[iCut]);
e5b6e8a6 606
607 hESDCombinatorialPt[iCut] = new TH2F("ESD_TrueCombinatorial_Pt","ESD_TrueCombinatorial_Pt",250,0,25,16,-0.5,15.5);
608 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 1,"Elec+Elec");
609 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 2,"Elec+Pion");
610 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 3,"Elec+Kaon");
611 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 4,"Elec+Proton");
612 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 5,"Elec+Muon");
613 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 6,"Pion+Pion");
614 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 7,"Pion+Kaon");
615 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 8,"Pion+Proton");
616 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 9,"Pion+Muon");
617 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(10,"Kaon+Kaon");
618 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(11,"Kaon+Proton");
619 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(12,"Kaon+Muon");
620 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(13,"Proton+Proton");
621 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(14,"Proton+Muon");
622 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(15,"Muon+Muon");
623 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(16,"Rest");
624 fTrueList[iCut]->Add(hESDCombinatorialPt[iCut]);
2bb2434e 625 hESDTruePrimaryConvGammaPt[iCut] = new TH1F("ESD_TruePrimaryConvGamma_Pt","ESD_TruePrimaryConvGamma_Pt",250,0,25);
626 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaPt[iCut]);
2bb2434e 627 hESDTrueSecondaryConvGammaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGamma_Pt","ESD_TrueSecondaryConvGamma_Pt",250,0,25);
628 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaPt[iCut]);
0a2b2b4b 629
e5b6e8a6 630 hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]
631 = new TH1F("ESD_TrueSecondaryConvGammaFromXFromK0s_Pt", "ESD_TrueSecondaryConvGammaFromXFromK0s_Pt",250,0,25);
2bb2434e 632 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]);
2bb2434e 633 hESDTruePrimaryConvGammaESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryConvGammaESD_PtMCPt", "ESD_TruePrimaryConvGammaESD_PtMCPt",250,0,25,250,0,25);
634 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaESDPtMCPt[iCut]);
e5b6e8a6 635 hESDTruePrimaryConvGammaRSESDPtMCPt[iCut]
636 = new TH2F("ESD_TruePrimaryConvGammaESD_RS_PtMCPt", "ESD_TruePrimaryConvGammaESD_RS_PtMCPt",250,0,25,250,0,25);
637 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaRSESDPtMCPt[iCut]);
638
0a2b2b4b 639 if (fDoPhotonQA){
640 hESDTruePrimaryConvGammaR[iCut] = new TH1F("ESD_TruePrimaryConvGamma_R","ESD_TruePrimaryConvGamma_R",800,0,200);
641 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaR[iCut]);
642 hESDTrueSecondaryConvGammaR[iCut] = new TH1F("ESD_TrueSecondaryConvGamma_R","ESD_TrueSecondaryConvGamma_R",800,0,200);
643 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaR[iCut]);
644 hESDTruePrimaryConvGammaEta[iCut] = new TH1F("ESD_TruePrimaryConvGamma_Eta","ESD_TruePrimaryConvGamma_Eta",100,-4,4);
645 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaEta[iCut]);
646 }
2bb2434e 647
648 if(fDoMesonAnalysis){
e5b6e8a6 649 hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
2bb2434e 650 fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
a280ac15 651 hESDTruePrimaryMotherInvMassPt[iCut]
652 = new TH2F("ESD_TruePrimaryMother_InvMass_Pt", "ESD_TruePrimaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
0a2b2b4b 653 hESDTruePrimaryMotherInvMassPt[iCut]->Sumw2();
a280ac15 654 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassPt[iCut]);
e5b6e8a6 655 hESDTrueSecondaryMotherInvMassPt[iCut]
656 = new TH2F("ESD_TrueSecondaryMother_InvMass_Pt", "ESD_TrueSecondaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
2bb2434e 657 fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
e5b6e8a6 658 hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]
659 = new TH2F("ESD_TrueSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueSecondaryMotherFromK0s_InvMass_Pt",800,0,0.8,250,0,25);
2bb2434e 660 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
e5b6e8a6 661 hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]
662 = new TH2F("ESD_TrueSecondaryMotherFromEta_InvMass_Pt","ESD_TrueSecondaryMotherFromEta_InvMass_Pt",800,0,0.8,250,0,25);
663 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]);
0a2b2b4b 664
665 if (fDoMesonQA){
666 hESDTruePrimaryPi0MCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryPi0_MCPt_ResolPt","ESD_TruePrimaryPi0_ResolPt_MCPt",500,0,25,1000,-1.,1.);
667 hESDTruePrimaryPi0MCPtResolPt[iCut]->Sumw2();
668 fTrueList[iCut]->Add(hESDTruePrimaryPi0MCPtResolPt[iCut]);
669 hESDTruePrimaryEtaMCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryEta_MCPt_ResolPt","ESD_TruePrimaryEta_ResolPt_MCPt",500,0,25,1000,-1.,1.);
670 hESDTruePrimaryEtaMCPtResolPt[iCut]->Sumw2();
671 fTrueList[iCut]->Add(hESDTruePrimaryEtaMCPtResolPt[iCut]);
672 hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueBckGG_InvMass_Pt","ESD_TrueBckGG_InvMass_Pt",800,0,0.8,250,0,25);
673 fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
674 hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueBckCont_InvMass_Pt","ESD_TrueBckCont_InvMass_Pt",800,0,0.8,250,0,25);
675 fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
676 hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueDalitz_InvMass_Pt","ESD_TrueDalitz_InvMass_Pt",800,0,0.8,250,0,25);
677 fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);
678 hESDTrueK0sWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueK0sWithPi0Daughter_MCPt","ESD_TrueK0sWithPi0Daughter_MCPt",250,0,25);
679 fTrueList[iCut]->Add(hESDTrueK0sWithPi0DaughterMCPt[iCut]);
680 hESDTrueEtaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueEtaWithPi0Daughter_MCPt","ESD_TrueEtaWithPi0Daughter_MCPt",250,0,25);
681 fTrueList[iCut]->Add(hESDTrueEtaWithPi0DaughterMCPt[iCut]);
682
683 fTrueMotherRapList[iCut] = new TList();
684 fTrueMotherRapList[iCut]->SetName(Form("%s_%s True Mother Y histograms",cutstring.Data(),cutstringMeson.Data()));
685 fTrueMotherRapList[iCut]->SetOwner(kTRUE);
686 fCutFolder[iCut]->Add(fTrueMotherRapList[iCut]);
687 sESDTruePrimaryMotherInvMassPtY[iCut] = new THnSparseF("TruePrimaryMother_InvMass_Pt_Y","TruePrimaryMother_InvMass_Pt_Y",nDim,nBins,xMin,xMax);
688 fTrueMotherRapList[iCut]->Add(sESDTruePrimaryMotherInvMassPtY[iCut]);
689
690 }
ca91a3e1 691 }
a280ac15 692 }
693 }
694
695
696
697 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
698 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
e5b6e8a6 699
a280ac15 700 if(fV0Reader)
701 if((AliConversionCuts*)fV0Reader->GetConversionCuts())
702 if(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
703 fOutputContainer->Add(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
e5b6e8a6 704
a280ac15 705 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
706 if(!((AliConversionCuts*)fCutArray->At(iCut))) continue;
707 if(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms()){
708 fCutFolder[iCut]->Add(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms());
709 }
710 if(!((AliConversionMesonCuts*)fMesonCutArray->At(iCut))) continue;
711 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms()){
712 fCutFolder[iCut]->Add(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms());
2bb2434e 713 }
714 }
715
716 PostData(1, fOutputContainer);
717}
718
719//_____________________________________________________________________________
720void AliAnalysisTaskGammaConvV1::UserExec(Option_t *)
721{
722 //
723 // Called for each event
724 //
2bb2434e 725 Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
e5b6e8a6 726 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
2bb2434e 727 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
728 hNEvents[iCut]->Fill(eventQuality);
729 }
730 return;
731 }
732
733 fMCEvent = MCEvent();
e5b6e8a6 734 if(fMCEvent){
735 fMCStack = fMCEvent->Stack();
736 }
737 fInputEvent = InputEvent();
738
2bb2434e 739 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
740 CountESDTracks(); // Estimate Event Multiplicity
741
e5b6e8a6 742 // ------------------- BeginEvent ----------------------------
743
2bb2434e 744 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
745 fiCut = iCut;
e5b6e8a6 746
747 Int_t eventNotAccepted =
748 ((AliConversionCuts*)fCutArray->At(iCut))
749 ->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
750 if(eventNotAccepted){
a280ac15 751 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
e5b6e8a6 752 hNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
2bb2434e 753 continue;
754 }
e5b6e8a6 755
756 if(eventQuality != 0){// Event Not Accepted
a280ac15 757 // cout << "event rejected due to: " <<eventQuality << endl;
e5b6e8a6 758 hNEvents[iCut]->Fill(eventQuality);
759 continue;
760 }
2bb2434e 761
a280ac15 762 hNEvents[iCut]->Fill(eventQuality); // Should be 0 here
2bb2434e 763 hNGoodESDTracks[iCut]->Fill(fNumberOfESDTracks);
e5b6e8a6 764 hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
765
2bb2434e 766 if(fMCEvent){ // Process MC Particle
ca91a3e1 767 if(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection() != 0){
768 ((AliConversionCuts*)fCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection(),
769 ((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader(),
770 fMCEvent);
771 }
2bb2434e 772 ProcessMCParticles();
773 }
a280ac15 774
2bb2434e 775 ProcessPhotonCandidates(); // Process this cuts gammas
776
a280ac15 777 hNGammaCandidates[iCut]->Fill(fGammaCandidates->GetEntries());
2bb2434e 778 if(fDoMesonAnalysis){ // Meson Analysis
ca91a3e1 779 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fMCEvent){
a280ac15 780 fUnsmearedPx = new Double_t[fGammaCandidates->GetEntries()]; // Store unsmeared Momenta
781 fUnsmearedPy = new Double_t[fGammaCandidates->GetEntries()];
782 fUnsmearedPz = new Double_t[fGammaCandidates->GetEntries()];
783 fUnsmearedE = new Double_t[fGammaCandidates->GetEntries()];
784
785 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
786 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Px();
787 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Py();
788 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Pz();
789 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->E();
790 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(gamma)));
2bb2434e 791 }
792 }
ca91a3e1 793
2bb2434e 794 CalculatePi0Candidates(); // Combine Gammas
e5b6e8a6 795 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
796 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
797 CalculateBackground(); // Combinatorial Background
798 UpdateEventByEventData(); // Store Event for mixed Events
799 }
800 else{
801 CalculateBackgroundRP(); // Combinatorial Background
a280ac15 802 fBGHandlerRP[iCut]->AddEvent(fGammaCandidates,fInputEvent); // Store Event for mixed Events
e5b6e8a6 803 }
804 }
ca91a3e1 805 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fMCEvent){
a280ac15 806 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
807 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
808 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPy(fUnsmearedPy[gamma]);
809 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPz(fUnsmearedPz[gamma]);
810 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetE(fUnsmearedE[gamma]);
2bb2434e 811 }
812 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
813 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
814 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
815 delete[] fUnsmearedE; fUnsmearedE = 0x0;
816 }
817 }
a280ac15 818 fGammaCandidates->Clear(); // delete this cuts good gammas
2bb2434e 819
ca91a3e1 820 }
e5b6e8a6 821
2bb2434e 822 PostData(1, fOutputContainer);
823}
824//________________________________________________________________________
825void AliAnalysisTaskGammaConvV1::ProcessPhotonCandidates()
826{
827 Int_t nV0 = 0;
a280ac15 828 TList *GammaCandidatesStepOne = new TList();
829 TList *GammaCandidatesStepTwo = new TList();
2bb2434e 830 // Loop over Photon Candidates allocated by ReaderV1
831 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
832 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
833 if(!PhotonCandidate) continue;
a280ac15 834 fIsFromMBHeader = kTRUE;
ca91a3e1 835 if(fMCEvent && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
a280ac15 836 Int_t isPosFromMBHeader
837 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack);
838 if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
839 Int_t isNegFromMBHeader
840 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack);
841 if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
842
843 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
ca91a3e1 844 }
845
e5b6e8a6 846 if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fInputEvent)) continue;
ca91a3e1 847 if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
e5b6e8a6 848 !((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
a280ac15 849 fGammaCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
e5b6e8a6 850
a280ac15 851 if(fIsFromMBHeader){
e5b6e8a6 852 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
0a2b2b4b 853 if (fDoPhotonQA)hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
e5b6e8a6 854 }
2bb2434e 855 if(fMCEvent){
856 ProcessTruePhotonCandidates(PhotonCandidate);
857 }
858 }
859 else if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
860 ((AliConversionCuts*)fCutArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
861 nV0++;
a280ac15 862 GammaCandidatesStepOne->Add(PhotonCandidate);
2bb2434e 863 }
ca91a3e1 864 else if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
2bb2434e 865 ((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
a280ac15 866 GammaCandidatesStepTwo->Add(PhotonCandidate);
2bb2434e 867 }
868 }
869 if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){
a280ac15 870 for(Int_t i = 0;i<GammaCandidatesStepOne->GetEntries();i++){
871 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GammaCandidatesStepOne->At(i);
2bb2434e 872 if(!PhotonCandidate) continue;
a280ac15 873 fIsFromMBHeader = kTRUE;
e5b6e8a6 874 if(fMCEvent && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
a280ac15 875 Int_t isPosFromMBHeader
876 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack);
877 Int_t isNegFromMBHeader
878 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack);
879 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
e5b6e8a6 880 }
a280ac15 881 if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GammaCandidatesStepOne->GetEntries())) continue;
ca91a3e1 882 if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
a280ac15 883 fGammaCandidates->Add(PhotonCandidate);
884 if(fIsFromMBHeader){
e5b6e8a6 885 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
0a2b2b4b 886 if (fDoPhotonQA)hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
e5b6e8a6 887 }
2bb2434e 888 if(fMCEvent){
889 ProcessTruePhotonCandidates(PhotonCandidate);
890 }
891 }
a280ac15 892 else GammaCandidatesStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
2bb2434e 893 }
894 }
895 if(((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
a280ac15 896 for(Int_t i = 0;i<GammaCandidatesStepTwo->GetEntries();i++){
897 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GammaCandidatesStepTwo->At(i);
2bb2434e 898 if(!PhotonCandidate) continue;
a280ac15 899 fIsFromMBHeader = kTRUE;
e5b6e8a6 900 if(fMCEvent && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
a280ac15 901 Int_t isPosFromMBHeader
902 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack);
903 Int_t isNegFromMBHeader
904 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack);
905 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
e5b6e8a6 906 }
a280ac15 907 if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GammaCandidatesStepTwo,i)) continue;
908 fGammaCandidates->Add(PhotonCandidate); // Add gamma to current cut TList
909 if(fIsFromMBHeader){
e5b6e8a6 910 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
0a2b2b4b 911 if (fDoPhotonQA)hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
e5b6e8a6 912 }
2bb2434e 913 if(fMCEvent){
914 ProcessTruePhotonCandidates(PhotonCandidate);
915 }
916 }
917 }
918
a280ac15 919 delete GammaCandidatesStepOne;
920 GammaCandidatesStepOne = 0x0;
921 delete GammaCandidatesStepTwo;
922 GammaCandidatesStepTwo = 0x0;
2bb2434e 923
924}
925//________________________________________________________________________
926void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
927{
928 // Process True Photons
929 AliStack *MCStack = fMCEvent->Stack();
930 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(MCStack);
931 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(MCStack);
932
933 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
e5b6e8a6 934
935 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
936
937 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){
938 // 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
a280ac15 939 if(pdgCode[0]==11 && pdgCode[1]==11){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),0);}
e5b6e8a6 940 else if( (pdgCode[0]==11 && pdgCode[1]==211) || (pdgCode[0]==211 && pdgCode[1]==11) )
a280ac15 941 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),1);}
e5b6e8a6 942 else if( (pdgCode[0]==11 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==11) )
a280ac15 943 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),2);}
e5b6e8a6 944 else if( (pdgCode[0]==11 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==11) )
a280ac15 945 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),3);}
e5b6e8a6 946 else if( (pdgCode[0]==11 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==11) )
a280ac15 947 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),4);}
948 else if( pdgCode[0]==211 && pdgCode[1]==211 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),5);}
e5b6e8a6 949 else if( (pdgCode[0]==211 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==211) )
a280ac15 950 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),6);}
e5b6e8a6 951 else if( (pdgCode[0]==211 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==211) )
a280ac15 952 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),7);}
e5b6e8a6 953 else if( (pdgCode[0]==211 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==211) )
a280ac15 954 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),8);}
955 else if( pdgCode[0]==321 && pdgCode[1]==321 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),9);}
e5b6e8a6 956 else if( (pdgCode[0]==321 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==321) )
a280ac15 957 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),10);}
e5b6e8a6 958 else if( (pdgCode[0]==321 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==321) )
a280ac15 959 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),11);}
960 else if( pdgCode[0]==2212 && pdgCode[1]==2212 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),12);}
e5b6e8a6 961 else if( (pdgCode[0]==2212 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==2212) )
a280ac15 962 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),13);}
963 else if( pdgCode[0]==13 && pdgCode[1]==13 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),14);}
964 else {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),15);}
ca91a3e1 965 return;
966 }
967 else if(posDaughter->GetMother(0) == -1){
a280ac15 968 if(pdgCode[0]==11 && pdgCode[1]==11){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),0);}
e5b6e8a6 969 else if( (pdgCode[0]==11 && pdgCode[1]==211) || (pdgCode[0]==211 && pdgCode[1]==11) )
a280ac15 970 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),1);}
e5b6e8a6 971 else if( (pdgCode[0]==11 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==11) )
a280ac15 972 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),2);}
e5b6e8a6 973 else if( (pdgCode[0]==11 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==11) )
a280ac15 974 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),3);}
e5b6e8a6 975 else if( (pdgCode[0]==11 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==11) )
a280ac15 976 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),4);}
977 else if( pdgCode[0]==211 && pdgCode[1]==211 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),5);}
e5b6e8a6 978 else if( (pdgCode[0]==211 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==211) )
a280ac15 979 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),6);}
e5b6e8a6 980 else if( (pdgCode[0]==211 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==211) )
a280ac15 981 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),7);}
e5b6e8a6 982 else if( (pdgCode[0]==211 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==211) )
a280ac15 983 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),8);}
984 else if( pdgCode[0]==321 && pdgCode[1]==321 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),9);}
e5b6e8a6 985 else if( (pdgCode[0]==321 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==321) )
a280ac15 986 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),10);}
e5b6e8a6 987 else if( (pdgCode[0]==321 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==321) )
a280ac15 988 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),11);}
989 else if( pdgCode[0]==2212 && pdgCode[1]==2212 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),12);}
e5b6e8a6 990 else if( (pdgCode[0]==2212 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==2212) )
a280ac15 991 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),13);}
992 else if( pdgCode[0]==13 && pdgCode[1]==13 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),14);}
993 else {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),15);}
2bb2434e 994 return;
995 }
e5b6e8a6 996
997 if(pdgCode[0]!=11 || pdgCode[1]!=11) return; //One Particle is not a electron
998
2bb2434e 999 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
e5b6e8a6 1000
2bb2434e 1001 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
1002
1003 TParticle *Photon = TruePhotonCandidate->GetMCParticle(MCStack);
1004 if(Photon->GetPdgCode() != 22) return; // Mother is no Photon
1005
ca91a3e1 1006 // True Photon
a280ac15 1007 if(fIsFromMBHeader)hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
ca91a3e1 1008
1009 if(posDaughter->GetMother(0) <= MCStack->GetNprimary()){
1010 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
a280ac15 1011 if(fIsFromMBHeader){
e5b6e8a6 1012 hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
0a2b2b4b 1013 if (fDoPhotonQA){
1014 hESDTruePrimaryConvGammaR[fiCut]->Fill(TruePhotonCandidate->GetConversionRadius());
1015 hESDTruePrimaryConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
1016 }
e5b6e8a6 1017 hESDTruePrimaryConvGammaRSESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1018 }
1019 hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1020 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
ca91a3e1 1021 }
1022 else{
a280ac15 1023 if(fIsFromMBHeader){
e5b6e8a6 1024 hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
0a2b2b4b 1025 if (fDoPhotonQA) hESDTrueSecondaryConvGammaR[fiCut]->Fill(TruePhotonCandidate->GetConversionRadius());
e5b6e8a6 1026 if(MCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1027 MCStack->Particle(MCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 310){
1028 hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1029 }
ca91a3e1 1030 }
1031 }
2bb2434e 1032}
1033//________________________________________________________________________
1034void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
1035{
2bb2434e 1036 // Loop over all primary MC particle
1037 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
1038 TParticle* particle = (TParticle *)fMCStack->Particle(i);
1039 if (!particle) continue;
1040
a280ac15 1041 Bool_t mcIsFromMB = kTRUE;
1042 Int_t isMCFromMBHeader = -1;
ca91a3e1 1043 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
a280ac15 1044 isMCFromMBHeader
1045 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack);
1046 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1047 if(isMCFromMBHeader != 2) mcIsFromMB = kFALSE;
ca91a3e1 1048 }
1049
1050 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
1051 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1052 if(particle->GetMother(0) >-1){ // Meson Decay Gamma
1053 switch(fMCStack->Particle(particle->GetMother(0))->GetPdgCode()){
1054 case 111: // Pi0
1055 hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1056 break;
1057 case 113: // Rho0
1058 hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1059 break;
1060 case 221: // Eta
1061 hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1062 break;
1063 case 223: // Omega
1064 hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1065 break;
1066 case 331: // Eta'
1067 hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1068 break;
1069 case 333: // Phi
1070 hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1071 break;
e5b6e8a6 1072 case 3212: // Sigma
a280ac15 1073 hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
e5b6e8a6 1074 break;
ca91a3e1 1075 }
1076 }
1077 }
1078 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
1079 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
0a2b2b4b 1080 if (fDoPhotonQA){
1081 hMCConvGammaR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
1082 hMCConvGammaEta[fiCut]->Fill(particle->Eta());
1083 }
a280ac15 1084 if(mcIsFromMB){
e5b6e8a6 1085 hMCConvGammaRSPt[fiCut]->Fill(particle->Pt());
0a2b2b4b 1086 if (fDoPhotonQA){
1087 hMCConvGammaRSR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
1088 hMCConvGammaRSEta[fiCut]->Fill(particle->Eta());
1089 }
e5b6e8a6 1090 }
ca91a3e1 1091 } // Converted MC Gamma
1092 if(fDoMesonAnalysis){
e5b6e8a6 1093 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedMC(particle,fMCStack)){
1094 TParticle* daughter0 = (TParticle*)fMCStack->Particle(particle->GetFirstDaughter());
1095 TParticle* daughter1 = (TParticle*)fMCStack->Particle(particle->GetLastDaughter());
1096
a280ac15 1097 Float_t weighted= 1;
1098 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack)){
1099 if (particle->Pt()>0.005){
1100 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack);
1101 }
1102 }
0a2b2b4b 1103 Double_t mesonY = 10.;
1104 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1105 mesonY=10.;
1106 } else{
1107 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())));
1108 }
1109
a280ac15 1110 if(particle->GetPdgCode() == 111){
1111 hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
0a2b2b4b 1112 if (fDoMesonQA) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
a280ac15 1113 } else if(particle->GetPdgCode() == 221){
1114 hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
0a2b2b4b 1115 if (fDoMesonQA) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
a280ac15 1116 }
e5b6e8a6 1117
ca91a3e1 1118 // Check the acceptance for both gammas
e5b6e8a6 1119 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter0,fMCStack,kFALSE) &&
1120 ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter1,fMCStack,kFALSE) ){
0a2b2b4b 1121
a280ac15 1122 if(particle->GetPdgCode() == 111){
1123 hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1124 } else if(particle->GetPdgCode() == 221){
1125 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1126 }
ca91a3e1 1127 }
1128 }
1129 }
2bb2434e 1130 }
1131}
1132//________________________________________________________________________
1133void AliAnalysisTaskGammaConvV1::CalculatePi0Candidates(){
1134
1135 // Conversion Gammas
a280ac15 1136 if(fGammaCandidates->GetEntries()>1){
1137 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries()-1;firstGammaIndex++){
1138 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
0a2b2b4b 1139 if (gamma0==NULL) continue;
a280ac15 1140 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
1141 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
2bb2434e 1142 //Check for same Electron ID
0a2b2b4b 1143 if (gamma1==NULL) continue;
2bb2434e 1144 if(gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelPositive() ||
1145 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelNegative() ||
1146 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelPositive() ||
1147 gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelNegative() ) continue;
1148
1149 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma0,gamma1);
1150 pi0cand->SetLabels(firstGammaIndex,secondGammaIndex);
1151
ca91a3e1 1152 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE))){
2bb2434e 1153 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
e5b6e8a6 1154
1155 if(pi0cand->GetAlpha()<0.1)
2bb2434e 1156 hESDMotherInvMassEalpha[fiCut]->Fill(pi0cand->M(),pi0cand->E());
0a2b2b4b 1157 if (fDoMesonQA){
1158 Double_t sparesFill2[3] = {pi0cand->M(),pi0cand->Pt(),pi0cand->Rapidity()};
1159 sESDMotherInvMassPtY[fiCut]->Fill(sparesFill2,1);
1160 }
e5b6e8a6 1161 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGCalculation()){
1162 Int_t zbin = 0;
1163 Int_t mbin = 0;
a280ac15 1164
e5b6e8a6 1165 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->BackgroundHandlerType() == 0){
0a2b2b4b 1166
e5b6e8a6 1167 zbin = fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1168 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1169 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1170 } else {
a280ac15 1171 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
e5b6e8a6 1172 }
1173 }
1174 else{
1175 zbin = fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1176 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1177 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1178 } else {
a280ac15 1179 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
e5b6e8a6 1180 }
1181 }
1182 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
1183 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
2bb2434e 1184 }
2bb2434e 1185 if(fMCEvent){
1186 ProcessTrueMesonCandidates(pi0cand,gamma0,gamma1);
1187 }
1188 }
1189 delete pi0cand;
1190 pi0cand=0x0;
1191 }
1192 }
1193 }
1194}
1195//______________________________________________________________________
1196void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
1197{
1198 // Process True Mesons
1199 AliStack *MCStack = fMCEvent->Stack();
1200
e5b6e8a6 1201 if(TrueGammaCandidate0->GetV0Index()<fInputEvent->GetNumberOfV0s()){
2bb2434e 1202 Bool_t isTruePi0 = kFALSE;
1203 Bool_t isTrueEta = kFALSE;
1204 Int_t gamma0MCLabel = TrueGammaCandidate0->GetMCParticleLabel(MCStack);
1205 Int_t gamma0MotherLabel = -1;
1206 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1207 // Daughters Gamma 0
1208 TParticle * negativeMC = (TParticle*)TrueGammaCandidate0->GetNegativeMCDaughter(MCStack);
1209 TParticle * positiveMC = (TParticle*)TrueGammaCandidate0->GetPositiveMCDaughter(MCStack);
1210 TParticle * gammaMC0 = (TParticle*)MCStack->Particle(gamma0MCLabel);
e5b6e8a6 1211 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2bb2434e 1212 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1213 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
1214 gamma0MotherLabel=gammaMC0->GetFirstMother();
1215 }
1216 }
1217 if(gammaMC0->GetPdgCode() ==111){ // Conversion but Pi0 Mother
1218 gamma0MotherLabel=-111;
1219 }
1220 if(gammaMC0->GetPdgCode() ==221){ // Conversion but Eta Mother
1221 gamma0MotherLabel=-221;
1222 }
1223 }
1224 }
e5b6e8a6 1225 if(TrueGammaCandidate1->GetV0Index()<fInputEvent->GetNumberOfV0s()){
2bb2434e 1226 Int_t gamma1MCLabel = TrueGammaCandidate1->GetMCParticleLabel(MCStack);
1227 Int_t gamma1MotherLabel = -1;
1228 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1229 // Daughters Gamma 1
1230 TParticle * negativeMC = (TParticle*)TrueGammaCandidate1->GetNegativeMCDaughter(MCStack);
1231 TParticle * positiveMC = (TParticle*)TrueGammaCandidate1->GetPositiveMCDaughter(MCStack);
1232 TParticle * gammaMC1 = (TParticle*)MCStack->Particle(gamma1MCLabel);
e5b6e8a6 1233 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2bb2434e 1234 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1235 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
1236 gamma1MotherLabel=gammaMC1->GetFirstMother();
1237 }
1238 }
1239 if(gammaMC1->GetPdgCode() ==111){ // Conversion but Pi0 Mother
1240 gamma1MotherLabel=-111;
1241 }
1242 if(gammaMC1->GetPdgCode() ==221){ // Conversion but Eta Mother
1243 gamma1MotherLabel=-221;
1244 }
1245 }
1246 }
1247 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1248 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
1249 isTruePi0=kTRUE;
1250 }
1251 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 221){
1252 isTrueEta=kTRUE;
1253 }
1254 }
e5b6e8a6 1255 if(isTruePi0 || isTrueEta){// True Pion or Eta
ca91a3e1 1256 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
e5b6e8a6 1257
1258 if(gamma0MotherLabel >= MCStack->GetNprimary()){ // Secondary Meson
ca91a3e1 1259 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1260 if (((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetMother(0) >-1){
1261 if(MCStack->Particle(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetMother(0))->GetPdgCode()==kK0Short){
1262 hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
0a2b2b4b 1263 if (fDoMesonQA)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
1264 ->Fill(MCStack->Particle(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetMother(0))->Pt());
e5b6e8a6 1265 }
1266 if(MCStack->Particle(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetMother(0))->GetPdgCode()==221){
1267 hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
0a2b2b4b 1268 if (fDoMesonQA)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
1269 ->Fill(MCStack->Particle(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetMother(0))->Pt());
ca91a3e1 1270 }
1271 }
0a2b2b4b 1272 }else{ // Only primary pi0 for efficiency calculation
a280ac15 1273 Float_t weighted= 1;
1274 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, fMCStack)){
1275 if (((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt()>0.005){
1276 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, fMCStack);
1277 }
1278 }
1279 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
0a2b2b4b 1280
1281 if (fDoMesonQA){
1282 Double_t sparesFill[3] = {Pi0Candidate->M(),Pi0Candidate->Pt(),Pi0Candidate->Rapidity()};
1283 sESDTruePrimaryMotherInvMassPtY[fiCut]->Fill(sparesFill,1);
1284 if(isTruePi0){ // Only primary pi0 for resolution
1285 hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
1286 }
1287 if (isTrueEta){ // Only primary eta for resolution
1288 hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
1289 }
ca91a3e1 1290 }
1291 }
2bb2434e 1292 }
0a2b2b4b 1293 else if(!isTruePi0 && !isTrueEta && fDoMesonQA){ // Background
2bb2434e 1294 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
1295 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1296 } else { // No photon or without mother
1297 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1298 }
ca91a3e1 1299 if((gamma0MotherLabel==-111 || gamma1MotherLabel==-111 || gamma0MotherLabel==-221 || gamma1MotherLabel==-221) ){
2bb2434e 1300 // Dalitz
2bb2434e 1301 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1302 }
1303 }
1304 }
1305 }
1306}
1307
1308//________________________________________________________________________
1309void AliAnalysisTaskGammaConvV1::CalculateBackground(){
1310
e5b6e8a6 1311 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2bb2434e 1312 Int_t mbin = 0;
1313
ca91a3e1 1314 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2bb2434e 1315 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1316 } else {
a280ac15 1317 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2bb2434e 1318 }
1319
ca91a3e1 1320 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
2bb2434e 1321
a280ac15 1322 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
1323 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
1324 for(Int_t iCurrent2=iCurrent+1;iCurrent2<fGammaCandidates->GetEntries();iCurrent2++){
e5b6e8a6 1325 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
a280ac15 1326 AliAODConversionPhoton currentEventGoodV02 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent2));
2bb2434e 1327
ca91a3e1 1328 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGProbability()){
2bb2434e 1329 AliAODConversionMother *backgroundCandidateProb = new AliAODConversionMother(&currentEventGoodV0,&currentEventGoodV02);
1330 Double_t massBGprob = backgroundCandidateProb->M();
1331 if(massBGprob>0.1 && massBGprob<0.14){
1332 if(fRandom.Rndm()>fBGHandler[fiCut]->GetBGProb(zbin,mbin)){
1333 delete backgroundCandidateProb;
1334 continue;
1335 }
1336 }
1337 delete backgroundCandidateProb;
1338 backgroundCandidateProb = 0x0;
1339 }
1340
1341 RotateParticle(&currentEventGoodV02);
1342 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&currentEventGoodV02);
ca91a3e1 1343 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE))){
2bb2434e 1344 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
e5b6e8a6 1345 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2bb2434e 1346 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1347 }
1348 delete backgroundCandidate;
1349 backgroundCandidate = 0x0;
1350 }
1351 }
1352 }
ca91a3e1 1353 }else{
2bb2434e 1354 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
1355
ca91a3e1 1356 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2bb2434e 1357 for(Int_t nEventsInBG=0;nEventsInBG<fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
1358 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
1359 if(fMoveParticleAccordingToVertex == kTRUE){
1360 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
1361 }
1362
a280ac15 1363 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
1364 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2bb2434e 1365 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
1366 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
1367 if(fMoveParticleAccordingToVertex == kTRUE){
1368 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
1369 }
1370
1371 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
ca91a3e1 1372 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE))){
2bb2434e 1373 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
e5b6e8a6 1374 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2bb2434e 1375 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1376 }
1377 delete backgroundCandidate;
1378 backgroundCandidate = 0x0;
1379 }
1380 }
1381 }
1382 }
1383 else{
1384 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
1385 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
1386 if(previousEventV0s){
1387 if(fMoveParticleAccordingToVertex == kTRUE){
1388 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
1389 }
a280ac15 1390 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
1391 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2bb2434e 1392 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
1393
1394 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
1395
1396 if(fMoveParticleAccordingToVertex == kTRUE){
1397 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
1398 }
1399
1400 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
1401
ca91a3e1 1402 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE))){
2bb2434e 1403 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
e5b6e8a6 1404 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2bb2434e 1405 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1406 }
1407 delete backgroundCandidate;
1408 backgroundCandidate = 0x0;
1409 }
1410 }
1411 }
1412 }
1413 }
1414 }
1415}
e5b6e8a6 1416//________________________________________________________________________
1417void AliAnalysisTaskGammaConvV1::CalculateBackgroundRP(){
1418
1419 Int_t zbin= fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1420 Int_t mbin = 0;
1421 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1422 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1423 } else {
a280ac15 1424 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
e5b6e8a6 1425 }
1426
1427
1428 //Rotation Method
1429 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
1430 // Correct for the number of rotations
1431 // BG is for rotation the same, except for factor NRotations
1432 Double_t weight=1./Double_t(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents());
1433
a280ac15 1434 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
e5b6e8a6 1435
a280ac15 1436 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
0a2b2b4b 1437 if (gamma0==NULL) continue;
a280ac15 1438 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
1439 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
0a2b2b4b 1440 if (gamma1 == NULL) continue;
e5b6e8a6 1441 if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(gamma1,fInputEvent))continue;
1442 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
1443
1444 RotateParticle(gamma1);
1445
1446 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
1447
1448 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(&backgroundCandidate,kFALSE)){
1449 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
1450 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
1451 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
e5b6e8a6 1452 }
1453 }
1454 }
1455 }
1456 }
1457 else{
1458 // Do Event Mixing
a280ac15 1459 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandlerRP[fiCut]->GetNBGEvents(fGammaCandidates,fInputEvent);nEventsInBG++){
e5b6e8a6 1460
a280ac15 1461 AliGammaConversionPhotonVector *previousEventGammas = fBGHandlerRP[fiCut]->GetBGGoodGammas(fGammaCandidates,fInputEvent,nEventsInBG);
e5b6e8a6 1462
1463 if(previousEventGammas){
1464 // test weighted background
1465 Double_t weight=1.0;
1466 // Correct for the number of eventmixing:
1467 // N gammas -> (N-1) + (N-2) +(N-3) ...+ (N-(N-1)) using sum formula sum(i)=N*(N-1)/2 -> N*(N-1)/2
1468 // real combinations (since you cannot combine a photon with its own)
1469 // but BG leads to N_{a}*N_{b} combinations
a280ac15 1470 weight*=0.5*(Double_t(fGammaCandidates->GetEntries()-1))/Double_t(previousEventGammas->size());
e5b6e8a6 1471
a280ac15 1472 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
e5b6e8a6 1473
a280ac15 1474 AliAODConversionPhoton *gamma0 = (AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
e5b6e8a6 1475
1476 for(UInt_t iPrevious=0;iPrevious<previousEventGammas->size();iPrevious++){
ca91a3e1 1477
e5b6e8a6 1478 AliAODConversionPhoton *gamma1 = (AliAODConversionPhoton*)(previousEventGammas->at(iPrevious));
1479
1480 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
1481
1482 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(&backgroundCandidate,kFALSE)){
1483 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
1484 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
1485 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
e5b6e8a6 1486 }
1487 }
1488 }
1489 }
1490 }
1491 }
1492}
2bb2434e 1493//________________________________________________________________________
1494void AliAnalysisTaskGammaConvV1::RotateParticle(AliAODConversionPhoton *gamma){
ca91a3e1 1495 Int_t fNDegreesPMBackground= ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->NDegreesRotation();
2bb2434e 1496 Double_t nRadiansPM = fNDegreesPMBackground*TMath::Pi()/180;
1497 Double_t rotationValue = fRandom.Rndm()*2*nRadiansPM + TMath::Pi()-nRadiansPM;
1498 gamma->RotateZ(rotationValue);
1499}
1500//________________________________________________________________________
1501void AliAnalysisTaskGammaConvV1::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
1502 //see header file for documentation
1503
e5b6e8a6 1504 Double_t dx = vertex->fX - fInputEvent->GetPrimaryVertex()->GetX();
1505 Double_t dy = vertex->fY - fInputEvent->GetPrimaryVertex()->GetY();
1506 Double_t dz = vertex->fZ - fInputEvent->GetPrimaryVertex()->GetZ();
2bb2434e 1507
1508 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
1509 particle->SetConversionPoint(movedPlace);
1510}
1511//________________________________________________________________________
1512void AliAnalysisTaskGammaConvV1::UpdateEventByEventData(){
1513 //see header file for documentation
a280ac15 1514 if(fGammaCandidates->GetEntries() >0 ){
ca91a3e1 1515 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
a280ac15 1516 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fNumberOfESDTracks);
2bb2434e 1517 }
1518 else{ // means we use #V0s for multiplicity
a280ac15 1519 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries());
2bb2434e 1520 }
1521 }
1522}
1523
1524//________________________________________________________________________
1525void AliAnalysisTaskGammaConvV1::CountESDTracks(){
1526
2bb2434e 1527 // Using standard function for setting Cuts
1528 Bool_t selectPrimaries=kTRUE;
0a2b2b4b 1529 AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
2bb2434e 1530 EsdTrackCuts->SetMaxDCAToVertexZ(2);
1531 EsdTrackCuts->SetEtaRange(-0.8, 0.8);
1532 EsdTrackCuts->SetPtRange(0.15);
1533
1534 fNumberOfESDTracks = 0;
e5b6e8a6 1535
1536 for(Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
1537 AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
2bb2434e 1538 if(!curTrack) continue;
e5b6e8a6 1539 // if(fMCEvent && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1540 // if(!((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(abs(curTrack->GetLabel()), fMCStack)) continue;
1541 // }
2bb2434e 1542 if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
1543 }
1544 delete EsdTrackCuts;
1545 EsdTrackCuts=0x0;
1546
1547 return;
1548}
1549//________________________________________________________________________
1550void AliAnalysisTaskGammaConvV1::Terminate(const Option_t *)
1551{
e5b6e8a6 1552
a280ac15 1553 // Not Executed by GRID on SubJobLevel
2bb2434e 1554 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
a280ac15 1555 if(!((AliConversionCuts*)fCutArray->At(iCut))) continue;
e5b6e8a6 1556 if(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection() == 2 && fMCEvent){
1557 fHeaderNameList[iCut] = new TList();
1558 TString HeaderNames = "Header:";
1559 for(Int_t i = 0;i<(((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader())->GetEntries();i++){
1560 HeaderNames = HeaderNames+"_"+ ((TObjString*)((TList*) ( (AliConversionCuts*)fCutArray->At(iCut))
1561 ->GetAcceptedHeader())->At(i))->GetString();
1562 }
1563 fHeaderNameList[iCut]->SetName(HeaderNames);
1564 fHeaderNameList[iCut]->SetOwner(kTRUE);
1565 fCutFolder[iCut]->Add(fHeaderNameList[iCut]);
1566 }
1567 else if(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection() == 0 &&
1568 (((AliConversionCuts*)fCutArray->At(iCut))->GetFoundHeader()) && fMCEvent){
1569 fHeaderNameList[iCut] = new TList();
1570 TString HeaderNames = (((AliConversionCuts*)fCutArray->At(iCut))->GetFoundHeader())[0];
1571 fHeaderNameList[iCut]->SetName(HeaderNames);
1572 fHeaderNameList[iCut]->SetOwner(kTRUE);
1573 fCutFolder[iCut]->Add(fHeaderNameList[iCut]);
1574 }
2bb2434e 1575 }
a280ac15 1576
1577 //fOutputContainer->Print(); // Will crash on GRID
2bb2434e 1578}