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 "AliGammaConversionAODObject.h"
21 #include "AliAODConversionParticle.h"
22 #include "AliAODJet.h"
24 #include "AliAODInputHandler.h"
26 #include "AliAODMCParticle.h"
28 #include "AliMCAnalysisUtils.h"
31 #include "AliAODMCHeader.h"
32 // Gamma - jet correlation analysis task
33 // Authors: Svein Lindal
38 ClassImp(AliAnalysisTaskGCPartToPWG4Part)
40 //________________________________________________________________________
41 AliAnalysisTaskGCPartToPWG4Part::AliAnalysisTaskGCPartToPWG4Part()
42 : AliAnalysisTaskSE(),
43 fDeltaAODFileName(""),
44 fAODBranchName("GammaConv_gamma"),
45 fAODPWG4Particles(NULL),
51 //________________________________________________________________________________
52 AliAnalysisTaskGCPartToPWG4Part::~AliAnalysisTaskGCPartToPWG4Part() {
55 fAODPWG4Particles = NULL;
56 delete fAODPWG4Particles;
66 //________________________________________________________________________
67 AliAnalysisTaskGCPartToPWG4Part::AliAnalysisTaskGCPartToPWG4Part(const char *name) :
68 AliAnalysisTaskSE(name),
69 fDeltaAODFileName(""),
70 fAODBranchName("GammaConv_gamma"),
71 fAODPWG4Particles(NULL),
75 DefineInput(0, TChain::Class());
76 // Output slot #0 id reserved by the base class for AOD
78 // Output slot #1 writes into a TH1 container
79 DefineOutput(1, TList::Class());
81 fAnaUtils = new AliMCAnalysisUtils();
86 //________________________________________________________________________
87 void AliAnalysisTaskGCPartToPWG4Part::UserCreateOutputObjects() {
88 fAODPWG4Particles = new TClonesArray("AliAODPWG4ParticleCorrelation", 0);
89 fAODPWG4Particles->SetName("ConversionGamma");
90 AddAODBranch("TClonesArray", &fAODPWG4Particles);
94 //________________________________________________________________________
95 void AliAnalysisTaskGCPartToPWG4Part::UserExec(Option_t *)
98 //AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);
100 //Clear stuff for new event
104 AliAODEvent * aodEvent = GetAODEvent();
106 AliError("No AOD event!!");
111 ProcessConvGamma(aodEvent);
114 //PostData(1, fOutputList);
121 //___________________________________________________________________________________________
122 void AliAnalysisTaskGCPartToPWG4Part::ProcessConvGamma( const AliAODEvent * const aodEvent ) {
124 TClonesArray * tracks = aodEvent->GetTracks();
126 cout << "No tracks!!!"<<endl;
131 TClonesArray * convGamma = GetConversionGammas(aodEvent);
133 AliError(Form("No branch by name %s found in file %s", fAODBranchName.Data(), fDeltaAODFileName.Data()));
139 // AliAODMCHeader * mcHeader = dynamic_cast<AliAODMCHeader*>(aodEvent->FindListObject("mcHeader"));
142 TClonesArray * arrayMC = dynamic_cast<TClonesArray*>(aodEvent->GetList()->FindObject(AliAODMCParticle::StdBranchName()));
144 for (Int_t iPhot = 0; iPhot < convGamma->GetEntriesFast(); iPhot++) {
145 //AliAODPWG4Particle * photon = dynamic_cast<AliAODPWG4Particle*>(convGamma->At(iPhot));
149 // AliGammaConversionAODObject * aodO = dynamic_cast<AliGammaConversionAODObject*>(convGamma->At(iPhot));
152 // AliError(Form("ERROR: Could not receive ga %d\n", iPhot));
156 AliAODConversionParticle * convParticle = dynamic_cast<AliAODConversionParticle*>(convGamma->At(iPhot));
159 AliError(Form("ERROR: Could not receive ga %d\n", iPhot));
164 AliAODPWG4ParticleCorrelation * photon = AddToAOD(convParticle, fAODPWG4Particles, "ConvGamma");
165 //Int_t tag = CheckTag(photon, tracks, arrayMC, mcHeader);
166 //if(tag > 0 ) photon->SetTag(tag);
173 /////____________________________________________________________________________________
174 // void AliAnalysisTaskGCPartToPWG4Part::FillMCHistograms(AliAODPWG4ParticleCorrelation * recParticle, AliAODMCParticle * mcParticle) {
180 //////_________________________________________________________________________________________
181 Int_t AliAnalysisTaskGCPartToPWG4Part::CheckTag(AliAODPWG4ParticleCorrelation * particle, TClonesArray * tracks, TClonesArray * arrayMC, AliAODMCHeader * mcHeader) {
187 for (int imc = 0; imc < arrayMC->GetEntriesFast(); imc++) {
188 //for (int imc = 0; imc < 20; imc++) {
192 AliAODMCParticle * mParticle = dynamic_cast<AliAODMCParticle*>(arrayMC->At(imc));
193 // cout << mParticle->GetPdgCode() << " " <<mParticle->GetStatus() << endl;
196 //if( mParticle->GetPdgCode() == 34) cout<< "BALLE"<<endl;// && mParticle->GetMother() < 10) {
198 if( mParticle->GetPdgCode() == 22 ) { //&& mParticle->GetMother() < 10) {
199 AliAODMCParticle * mother = dynamic_cast<AliAODMCParticle*>(arrayMC->At(mParticle->GetMother()));
200 //if (TMath::Abs(mother->GetPdgCode()) < 22 && TMath::Abs(mother->GetPdgCode()) != 11) cout <<"KKKKKKKKK"<< mother->GetPdgCode() <<endl;
202 for (int id = 0; id < mParticle->GetNDaughters(); id++) {
203 int idaughter = mParticle->GetDaughter(id);
204 if(idaughter>0 && idaughter < arrayMC->GetEntriesFast()) {
205 AliAODMCParticle * dmParticle = dynamic_cast<AliAODMCParticle*>(arrayMC->At(mParticle->GetDaughter(id)));
206 //cout << dmParticle->GetPdgCode() << endl;
225 Int_t l1 = particle->GetTrackLabel(0);
226 Int_t l2 = particle->GetTrackLabel(1);
228 AliAODTrack * track1 = NULL;
229 AliAODTrack * track2 = NULL;
232 for(int i = 0; i < tracks->GetEntriesFast(); i++) {
234 AliAODTrack * track = (AliAODTrack*)tracks->At(i);
235 if (track->GetID() == l1) {
237 } else if (track->GetID() == l2) {
241 if(track1 && track2) break;
245 if(!track1 || !track2) return tag;
246 if(track1->GetLabel() < 0 || track2->GetLabel() < 0) {
247 //cout << "error balla"<< endl;
251 AliAODMCParticle * mcPart1 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(track1->GetLabel()));
252 AliAODMCParticle * mcPart2 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(track2->GetLabel()));
254 if (mcPart1 && mcPart2) {
256 if(mcPart1->GetMother() == mcPart2->GetMother()) {
258 AliAODMCParticle * photon = dynamic_cast<AliAODMCParticle*>(arrayMC->At(mcPart1->GetMother()));
259 Int_t motherIndex = photon->GetMother();
260 tag= fAnaUtils->CheckOriginInAOD(&motherIndex, 1, arrayMC);
262 AliAODMCParticle * mother = dynamic_cast<AliAODMCParticle*>(arrayMC->At(motherIndex));
265 if (photon->GetPdgCode() == 22 ) {
267 if (TMath::Abs(mother->GetPdgCode()) < 22 && TMath::Abs(mother->GetPdgCode()) != 11) {
269 fAnaUtils->SetTagBit(tag, AliMCAnalysisUtils::kMCPhoton);
270 fAnaUtils->SetTagBit(tag, AliMCAnalysisUtils::kMCPrompt);
272 cout <<"KKKKKKKKK "<< mother->GetPdgCode() << " " << mother->GetStatus() << " mi " << motherIndex << " daught: " << mother->GetNDaughters() << endl;
273 cout << photon->GetStatus() << " " << photon->Pt() << " headerpt:" << mcHeader->GetPtHard() << " " <<mcPart1->GetMother() << endl;
277 cout << "FAKE "<< photon->PdgCode() << " " << photon->Pt() << " " << photon->GetStatus() << endl;
285 Int_t parentId = mother->GetMother();
286 AliAODMCParticle * gp = dynamic_cast<AliAODMCParticle*>(arrayMC->At(parentId));
291 if(! mother->IsPrimary()) {
292 //cout << mother->GetPdgCode() << " " << mother->GetStatus() <<endl;
293 // cout << "other one? " << mother->PdgCode() << " " << gp->PdgCode() << " " << gp->GetStatus() << endl;
294 // cout << "yeay3 " << mother->GetPdgCode() << endl;
296 } else { //if (mother->IsPhysicalPrimary() ){
299 if(mother->GetStatus() < 10) {
300 //cout << "yeay4 " << mother->GetPdgCode() << endl;
301 // cout << "pion? " << gp->PdgCode() << " " << gp->GetStatus() << endl;
302 //cout << "???" << mother->PdgCode() << " " << mother->GetStatus() << " " << gp->PdgCode() << " " << gp->GetStatus() << endl;
304 //cout << "yeay5 " << mother->GetPdgCode() << endl;
305 //cout << "other? " << mother->PdgCode() << " " << mother->GetStatus() << " " << gp->PdgCode() << " " << gp->GetStatus() << endl;
310 // cout << "MI: " << mother->GetPdgCode() << " " << mother->GetStatus() <<endl;
316 //cout << "REturn tag " << tag << endl;
321 ///__________________________________________________________________________________
322 AliAODPWG4ParticleCorrelation * AliAnalysisTaskGCPartToPWG4Part::AddToAOD(AliGammaConversionAODObject * aodO, TClonesArray * branch, TString detector) {
323 new((*branch)[branch->GetEntriesFast()]) AliAODPWG4ParticleCorrelation(aodO->Px(), aodO->Py(), aodO->Pz(), aodO->E());
324 AliAODPWG4ParticleCorrelation * photon = dynamic_cast<AliAODPWG4ParticleCorrelation*>(branch->Last());
325 photon->SetTagged(aodO->IsTagged());
326 photon->SetTrackLabel(aodO->GetLabel1(), aodO->GetLabel2());
327 photon->SetDetector(detector);
331 ///__________________________________________________________________________________
332 AliAODPWG4ParticleCorrelation * AliAnalysisTaskGCPartToPWG4Part::AddToAOD(AliAODConversionParticle * aodO, TClonesArray * branch, TString detector) {
333 new((*branch)[branch->GetEntriesFast()]) AliAODPWG4ParticleCorrelation(aodO->Px(), aodO->Py(), aodO->Pz(), aodO->E());
334 AliAODPWG4ParticleCorrelation * photon = dynamic_cast<AliAODPWG4ParticleCorrelation*>(branch->Last());
335 photon->SetTrackLabel(aodO->GetLabel1(), aodO->GetLabel2());
336 photon->SetDetector(detector);
343 //_____________________________________________________________________
344 void AliAnalysisTaskGCPartToPWG4Part::Terminate(Option_t *) {
345 // Draw result to the screen
346 // Called once at the end of the query
349 //_____________________________________________________________________
350 AliAODEvent * AliAnalysisTaskGCPartToPWG4Part::GetAODEvent() {
351 //Get the AOD event from whereever it might be
352 AliAODEvent * aodEvent = dynamic_cast<AliAODEvent*>(InputEvent());
354 aodEvent = AODEvent();
361 //_____________________________________________________________________
362 TClonesArray * AliAnalysisTaskGCPartToPWG4Part::GetConversionGammas(const AliAODEvent * aodEvent) {
364 //Get Conversion gamma branch of AOD. First try standard AOD
365 TClonesArray * convGamma = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(fAODBranchName.Data()));
368 //If it's there, send it back
369 if(convGamma) return convGamma;
372 //If AOD not in standard file have to locate it in delta AOD
373 if( !(fDeltaAODFileName.Length() > 0) ) return NULL;
375 AliAODHandler * aodHandler = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
377 AliAODExtension * gExt = dynamic_cast<AliAODExtension*>(aodHandler->GetExtensions()->FindObject(fDeltaAODFileName));
379 AliAODEvent * gcEvent = gExt->GetAOD();
380 return dynamic_cast<TClonesArray*>(gcEvent->FindListObject("GammaConv_gamma"));
386 //_________________________________________________________________________
387 void AliAnalysisTaskGCPartToPWG4Part::CleanUp() {
388 fAODPWG4Particles->Delete();