]>
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" | |
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 | ||
33 | using namespace std; | |
34 | ||
35 | ClassImp(AliAnalysisTaskGCPartToPWG4Part) | |
36 | ||
37 | //________________________________________________________________________ | |
38 | AliAnalysisTaskGCPartToPWG4Part::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 | //________________________________________________________________________________ | |
52 | AliAnalysisTaskGCPartToPWG4Part::~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 | //________________________________________________________________________ | |
68 | AliAnalysisTaskGCPartToPWG4Part::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 | //________________________________________________________________________ | |
90 | void 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 | //________________________________________________________________________ | |
102 | void 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 | //___________________________________________________________________________________________ | |
125 | void 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 | 190 | AliAODPWG4ParticleCorrelation * 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 | 205 | AliAODPWG4ParticleCorrelation * 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 | //_____________________________________________________________________ | |
228 | void AliAnalysisTaskGCPartToPWG4Part::Terminate(Option_t *) { | |
229 | // Draw result to the screen | |
230 | // Called once at the end of the query | |
231 | } | |
232 | ||
233 | //_____________________________________________________________________ | |
234 | AliAODEvent * 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 | 247 | TClonesArray * 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 | //_____________________________________________________________________ |
272 | TClonesArray * AliAnalysisTaskGCPartToPWG4Part::GetConversionGammas(const AliAODEvent * aodEvent) const { | |
273 | return GetAODBranch(aodEvent, Form("%s_gamma", fGammaCutString.Data())); | |
274 | ||
275 | } | |
276 | ||
277 | //_____________________________________________________________________ | |
278 | TClonesArray * AliAnalysisTaskGCPartToPWG4Part::GetPions(const AliAODEvent * aodEvent) const { | |
279 | return GetAODBranch(aodEvent, Form("%s_Pi0", fPionCutString.Data())); | |
280 | ||
281 | } | |
282 | ||
e0b4c21c | 283 | |
284 | //_________________________________________________________________________ | |
285 | void AliAnalysisTaskGCPartToPWG4Part::CleanUp() { | |
29f6e0b7 | 286 | fAODPWG4Photons->Delete(); |
287 | fAODPWG4Pi0->Delete(); | |
e0b4c21c | 288 | } |
289 | ||
290 | ||
29f6e0b7 | 291 | //______________________________________________________________________________________________ |
92efd725 | 292 | Bool_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 | //______________________________________________________________________________________________ |
315 | Bool_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 | } |