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() {
57 delete fAODPWG4Photons;
58 fAODPWG4Photons = NULL;
69 //________________________________________________________________________
70 AliAnalysisTaskGCPartToPWG4Part::AliAnalysisTaskGCPartToPWG4Part(const char *name) :
71 AliAnalysisTaskSE(name),
72 fDeltaAODFileName(""),
73 fGammaCutString("GammaConv"),
74 fPionCutString("GammaConv"),
75 fAODBranchName("GammaConv_gamma"),
76 fAODPWG4Photons(NULL),
82 DefineInput(0, TChain::Class());
83 // Output slot #0 id reserved by the base class for AOD
85 // Output slot #1 writes into a TH1 container
86 DefineOutput(1, TList::Class());
92 //________________________________________________________________________
93 void AliAnalysisTaskGCPartToPWG4Part::UserCreateOutputObjects() {
97 fAODPWG4Photons = new TClonesArray("AliAODPWG4ParticleCorrelation", 0);
98 fAODPWG4Photons->SetName("PhotonsCTS");
99 AddAODBranch("TClonesArray", &fAODPWG4Photons);
101 fAODPWG4Pi0 = new TClonesArray("AliAODPWG4ParticleCorrelation", 0);
102 fAODPWG4Pi0->SetName("Pi0sCTS");
103 AddAODBranch("TClonesArray", &fAODPWG4Pi0);
107 //________________________________________________________________________
108 void AliAnalysisTaskGCPartToPWG4Part::UserExec(Option_t *)
112 //AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);
114 //Clear stuff for new event
118 AliAODEvent * aodEvent = GetAODEvent();
120 AliError("No AOD event!!");
124 ProcessConvGamma(aodEvent);
128 //____________________________________________________________________________________
129 void AliAnalysisTaskGCPartToPWG4Part::ProcessConvGamma( const AliAODEvent * aodEvent )
132 // Main method to put conversion photons/pi0 to AliAODPWG4Particle
134 TClonesArray * convGamma = GetConversionGammas(aodEvent);
136 AliError(Form("No gamma branch by name %s found in file %s", fAODBranchName.Data(), fDeltaAODFileName.Data()));
140 //TClonesArray * arrayMC = dynamic_cast<TClonesArray*>(aodEvent->GetList()->FindObject(AliAODMCParticle::StdBranchName()));
141 for (Int_t iPhot = 0; iPhot < convGamma->GetEntriesFast(); iPhot++) {
143 AliAODPWG4ParticleCorrelation * photon = NULL;
144 AliAODConversionPhoton * convParticle = dynamic_cast<AliAODConversionPhoton*>(convGamma->At(iPhot));
145 if (convParticle && BothTracksPresent(convParticle)) {
146 photon = AddToAOD(convParticle, fAODPWG4Photons, "ConvGamma");
152 if(photon && fDebugLevel > 2) {
153 printf("Added conversion photon number %d, pt: %f \n", iPhot, photon->Pt());
159 TClonesArray * pions = GetPions(aodEvent);
161 AliError(Form("No pi0 branch by name %s found in file %s", fAODBranchName.Data(), fDeltaAODFileName.Data()));
165 for (Int_t iPhot = 0; iPhot < pions->GetEntriesFast(); iPhot++) {
166 AliAODPWG4ParticleCorrelation * pion = NULL;
167 AliAODConversionPhoton * convParticle = dynamic_cast<AliAODConversionPhoton*>(pions->At(iPhot));
168 if (convParticle && BothGammaPresent(convParticle, convGamma)) {
169 pion = AddPionToAOD(convParticle, fAODPWG4Pi0, "ConvGamma");
175 if(pion && fDebugLevel > 2) {
176 printf("Added conversion pion number %d, pt: %f \n", iPhot, pion->Pt());
182 //__________________________________________________________________________________
183 AliAODPWG4ParticleCorrelation * AliAnalysisTaskGCPartToPWG4Part::AddToAOD(AliAODConversionPhoton * aodO, TClonesArray * branch, TString detector) {
186 new((*branch)[branch->GetEntriesFast()]) AliAODPWG4ParticleCorrelation(aodO->Px(), aodO->Py(), aodO->Pz(), aodO->E());
187 AliAODPWG4ParticleCorrelation * photon = dynamic_cast<AliAODPWG4ParticleCorrelation*>(branch->Last());
189 photon->SetTrackLabel(aodO->GetLabel1(), aodO->GetLabel2());
190 photon->SetDetector(detector);
199 ///__________________________________________________________________________________
200 AliAODPWG4ParticleCorrelation * AliAnalysisTaskGCPartToPWG4Part::AddPionToAOD(AliAODConversionPhoton * pion, TClonesArray * branch, TString detector) {
203 new((*branch)[branch->GetEntriesFast()]) AliAODPWG4ParticleCorrelation(pion->Px(), pion->Py(), pion->Pz(), pion->E());
204 AliAODPWG4ParticleCorrelation * pwg4Pion = dynamic_cast<AliAODPWG4ParticleCorrelation*>(branch->Last());
206 Int_t tl[4] = {-1, -1, -1, -1};
207 //pion->GetGrandChildren(photons, tl);
208 pwg4Pion->SetTrackLabel(tl[0], tl[1], tl[2], tl[3]);
209 pwg4Pion->SetDetector(detector);
210 for(Int_t i = 0; i < 4; i++) {
211 cout << tl[i] << " ";
213 cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
222 //_____________________________________________________________________
223 void AliAnalysisTaskGCPartToPWG4Part::Terminate(Option_t *) {
224 // Draw result to the screen
225 // Called once at the end of the query
229 //_____________________________________________________________________
230 AliAODEvent * AliAnalysisTaskGCPartToPWG4Part::GetAODEvent() {
231 //Get the AOD event from whereever it might be
232 AliAODEvent * aodEvent = dynamic_cast<AliAODEvent*>(InputEvent());
234 aodEvent = AODEvent();
242 //_____________________________________________________________________
243 TClonesArray * AliAnalysisTaskGCPartToPWG4Part::GetAODBranch(const AliAODEvent * aodEvent, TString branchName) const {
245 //Get Conversion gamma branch of AOD. First try standard AOD
246 TClonesArray * branch = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(branchName.Data()));
249 //If it's there, send it back
250 if(branch) return branch;
253 //If AOD not in standard file have to locate it in delta AOD
254 if( !(fDeltaAODFileName.Length() > 0) ) return NULL;
256 AliAODHandler * aodHandler = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
258 AliAODExtension * gExt = dynamic_cast<AliAODExtension*>(aodHandler->GetExtensions()->FindObject(fDeltaAODFileName));
260 AliAODEvent * gcEvent = gExt->GetAOD();
261 return dynamic_cast<TClonesArray*>(gcEvent->FindListObject(branchName.Data()));
269 //_____________________________________________________________________
270 TClonesArray * AliAnalysisTaskGCPartToPWG4Part::GetConversionGammas(const AliAODEvent * aodEvent) const {
271 // Returns photon branch
272 return GetAODBranch(aodEvent, Form("%s_gamma", fGammaCutString.Data()));
277 //_____________________________________________________________________
278 TClonesArray * AliAnalysisTaskGCPartToPWG4Part::GetPions(const AliAODEvent * aodEvent) const {
279 // returns pions branch
280 return GetAODBranch(aodEvent, Form("%s_Pi0", fPionCutString.Data()));
285 //_________________________________________________________________________
286 void AliAnalysisTaskGCPartToPWG4Part::CleanUp() {
287 fAODPWG4Photons->Delete();
288 fAODPWG4Pi0->Delete();
292 //______________________________________________________________________________________________
293 Bool_t AliAnalysisTaskGCPartToPWG4Part::BothTracksPresent(const AliAODConversionPhoton * photon)
295 // Check presence of electron pair
296 AliVTrack * track1 = NULL;
297 AliVTrack * track2 = NULL;
298 Int_t ntracks = InputEvent()->GetNumberOfTracks();
299 for(Int_t i = 0; i < ntracks; i++) {
300 AliVTrack * track = (AliVTrack*)InputEvent()->GetTrack(i);
302 if (track->GetID() == photon->GetLabel1()) track1 = track;
303 else if (track->GetID() == photon->GetLabel2()) track2 = track;
304 if(track1 && track2) break;
308 if(track1 && track2) {
311 cout << "AliAnalysisTaskGCPartToPWG4Part::BothTracksPresen() - Could not get both tracks!!! labels " << photon->GetLabel1() << " " << photon->GetLabel2() <<endl;
317 //___________________________________________________________________________________________
318 Bool_t AliAnalysisTaskGCPartToPWG4Part::BothGammaPresent(const AliAODConversionPhoton * pion,
319 const TClonesArray * photons)
321 // Check presence of gamma
322 AliAODConversionPhoton * photon1 = dynamic_cast<AliAODConversionPhoton*>(photons->At(pion->GetLabel1()));
323 AliAODConversionPhoton * photon2 = dynamic_cast<AliAODConversionPhoton*>(photons->At(pion->GetLabel2()));
325 if(photon1 && photon2) {
326 if( BothTracksPresent(photon1) && BothTracksPresent(photon2)) {
330 cout << "can't find both photons "<< endl;