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()));
138 TClonesArray * arrayMC = dynamic_cast<TClonesArray*>(aodEvent->GetList()->FindObject(AliAODMCParticle::StdBranchName()));
139 for (Int_t iPhot = 0; iPhot < convGamma->GetEntriesFast(); iPhot++) {
141 AliAODPWG4Particle * photon = dynamic_cast<AliAODPWG4Particle*>(convGamma->At(iPhot));
143 AliGammaConversionAODObject * aodO = dynamic_cast<AliGammaConversionAODObject*>(convGamma->At(iPhot));
146 AliAODConversionParticle * convParticle = dynamic_cast<AliAODConversionParticle*>(convGamma->At(iPhot));
148 AliAODPWG4ParticleCorrelation * photon = AddToAOD(convParticle, fAODPWG4Particles, "ConvGamma");
150 AliError(Form("ERROR: Could not receive ga %d\n", iPhot));
159 //////_________________________________________________________________________________________
160 Int_t AliAnalysisTaskGCPartToPWG4Part::CheckTag(AliAODPWG4ParticleCorrelation * particle, TClonesArray * tracks, TClonesArray * arrayMC, AliAODMCHeader * mcHeader) {
163 for (int imc = 0; imc < arrayMC->GetEntriesFast(); imc++) {
164 //for (int imc = 0; imc < 20; imc++) {
168 AliAODMCParticle * mParticle = dynamic_cast<AliAODMCParticle*>(arrayMC->At(imc));
169 // cout << mParticle->GetPdgCode() << " " <<mParticle->GetStatus() << endl;
172 //if( mParticle->GetPdgCode() == 34) cout<< "BALLE"<<endl;// && mParticle->GetMother() < 10) {
174 if( mParticle->GetPdgCode() == 22 ) { //&& mParticle->GetMother() < 10) {
175 AliAODMCParticle * mother = dynamic_cast<AliAODMCParticle*>(arrayMC->At(mParticle->GetMother()));
176 //if (TMath::Abs(mother->GetPdgCode()) < 22 && TMath::Abs(mother->GetPdgCode()) != 11) cout <<"KKKKKKKKK"<< mother->GetPdgCode() <<endl;
178 for (int id = 0; id < mParticle->GetNDaughters(); id++) {
179 int idaughter = mParticle->GetDaughter(id);
180 if(idaughter>0 && idaughter < arrayMC->GetEntriesFast()) {
181 AliAODMCParticle * dmParticle = dynamic_cast<AliAODMCParticle*>(arrayMC->At(mParticle->GetDaughter(id)));
182 //cout << dmParticle->GetPdgCode() << endl;
201 Int_t l1 = particle->GetTrackLabel(0);
202 Int_t l2 = particle->GetTrackLabel(1);
204 AliAODTrack * track1 = NULL;
205 AliAODTrack * track2 = NULL;
208 for(int i = 0; i < tracks->GetEntriesFast(); i++) {
210 AliAODTrack * track = (AliAODTrack*)tracks->At(i);
211 if (track->GetID() == l1) {
213 } else if (track->GetID() == l2) {
217 if(track1 && track2) break;
221 if(!track1 || !track2) return tag;
222 if(track1->GetLabel() < 0 || track2->GetLabel() < 0) {
223 //cout << "error balla"<< endl;
227 AliAODMCParticle * mcPart1 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(track1->GetLabel()));
228 AliAODMCParticle * mcPart2 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(track2->GetLabel()));
230 if (mcPart1 && mcPart2) {
232 if(mcPart1->GetMother() == mcPart2->GetMother()) {
234 AliAODMCParticle * photon = dynamic_cast<AliAODMCParticle*>(arrayMC->At(mcPart1->GetMother()));
235 Int_t motherIndex = photon->GetMother();
236 tag= fAnaUtils->CheckOriginInAOD(&motherIndex, 1, arrayMC);
238 AliAODMCParticle * mother = dynamic_cast<AliAODMCParticle*>(arrayMC->At(motherIndex));
241 if (photon->GetPdgCode() == 22 ) {
243 if (TMath::Abs(mother->GetPdgCode()) < 22 && TMath::Abs(mother->GetPdgCode()) != 11) {
245 fAnaUtils->SetTagBit(tag, AliMCAnalysisUtils::kMCPhoton);
246 fAnaUtils->SetTagBit(tag, AliMCAnalysisUtils::kMCPrompt);
248 cout <<"KKKKKKKKK "<< mother->GetPdgCode() << " " << mother->GetStatus() << " mi " << motherIndex << " daught: " << mother->GetNDaughters() << endl;
249 cout << photon->GetStatus() << " " << photon->Pt() << " headerpt:" << mcHeader->GetPtHard() << " " <<mcPart1->GetMother() << endl;
253 cout << "FAKE "<< photon->PdgCode() << " " << photon->Pt() << " " << photon->GetStatus() << endl;
261 Int_t parentId = mother->GetMother();
262 AliAODMCParticle * gp = dynamic_cast<AliAODMCParticle*>(arrayMC->At(parentId));
267 if(! mother->IsPrimary()) {
268 //cout << mother->GetPdgCode() << " " << mother->GetStatus() <<endl;
269 // cout << "other one? " << mother->PdgCode() << " " << gp->PdgCode() << " " << gp->GetStatus() << endl;
270 // cout << "yeay3 " << mother->GetPdgCode() << endl;
272 } else { //if (mother->IsPhysicalPrimary() ){
275 if(mother->GetStatus() < 10) {
276 //cout << "yeay4 " << mother->GetPdgCode() << endl;
277 // cout << "pion? " << gp->PdgCode() << " " << gp->GetStatus() << endl;
278 //cout << "???" << mother->PdgCode() << " " << mother->GetStatus() << " " << gp->PdgCode() << " " << gp->GetStatus() << endl;
280 //cout << "yeay5 " << mother->GetPdgCode() << endl;
281 //cout << "other? " << mother->PdgCode() << " " << mother->GetStatus() << " " << gp->PdgCode() << " " << gp->GetStatus() << endl;
286 // cout << "MI: " << mother->GetPdgCode() << " " << mother->GetStatus() <<endl;
292 //cout << "REturn tag " << tag << endl;
297 ///__________________________________________________________________________________
298 AliAODPWG4ParticleCorrelation * AliAnalysisTaskGCPartToPWG4Part::AddToAOD(AliGammaConversionAODObject * aodO, TClonesArray * branch, TString detector) {
299 new((*branch)[branch->GetEntriesFast()]) AliAODPWG4ParticleCorrelation(aodO->Px(), aodO->Py(), aodO->Pz(), aodO->E());
300 AliAODPWG4ParticleCorrelation * photon = dynamic_cast<AliAODPWG4ParticleCorrelation*>(branch->Last());
301 photon->SetTagged(aodO->IsTagged());
302 photon->SetTrackLabel(aodO->GetLabel1(), aodO->GetLabel2());
303 photon->SetDetector(detector);
307 ///__________________________________________________________________________________
308 AliAODPWG4ParticleCorrelation * AliAnalysisTaskGCPartToPWG4Part::AddToAOD(AliAODConversionParticle * aodO, TClonesArray * branch, TString detector) {
309 new((*branch)[branch->GetEntriesFast()]) AliAODPWG4ParticleCorrelation(aodO->Px(), aodO->Py(), aodO->Pz(), aodO->E());
310 AliAODPWG4ParticleCorrelation * photon = dynamic_cast<AliAODPWG4ParticleCorrelation*>(branch->Last());
311 photon->SetTrackLabel(aodO->GetLabel1(), aodO->GetLabel2());
312 photon->SetDetector(detector);
319 //_____________________________________________________________________
320 void AliAnalysisTaskGCPartToPWG4Part::Terminate(Option_t *) {
321 // Draw result to the screen
322 // Called once at the end of the query
325 //_____________________________________________________________________
326 AliAODEvent * AliAnalysisTaskGCPartToPWG4Part::GetAODEvent() {
327 //Get the AOD event from whereever it might be
328 AliAODEvent * aodEvent = dynamic_cast<AliAODEvent*>(InputEvent());
330 aodEvent = AODEvent();
337 //_____________________________________________________________________
338 TClonesArray * AliAnalysisTaskGCPartToPWG4Part::GetConversionGammas(const AliAODEvent * aodEvent) {
340 //Get Conversion gamma branch of AOD. First try standard AOD
341 TClonesArray * convGamma = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(fAODBranchName.Data()));
344 //If it's there, send it back
345 if(convGamma) return convGamma;
348 //If AOD not in standard file have to locate it in delta AOD
349 if( !(fDeltaAODFileName.Length() > 0) ) return NULL;
351 AliAODHandler * aodHandler = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
353 AliAODExtension * gExt = dynamic_cast<AliAODExtension*>(aodHandler->GetExtensions()->FindObject(fDeltaAODFileName));
355 AliAODEvent * gcEvent = gExt->GetAOD();
356 return dynamic_cast<TClonesArray*>(gcEvent->FindListObject("GammaConv_gamma"));
362 //_________________________________________________________________________
363 void AliAnalysisTaskGCPartToPWG4Part::CleanUp() {
364 fAODPWG4Particles->Delete();