]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/GammaConv/AliAnalysisTaskGCPartToPWG4Part.cxx
Add debuglevel
[u/mrichter/AliRoot.git] / PWG4 / 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"
20#include "AliGammaConversionAODObject.h"
21#include "AliAODConversionParticle.h"
22#include "AliAODJet.h"
23
24#include "AliAODInputHandler.h"
25
e6637b75 26#include "AliAODMCParticle.h"
27
28#include "AliMCAnalysisUtils.h"
29
f50e7d42 30
31#include "AliAODMCHeader.h"
e0b4c21c 32// Gamma - jet correlation analysis task
33// Authors: Svein Lindal
34
35
36using namespace std;
37
38ClassImp(AliAnalysisTaskGCPartToPWG4Part)
39
40//________________________________________________________________________
41AliAnalysisTaskGCPartToPWG4Part::AliAnalysisTaskGCPartToPWG4Part()
42: AliAnalysisTaskSE(),
e6637b75 43 fDeltaAODFileName(""),
44 fAODBranchName("GammaConv_gamma"),
45 fAODPWG4Particles(NULL),
67469fbc 46 fAnaUtils(NULL),
47 fDebugLevel(0)
e0b4c21c 48{
49 // Dummy Constructor
50}
51
52//________________________________________________________________________________
53AliAnalysisTaskGCPartToPWG4Part::~AliAnalysisTaskGCPartToPWG4Part() {
54
55 if(fAODPWG4Particles)
56 fAODPWG4Particles = NULL;
57 delete fAODPWG4Particles;
58
e6637b75 59 if(fAnaUtils)
60 delete fAnaUtils;
61 fAnaUtils = NULL;
62
e0b4c21c 63}
64
65
66
67//________________________________________________________________________
68AliAnalysisTaskGCPartToPWG4Part::AliAnalysisTaskGCPartToPWG4Part(const char *name) :
69 AliAnalysisTaskSE(name),
e6637b75 70 fDeltaAODFileName(""),
71 fAODBranchName("GammaConv_gamma"),
72 fAODPWG4Particles(NULL),
67469fbc 73 fAnaUtils(NULL),
74 fDebugLevel(0)
e0b4c21c 75{
76 // Constructor
77 DefineInput(0, TChain::Class());
78 // Output slot #0 id reserved by the base class for AOD
79
80 // Output slot #1 writes into a TH1 container
81 DefineOutput(1, TList::Class());
e6637b75 82
83 fAnaUtils = new AliMCAnalysisUtils();
e0b4c21c 84}
85
86
87
88//________________________________________________________________________
89void AliAnalysisTaskGCPartToPWG4Part::UserCreateOutputObjects() {
90 fAODPWG4Particles = new TClonesArray("AliAODPWG4ParticleCorrelation", 0);
91 fAODPWG4Particles->SetName("ConversionGamma");
92 AddAODBranch("TClonesArray", &fAODPWG4Particles);
93
94}
95
96//________________________________________________________________________
97void AliAnalysisTaskGCPartToPWG4Part::UserExec(Option_t *)
98{
99
67469fbc 100 AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);
e0b4c21c 101
102 //Clear stuff for new event
103 CleanUp();
104
105 ///Get AOD event
106 AliAODEvent * aodEvent = GetAODEvent();
107 if(!aodEvent) {
108 AliError("No AOD event!!");
109 return;
110 }
111
112
113 ProcessConvGamma(aodEvent);
f50e7d42 114
e0b4c21c 115
116 //PostData(1, fOutputList);
117
118}
119
120
121
f50e7d42 122
e0b4c21c 123//___________________________________________________________________________________________
124void AliAnalysisTaskGCPartToPWG4Part::ProcessConvGamma( const AliAODEvent * const aodEvent ) {
125
126 TClonesArray * tracks = aodEvent->GetTracks();
127 if(!tracks) {
128 cout << "No tracks!!!"<<endl;
129 return;
130 }
131
132
133 TClonesArray * convGamma = GetConversionGammas(aodEvent);
134 if(!convGamma) {
135 AliError(Form("No branch by name %s found in file %s", fAODBranchName.Data(), fDeltaAODFileName.Data()));
136 return;
137 }
f50e7d42 138
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;
8aa49b4c 144 AliGammaConversionAODObject * aodO = dynamic_cast<AliGammaConversionAODObject*>(convGamma->At(iPhot));
67469fbc 145 if(aodO) {
146 photon = AddToAOD(aodO, fAODPWG4Particles, "ConvGamma");
147 } else {
d7a5bf22 148 AliAODConversionParticle * convParticle = dynamic_cast<AliAODConversionParticle*>(convGamma->At(iPhot));
149 if (convParticle) {
67469fbc 150 photon = AddToAOD(convParticle, fAODPWG4Particles, "ConvGamma");
151
d7a5bf22 152 } else {
153 AliError(Form("ERROR: Could not receive ga %d\n", iPhot));
154 continue;
155 }
f50e7d42 156 }
67469fbc 157
158 if(photon && fDebugLevel > 2) {
159 printf("Added conversion photon number %d, pt: %f \n", iPhot, photon->Pt());
160 }
161
e6637b75 162 }
f50e7d42 163
e6637b75 164}
165
f50e7d42 166
e6637b75 167//////_________________________________________________________________________________________
f50e7d42 168Int_t AliAnalysisTaskGCPartToPWG4Part::CheckTag(AliAODPWG4ParticleCorrelation * particle, TClonesArray * tracks, TClonesArray * arrayMC, AliAODMCHeader * mcHeader) {
169
170
8aa49b4c 171 // for (int imc = 0; imc < arrayMC->GetEntriesFast(); imc++) {
172 // //for (int imc = 0; imc < 20; imc++) {
f50e7d42 173
174
175
8aa49b4c 176 // AliAODMCParticle * mParticle = dynamic_cast<AliAODMCParticle*>(arrayMC->At(imc));
177 // // cout << mParticle->GetPdgCode() << " " <<mParticle->GetStatus() << endl;
f50e7d42 178
179
8aa49b4c 180 // //if( mParticle->GetPdgCode() == 34) cout<< "BALLE"<<endl;// && mParticle->GetMother() < 10) {
f50e7d42 181
8aa49b4c 182 // if( mParticle->GetPdgCode() == 22 ) { //&& mParticle->GetMother() < 10) {
183 // //AliAODMCParticle * mother = dynamic_cast<AliAODMCParticle*>(arrayMC->At(mParticle->GetMother()));
184 // //if (TMath::Abs(mother->GetPdgCode()) < 22 && TMath::Abs(mother->GetPdgCode()) != 11) cout <<"KKKKKKKKK"<< mother->GetPdgCode() <<endl;
f50e7d42 185
8aa49b4c 186 // for (int id = 0; id < mParticle->GetNDaughters(); id++) {
187 // int idaughter = mParticle->GetDaughter(id);
188 // if(idaughter>0 && idaughter < arrayMC->GetEntriesFast()) {
189 // AliAODMCParticle * dmParticle = dynamic_cast<AliAODMCParticle*>(arrayMC->At(mParticle->GetDaughter(id)));
190 // cout << dmParticle->GetPdgCode() << endl;
191 // }
192 // }
193 // }
194 // }
f50e7d42 195
196
197
198
199
200
201
202
203
204
205
e6637b75 206
207 Int_t tag = 0;
208
209 Int_t l1 = particle->GetTrackLabel(0);
210 Int_t l2 = particle->GetTrackLabel(1);
211
212 AliAODTrack * track1 = NULL;
213 AliAODTrack * track2 = NULL;
214
215
216 for(int i = 0; i < tracks->GetEntriesFast(); i++) {
217
218 AliAODTrack * track = (AliAODTrack*)tracks->At(i);
219 if (track->GetID() == l1) {
220 track1 = track;
221 } else if (track->GetID() == l2) {
222 track2 = track;
223 }
224
225 if(track1 && track2) break;
226 }
227
228
b2d693ff 229 if(!track1 || !track2) return tag;
e6637b75 230 if(track1->GetLabel() < 0 || track2->GetLabel() < 0) {
231 //cout << "error balla"<< endl;
232
233 } else {
234
235 AliAODMCParticle * mcPart1 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(track1->GetLabel()));
236 AliAODMCParticle * mcPart2 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(track2->GetLabel()));
237
238 if (mcPart1 && mcPart2) {
f50e7d42 239
e6637b75 240 if(mcPart1->GetMother() == mcPart2->GetMother()) {
e6637b75 241
f50e7d42 242 AliAODMCParticle * photon = dynamic_cast<AliAODMCParticle*>(arrayMC->At(mcPart1->GetMother()));
243 Int_t motherIndex = photon->GetMother();
244 tag= fAnaUtils->CheckOriginInAOD(&motherIndex, 1, arrayMC);
245
e6637b75 246 AliAODMCParticle * mother = dynamic_cast<AliAODMCParticle*>(arrayMC->At(motherIndex));
e6637b75 247
f50e7d42 248
249 if (photon->GetPdgCode() == 22 ) {
250
251 if (TMath::Abs(mother->GetPdgCode()) < 22 && TMath::Abs(mother->GetPdgCode()) != 11) {
252
253 fAnaUtils->SetTagBit(tag, AliMCAnalysisUtils::kMCPhoton);
254 fAnaUtils->SetTagBit(tag, AliMCAnalysisUtils::kMCPrompt);
255
256 cout <<"KKKKKKKKK "<< mother->GetPdgCode() << " " << mother->GetStatus() << " mi " << motherIndex << " daught: " << mother->GetNDaughters() << endl;
257 cout << photon->GetStatus() << " " << photon->Pt() << " headerpt:" << mcHeader->GetPtHard() << " " <<mcPart1->GetMother() << endl;
258
259 }
260 } else {
261 cout << "FAKE "<< photon->PdgCode() << " " << photon->Pt() << " " << photon->GetStatus() << endl;
262 }
263
264
e6637b75 265
f50e7d42 266
267
268
8aa49b4c 269 //Int_t parentId = mother->GetMother();
270 //AliAODMCParticle * gp = dynamic_cast<AliAODMCParticle*>(arrayMC->At(parentId));
f50e7d42 271
272
e6637b75 273
e6637b75 274
275 if(! mother->IsPrimary()) {
f50e7d42 276 //cout << mother->GetPdgCode() << " " << mother->GetStatus() <<endl;
277 // cout << "other one? " << mother->PdgCode() << " " << gp->PdgCode() << " " << gp->GetStatus() << endl;
278 // cout << "yeay3 " << mother->GetPdgCode() << endl;
279
280 } else { //if (mother->IsPhysicalPrimary() ){
281
282
283 if(mother->GetStatus() < 10) {
284 //cout << "yeay4 " << mother->GetPdgCode() << endl;
285 // cout << "pion? " << gp->PdgCode() << " " << gp->GetStatus() << endl;
286 //cout << "???" << mother->PdgCode() << " " << mother->GetStatus() << " " << gp->PdgCode() << " " << gp->GetStatus() << endl;
287 } else {
288 //cout << "yeay5 " << mother->GetPdgCode() << endl;
289 //cout << "other? " << mother->PdgCode() << " " << mother->GetStatus() << " " << gp->PdgCode() << " " << gp->GetStatus() << endl;
290 }
291
292
293 // } else {
294 // cout << "MI: " << mother->GetPdgCode() << " " << mother->GetStatus() <<endl;
e6637b75 295 }
f50e7d42 296
e6637b75 297 }
e0b4c21c 298 }
299 }
e6637b75 300 //cout << "REturn tag " << tag << endl;
301 return tag;
e0b4c21c 302}
303
e6637b75 304
e0b4c21c 305///__________________________________________________________________________________
306AliAODPWG4ParticleCorrelation * AliAnalysisTaskGCPartToPWG4Part::AddToAOD(AliGammaConversionAODObject * aodO, TClonesArray * branch, TString detector) {
307 new((*branch)[branch->GetEntriesFast()]) AliAODPWG4ParticleCorrelation(aodO->Px(), aodO->Py(), aodO->Pz(), aodO->E());
308 AliAODPWG4ParticleCorrelation * photon = dynamic_cast<AliAODPWG4ParticleCorrelation*>(branch->Last());
309 photon->SetTagged(aodO->IsTagged());
310 photon->SetTrackLabel(aodO->GetLabel1(), aodO->GetLabel2());
311 photon->SetDetector(detector);
312 return photon;
313}
314
315///__________________________________________________________________________________
316AliAODPWG4ParticleCorrelation * AliAnalysisTaskGCPartToPWG4Part::AddToAOD(AliAODConversionParticle * aodO, TClonesArray * branch, TString detector) {
317 new((*branch)[branch->GetEntriesFast()]) AliAODPWG4ParticleCorrelation(aodO->Px(), aodO->Py(), aodO->Pz(), aodO->E());
318 AliAODPWG4ParticleCorrelation * photon = dynamic_cast<AliAODPWG4ParticleCorrelation*>(branch->Last());
319 photon->SetTrackLabel(aodO->GetLabel1(), aodO->GetLabel2());
320 photon->SetDetector(detector);
321 return photon;
322}
323
324
325
326
327//_____________________________________________________________________
328void AliAnalysisTaskGCPartToPWG4Part::Terminate(Option_t *) {
329 // Draw result to the screen
330 // Called once at the end of the query
331}
332
333//_____________________________________________________________________
334AliAODEvent * AliAnalysisTaskGCPartToPWG4Part::GetAODEvent() {
335 //Get the AOD event from whereever it might be
336 AliAODEvent * aodEvent = dynamic_cast<AliAODEvent*>(InputEvent());
337 if(!aodEvent) {
338 aodEvent = AODEvent();
339 }
340
341 return aodEvent;
342
343}
344
345//_____________________________________________________________________
346TClonesArray * AliAnalysisTaskGCPartToPWG4Part::GetConversionGammas(const AliAODEvent * aodEvent) {
347
348 //Get Conversion gamma branch of AOD. First try standard AOD
349 TClonesArray * convGamma = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(fAODBranchName.Data()));
350
351
352 //If it's there, send it back
353 if(convGamma) return convGamma;
354
355
356 //If AOD not in standard file have to locate it in delta AOD
357 if( !(fDeltaAODFileName.Length() > 0) ) return NULL;
358
359 AliAODHandler * aodHandler = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
360 if(aodHandler) {
361 AliAODExtension * gExt = dynamic_cast<AliAODExtension*>(aodHandler->GetExtensions()->FindObject(fDeltaAODFileName));
362 if(gExt) {
363 AliAODEvent * gcEvent = gExt->GetAOD();
364 return dynamic_cast<TClonesArray*>(gcEvent->FindListObject("GammaConv_gamma"));
365 }
366 }
367 return NULL;
368}
369
370//_________________________________________________________________________
371void AliAnalysisTaskGCPartToPWG4Part::CleanUp() {
372 fAODPWG4Particles->Delete();
373}
374
375