]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/GammaConv/AliAnalysisTaskGCPartToPWG4Part.cxx
Transition PWG4 --> PWGGA
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliAnalysisTaskGCPartToPWG4Part.cxx
CommitLineData
e0b4c21c 1#include <iostream>
2#include "TChain.h"
3#include "TTree.h"
4#include "TH1F.h"
5#include "TCanvas.h"
6#include "TString.h"
7
8#include "AliAnalysisTask.h"
9#include "AliAnalysisManager.h"
10#include "AliAnalysisTaskGCPartToPWG4Part.h"
11
12#include "AliESDEvent.h"
13#include "AliESDCaloCluster.h"
14#include "AliESDInputHandler.h"
15
16#include "AliAODPWG4ParticleCorrelation.h"
17#include "AliAODEvent.h"
18#include "AliAODHandler.h"
19#include "AliAODCaloCluster.h"
2eedd4ed 20#include "AliAODConversionPhoton.h"
e0b4c21c 21#include "AliAODJet.h"
22
23#include "AliAODInputHandler.h"
24
e6637b75 25#include "AliAODMCParticle.h"
26
f50e7d42 27
28#include "AliAODMCHeader.h"
e0b4c21c 29// Gamma - jet correlation analysis task
30// Authors: Svein Lindal
31
32
33using namespace std;
34
35ClassImp(AliAnalysisTaskGCPartToPWG4Part)
36
37//________________________________________________________________________
38AliAnalysisTaskGCPartToPWG4Part::AliAnalysisTaskGCPartToPWG4Part()
39: AliAnalysisTaskSE(),
e6637b75 40 fDeltaAODFileName(""),
29f6e0b7 41 fGammaCutString("GammaConv"),
42 fPionCutString("GammaConv"),
e6637b75 43 fAODBranchName("GammaConv_gamma"),
29f6e0b7 44 fAODPWG4Photons(NULL),
45 fAODPWG4Pi0(NULL),
0e12315a 46 fDebugLevel(0)
e0b4c21c 47{
48 // Dummy Constructor
49}
50
51//________________________________________________________________________________
52AliAnalysisTaskGCPartToPWG4Part::~AliAnalysisTaskGCPartToPWG4Part() {
53
76b5ef6f 54 // dtor
55
29f6e0b7 56 if(fAODPWG4Photons)
57 delete fAODPWG4Photons;
58 fAODPWG4Photons = NULL;
e0b4c21c 59
29f6e0b7 60 if(fAODPWG4Pi0)
61 delete fAODPWG4Pi0;
62 fAODPWG4Pi0 = NULL;
63
e6637b75 64
e0b4c21c 65}
66
67
68
69//________________________________________________________________________
70AliAnalysisTaskGCPartToPWG4Part::AliAnalysisTaskGCPartToPWG4Part(const char *name) :
71 AliAnalysisTaskSE(name),
e6637b75 72 fDeltaAODFileName(""),
29f6e0b7 73 fGammaCutString("GammaConv"),
74 fPionCutString("GammaConv"),
e6637b75 75 fAODBranchName("GammaConv_gamma"),
29f6e0b7 76 fAODPWG4Photons(NULL),
77 fAODPWG4Pi0(NULL),
67469fbc 78 fDebugLevel(0)
e0b4c21c 79{
80 // Constructor
76b5ef6f 81
e0b4c21c 82 DefineInput(0, TChain::Class());
83 // Output slot #0 id reserved by the base class for AOD
84
85 // Output slot #1 writes into a TH1 container
86 DefineOutput(1, TList::Class());
e6637b75 87
e0b4c21c 88}
89
90
91
92//________________________________________________________________________
93void AliAnalysisTaskGCPartToPWG4Part::UserCreateOutputObjects() {
76b5ef6f 94
95 // Create branches
96
29f6e0b7 97 fAODPWG4Photons = new TClonesArray("AliAODPWG4ParticleCorrelation", 0);
98 fAODPWG4Photons->SetName("PhotonsCTS");
99 AddAODBranch("TClonesArray", &fAODPWG4Photons);
100
101 fAODPWG4Pi0 = new TClonesArray("AliAODPWG4ParticleCorrelation", 0);
102 fAODPWG4Pi0->SetName("Pi0sCTS");
103 AddAODBranch("TClonesArray", &fAODPWG4Pi0);
e0b4c21c 104
105}
106
107//________________________________________________________________________
108void AliAnalysisTaskGCPartToPWG4Part::UserExec(Option_t *)
109{
76b5ef6f 110 // Main
e0b4c21c 111
29f6e0b7 112 //AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);
e0b4c21c 113
114 //Clear stuff for new event
115 CleanUp();
116
117 ///Get AOD event
118 AliAODEvent * aodEvent = GetAODEvent();
119 if(!aodEvent) {
120 AliError("No AOD event!!");
121 return;
122 }
123
e0b4c21c 124 ProcessConvGamma(aodEvent);
e0b4c21c 125
126}
127
76b5ef6f 128//____________________________________________________________________________________
129void AliAnalysisTaskGCPartToPWG4Part::ProcessConvGamma( const AliAODEvent * aodEvent )
130{
e0b4c21c 131
76b5ef6f 132 // Main method to put conversion photons/pi0 to AliAODPWG4Particle
e0b4c21c 133
e0b4c21c 134 TClonesArray * convGamma = GetConversionGammas(aodEvent);
135 if(!convGamma) {
76b5ef6f 136 AliError(Form("No gamma branch by name %s found in file %s", fAODBranchName.Data(), fDeltaAODFileName.Data()));
e0b4c21c 137 return;
138 }
f50e7d42 139
8aa49b4c 140 //TClonesArray * arrayMC = dynamic_cast<TClonesArray*>(aodEvent->GetList()->FindObject(AliAODMCParticle::StdBranchName()));
d7a5bf22 141 for (Int_t iPhot = 0; iPhot < convGamma->GetEntriesFast(); iPhot++) {
67469fbc 142
143 AliAODPWG4ParticleCorrelation * photon = NULL;
2eedd4ed 144 AliAODConversionPhoton * convParticle = dynamic_cast<AliAODConversionPhoton*>(convGamma->At(iPhot));
76b5ef6f 145 if (convParticle && BothTracksPresent(convParticle)) {
29f6e0b7 146 photon = AddToAOD(convParticle, fAODPWG4Photons, "ConvGamma");
67469fbc 147
29f6e0b7 148 } else {
149 continue;
f50e7d42 150 }
67469fbc 151
152 if(photon && fDebugLevel > 2) {
153 printf("Added conversion photon number %d, pt: %f \n", iPhot, photon->Pt());
154 }
155
e6637b75 156 }
f50e7d42 157
76b5ef6f 158/*
29f6e0b7 159 TClonesArray * pions = GetPions(aodEvent);
160 if(!pions) {
76b5ef6f 161 AliError(Form("No pi0 branch by name %s found in file %s", fAODBranchName.Data(), fDeltaAODFileName.Data()));
29f6e0b7 162 return;
163 }
e6637b75 164
29f6e0b7 165 for (Int_t iPhot = 0; iPhot < pions->GetEntriesFast(); iPhot++) {
166 AliAODPWG4ParticleCorrelation * pion = NULL;
2eedd4ed 167 AliAODConversionPhoton * convParticle = dynamic_cast<AliAODConversionPhoton*>(pions->At(iPhot));
76b5ef6f 168 if (convParticle && BothGammaPresent(convParticle, convGamma)) {
c2ce474e 169 pion = AddPionToAOD(convParticle, fAODPWG4Pi0, "ConvGamma");
29f6e0b7 170
171 } else {
172 continue;
173 }
e6637b75 174
29f6e0b7 175 if(pion && fDebugLevel > 2) {
176 printf("Added conversion pion number %d, pt: %f \n", iPhot, pion->Pt());
177 }
178 }
76b5ef6f 179*/
29f6e0b7 180}
f50e7d42 181
76b5ef6f 182//__________________________________________________________________________________
2eedd4ed 183AliAODPWG4ParticleCorrelation * AliAnalysisTaskGCPartToPWG4Part::AddToAOD(AliAODConversionPhoton * aodO, TClonesArray * branch, TString detector) {
76b5ef6f 184 // Add photon to AOD
185
e0b4c21c 186 new((*branch)[branch->GetEntriesFast()]) AliAODPWG4ParticleCorrelation(aodO->Px(), aodO->Py(), aodO->Pz(), aodO->E());
187 AliAODPWG4ParticleCorrelation * photon = dynamic_cast<AliAODPWG4ParticleCorrelation*>(branch->Last());
b1b4fa20 188 if(photon) {
189 photon->SetTrackLabel(aodO->GetLabel1(), aodO->GetLabel2());
190 photon->SetDetector(detector);
191 return photon;
192 } else {
193 return NULL;
194 }
195
e0b4c21c 196}
197
198
29f6e0b7 199///__________________________________________________________________________________
c2ce474e 200AliAODPWG4ParticleCorrelation * AliAnalysisTaskGCPartToPWG4Part::AddPionToAOD(AliAODConversionPhoton * pion, TClonesArray * branch, TString detector) {
76b5ef6f 201 // Add pions to AOD
202
29f6e0b7 203 new((*branch)[branch->GetEntriesFast()]) AliAODPWG4ParticleCorrelation(pion->Px(), pion->Py(), pion->Pz(), pion->E());
204 AliAODPWG4ParticleCorrelation * pwg4Pion = dynamic_cast<AliAODPWG4ParticleCorrelation*>(branch->Last());
205 if(pwg4Pion) {
206 Int_t tl[4] = {-1, -1, -1, -1};
2eedd4ed 207 //pion->GetGrandChildren(photons, tl);
29f6e0b7 208 pwg4Pion->SetTrackLabel(tl[0], tl[1], tl[2], tl[3]);
209 pwg4Pion->SetDetector(detector);
210 for(Int_t i = 0; i < 4; i++) {
211 cout << tl[i] << " ";
212 }
213 cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
214 return pwg4Pion;
215 } else {
216 return NULL;
217 }
218
219}
76b5ef6f 220
e0b4c21c 221
222//_____________________________________________________________________
223void AliAnalysisTaskGCPartToPWG4Part::Terminate(Option_t *) {
224 // Draw result to the screen
225 // Called once at the end of the query
226}
227
76b5ef6f 228
e0b4c21c 229//_____________________________________________________________________
230AliAODEvent * AliAnalysisTaskGCPartToPWG4Part::GetAODEvent() {
231 //Get the AOD event from whereever it might be
232 AliAODEvent * aodEvent = dynamic_cast<AliAODEvent*>(InputEvent());
233 if(!aodEvent) {
234 aodEvent = AODEvent();
235 }
236
237 return aodEvent;
238
239}
240
29f6e0b7 241
e0b4c21c 242//_____________________________________________________________________
29f6e0b7 243TClonesArray * AliAnalysisTaskGCPartToPWG4Part::GetAODBranch(const AliAODEvent * aodEvent, TString branchName) const {
e0b4c21c 244
245 //Get Conversion gamma branch of AOD. First try standard AOD
29f6e0b7 246 TClonesArray * branch = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(branchName.Data()));
e0b4c21c 247
248
249 //If it's there, send it back
29f6e0b7 250 if(branch) return branch;
251
e0b4c21c 252
253 //If AOD not in standard file have to locate it in delta AOD
254 if( !(fDeltaAODFileName.Length() > 0) ) return NULL;
255
256 AliAODHandler * aodHandler = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
257 if(aodHandler) {
258 AliAODExtension * gExt = dynamic_cast<AliAODExtension*>(aodHandler->GetExtensions()->FindObject(fDeltaAODFileName));
259 if(gExt) {
260 AliAODEvent * gcEvent = gExt->GetAOD();
29f6e0b7 261 return dynamic_cast<TClonesArray*>(gcEvent->FindListObject(branchName.Data()));
e0b4c21c 262 }
263 }
264 return NULL;
29f6e0b7 265
e0b4c21c 266}
76b5ef6f 267
268
29f6e0b7 269//_____________________________________________________________________
270TClonesArray * AliAnalysisTaskGCPartToPWG4Part::GetConversionGammas(const AliAODEvent * aodEvent) const {
76b5ef6f 271 // Returns photon branch
29f6e0b7 272 return GetAODBranch(aodEvent, Form("%s_gamma", fGammaCutString.Data()));
273
274}
76b5ef6f 275
29f6e0b7 276
277//_____________________________________________________________________
278TClonesArray * AliAnalysisTaskGCPartToPWG4Part::GetPions(const AliAODEvent * aodEvent) const {
76b5ef6f 279 // returns pions branch
29f6e0b7 280 return GetAODBranch(aodEvent, Form("%s_Pi0", fPionCutString.Data()));
281
282}
283
e0b4c21c 284
285//_________________________________________________________________________
286void AliAnalysisTaskGCPartToPWG4Part::CleanUp() {
29f6e0b7 287 fAODPWG4Photons->Delete();
288 fAODPWG4Pi0->Delete();
e0b4c21c 289}
290
291
29f6e0b7 292//______________________________________________________________________________________________
76b5ef6f 293Bool_t AliAnalysisTaskGCPartToPWG4Part::BothTracksPresent(const AliAODConversionPhoton * photon)
294{
295 // Check presence of electron pair
296 AliVTrack * track1 = NULL;
297 AliVTrack * track2 = NULL;
298 Int_t ntracks = InputEvent()->GetNumberOfTracks();
299 for(Int_t i = 0; i < ntracks; i++) {
300 AliVTrack * track = (AliVTrack*)InputEvent()->GetTrack(i);
9cb96e64 301 if(track) {
76b5ef6f 302 if (track->GetID() == photon->GetLabel1()) track1 = track;
9cb96e64 303 else if (track->GetID() == photon->GetLabel2()) track2 = track;
304 if(track1 && track2) break;
305 }
29f6e0b7 306 }
307
308 if(track1 && track2) {
309 return kTRUE;
310 }
76b5ef6f 311 cout << "AliAnalysisTaskGCPartToPWG4Part::BothTracksPresen() - Could not get both tracks!!! labels " << photon->GetLabel1() << " " << photon->GetLabel2() <<endl;
29f6e0b7 312 return kFALSE;
313
29f6e0b7 314}
315
76b5ef6f 316
317//___________________________________________________________________________________________
318Bool_t AliAnalysisTaskGCPartToPWG4Part::BothGammaPresent(const AliAODConversionPhoton * pion,
319 const TClonesArray * photons)
320{
321 // Check presence of gamma
2eedd4ed 322 AliAODConversionPhoton * photon1 = dynamic_cast<AliAODConversionPhoton*>(photons->At(pion->GetLabel1()));
323 AliAODConversionPhoton * photon2 = dynamic_cast<AliAODConversionPhoton*>(photons->At(pion->GetLabel2()));
29f6e0b7 324
325 if(photon1 && photon2) {
76b5ef6f 326 if( BothTracksPresent(photon1) && BothTracksPresent(photon2)) {
29f6e0b7 327 return kTRUE;
328 }
329 } else {
330 cout << "can't find both photons "<< endl;
331 }
332
333 return kFALSE;
334}
76b5ef6f 335