8 #include "AliAnalysisTask.h"
9 #include "AliAnalysisManager.h"
10 #include "AliAnalysisTaskGCPartToPWG4Part.h"
12 #include "AliESDEvent.h"
13 #include "AliESDCaloCluster.h"
14 #include "AliESDInputHandler.h"
16 #include "AliAODPWG4ParticleCorrelation.h"
17 #include "AliAODEvent.h"
18 #include "AliAODHandler.h"
19 #include "AliAODCaloCluster.h"
20 #include "AliAODConversionPhoton.h"
21 #include "AliAODJet.h"
23 #include "AliAODInputHandler.h"
25 #include "AliAODMCParticle.h"
28 #include "AliAODMCHeader.h"
29 // Gamma - jet correlation analysis task
30 // Authors: Svein Lindal
35 ClassImp(AliAnalysisTaskGCPartToPWG4Part)
37 //________________________________________________________________________
38 AliAnalysisTaskGCPartToPWG4Part::AliAnalysisTaskGCPartToPWG4Part()
39 : AliAnalysisTaskSE(),
40 fDeltaAODFileName(""),
41 fGammaCutString("GammaConv"),
42 fPionCutString("GammaConv"),
43 fAODBranchName("GammaConv_gamma"),
44 fAODPWG4Photons(NULL),
51 //________________________________________________________________________________
52 AliAnalysisTaskGCPartToPWG4Part::~AliAnalysisTaskGCPartToPWG4Part() {
55 delete fAODPWG4Photons;
56 fAODPWG4Photons = NULL;
67 //________________________________________________________________________
68 AliAnalysisTaskGCPartToPWG4Part::AliAnalysisTaskGCPartToPWG4Part(const char *name) :
69 AliAnalysisTaskSE(name),
70 fDeltaAODFileName(""),
71 fGammaCutString("GammaConv"),
72 fPionCutString("GammaConv"),
73 fAODBranchName("GammaConv_gamma"),
74 fAODPWG4Photons(NULL),
79 DefineInput(0, TChain::Class());
80 // Output slot #0 id reserved by the base class for AOD
82 // Output slot #1 writes into a TH1 container
83 DefineOutput(1, TList::Class());
89 //________________________________________________________________________
90 void AliAnalysisTaskGCPartToPWG4Part::UserCreateOutputObjects() {
91 fAODPWG4Photons = new TClonesArray("AliAODPWG4ParticleCorrelation", 0);
92 fAODPWG4Photons->SetName("PhotonsCTS");
93 AddAODBranch("TClonesArray", &fAODPWG4Photons);
95 fAODPWG4Pi0 = new TClonesArray("AliAODPWG4ParticleCorrelation", 0);
96 fAODPWG4Pi0->SetName("Pi0sCTS");
97 AddAODBranch("TClonesArray", &fAODPWG4Pi0);
101 //________________________________________________________________________
102 void AliAnalysisTaskGCPartToPWG4Part::UserExec(Option_t *)
105 //AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);
107 //Clear stuff for new event
111 AliAODEvent * aodEvent = GetAODEvent();
113 AliError("No AOD event!!");
117 ProcessConvGamma(aodEvent);
124 //___________________________________________________________________________________________
125 void AliAnalysisTaskGCPartToPWG4Part::ProcessConvGamma( const AliAODEvent * const aodEvent ) {
127 TClonesArray * tracks = aodEvent->GetTracks();
129 cout << "No tracks!!!"<<endl;
134 TClonesArray * convGamma = GetConversionGammas(aodEvent);
136 AliError(Form("No branch by name %s found in file %s", fAODBranchName.Data(), fDeltaAODFileName.Data()));
141 //TClonesArray * arrayMC = dynamic_cast<TClonesArray*>(aodEvent->GetList()->FindObject(AliAODMCParticle::StdBranchName()));
142 for (Int_t iPhot = 0; iPhot < convGamma->GetEntriesFast(); iPhot++) {
144 AliAODPWG4ParticleCorrelation * photon = NULL;
145 AliAODConversionPhoton * convParticle = dynamic_cast<AliAODConversionPhoton*>(convGamma->At(iPhot));
146 if (convParticle && BothTracksPresent(convParticle, tracks)) {
147 photon = AddToAOD(convParticle, fAODPWG4Photons, 2); //"ConvGamma");
153 if(photon && fDebugLevel > 2) {
154 printf("Added conversion photon number %d, pt: %f \n", iPhot, photon->Pt());
160 TClonesArray * pions = GetPions(aodEvent);
162 AliError(Form("No branch by name %s found in file %s", fAODBranchName.Data(), fDeltaAODFileName.Data()));
166 for (Int_t iPhot = 0; iPhot < pions->GetEntriesFast(); iPhot++) {
167 AliAODPWG4ParticleCorrelation * pion = NULL;
168 AliAODConversionPhoton * convParticle = dynamic_cast<AliAODConversionPhoton*>(pions->At(iPhot));
169 if (convParticle && BothGammaPresent(convParticle, convGamma, tracks)) {
170 pion = AddPionToAOD(convParticle, fAODPWG4Pi0, 2); //"ConvGamma");
176 if(pion && fDebugLevel > 2) {
177 printf("Added conversion pion number %d, pt: %f \n", iPhot, pion->Pt());
189 ///__________________________________________________________________________________
190 AliAODPWG4ParticleCorrelation * AliAnalysisTaskGCPartToPWG4Part::AddToAOD(AliAODConversionPhoton * aodO, TClonesArray * branch, Int_t detector) {
191 new((*branch)[branch->GetEntriesFast()]) AliAODPWG4ParticleCorrelation(aodO->Px(), aodO->Py(), aodO->Pz(), aodO->E());
192 AliAODPWG4ParticleCorrelation * photon = dynamic_cast<AliAODPWG4ParticleCorrelation*>(branch->Last());
194 photon->SetTrackLabel(aodO->GetLabel1(), aodO->GetLabel2());
195 photon->SetDetectorTag(detector);
204 ///__________________________________________________________________________________
205 AliAODPWG4ParticleCorrelation * AliAnalysisTaskGCPartToPWG4Part::AddPionToAOD(AliAODConversionPhoton * pion, TClonesArray * branch, Int_t detector) {
206 new((*branch)[branch->GetEntriesFast()]) AliAODPWG4ParticleCorrelation(pion->Px(), pion->Py(), pion->Pz(), pion->E());
207 AliAODPWG4ParticleCorrelation * pwg4Pion = dynamic_cast<AliAODPWG4ParticleCorrelation*>(branch->Last());
209 Int_t tl[4] = {-1, -1, -1, -1};
210 //pion->GetGrandChildren(photons, tl);
211 pwg4Pion->SetTrackLabel(tl[0], tl[1], tl[2], tl[3]);
212 pwg4Pion->SetDetectorTag(detector);
213 for(Int_t i = 0; i < 4; i++) {
214 cout << tl[i] << " ";
216 cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
227 //_____________________________________________________________________
228 void AliAnalysisTaskGCPartToPWG4Part::Terminate(Option_t *) {
229 // Draw result to the screen
230 // Called once at the end of the query
233 //_____________________________________________________________________
234 AliAODEvent * AliAnalysisTaskGCPartToPWG4Part::GetAODEvent() {
235 //Get the AOD event from whereever it might be
236 AliAODEvent * aodEvent = dynamic_cast<AliAODEvent*>(InputEvent());
238 aodEvent = AODEvent();
246 //_____________________________________________________________________
247 TClonesArray * AliAnalysisTaskGCPartToPWG4Part::GetAODBranch(const AliAODEvent * aodEvent, TString branchName) const {
249 //Get Conversion gamma branch of AOD. First try standard AOD
250 TClonesArray * branch = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(branchName.Data()));
253 //If it's there, send it back
254 if(branch) return branch;
257 //If AOD not in standard file have to locate it in delta AOD
258 if( !(fDeltaAODFileName.Length() > 0) ) return NULL;
260 AliAODHandler * aodHandler = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
262 AliAODExtension * gExt = dynamic_cast<AliAODExtension*>(aodHandler->GetExtensions()->FindObject(fDeltaAODFileName));
264 AliAODEvent * gcEvent = gExt->GetAOD();
265 return dynamic_cast<TClonesArray*>(gcEvent->FindListObject(branchName.Data()));
271 //_____________________________________________________________________
272 TClonesArray * AliAnalysisTaskGCPartToPWG4Part::GetConversionGammas(const AliAODEvent * aodEvent) const {
273 return GetAODBranch(aodEvent, Form("%s_gamma", fGammaCutString.Data()));
277 //_____________________________________________________________________
278 TClonesArray * AliAnalysisTaskGCPartToPWG4Part::GetPions(const AliAODEvent * aodEvent) const {
279 return GetAODBranch(aodEvent, Form("%s_Pi0", fPionCutString.Data()));
284 //_________________________________________________________________________
285 void AliAnalysisTaskGCPartToPWG4Part::CleanUp() {
286 fAODPWG4Photons->Delete();
287 fAODPWG4Pi0->Delete();
291 //______________________________________________________________________________________________
292 Bool_t AliAnalysisTaskGCPartToPWG4Part::BothTracksPresent(const AliAODConversionPhoton * const photon, const TClonesArray * const tracks) const {
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));
299 if(track->GetID() == photon->GetLabel1()) track1 = track;
300 else if (track->GetID() == photon->GetLabel2()) track2 = track;
301 if(track1 && track2) break;
305 if(track1 && track2) {
308 cout << "Could not get both tracks!!! labels " << photon->GetLabel1() << " " << photon->GetLabel2() <<endl;
314 //______________________________________________________________________________________________
315 Bool_t AliAnalysisTaskGCPartToPWG4Part::BothGammaPresent(const AliAODConversionPhoton * const pion, const TClonesArray * const photons, const TClonesArray * const tracks) const {
317 AliAODConversionPhoton * photon1 = dynamic_cast<AliAODConversionPhoton*>(photons->At(pion->GetLabel1()));
318 AliAODConversionPhoton * photon2 = dynamic_cast<AliAODConversionPhoton*>(photons->At(pion->GetLabel2()));
320 if(photon1 && photon2) {
321 if( BothTracksPresent(photon1, tracks) && BothTracksPresent(photon1, tracks)) {
325 cout << "can't find both photons "<< endl;