From 296f4e9c0049ccd9c4bb4090cc4841014022f67d Mon Sep 17 00:00:00 2001 From: slindal Date: Sun, 4 Dec 2011 16:09:28 +0000 Subject: [PATCH] Updating conv correlation classes --- PWG4/CMakelibPWG4GammaConv.pkg | 1 - .../ConvCorrelations/AliAnaConvCorrBase.cxx | 193 +++-- .../ConvCorrelations/AliAnaConvCorrBase.h | 51 +- .../ConvCorrelations/AliAnaConvCorrPhoton.cxx | 39 +- .../ConvCorrelations/AliAnaConvCorrPhoton.h | 8 +- .../AliAnaConvCorrPhotonJet.cxx | 16 +- .../ConvCorrelations/AliAnaConvCorrPion.cxx | 120 ++- .../ConvCorrelations/AliAnaConvCorrPion.h | 29 +- .../AliAnaConvCorrPionJet.cxx | 8 +- .../ConvCorrelations/AliAnaConvIsolation.cxx | 22 + .../ConvCorrelations/AliAnaConvIsolation.h | 21 +- .../AliAnalysisTaskGammaJet.cxx | 694 ------------------ .../AliAnalysisTaskGammaJet.h | 117 --- PWG4/PWG4GammaConvLinkDef.h | 1 - 14 files changed, 297 insertions(+), 1023 deletions(-) delete mode 100644 PWG4/GammaConv/ConvCorrelations/AliAnalysisTaskGammaJet.cxx delete mode 100644 PWG4/GammaConv/ConvCorrelations/AliAnalysisTaskGammaJet.h diff --git a/PWG4/CMakelibPWG4GammaConv.pkg b/PWG4/CMakelibPWG4GammaConv.pkg index ea55dcff15f..69dfa74cc5a 100644 --- a/PWG4/CMakelibPWG4GammaConv.pkg +++ b/PWG4/CMakelibPWG4GammaConv.pkg @@ -39,7 +39,6 @@ set ( SRCS GammaConv/AliV0Reader.cxx GammaConv/AliAODConversionMother.cxx GammaConv/AliKFConversionPhoton.cxx GammaConv/AliKFConversionMother.cxx - GammaConv/ConvCorrelations/AliAnalysisTaskGammaJet.cxx GammaConv/ConvCorrelations/AliAnaConvIsolation.cxx GammaConv/ConvCorrelations/AliAnaConvCorrBase.cxx GammaConv/ConvCorrelations/AliAnaConvCorrPion.cxx diff --git a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrBase.cxx b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrBase.cxx index a880a6ea126..6cb0fa1e0f7 100644 --- a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrBase.cxx +++ b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrBase.cxx @@ -27,7 +27,6 @@ #include "TList.h" #include "AliAODConversionParticle.h" - #include // Gamma - jet correlation analysis task @@ -38,35 +37,20 @@ using namespace std; ClassImp(AliAnaConvCorrBase) //________________________________________________________________________ -AliAnaConvCorrBase::AliAnaConvCorrBase(TString name) : TObject(), - fName(name), +AliAnaConvCorrBase::AliAnaConvCorrBase(TString name, TString title = "title") : TNamed(name, title), fHistograms(NULL), - fNPhiBins(32), - fdPhiBins(NULL), - fPtBins(NULL) + fAxesList(NULL), + fAxistPt(), + fAxiscPt(), + fAxisdEta(), + fAxisdPhi(), + fSparse(NULL) { //Constructor - fPtBins = new TArrayD(41); - for(Int_t i = 0; i < 10; i++) { - fPtBins->SetAt(i*0.5, i); - fPtBins->SetAt(5 + i*0.5, i + 10); - - fPtBins->SetAt(10. + i, i+20); - fPtBins->SetAt(20. + 2*i, i+30); - } - - fPtBins->SetAt(50., fPtBins->GetSize() -1); - fdPhiBins = new TArrayD(fNPhiBins + 1); - for(Int_t i = 0; i < fNPhiBins+1; i++) { - fdPhiBins->SetAt(-TMath::PiOver2() + i*TMath::TwoPi()/fNPhiBins, i); - } + SetUpDefaultBins(); - for(int iIso = 0; iIso < 2; iIso++) { - fHdPhi[iIso] = NULL; - fHNTriggers[iIso] = NULL; - } - + fAxesList.SetOwner(kTRUE); } @@ -75,15 +59,6 @@ AliAnaConvCorrBase::AliAnaConvCorrBase(TString name) : TObject(), //________________________________________________________________________________ AliAnaConvCorrBase::~AliAnaConvCorrBase() { ///destructor - if(fPtBins) - delete fPtBins; - fPtBins = NULL; - - if(fdPhiBins) - delete fdPhiBins; - fdPhiBins = NULL; - - } @@ -91,11 +66,36 @@ void AliAnaConvCorrBase::CreateHistograms() { CreateBaseHistograms(); } +///________________________________________________________________________________ +void AliAnaConvCorrBase::SetUpDefaultBins() { + //Set up default bins + Double_t ptbins[19] = {0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 5.0, 6.0, 8.0, 10.0, 12.5, 15, 20, 25, 30, 50, 100}; + fAxisdEta.Set(160, -1.6, 1.6); + fAxisdEta.SetNameTitle("dEta", "delta eta"); + fAxesList.AddAt(&fAxisdEta, 0); + + fAxisdPhi.Set(64, -TMath::PiOver2(), 3*TMath::PiOver2()); + fAxisdPhi.SetNameTitle("dPhi", "delta Phi"); + fAxesList.AddAt(&fAxisdPhi, 1); + + fAxistPt.Set(18, ptbins); + fAxistPt.SetNameTitle("tPt", "trigger Pt"); + fAxesList.AddAt(&fAxistPt, 2); + + fAxiscPt.Set(18, ptbins); + fAxiscPt.SetNameTitle("cPt", "track Pt"); + fAxesList.AddAt(&fAxiscPt, 3); + + for(int iIso = 0; iIso < 2; iIso++) { + fHNTriggers[iIso] = NULL; + } +} + //________________________________________________________________________ void AliAnaConvCorrBase::CreateBaseHistograms() { //Create histograms add, to outputlis - cout << "Createing histograms for "<< fName.Data() << endl; + cout << "Creating histograms for "<< GetName() << endl; fHistograms = new TList(); fHistograms->SetOwner(kFALSE); @@ -103,48 +103,83 @@ void AliAnaConvCorrBase::CreateBaseHistograms() { for(int iIso = 0; iIso < 2; iIso++) { - fHdPhi[iIso] = new TH3F(Form("%s_%s_dPhi", fName.Data(), (iIso==0)?"nonIso":"isolated"), - Form("%s_%s_dPhi", fName.Data(), (iIso==0)?"nonIso":"isolated"), - fPtBins->GetSize() -1, fPtBins->GetArray(), - fPtBins->GetSize() - 1, fPtBins->GetArray(), - fdPhiBins->GetSize() - 1, fdPhiBins->GetArray()); - fHdPhi[iIso]->Sumw2(); - - fHistograms->Add(fHdPhi[iIso]); - fHNTriggers[iIso] = new TH1F(Form("%s_%s_fNTriggers", fName.Data(), (iIso==0)?"nonIso":"isolated"), - Form("%s_%s_fNTriggers", fName.Data(), (iIso==0)?"nonIso":"isolated"), - fPtBins->GetSize() - 1, fPtBins->GetArray()); + Form("%s_%s_fNTriggers", fName.Data(), (iIso==0)?"nonIso":"isolated"), + fAxistPt.GetNbins(), fAxistPt.GetXbins()->GetArray()); fHNTriggers[iIso]->Sumw2(); fHistograms->Add(fHNTriggers[iIso]); } + fSparse = CreateSparse(GetName(), GetTitle(), &fAxesList); + fHistograms->Add(fSparse); + } +///________________________________________________________________________ +THnSparseF * AliAnaConvCorrBase::CreateSparse(TString nameString, TString titleString, TList * axesList) { + //Create sparse + const Int_t dim = axesList->GetSize(); + + cout << "dimesion: " << dim << endl; + + TAxis * axes[dim]; + Int_t bins[dim]; + Double_t min[dim]; + Double_t max[dim]; + + for(Int_t i = 0; i(axesList->At(i)); + if(axis) axes[i] = axis; + else { + cout << "AliAnalysisTaskdPhi::CreateSparse: Error error, all the axes are not present in axis list" << endl; + return NULL; + } + } -///____________________________________________________________________________ -void AliAnaConvCorrBase::FillTriggerCounters(Float_t tPt, Bool_t isolated){ - //Fill histogram with trigger counters + for(Int_t i = 0; iGetTitle() << endl; + bins[i] = axes[i]->GetNbins(); + min[i] = axes[i]->GetBinLowEdge(1); + max[i] = axes[i]->GetBinUpEdge(axes[i]->GetNbins()); + } - fHNTriggers[0]->Fill(tPt); + THnSparseF * sparse = new THnSparseF(Form("%s", nameString.Data()), + Form("%s", titleString.Data()), + dim, bins, min, max); - if(isolated) { - fHNTriggers[isolated]->Fill(tPt); - + for(Int_t i = 0; iGetAxis(i)->SetNameTitle(axes[i]->GetName(), axes[i]->GetTitle() ); + if(axes[i]->GetXbins()->GetSize() > 0) { + sparse->SetBinEdges(i, axes[i]->GetXbins()->GetArray() ); + } } + return sparse; } -///_____________________________________________________________________________ -void AliAnaConvCorrBase::FillHistograms(Float_t tPt, Float_t cPt, Float_t dPhi, Float_t dEta, Bool_t isolated) { - //Fill histograms - if(dEta) { ;} - fHdPhi[0]->Fill(tPt, cPt, dPhi); - if(isolated) { - fHdPhi[isolated]->Fill(tPt, cPt, dPhi); - } -} +///____________________________________________________________________________ +// void AliAnaConvCorrBase::FillTriggerCounters(Float_t tPt, Bool_t isolated){ +// //Fill histogram with trigger counters + +// fHNTriggers[0]->Fill(tPt); + +// if(isolated) { +// fHNTriggers[isolated]->Fill(tPt); + +// } +// } + +// ///_____________________________________________________________________________ +// void AliAnaConvCorrBase::FillHistograms(Float_t tPt, Float_t cPt, Float_t dPhi, Float_t dEta, Bool_t isolated) { +// //Fill histograms + +// if(dEta) { ;} +// //fHdPhi[0]->Fill(tPt, cPt, dPhi); +// if(isolated) { +// //fHdPhi[isolated]->Fill(tPt, cPt, dPhi); +// } +// } //_______________________________________________________________________________ @@ -156,3 +191,37 @@ void AliAnaConvCorrBase::PrintStatistics() { } } + + +//_______________________________________________________________________________ +void AliAnaConvCorrBase::FillTriggerCounters(const AliAODConversionParticle * particle, Bool_t leading) { + fHNTriggers[leading]->Fill(particle->Pt()); +} + + +//________________________________________________________________ +void AliAnaConvCorrBase::CorrelateWithTracks(AliAODConversionParticle * particle, TObjArray * tracks, Int_t const tIDs[4], Bool_t isolated /*= kFALSE*/) { + //Correlate particle with tracks + + FillTriggerCounters(particle, isolated); + + Int_t nDim = fAxesList.GetSize(); + Double_t dphivalues[nDim]; + + for(int ij = 0; ij < tracks->GetEntriesFast(); ij++) { + AliVTrack * track = static_cast(tracks->UncheckedAt(ij)); + Int_t tid = track->GetID(); + + if((tid > 0) && (tid == tIDs[0] || tid == tIDs[1] || tid == tIDs[2] || tid == tIDs[3]) ) { + continue; + } + + dphivalues[1] = GetDPhi(particle->Phi() - track->Phi()); + dphivalues[0] = particle->Eta() - track->Eta(); + dphivalues[2] = particle->Pt(); + dphivalues[3] = track->Pt(); + if(nDim > 4) dphivalues[4] = particle->M(); + fSparse->Fill(dphivalues); + } +} + diff --git a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrBase.h b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrBase.h index 233291df893..c9a9fd6da3f 100644 --- a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrBase.h +++ b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrBase.h @@ -13,6 +13,7 @@ #include "TMath.h" #include "TList.h" #include "TH1.h" +#include class TH1F; class TH3F; @@ -22,15 +23,14 @@ class TClonesArray; class TNtuple; class TString; - -class AliAnaConvCorrBase : public TObject { +class AliAnaConvCorrBase : public TNamed { public: //Constructor / desctructor - AliAnaConvCorrBase(TString name); + AliAnaConvCorrBase(TString name, TString title); virtual ~AliAnaConvCorrBase(); //Set and get min pt for triggers @@ -53,9 +53,7 @@ public: //Add histogram to list void AddHistogram(TH1 * histogram) { fHistograms->Add(dynamic_cast(histogram));} - //Set and get number of bins in phi direction - void SetNPhiBins(Int_t bins) { fNPhiBins = bins; } - Int_t GetNPhiBins() const { return fNPhiBins;} + void AddAxis(TAxis * axis) { fAxesList.Add(axis); } ///Get the distance in phi between trigger particle and correlated particle Float_t GetDPhi(Float_t dPhi) { @@ -63,39 +61,50 @@ public: else return ( (dPhi>0)? dPhi - TMath::TwoPi() : dPhi + TMath::TwoPi() ); } + void PrintStatistics(); - TArrayD * GetTriggerBins() const { return fPtBins; } + void CorrelateWithTracks(AliAODConversionParticle * particle, TObjArray * tracks, const Int_t tIDs[4], Bool_t isolated); + virtual void FillTriggerCounters(const AliAODConversionParticle * particle, Bool_t leading); + + TAxis& GetAxistPt() { return fAxistPt; } + TAxis& GetAxiscPt() { return fAxiscPt; } + TAxis& GetAxisdEta() { return fAxisdEta; } + TAxis& GetAxisdPhi() { return fAxisdPhi; } + TList& GetAxisList() { return fAxesList; } - //Print statistics for histograms - void PrintStatistics(); protected: //Fill histograms - void FillHistograms(Float_t tPt, Float_t cPt, Float_t dPhi, Float_t dEta, Bool_t isolated); + //void FillHistograms(Float_t tPt, Float_t cPt, Float_t dPhi, Float_t dEta, Bool_t isolated); //Fill trigger counter histograms - void FillTriggerCounters(Float_t tPt, Bool_t isolated); + //virtual void FillTriggerCounters(Float_t tPt, Bool_t isolated) = NULL; + THnSparseF * CreateSparse(TString name, TString title, TList * axes); + TH1F * fHNTriggers[2]; //Histograms containing number of triggers in various bins + +private: - private: + void SetUpDefaultBins(); - TString fName; //name of analysis + //TString fName; //name of analysis TList * fHistograms; //List of histograms + TList fAxesList; //List over axes to be used in sparse - Int_t fNPhiBins; //Nbins in phi direction - TArrayD * fdPhiBins; //!transient phi bin array - TArrayD * fPtBins; //!Array of trigger bins + TAxis fAxistPt; //Pt axis + TAxis fAxiscPt; //correlated particle pt axis + TAxis fAxisdEta; //delta eta axis + TAxis fAxisdPhi; //delta phi axis - - TH3F * fHdPhi[2]; //dPhi pt histogram - TH1F * fHNTriggers[2]; //Histograms containing number of triggers in various bins - + THnSparseF * fSparse; //Sparse //Default constructor prohibited AliAnaConvCorrBase(); //not implemented AliAnaConvCorrBase(const AliAnaConvCorrBase&); // not implemented AliAnaConvCorrBase& operator=(const AliAnaConvCorrBase&); // not implemented - ClassDef(AliAnaConvCorrBase, 3); // example of analysis + + ClassDef(AliAnaConvCorrBase, 4); // example of analysis + }; #endif diff --git a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPhoton.cxx b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPhoton.cxx index e6f0454963d..4c9e539cb8b 100644 --- a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPhoton.cxx +++ b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPhoton.cxx @@ -32,50 +32,37 @@ ClassImp(AliAnaConvCorrPhoton) //________________________________________________________________________ AliAnaConvCorrPhoton::AliAnaConvCorrPhoton() : -AliAnaConvCorrBase("photon_hadron_corr"), +AliAnaConvCorrBase("photon_hadron_corr", "Photon corr"), fSkipDecayParticles(kFALSE), fDecayOnly(kFALSE) { //consctructor } //________________________________________________________________________ -AliAnaConvCorrPhoton::AliAnaConvCorrPhoton(TString name) : -AliAnaConvCorrBase(name), +AliAnaConvCorrPhoton::AliAnaConvCorrPhoton(TString name, TString title = "Photon corr") : +AliAnaConvCorrBase(name, title), fSkipDecayParticles(kFALSE), fDecayOnly(kFALSE) { //consctructor } - //________________________________________________________________________________ AliAnaConvCorrPhoton::~AliAnaConvCorrPhoton() { //destructor } -///__________________________________________________________________________ -void AliAnaConvCorrPhoton::CorrelateWithHadrons(const AliAODConversionPhoton * const photon, const TClonesArray * const tracks, const Bool_t isolated, const Bool_t decayParticle) { - //See header file for documentation - - - if( decayParticle && fSkipDecayParticles ) return; - else if ( fDecayOnly && !decayParticle ) return; +//________________________________________________________________________________ +void AliAnaConvCorrPhoton::Process(TClonesArray * photons, TClonesArray * tracks, Bool_t isolated = kFALSE) { + //Process list of photons and correlate w tracks + for(Int_t ig = 0; ig < photons->GetEntriesFast(); ig++) { - FillTriggerCounters(photon->Pt(), isolated); + AliAODConversionParticle * photon = static_cast(photons->UncheckedAt(ig)); - if (tracks) { - - for(int ij = 0; ij < tracks->GetEntriesFast(); ij++) { - AliAODTrack * track = dynamic_cast(tracks->At(ij)); - if(track) { - - if ( (track->GetID() == photon->GetTrackLabel(0)) || track->GetID() == photon->GetTrackLabel(1) ) continue; - - //if (track->Pt() < GetCorrelatedPt() ) continue; - - FillHistograms(photon->Pt(), track->Pt(), GetDPhi(photon->Phi() - track->Phi()), photon->Eta() - track->Eta(), isolated); - - } - } + Int_t tIDs[4] = {-1, -1, -1, -1}; + tIDs[0] = photon->GetLabel(0); + tIDs[1] = photon->GetLabel(1); + CorrelateWithTracks(photon, tracks, tIDs, isolated); + } } diff --git a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPhoton.h b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPhoton.h index 901c4e81e9a..5b9b6635587 100644 --- a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPhoton.h +++ b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPhoton.h @@ -19,22 +19,24 @@ class AliAnaConvCorrPhoton : public AliAnaConvCorrBase { public: AliAnaConvCorrPhoton(); - AliAnaConvCorrPhoton(TString name); + AliAnaConvCorrPhoton(TString name, TString title); virtual ~AliAnaConvCorrPhoton(); ///Correlation photon with tracks - virtual void CorrelateWithHadrons(const AliAODConversionPhoton * const photon, const TClonesArray * const tracks, const Bool_t isolated, const Bool_t decayParticle); + //virtual void CorrelateWithHadrons(const AliAODConversionPhoton * const photon, const TClonesArray * const tracks, const Bool_t isolated, const Bool_t decayParticle); //Process particles identified as pion / eta decay void SkipDecayParticles() { fSkipDecayParticles = kTRUE; } void DoDecayParticles() { fSkipDecayParticles = kFALSE; } void DoDecayOnly() { fSkipDecayParticles = kFALSE; fDecayOnly = kTRUE; } + void Process(TClonesArray * photons, TClonesArray * tracks, Bool_t isolated); + private: Bool_t fSkipDecayParticles; //Process particles identified as pion / eta decay particles - Bool_t fDecayOnly; + Bool_t fDecayOnly; //Only process gamma from decay pion AliAnaConvCorrPhoton(const AliAnaConvCorrPhoton&); // not implemented AliAnaConvCorrPhoton& operator=(const AliAnaConvCorrPhoton&); // not implemented diff --git a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPhotonJet.cxx b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPhotonJet.cxx index e82b62ed0d0..dbc86517859 100644 --- a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPhotonJet.cxx +++ b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPhotonJet.cxx @@ -35,7 +35,7 @@ ClassImp(AliAnaConvCorrPhotonJet) //________________________________________________________________________________ AliAnaConvCorrPhotonJet::AliAnaConvCorrPhotonJet() : -AliAnaConvCorrBase("photonJet"), +AliAnaConvCorrBase("photonJet", "Photon Jet"), fhPtFracGamma(NULL), fhPtFracPion(NULL) { @@ -43,7 +43,7 @@ AliAnaConvCorrBase("photonJet"), } //________________________________________________________________________________ AliAnaConvCorrPhotonJet::AliAnaConvCorrPhotonJet(TString name) : - AliAnaConvCorrBase(name), + AliAnaConvCorrBase(name, "Photon Jet"), fhPtFracGamma(NULL), fhPtFracPion(NULL) { @@ -68,8 +68,8 @@ void AliAnaConvCorrPhotonJet::CreateHistograms() { } void AliAnaConvCorrPhotonJet::DoJetAnalysisGamma(AliAODJet * jet, const TClonesArray * const photons, const TClonesArray *const pions ) const{ - - Int_t trackIDs[4] = {-9, -9, -9, -9}; + //See header file for documetation + Int_t trackIDs[4]; for(Int_t i = 0; i < photons->GetEntriesFast(); i++) { AliAODConversionParticle * photon = dynamic_cast(photons->At(i)); @@ -102,6 +102,7 @@ void AliAnaConvCorrPhotonJet::DoJetAnalysisGamma(AliAODJet * jet, const TClonesA //________________________________________________________________________________ Bool_t AliAnaConvCorrPhotonJet::IsParticleInJet(AliAODJet * jet, Int_t nTracks, Int_t * trackIds) const { + //See header file for documetation Int_t mTracks = 0; TRefArray * refTracks = jet->GetRefTracks(); @@ -123,6 +124,7 @@ Bool_t AliAnaConvCorrPhotonJet::IsParticleInJet(AliAODJet * jet, Int_t nTracks, //________________________________________________________________________________ Double_t AliAnaConvCorrPhotonJet::ExtractFromJet(AliAODJet * jet, const AliAODConversionParticle * const particle) const { + //See header file for documetation Float_t jetPt = jet->Pt(); cout << "Jet pt before and after: " << jetPt << " "; @@ -150,14 +152,14 @@ Double_t AliAnaConvCorrPhotonJet::ExtractFromJet(AliAODJet * jet, const AliAODCo ///_______________________________________________________________________________ void AliAnaConvCorrPhotonJet::CorrelateWithHadrons(const AliAODConversionParticle * const photon, const TClonesArray * const jets, const Bool_t isolated) { - FillTriggerCounters(photon->Pt(), isolated); + FillTriggerCounters(photon, isolated); //See header file for documentation if (jets) { for(int ij = 0; ij < jets->GetEntriesFast(); ij++) { AliAODJet * jet = dynamic_cast(jets->At(ij)); if(jet) { - Double_t jetPt = ExtractFromJet(jet, photon); - FillHistograms(photon->Pt(), jetPt, GetDPhi(photon->Phi() - jet->Phi()), photon->Eta() - jet->Eta(), isolated); + //Double_t jetPt = ExtractFromJet(jet, photon); + //FillHistograms(photon->Pt(), jetPt, GetDPhi(photon->Phi() - jet->Phi()), photon->Eta() - jet->Eta(), isolated); } } } diff --git a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPion.cxx b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPion.cxx index d431e292b45..fcad5284970 100644 --- a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPion.cxx +++ b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPion.cxx @@ -19,12 +19,15 @@ +#include "TH2D.h" #include "AliAnaConvCorrPion.h" -#include "AliAODTrack.h" +//#include "AliAODTrack.h" #include "TClonesArray.h" -#include "AliAODConversionPhoton.h" -#include "THnSparse.h" -#include "TH2F.h" +#include "AliAODConversionParticle.h" +//#include "AliAODConversionMother.h" +//#include "AliAODConversionPhoton.h" +//#include "THnSparse.h" +//#include "TH2F.h" #include @@ -34,21 +37,21 @@ ClassImp(AliAnaConvCorrPion) //________________________________________________________________________________ AliAnaConvCorrPion::AliAnaConvCorrPion() : -AliAnaConvCorrBase("pion_hadron_corr"), - fhdPhiVsInvMassPi0(NULL), - fhdPhiVsInvMassEta(NULL), - fhPtVsInvMass(NULL) +AliAnaConvCorrBase("pion_hadron_corr", "Pion dPhi"), + hTriggerPtvsMass(NULL), + fAxisM() { //consctructor + InitMassAxis(); } //________________________________________________________________________________ -AliAnaConvCorrPion::AliAnaConvCorrPion(TString name) : - AliAnaConvCorrBase(name), - fhdPhiVsInvMassPi0(NULL), - fhdPhiVsInvMassEta(NULL), - fhPtVsInvMass(NULL) +AliAnaConvCorrPion::AliAnaConvCorrPion(TString name, TString title = "Pion Corr") : + AliAnaConvCorrBase(name, title), + hTriggerPtvsMass(NULL), + fAxisM() { //consctructor + InitMassAxis(); } @@ -57,72 +60,45 @@ AliAnaConvCorrPion::~AliAnaConvCorrPion() { //destructor } +void AliAnaConvCorrPion::InitMassAxis() { + Double_t mbins[7] = {0.1, 0.11, 0.12, 0.15, 0.16, 0.18, 0.2}; + fAxisM.Set(6, mbins); + fAxisM.SetNameTitle("InvMass", "invariant mass"); + GetAxisList().AddAt(&fAxisM, 4); +} + ///________________________________________________________________________________ void AliAnaConvCorrPion::CreateHistograms() { //Create histograms CreateBaseHistograms(); - - const Int_t dim = 4; - Int_t bins[dim] = {200, 200, 32, 14}; - Double_t min[dim] = {0, 0, -TMath::PiOver2(), 0.1}; - Double_t max[dim] = {100, 100, 3*TMath::PiOver2(), 0.17}; - - fhdPhiVsInvMassPi0 = new THnSparseF("fhdPhiVsInvMassPi0", "fhdPhiVsInvMassPi0", dim, bins, min, max); - - min[3] = 450; - max[3] = 650; - bins[3] = 20; - fhdPhiVsInvMassEta = new THnSparseF("fhdPhiVsInvMassEta", "fhdPhiVsInvMassEta", dim, bins, min, max); - fhPtVsInvMass = new TH2F("fhPtVsInvMass", "Pt Vs inv mass", GetTriggerBins()->GetSize() -1, GetTriggerBins()->GetArray(), 400, 0, 1); - - GetHistograms()->Add(fhPtVsInvMass); - GetHistograms()->Add(fhdPhiVsInvMassPi0); - GetHistograms()->Add(fhdPhiVsInvMassEta); - + hTriggerPtvsMass = new TH2D("hTriggerPtvsMass", "Pt vs Mass", 400, 0, .400, GetAxistPt().GetNbins(), GetAxistPt().GetXbins()->GetArray()); + GetHistograms()->Add(hTriggerPtvsMass); } + ///________________________________________________________________________________ -void AliAnaConvCorrPion::GetTrackLabels(const AliAODConversionPhoton * pion, const TClonesArray * photons, Int_t* trackLabels) { - ///Get the track labels of the electrons reconstructed as gamma forming the pion - - for(Int_t i = 0; i< 2; i++) { - AliAODConversionPhoton * gamma = dynamic_cast(photons->At(pion->GetTrackLabel(i))); - - if(gamma) { - for(Int_t j = 0; j< 2; j++) { - cout << "index " << i + j + ((i>=j)?1:0) << " " << gamma->GetTrackLabel(j) << endl; - trackLabels[ i*2+ j] = gamma->GetTrackLabel(j); - } - } - } +void AliAnaConvCorrPion::FillTriggerCounters(const AliAODConversionParticle * particle, Bool_t isolated) { + //Fill histograms counting triggers + fHNTriggers[isolated]->Fill(particle->Pt()); + hTriggerPtvsMass->Fill(particle->M(), particle->Pt()); } - -///________________________________________________________________________________ -void AliAnaConvCorrPion::CorrelateWithHadrons(AliAODConversionPhoton * pion, const TClonesArray * tracks, const Bool_t isolated, const Int_t nSpawn, const Int_t * const spawn) { - //See header file for documentation - - fhPtVsInvMass->Fill(pion->Pt(), pion->M()); - FillTriggerCounters(pion->Pt(), isolated); - - if (tracks) { - for(int ij = 0; ij < tracks->GetEntriesFast(); ij++) { - AliAODTrack * track = dynamic_cast(tracks->At(ij)); - if(track) { - - if(nSpawn && spawn) {;} - - //if(pion->IsMySpawn(track->GetID(), nSpawn, spawn)) continue; +//________________________________________________________________________________ +// void AliAnaConvCorrPion::Process(TClonesArray * pions, TClonesArray * photons, TClonesArray * tracks) { + +// for(Int_t ip = 0; ip < pions->GetEntriesFast(); ip++) { + +// AliAODConversionParticle * pion = static_cast(pions->UncheckedAt(ip)); - // if (track->Pt() < GetCorrelatedPt() ) continue; - Double_t x[4] = {pion->Pt(), track->Pt(), GetDPhi(pion->Phi() - track->Phi()), TMath::Abs(pion->M()) }; - if( (pion->M() > 0.1) && (pion->M() < 0.17) ){ - fhdPhiVsInvMassPi0->Fill(x); - } else if ((pion->M() > 0.5) && (pion->M() < 0.6 ) ) { - fhdPhiVsInvMassEta->Fill(x); - } - FillHistograms(pion->Pt(), track->Pt(), GetDPhi(pion->Phi() - track->Phi()), pion->Eta() - track->Eta(), isolated); - } - } - } -} +// Int_t tIDs[4] = {-1, -1, -1, -1}; +// AliAODConversionParticle * photon1 = static_cast(photons->UncheckedAt(pion->GetLabel(0))); +// tIDs[0] = photon1->GetLabel(0); +// tIDs[1] = photon1->GetLabel(1); +// AliAODConversionParticle * photon2 = static_cast(photons->UncheckedAt(pion->GetLabel(1))); +// tIDs[2] = photon2->GetLabel(0); +// tIDs[3] = photon2->GetLabel(1); + +// CorrelateWithTracks(static_cast(pion), tracks, tIDs, kFALSE); +// } +// } + diff --git a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPion.h b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPion.h index bc0db40167e..60b3e0082ff 100644 --- a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPion.h +++ b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPion.h @@ -11,9 +11,10 @@ #define ALIANACONVCORRPION_CXX #include "AliAnaConvCorrBase.h" -#include "THnSparse.h" +class TH2D; +//#include "THnSparse.h" -class AliAODConversionPhoton; +//class AliAODConversionPhoton; class TClonesArray; class AliAnaConvCorrPion : public AliAnaConvCorrBase { @@ -21,26 +22,36 @@ class AliAnaConvCorrPion : public AliAnaConvCorrBase { public: AliAnaConvCorrPion(); - AliAnaConvCorrPion(TString name); + AliAnaConvCorrPion(TString name, TString title); virtual ~AliAnaConvCorrPion(); + TAxis& GetAxisM() { return fAxisM; } + + //Correlate pions with charged tracks - virtual void CorrelateWithHadrons(AliAODConversionPhoton * pion, const TClonesArray * tracks, const Bool_t isolated, const Int_t nSpawn, const Int_t * const spawn ); + //virtual void CorrelateWithHadrons(AliAODConversionPhoton * pion, const TClonesArray * tracks, const Bool_t isolated, const Int_t nSpawn, const Int_t * const spawn ); void CreateHistograms(); + + //void Process(TClonesArray * pions, TClonesArray * photons, TClonesArray * tracks); + + + void FillTriggerCounters(const AliAODConversionParticle * particle, Bool_t isolated); private: + void InitMassAxis(); //Get array of track labels of the 4 decay electrons (2gamma * 2 electrons) - void GetTrackLabels(const AliAODConversionPhoton * pion, const TClonesArray * photons, Int_t* trackLabels); + //void GetTrackLabels(const AliAODConversionPhoton * pion, const TClonesArray * photons, Int_t* trackLabels); + + //TH2F * fhPtVsInvMass; - THnSparseF * fhdPhiVsInvMassPi0; //! - THnSparseF * fhdPhiVsInvMassEta; //! - TH2F * fhPtVsInvMass; + TH2D * hTriggerPtvsMass; //Histograms containing number of triggers in various bins + TAxis fAxisM; //Mass axis AliAnaConvCorrPion(const AliAnaConvCorrPion&); // not implemented AliAnaConvCorrPion& operator=(const AliAnaConvCorrPion&); // not implemented - ClassDef(AliAnaConvCorrPion, 1); // example of analysis + ClassDef(AliAnaConvCorrPion, 2); // }; diff --git a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPionJet.cxx b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPionJet.cxx index 40a6972bc63..b9bedd433d4 100644 --- a/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPionJet.cxx +++ b/PWG4/GammaConv/ConvCorrelations/AliAnaConvCorrPionJet.cxx @@ -33,12 +33,12 @@ ClassImp(AliAnaConvCorrPionJet) //________________________________________________________________________________ AliAnaConvCorrPionJet::AliAnaConvCorrPionJet() : -AliAnaConvCorrBase("photonJet") { +AliAnaConvCorrBase("PionJet", "Pion Jet") { //consctructor } //________________________________________________________________________________ AliAnaConvCorrPionJet::AliAnaConvCorrPionJet(TString name) : -AliAnaConvCorrBase(name) { + AliAnaConvCorrBase(name, "Pion Jet") { //consctructor } @@ -51,7 +51,7 @@ AliAnaConvCorrPionJet::~AliAnaConvCorrPionJet() { ///_______________________________________________________________________________ void AliAnaConvCorrPionJet::CorrelateWithHadrons(const AliAODConversionParticle * const pion, const TClonesArray * const jets, const Bool_t isolated) { - FillTriggerCounters(pion->Pt(), isolated); + FillTriggerCounters(pion, isolated); //See header file for documentation if (jets) { @@ -59,7 +59,7 @@ void AliAnaConvCorrPionJet::CorrelateWithHadrons(const AliAODConversionParticle for(int ij = 0; ij < jets->GetEntriesFast(); ij++) { AliAODJet * jet = dynamic_cast(jets->At(ij)); if(jet) { - FillHistograms(pion->Pt(), jet->Pt(), GetDPhi(pion->Phi() - jet->Phi()), pion->Eta() - jet->Eta(), isolated); + //FillHistograms(pion->Pt(), jet->Pt(), GetDPhi(pion->Phi() - jet->Phi()), pion->Eta() - jet->Eta(), isolated); } } } diff --git a/PWG4/GammaConv/ConvCorrelations/AliAnaConvIsolation.cxx b/PWG4/GammaConv/ConvCorrelations/AliAnaConvIsolation.cxx index 76ab667c46c..1d1409222dc 100644 --- a/PWG4/GammaConv/ConvCorrelations/AliAnaConvIsolation.cxx +++ b/PWG4/GammaConv/ConvCorrelations/AliAnaConvIsolation.cxx @@ -171,6 +171,28 @@ void AliAnaConvIsolation::CreateHistograms() } +//________________________________________________________________________ +Bool_t AliAnaConvIsolation::IsLeading(AliAODConversionParticle * particle, const TObjArray * tracks, const TObjArray * aodParticles) { + //Check if particle is highest pt particle in cone + for(Int_t ip = 0; ip < aodParticles->GetEntriesFast(); ip++) { + AliAODConversionParticle * oparticle = static_cast(aodParticles->UncheckedAt(ip)); + if(oparticle == particle) continue; + if(oparticle->Pt() > particle->Pt() && + IsInCone(particle->Eta() - oparticle->Eta(), + particle->Phi() - oparticle->Phi(), + fConeSize) ) { + return kFALSE; + } + } + + for(Int_t it = 0; it < tracks->GetEntriesFast(); it++) { + AliAODTrack * track = static_cast(tracks->UncheckedAt(it)); + if(track->Pt() > particle->Pt() && + IsInCone(particle->Eta() - track->Eta(), particle->Phi() - track->Phi(), fConeSize) ) return kFALSE; + } + + return kTRUE; +} //_________________________________________________________________________ Bool_t AliAnaConvIsolation::IsIsolated(AliAODConversionPhoton * particle, const TClonesArray * const tracks, const Int_t nSpawn, const Int_t * const spawn, Bool_t &leading) { diff --git a/PWG4/GammaConv/ConvCorrelations/AliAnaConvIsolation.h b/PWG4/GammaConv/ConvCorrelations/AliAnaConvIsolation.h index 29511230478..63ded7ff801 100644 --- a/PWG4/GammaConv/ConvCorrelations/AliAnaConvIsolation.h +++ b/PWG4/GammaConv/ConvCorrelations/AliAnaConvIsolation.h @@ -10,15 +10,20 @@ #ifndef ALIANACONVISOLATION_CXX #define ALIANACONVISOLATION_CXX +#include #include "TObject.h" #include "Rtypes.h" #include "TF1.h" +#include class TH2F; class TH1F; class AliAODConversionPhoton; +class AliAODConversionParticle; class TClonesArray; class TList; +using namespace std; + class AliAnaConvIsolation : public TObject { public: @@ -32,8 +37,8 @@ public: ///Set And get cone size - void SetConeSize(Float_t cs) {fConeSize = cs;} - Float_t GetConeSize() const {return fConeSize;} + void SetConeSize(Float_t cs) {fConeSize = cs*cs;} + Float_t GetConeSize() const {return TMath::Sqrt(fConeSize);} //Set and get max pt threshold @@ -64,6 +69,9 @@ public: fCurveFunction = curve; } + Bool_t IsLeading(AliAODConversionParticle * particle, const TObjArray * tracks, const TObjArray * aodParticles); + + //Fill histograms void FillHistograms(Float_t pt, Float_t ptMax, Float_t ptSum, Bool_t isolated, Int_t nTracks); @@ -74,13 +82,14 @@ public: Bool_t IsIsolated( const AliAODConversionPhoton * const particle, const TClonesArray * const tracks, Bool_t &leading); Bool_t IsIsolated( AliAODConversionPhoton * const particle, const TClonesArray * const tracks, const Int_t nSpawn, const Int_t * const spawn, Bool_t &leading ); - private: - //Is eta - phi distance smaller than conesize ? - Bool_t IsInCone(Float_t dEta, Float_t dPhi, Float_t coneSize) const { - return ( (dEta*dEta + dPhi*dPhi) < coneSize*coneSize); + Bool_t IsInCone(Float_t dEta, Float_t dPhi, const Float_t coneSize) const { + dPhi = (TMath::Abs(dPhi) < TMath::Pi()) ? dPhi : TMath::TwoPi() - TMath::Abs(dPhi); + return ( (dEta*dEta + dPhi*dPhi) < coneSize); } + private: + ///Evaluate whether particle is isolated according to criterie Bool_t EvaluateIsolationCriteria(Float_t ptSum, Float_t pt) const; diff --git a/PWG4/GammaConv/ConvCorrelations/AliAnalysisTaskGammaJet.cxx b/PWG4/GammaConv/ConvCorrelations/AliAnalysisTaskGammaJet.cxx deleted file mode 100644 index f64b089e5df..00000000000 --- a/PWG4/GammaConv/ConvCorrelations/AliAnalysisTaskGammaJet.cxx +++ /dev/null @@ -1,694 +0,0 @@ -/************************************************************************** - * This file is property of and copyright by the ALICE HLT Project * - * ALICE Experiment at CERN, All rights reserved. * - * * - * Primary Author: Svein Lindal * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -/// @file AliAnalysisTaskGammaJet.cxx -/// @author Svein Lindal -/// @brief Class used to run conversion gamma/pion - hadron/jet analysis - - -#include -#include "TChain.h" -#include "TTree.h" -#include "TH1F.h" -#include "TCanvas.h" -#include "TString.h" -#include "TObjArray.h" - - -#include "TH2F.h" - -#include "AliAnalysisTask.h" -#include "AliAnalysisManager.h" -#include "AliAnalysisTaskGammaJet.h" - -#include "AliESDEvent.h" -#include "AliESDCaloCluster.h" -#include "AliESDInputHandler.h" - -#include "AliAODPWG4ParticleCorrelation.h" -#include "AliAODEvent.h" -#include "AliAODHandler.h" -#include "AliAODCaloCluster.h" -#include "AliAODConversionPhoton.h" -#include "AliAODJet.h" - -#include "AliAODInputHandler.h" - -#include "AliAnaConvIsolation.h" - -#include "AliAnaConvCorrPhoton.h" -#include "AliAnaConvCorrPhotonJet.h" -#include "AliAnaConvCorrPionJet.h" -#include "AliAnaConvCorrPion.h" - -#include "AliAODTrack.h" - -// Gamma - jet correlation analysis task -// Authors: Svein Lindal - - -using namespace std; - -ClassImp(AliAnalysisTaskGammaJet) - -//________________________________________________________________________ -AliAnalysisTaskGammaJet::AliAnalysisTaskGammaJet() : -AliAnalysisTaskSE(), - fOutputList(NULL), - fEtaLimit(0.8), - fDeltaAODFileName("AliAODGammaConversion.root"), - fGammaCutString("GammaConv"), - fPionCutString("GammaConv"), - fAnaIsolation(NULL), - fAnaIsolationArray(NULL), - fAnaPionArray(NULL), - fAnaPhotonArray(NULL), - fAnaPhotonJetArray(NULL), - fAnaPionJetArray(NULL), - fMinPt(1.0), - fMinNTracks(20) -{ - // Dummy Constructor -} - -//________________________________________________________________________________ -AliAnalysisTaskGammaJet::~AliAnalysisTaskGammaJet() { - //Destructor -} - - -//________________________________________________________________________ -AliAnalysisTaskGammaJet::AliAnalysisTaskGammaJet(const char *name) : - AliAnalysisTaskSE(name), - fOutputList(0), - fEtaLimit(0.8), - fDeltaAODFileName("AliAODGammaConversion.root"), - fGammaCutString("GammaConv"), - fPionCutString("GammaConv"), - fAnaIsolation(NULL), - fAnaIsolationArray(NULL), - fAnaPionArray(NULL), - fAnaPhotonArray(NULL), - fAnaPhotonJetArray(NULL), - fAnaPionJetArray(NULL), - fMinPt(1.0), - fMinNTracks(20) -{ - // Constructor - // Output slot #1 writes into a TList container - DefineOutput(1, TList::Class()); - - fAnaIsolation = new AliAnaConvIsolation(); - - fAnaPionArray = new TObjArray(); - fAnaPionArray->SetOwner(kTRUE); - - fAnaPhotonArray = new TObjArray(); - fAnaPhotonArray->SetOwner(kTRUE); - - fAnaPhotonJetArray = new TObjArray(); - fAnaPhotonJetArray->SetOwner(kTRUE); - - fAnaPionJetArray = new TObjArray(); - fAnaPionJetArray->SetOwner(kTRUE); - - fAnaIsolationArray = new TObjArray(); - fAnaIsolationArray->SetOwner(kTRUE); - - fhTracksMissingPt[0] = NULL; - fhTracksMissingPt[1] = NULL; - - - -} - -//________________________________________________________________________ -void AliAnalysisTaskGammaJet::UserExec(Option_t *) -{ - //Inherited from AliAnalysisTaskSE - - ///Get AOD event - AliAODEvent * aodEvent = GetAODEvent(); - if(!aodEvent) { - cout << "No AOD event!!" << endl; - return; - } - - TClonesArray * photons = GetConversionGammas(aodEvent); - if(!photons) { - cout << "No Conversion gamma!!" << endl; - return; - } - - TClonesArray * pions = GetConversionPions(aodEvent); - if(!pions) { - cout << "No Conversion pion branch!!" << endl; - return; - } - - TClonesArray * tracks = aodEvent->GetTracks(); - if(!tracks) { - cout << "Can't get tracks!!" << endl; - return; - } - - if(!((Entry() )%10000)) { - AliInfo(Form("%s ----> Processing event # %lld", CurrentFileName(), Entry())); - AliInfo(Form("%d %d", photons->GetEntriesFast(), pions->GetEntriesFast())); - } - - - if(pions->GetEntriesFast() > photons->GetEntriesFast() ) { - cout << "WTF!!!!"<GetEntriesFast() > 0) ) { - // cout << "Neext evetn !!!!!!!!!!!!!!!!" << Entry() << endl; - // } else { - // cout << "____________________________"<GetNumberOfTracks() < 2 && photons->GetEntriesFast() > 0 ) { - cout << "we have a photon but less than 2 tracks" << endl; - return; - } - - if(aodEvent->GetNumberOfTracks() < fMinNTracks) return; - - if( (photons->GetEntriesFast() > 0) ) { - ProcessConvGamma(photons, pions, tracks); - ProcessPions(pions, photons, tracks); - } - - - - TClonesArray * jets = aodEvent->GetJets(); - if(jets && jets->GetEntriesFast() > 0) { - for(int i = 0; i < fAnaPhotonJetArray->GetEntriesFast(); i++) { - AliAnaConvCorrPhotonJet * jetAna = dynamic_cast(fAnaPhotonJetArray->At(i)); - if(jetAna) { - for(Int_t iJet = 0; iJet < jets->GetEntriesFast(); iJet++) { - AliAODJet * jet = dynamic_cast(jets->At(iJet)); - if(jet) { - jetAna->DoJetAnalysisGamma(jet, photons, pions); - } - } - } - } - } - PostData(1, fOutputList); - -} - - - -//________________________________________________________________________ -void AliAnalysisTaskGammaJet::UserCreateOutputObjects() -{ - //Create histograms add, to outputlist - fOutputList = new TList(); - fOutputList->SetOwner(kTRUE); - - - fhTracksMissingPt[0] = new TH2F("hpttracksmissing", "hpttracksmissing",200, 0, 200, 200, 0, 200); - fOutputList->Add(fhTracksMissingPt[0]); - fhTracksMissingPt[1] = new TH2F("hpttrackpresent", "hptbothtrackspresent" ,200, 0, 200, 200, 0, 200); - fOutputList->Add(fhTracksMissingPt[1]); - - fAnaIsolation->CreateHistograms(); - fOutputList->Add(fAnaIsolation->GetHistograms()); - - for(int i = 0; i < fAnaIsolationArray->GetEntriesFast(); i++) { - AliAnaConvIsolation * isoAna = dynamic_cast(fAnaIsolationArray->At(i)); - if(isoAna) { - isoAna->CreateHistograms(); - fOutputList->Add(isoAna->GetHistograms()); - } else { - AliError("problem getting ana pointer!!!"); - cout << i << endl; - } - } - - for(int i = 0; i < fAnaPhotonArray->GetEntriesFast(); i++) { - AliAnaConvCorrPhoton * photonAna = dynamic_cast(fAnaPhotonArray->At(i)); - if(photonAna) { - photonAna->CreateHistograms(); - fOutputList->Add(photonAna->GetHistograms()); - } else { - AliError("problem getting ana pointer!!!"); - } - } - - - for(int i = 0; i < fAnaPionArray->GetEntriesFast(); i++) { - AliAnaConvCorrPion * pionAna = dynamic_cast(fAnaPionArray->At(i)); - if(pionAna) { - pionAna->CreateHistograms(); - fOutputList->Add(pionAna->GetHistograms()); - } else { - AliError("problem getting ana pointer!!!"); - } - } - - for(int i = 0; i < fAnaPhotonJetArray->GetEntriesFast(); i++) { - AliAnaConvCorrPhotonJet * jetAna = dynamic_cast(fAnaPhotonJetArray->At(i)); - if(jetAna) { - jetAna->CreateHistograms(); - fOutputList->Add(jetAna->GetHistograms()); - } else { - AliError("problem getting jet ana pointer!!!"); - } - } - - for(int i = 0; i < fAnaPionJetArray->GetEntriesFast(); i++) { - AliAnaConvCorrPionJet * jetAna = dynamic_cast(fAnaPionJetArray->At(i)); - if(jetAna) { - jetAna->CreateHistograms(); - fOutputList->Add(jetAna->GetHistograms()); - } else { - AliError("problem getting jet ana pointer!!!"); - } - } - - - - PostData(1, fOutputList); - - -} - - - - - -//______________________________________________________________________________________________ -void AliAnalysisTaskGammaJet::ProcessCalorimeters( const AliAODEvent * const aodEvent ) { - //See header file for documentation - TClonesArray * clusters = aodEvent->GetCaloClusters(); - - - for(int ic = 0; ic < clusters->GetEntriesFast(); ic++) { - AliAODCaloCluster * cluster = dynamic_cast(clusters->At(ic)); - if (!cluster) { - AliError(Form("Error getting cluster")); - continue; - } - - - if (cluster->GetNCells() < 6) continue; - if (cluster->GetEmcCpvDistance() < 15) continue; - - TLorentzVector tlvec; - - AliAODVertex * vertex = aodEvent->GetPrimaryVertex(); - Double_t vertexPosition[3]; - vertex->GetXYZ(vertexPosition); - cluster->GetMomentum(tlvec, vertexPosition); - //if (tlvec.Pt() < GetMinPt()) continue; - - } - -} - -//______________________________________________________________________________________________ -Bool_t AliAnalysisTaskGammaJet::EventIsSynced(const TClonesArray * const tracks, const TClonesArray * const convGamma, const TClonesArray * const pions) { - //See header file for documentation - - for (Int_t iPhot = 0; iPhot < convGamma->GetEntriesFast(); iPhot++) { - AliAODConversionPhoton * photon = dynamic_cast(convGamma->At(iPhot)); - if(photon) { - AliAODTrack * track1 = NULL; - AliAODTrack * track2 = NULL; - for(Int_t i = 0; i < tracks->GetEntriesFast(); i++) { - AliAODTrack * track = dynamic_cast(tracks->At(i)); - if(track) { - if(track->GetID() == photon->GetLabel1()) track1 = track; - else if (track->GetID() == photon->GetLabel2()) track2 = track; - if(track1 && track2) break; - } - } - - if(track1 && track2) { - Float_t totE = track1->E() + track2->E(); - if(TMath::Abs(totE - photon->E()) > 1.0) { - cout << "BALLE BALLE "<P()) << endl; - - cout << track2->Px() << " " - << track2->Py() << " " - << track2->Pz() << " " - << track2->P() << " " - << track2->E() << endl; - - cout << track1->Px() << " " - << track1->Py() << " " - << track1->Pz() << " " - << track1->P() << " " - << track1->E() << endl; - - - cout << track1->Px() + track2->Px() << " " - << track1->Py() + track2->Py() << " " - << track1->Pz() + track2->Pz() << " " - << track1->P() + track2->P() << " " - << track1->E() + track2->E() << endl; - - cout << photon->Px() << " " << photon->Py() << " " << photon->Pz() << " " << photon->P() << " " << photon->E() << endl; - return kFALSE; - } - } else { - cout << Entry() << " " << convGamma->GetEntriesFast() << " " << photon->GetLabel1() << " " << photon->GetLabel2() << endl; - cout << "Could not get both tracks!!! " <GetEntriesFast(); i++) { - AliAODTrack * track = dynamic_cast(tracks->At(i)); - if(track) { - if(track->GetID() == photon->GetLabel1()) track1 = track; - else if (track->GetID() == photon->GetLabel2()) track2 = track; - if(track1 && track2) break; - } - } - - if(track1 && track2) { - return kTRUE; - } - cout << "Could not get both tracks!!! labels " << photon->GetLabel1() << " " << photon->GetLabel2() <(photons->At(pion->GetLabel1())); - AliAODConversionPhoton * photon2 = dynamic_cast(photons->At(pion->GetLabel2())); - - if(photon1 && photon2) { - if( BothTracksPresent(photon1, tracks) && BothTracksPresent(photon1, tracks)) { - return kTRUE; - } - } else { - cout << "can't find both photons "<< endl; - } - - return kFALSE; -} - - - - -//___________________________________________________________________________________________ -void AliAnalysisTaskGammaJet::ProcessConvGamma( const TClonesArray * convGamma, const TClonesArray * const pions, const TClonesArray * tracks ) { - //See header file for documentation - - - for (Int_t iPhot = 0; iPhot < convGamma->GetEntriesFast(); iPhot++) { - AliAODConversionPhoton * photon = dynamic_cast(convGamma->At(iPhot)); - if(!photon) { - AliError(Form("ERROR: Could not receive ga %d\n", iPhot)); - continue; - } - - Bool_t btp = BothTracksPresent(photon, tracks); - fhTracksMissingPt[btp]->Fill(photon->Pt(), tracks->GetEntriesFast()); - if(!btp || photon->Pt() < fMinPt || TMath::Abs(photon->Eta()) > fEtaLimit) { - continue; - } - - Bool_t leading = kTRUE; - Bool_t decayPion = IsDecayPion(iPhot, pions); - - for(Int_t i = 0; i < fAnaIsolationArray->GetEntriesFast(); i ++) { - AliAnaConvIsolation * isoAna = dynamic_cast(fAnaIsolationArray->At(i)); - if(isoAna) isoAna->IsIsolated(photon, tracks, leading); - } - - Bool_t isolated = fAnaIsolation->IsIsolated(photon, tracks, leading); - if(leading) { - for(Int_t i = 0; i < fAnaPhotonArray->GetEntriesFast(); i ++) { - AliAnaConvCorrPhoton * ana = static_cast(fAnaPhotonArray->At(i)); - if(ana) { - ana->CorrelateWithHadrons(photon, tracks, isolated, decayPion); - } - } - - TClonesArray * jets = GetAODEvent()->GetJets(); - if(jets) { - for(Int_t i = 0; i < fAnaPhotonJetArray->GetEntriesFast(); i ++) { - AliAnaConvCorrPhotonJet * ana = static_cast(fAnaPhotonJetArray->At(i)); - if(ana) { - ana->CorrelateWithHadrons(photon, jets, isolated); - } - } - } else { - cout << "No jets "<GetEntriesFast(); iPi++) { - AliAODConversionPhoton * pion = dynamic_cast(pions->At(iPi)); - if(!pion) { - AliError(Form("ERROR: Could not receive ga %d\n", iPi)); - continue; - } - - if (!BothGammaPresent(pion, photons, tracks) || pion->Pt() < fMinPt || TMath::Abs(pion->Eta()) > fEtaLimit ) { - return; - } - - - Int_t trackLabels[4] = {-1, -1, -1, -1}; - GetPionGrandChildren(pion, photons, trackLabels); - Bool_t leading = kTRUE; - - for(Int_t i = 0; i < fAnaIsolationArray->GetEntriesFast(); i ++) { - AliAnaConvIsolation * isoAna = dynamic_cast(fAnaIsolationArray->At(i)); - if(isoAna) isoAna->IsIsolated(pion, tracks, 4, trackLabels, leading); - } - - Bool_t isolated = fAnaIsolation->IsIsolated(pion, tracks, 4, trackLabels, leading); - if(leading) { - for(Int_t i = 0; i < fAnaPionArray->GetEntriesFast(); i ++) { - AliAnaConvCorrPion * ana = dynamic_cast(fAnaPionArray->At(i)); - if(ana) ana->CorrelateWithHadrons(pion, tracks, isolated, 4, trackLabels ); - } - - - TClonesArray * jets = GetAODEvent()->GetJets(); - if(jets) { - for(Int_t i = 0; i < fAnaPionJetArray->GetEntriesFast(); i ++) { - AliAnaConvCorrPionJet * ana = static_cast(fAnaPionJetArray->At(i)); - if(ana) { - ana->CorrelateWithHadrons(pion, jets, isolated); - } - } - } else { - cout << "No jets "<GetEntriesFast(); iPhot++) { - // AliAODConversionPhoton * photon = dynamic_cast(photons->At(iPhot)); - // if(photon) { - // for (Int_t iPhot2 = iPhot+1; iPhot2 < photons->GetEntriesFast(); iPhot2++) { - // AliAODConversionPhoton * photon2 = dynamic_cast(photons->At(iPhot2)); - // if(photon2) { - // Int_t trackLabels[4] = {photon->GetTrackLabel(0), photon->GetTrackLabel(1), photon2->GetTrackLabel(0), photon2->GetTrackLabel(1)}; - // AliAODConversionPhoton * pion = new AliAODConversionPhoton(photon, photon2); - // Bool_t leading = kTRUE; - // Bool_t isolated = fAnaIsolation->IsIsolated(pion, tracks, 4, trackLabels, leading); - // if(leading) { - // for(Int_t i = 0; i < fAnaPionArray->GetEntriesFast(); i ++) { - // AliAnaConvCorrPion * ana = dynamic_cast(fAnaPionArray->At(i)); - // if(ana) ana->CorrelateWithHadrons(pion, tracks, isolated, 4, trackLabels ); - // } - // delete pion; - // } - // } - // } - // } - // } -} - -///_______________________________________________________________________________________________ -Bool_t AliAnalysisTaskGammaJet::IsDecayPion(Int_t iPhot, const TClonesArray * const pions) { - //See header file for documentation - - for(int ip = 0; ip < pions->GetEntriesFast(); ip++) { - AliAODConversionPhoton * pion = dynamic_cast(pions->At(ip)); - if(pion) { - if(pion->GetLabel1() == iPhot || pion->GetLabel2() == iPhot) - - return kTRUE; - } else { - AliError("pion corrupted!"); - } - } - - return kFALSE; -} - - -///_______________________________________________________________________________ -Bool_t AliAnalysisTaskGammaJet::UserNotify() { - //See header file for documentation - - AliInfo(Form("%s ----> Processing event # %lld", CurrentFileName(), Entry())); - - // AliAnaConvCorrPhoton * phJetAna = dynamic_cast(fAnaPhotonArray->At(0)); - // phJetAna->PrintStatistics(); - - return kTRUE; - -} - -///_______________________________________________________________________________ -void AliAnalysisTaskGammaJet::NotifyRun() { - //See header file for documentation - - AliInfo(Form("we have a new run: %d", fCurrentRunNumber)); - cout << Form("we have a new run: %d", fCurrentRunNumber) << endl; - -} - -///_______________________________________________________________________________ -void AliAnalysisTaskGammaJet::GetPionGrandChildren(const AliAODConversionPhoton * pion, const TClonesArray * photons, Int_t* trackLabels) { - ///Get the track labels of the electrons reconstructed as gamma forming the pion - - for(Int_t i = 0; i< 2; i++) { - AliAODConversionPhoton * gamma = dynamic_cast(photons->At(pion->GetLabel(i))); - - if(gamma) { - for(Int_t j = 0; j< 2; j++) { - trackLabels[ i*2+ j] = gamma->GetLabel(j); - } - - } else { - cout << "AliAnaConvCorrPion::GetTrackLabels() :: Not good!!!"<(InputEvent()); - - - if(!aodEvent) { - cout << "!!!!!!!!!!!!!!!!!!!!!!!!Getting AODEvent();" << endl; - aodEvent = AODEvent(); - } else { - //cout << "got aod from input event1" << endl; - } - return aodEvent; - -} - -//_____________________________________________________________________ -TClonesArray * AliAnalysisTaskGammaJet::GetConversionGammas(const AliAODEvent * aodEvent) { - - //Get Conversion gamma branch of AOD. First try standard AOD - TClonesArray * convGamma = dynamic_cast(aodEvent->FindListObject(Form("%s_gamma", fGammaCutString.Data()))); - - //If it's there, send it back - if(convGamma) { - //cout << "found conv gamma branch in aod event!!!"< 0) ) return NULL; - - AliAODHandler * aodHandler = dynamic_cast(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()); - if(aodHandler) { - AliAODExtension * gExt = dynamic_cast(aodHandler->GetExtensions()->FindObject(fDeltaAODFileName)); - if(gExt) { - AliAODEvent * gcEvent = gExt->GetAOD(); - return dynamic_cast(gcEvent->FindListObject(Form("%s_gamma", fGammaCutString.Data()))); - } - } - - cout << "could not find branch " << Form("%s_gamma", fPionCutString.Data()) << endl; - return NULL; -} - - - -///_____________________________________________________________________ -TClonesArray * AliAnalysisTaskGammaJet::GetConversionPions(const AliAODEvent * aodEvent) { - - //Get Conversion pion branch of AOD. First try standard AOD - TClonesArray * convGamma = dynamic_cast(aodEvent->FindListObject(Form("%s_Pi0", fPionCutString.Data()) )); - - //If it's there, send it back - if(convGamma) return convGamma; - - - //If AOD not in standard file have to locate it in delta AOD - if( !(fDeltaAODFileName.Length() > 0) ) return NULL; - - AliAODHandler * aodHandler = dynamic_cast(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()); - if(aodHandler) { - AliAODExtension * gExt = dynamic_cast(aodHandler->GetExtensions()->FindObject(fDeltaAODFileName)); - if(gExt) { - AliAODEvent * gcEvent = gExt->GetAOD(); - return dynamic_cast(gcEvent->FindListObject(Form("%s_Pi0", fPionCutString.Data()))); - } - } - return NULL; -} diff --git a/PWG4/GammaConv/ConvCorrelations/AliAnalysisTaskGammaJet.h b/PWG4/GammaConv/ConvCorrelations/AliAnalysisTaskGammaJet.h deleted file mode 100644 index 26a8132581b..00000000000 --- a/PWG4/GammaConv/ConvCorrelations/AliAnalysisTaskGammaJet.h +++ /dev/null @@ -1,117 +0,0 @@ -/* This file is property of and copyright * - * ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/// @file AliAnalysisTaskGammaJet.h -/// @author Svein Lindal -/// @brief Class used to run isolation studies of conversion gamma / pions - - - -#ifndef ALIANALYSISTASKGAMMAJET_H -#define ALIANALYSISTASKGAMMAJET_H - - - -class TH1F; -class AliESDEvent; -class AliGammaConversionAODObject; -class AliAODConversionPhoton; -class AliAODPWG4ParticleCorrelation; -class AliAODPWG4Particle; -class TObjArray; -class TString; -class TClonesArray; - - -#include "AliAnaConvIsolation.h" -#include "AliAnalysisTaskSE.h" - -class AliAnalysisTaskGammaJet : public AliAnalysisTaskSE { - -public: - - AliAnalysisTaskGammaJet(); - AliAnalysisTaskGammaJet(const char *name); - virtual ~AliAnalysisTaskGammaJet(); - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - void SetDeltaAODFileName(TString string) { fDeltaAODFileName = string;} - - AliAnaConvIsolation * GetIsolation() const {return fAnaIsolation;} - void SetIsolation( AliAnaConvIsolation * isolation) { fAnaIsolation = isolation; } - - void SetGammaCutId(TString cut) { fGammaCutString = Form("GammaConv_%s", cut.Data());} - void SetPionCutId(TString cut) { fPionCutString = Form("GammaConv_%s", cut.Data());} - - void SetMinPt(Float_t minpt) { fMinPt = minpt;} - void SetMinNTracks(Int_t nTracks) { fMinNTracks = nTracks; } - - void AddIsolationAna(TObject * isoAna) { fAnaIsolationArray->Add(isoAna);} - void AddPhotonHadronAna(TObject * ana) { fAnaPhotonArray->Add(ana);} - void AddPhotonJetAna(TObject * ana) { fAnaPhotonJetArray->Add(ana);} - void AddPionJetAna(TObject * ana) { fAnaPionJetArray->Add(ana);} - void AddPionHadronAna(TObject * ana) { fAnaPionArray->Add(ana);} - - void GetPionGrandChildren(const AliAODConversionPhoton * const pion, const TClonesArray * photons, Int_t* trackLabels); - void SetEtaLimits(Float_t eta) { fEtaLimit = eta; } - - - private: - - void NotifyRun(); - Bool_t UserNotify(); - Bool_t EventIsSynced(const TClonesArray * const tracks, const TClonesArray * const convGamma, const TClonesArray * const pions); - Bool_t BothTracksPresent(const AliAODConversionPhoton * const photon, const TClonesArray * const tracks) const; - Bool_t BothGammaPresent(const AliAODConversionPhoton * const pion, const TClonesArray * const photons, const TClonesArray * const tracks) const; - AliAODEvent * GetAODEvent(); - - //Get Conversion gammas branch - TClonesArray * GetConversionGammas(const AliAODEvent * aodEvent); - TClonesArray * GetConversionPions(const AliAODEvent * aodEvent); - - //Process conv gamma - void ProcessConvGamma( const TClonesArray * const convGamma, const TClonesArray * const pions, const TClonesArray * const tracks); - void ProcessPions( const TClonesArray * const pions, const TClonesArray * const photons, const TClonesArray * const tracks); - - //Process calorimeters - void ProcessCalorimeters( const AliAODEvent * const aodEvent ); - - - //Does any pions have given photon (iPhot) index listed as daughter - Bool_t IsDecayPion(Int_t iPhot, const TClonesArray * const pions); //see above - - - TList *fOutputList; //! Output list - Float_t fEtaLimit; - TString fDeltaAODFileName; //! File where Gamma Conv AOD is located, if not in default AOD - TString fGammaCutString; //! The cut string of the conversion analysis used to produce input AOD - TString fPionCutString; //! The cut string of the conversion analysis used to produce input AOD - - - AliAnaConvIsolation * fAnaIsolation; - - TObjArray * fAnaIsolationArray; //!Array of isolation analysis objects - TObjArray * fAnaPionArray; //!Array of pion - hadron ana objects - TObjArray * fAnaPhotonArray; //!Array of photon - hadron ana objects - TObjArray * fAnaPhotonJetArray; //!Array of photon - jet ana objects - TObjArray * fAnaPionJetArray; //!Array of photon - jet ana objects - - Float_t fMinPt; //Minimum pt for leading particles - Int_t fMinNTracks; //Minimum number of tracks in event - - TH2F * fhTracksMissingPt[2]; - - - - - AliAnalysisTaskGammaJet(const AliAnalysisTaskGammaJet&); // not implemented - AliAnalysisTaskGammaJet& operator=(const AliAnalysisTaskGammaJet&); // not implemented - - ClassDef(AliAnalysisTaskGammaJet, 4); // example of analysis -}; - -#endif diff --git a/PWG4/PWG4GammaConvLinkDef.h b/PWG4/PWG4GammaConvLinkDef.h index ba7ffc71492..0a10f8a06bb 100644 --- a/PWG4/PWG4GammaConvLinkDef.h +++ b/PWG4/PWG4GammaConvLinkDef.h @@ -11,7 +11,6 @@ #pragma link C++ class AliGammaConversionBGHandler+; #pragma link C++ class AliAnalysisTaskGammaConvDalitz+; #pragma link C++ class AliAnalysisTaskGCPartToPWG4Part+; -#pragma link C++ class AliAnalysisTaskGammaJet+; #pragma link C++ class AliAnaConvIsolation+; #pragma link C++ class AliAnaConvCorrBase++; -- 2.43.5