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