]>
Commit | Line | Data |
---|---|---|
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 | ||
36 | using namespace std; | |
37 | ||
38 | ClassImp(AliAnalysisTaskGCPartToPWG4Part) | |
39 | ||
40 | //________________________________________________________________________ | |
41 | AliAnalysisTaskGCPartToPWG4Part::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 | //________________________________________________________________________________ | |
53 | AliAnalysisTaskGCPartToPWG4Part::~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 | //________________________________________________________________________ | |
68 | AliAnalysisTaskGCPartToPWG4Part::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 | //________________________________________________________________________ | |
89 | void AliAnalysisTaskGCPartToPWG4Part::UserCreateOutputObjects() { | |
90 | fAODPWG4Particles = new TClonesArray("AliAODPWG4ParticleCorrelation", 0); | |
91 | fAODPWG4Particles->SetName("ConversionGamma"); | |
92 | AddAODBranch("TClonesArray", &fAODPWG4Particles); | |
93 | ||
94 | } | |
95 | ||
96 | //________________________________________________________________________ | |
97 | void 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 | //___________________________________________________________________________________________ |
124 | void 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 | 168 | Int_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 | ///__________________________________________________________________________________ |
306 | AliAODPWG4ParticleCorrelation * 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 | ///__________________________________________________________________________________ | |
316 | AliAODPWG4ParticleCorrelation * 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 | //_____________________________________________________________________ | |
328 | void AliAnalysisTaskGCPartToPWG4Part::Terminate(Option_t *) { | |
329 | // Draw result to the screen | |
330 | // Called once at the end of the query | |
331 | } | |
332 | ||
333 | //_____________________________________________________________________ | |
334 | AliAODEvent * 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 | //_____________________________________________________________________ | |
346 | TClonesArray * 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 | //_________________________________________________________________________ | |
371 | void AliAnalysisTaskGCPartToPWG4Part::CleanUp() { | |
372 | fAODPWG4Particles->Delete(); | |
373 | } | |
374 | ||
375 |