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