From 3bc109a98cdd33fb028558c9304a916bf8b03415 Mon Sep 17 00:00:00 2001 From: morsch Date: Wed, 16 Jan 2002 23:03:57 +0000 Subject: [PATCH] Build list of tracks associated to jet. --- EMCAL/AliEMCALJetFinder.cxx | 127 +++++++++++++++++++++++++++++++----- EMCAL/AliEMCALJetFinder.h | 109 +++++++++++++++++-------------- 2 files changed, 169 insertions(+), 67 deletions(-) diff --git a/EMCAL/AliEMCALJetFinder.cxx b/EMCAL/AliEMCALJetFinder.cxx index 45da980d08a..b5ff17a2cd9 100644 --- a/EMCAL/AliEMCALJetFinder.cxx +++ b/EMCAL/AliEMCALJetFinder.cxx @@ -36,9 +36,13 @@ ClassImp(AliEMCALJetFinder) AliEMCALJetFinder::AliEMCALJetFinder() { // Default constructor - fJets = 0; - fNjets = 0; - fLego = 0; + fJets = 0; + fNjets = 0; + fLego = 0; + fTrackList = 0; + fPtT = 0; + fEtaT = 0; + fPhiT = 0; } AliEMCALJetFinder::AliEMCALJetFinder(const char* name, const char *title) @@ -54,6 +58,11 @@ AliEMCALJetFinder::AliEMCALJetFinder(const char* name, const char *title) fPhiCell[i] = 0.; } fLego = 0; + fTrackList = 0; + fTrackList = 0; + fPtT = 0; + fEtaT = 0; + fPhiT = 0; } @@ -72,6 +81,7 @@ AliEMCALJetFinder::~AliEMCALJetFinder() + #ifndef WIN32 # define jet_finder_ua1 jet_finder_ua1_ # define hf1 hf1_ @@ -123,6 +133,14 @@ void AliEMCALJetFinder::Find() jet_finder_ua1(fNcell, fNtot, fEtCell, fEtaCell, fPhiCell, min_move, max_move, mode, prec_bg, ierror); // Write result to output + Int_t njet = Njets(); + for (Int_t nj=0; njGetHeader()->GetEvent(); gAlice->TreeR()->Fill(); char hname[30]; @@ -352,21 +375,43 @@ void AliEMCALJetFinder::FillFromTracks(Int_t flag, Int_t ich) // // Access particle information Int_t npart = (gAlice->GetHeader())->GetNprimary(); - for (Int_t part=2; partParticle(part); Int_t mpart = MPart->GetPdgCode(); Int_t child1 = MPart->GetFirstDaughter(); Float_t pT = MPart->Pt(); Float_t phi = MPart->Phi(); - Float_t theta = MPart->Theta(); - Float_t eta = -TMath::Log(TMath::Tan(theta/2.)); + Float_t eta = MPart->Eta(); // if (part == 6 || part == 7) // { // printf("\n Simulated Jet (pt, eta, phi): %d %f %f %f", // part-5, pT, eta, phi); // } - - if (pT == 0.) continue; + + fTrackList[part] = 0; + fPtT[part] = pT; + fEtaT[part] = eta; + fPhiT[part] = phi; + + if (part < 2) continue; + if (pT == 0 || pT < fPtCut) continue; // charged or neutral if (ich == 0) { TParticlePDG* pdgP = MPart->GetPDG(); @@ -383,6 +428,7 @@ void AliEMCALJetFinder::FillFromTracks(Int_t flag, Int_t ich) if (child1 >= 0 && child1 < npart) continue; // printf("\n sel:%5d %5d %5d %8.2f %8.2f %8.2f", // part, mpart, child1, eta, phi, pT); + fTrackList[part] = 1; fLego->Fill(eta, phi, pT); } // primary loop DumpLego(); @@ -430,10 +476,10 @@ void AliEMCALJetFinder::FillFromHits(Int_t flag) // Int_t index = mHit->GetId(); // cell index // Float_t eta, phi; // geom->EtaPhiFromIndex(index, eta, phi); - Float_t r = TMath::Sqrt(x*x+y*y); - Float_t theta = TMath::ATan2(r,z); - Float_t eta = -TMath::Log(TMath::Tan(theta/2.)); - Float_t phi = TMath::ATan2(y,x); + Float_t r = TMath::Sqrt(x*x+y*y); + Float_t theta = TMath::ATan2(r,z); + Float_t eta = -TMath::Log(TMath::Tan(theta/2.)); + Float_t phi = TMath::ATan2(y,x); fLego->Fill(eta, phi, eloss); // if (eloss > 1.) printf("\nx,y,z %f %f %f %f %f", // r, z, eta, phi, eloss); @@ -443,6 +489,51 @@ void AliEMCALJetFinder::FillFromHits(Int_t flag) DumpLego(); } +void AliEMCALJetFinder::FindTracksInJetCone() +{ +// +// Build list of tracks inside jet cone +// +// Loop over jets + Int_t njet = Njets(); + for (Int_t nj = 0; nj < njet; nj++) + { + Float_t etaj = JetEtaW(nj); + Float_t phij = JetPhiW(nj); + Int_t nT = 0; // number of associated tracks + +// Loop over particles + for (Int_t part = 0; part < fNt; part++) { + if (!fTrackList[part]) continue; + Float_t phi = fPhiT[part]; + Float_t eta = fEtaT[part]; + Float_t dr = TMath::Sqrt((etaj-eta)*(etaj-eta) + + (phij-phi)*(phij-phi)); + if (dr < fConeRadius) { + fTrackList[part] = nj+2; + nT++; + } // < ConeRadius ? + } // particle loop + Float_t* ptT = new Float_t[nT]; + Float_t* etaT = new Float_t[nT]; + Float_t* phiT = new Float_t[nT]; + Int_t iT = 0; + for (Int_t part = 0; part < fNt; part++) { + if (fTrackList[part] == nj+2) { + ptT [iT] = fPtT [part]; + etaT[iT] = fEtaT[part]; + phiT[iT] = fPhiT[part]; + iT++; + } // particle associated + } // particle loop + fJetT[nj]->SetTrackList(nT, ptT, etaT, phiT); + delete[] ptT; + delete[] etaT; + delete[] phiT; + } // jet loop loop +} + + void hf1(Int_t& id, Float_t& x, Float_t& wgt) { diff --git a/EMCAL/AliEMCALJetFinder.h b/EMCAL/AliEMCALJetFinder.h index e8d95267399..7ee67af6e40 100644 --- a/EMCAL/AliEMCALJetFinder.h +++ b/EMCAL/AliEMCALJetFinder.h @@ -16,56 +16,67 @@ class TH2F; class AliEMCALJetFinder : public TTask { public: - AliEMCALJetFinder(); - AliEMCALJetFinder(const char* name, const char *title); - virtual ~AliEMCALJetFinder(); - virtual void Find(Int_t ncell, Int_t ncell_tot, Float_t etc[30000], - Float_t etac[30000], Float_t phic[30000], - Float_t min_move, Float_t max_move, Int_t mode, - Float_t prec_bg, Int_t ierror); - virtual void Find(); - virtual void Test(); - // Geometry - virtual void SetCellSize(Float_t eta, Float_t phi); - // Parameters - virtual void SetConeRadius(Float_t par); - virtual void SetEtSeed(Float_t par); - virtual void SetMinJetEt(Float_t par); - virtual void SetMinCellEt(Float_t par); - // Results - virtual Int_t Njets(); - virtual Float_t JetEnergy(Int_t); - virtual Float_t JetPhiL(Int_t); - virtual Float_t JetPhiW(Int_t); - virtual Float_t JetEtaL(Int_t); - virtual Float_t JetEtaW(Int_t); - virtual TH2F* GetLego() {return fLego;} - // I/O - virtual void FillFromHits(Int_t flag = 0); - virtual void FillFromTracks(Int_t flag = 0, Int_t ich = 0); - virtual void AddJet(const AliEMCALJet& jet); - virtual void WriteJets(); - virtual void ResetJets(); - virtual TClonesArray* Jets() {return fJets;} + AliEMCALJetFinder(); + AliEMCALJetFinder(const char* name, const char *title); + virtual ~AliEMCALJetFinder(); + virtual void Find(Int_t ncell, Int_t ncell_tot, Float_t etc[30000], + Float_t etac[30000], Float_t phic[30000], + Float_t min_move, Float_t max_move, Int_t mode, + Float_t prec_bg, Int_t ierror); + virtual void Find(); + virtual void FindTracksInJetCone(); + virtual void Test(); + // Geometry + virtual void SetCellSize(Float_t eta, Float_t phi); + // Parameters + virtual void SetConeRadius(Float_t par); + virtual void SetEtSeed(Float_t par); + virtual void SetMinJetEt(Float_t par); + virtual void SetMinCellEt(Float_t par); + virtual void SetPtCut(Float_t par); + // Results + virtual Int_t Njets(); + virtual Float_t JetEnergy(Int_t); + virtual Float_t JetPhiL(Int_t); + virtual Float_t JetPhiW(Int_t); + virtual Float_t JetEtaL(Int_t); + virtual Float_t JetEtaW(Int_t); + virtual TH2F* GetLego() {return fLego;} + // I/O + virtual void FillFromHits(Int_t flag = 0); + virtual void FillFromTracks(Int_t flag = 0, Int_t ich = 0); + virtual void AddJet(const AliEMCALJet& jet); + virtual void WriteJets(); + virtual void ResetJets(); + virtual TClonesArray* Jets() {return fJets;} private: - virtual void BookLego(); - virtual void DumpLego(); - virtual void ResetMap(); + virtual void BookLego(); + virtual void DumpLego(); + virtual void ResetMap(); protected: - TClonesArray* fJets; //! List of Jets - TH2F* fLego; //! Lego Histo - Int_t fNjets; //! Number of Jets - Float_t fDeta; //! eta cell size - Float_t fDphi; //! phi cell size - Int_t fNcell; //! number of cells - Int_t fNtot; //! total number of cells - Int_t fNbinEta; //! number of cells in eta - Int_t fNbinPhi; //! number of cells in phi - Float_t fEtCell[30000]; //! Cell Energy - Float_t fEtaCell[30000]; //! Cell eta - Float_t fPhiCell[30000]; //! Cell phi - - ClassDef(AliEMCALJetFinder,1) // JetFinder for EMCAL -} ; + TClonesArray* fJets; //! List of Jets + TH2F* fLego; //! Lego Histo + AliEMCALJet* fJetT[10]; //! Jet temporary storage + Float_t fConeRadius; // Cone radius + Float_t fPtCut; // Pt cut on charged tracks + Int_t fNjets; //! Number of Jets + Float_t fDeta; //! eta cell size + Float_t fDphi; //! phi cell size + Int_t fNcell; //! number of cells + Int_t fNtot; //! total number of cells + Int_t fNbinEta; //! number of cells in eta + Int_t fNbinPhi; //! number of cells in phi + Float_t fEtCell[30000]; //! Cell Energy + Float_t fEtaCell[30000]; //! Cell eta + Float_t fPhiCell[30000]; //! Cell phi + Int_t* fTrackList; //! List of selected tracks + Int_t fNt; //! number of tracks + Float_t* fPtT; //! Pt of tracks in jet cone + Float_t* fEtaT; //! Eta of tracks in jet cone + Float_t* fPhiT; //! Phi of tracks in jet cone + ClassDef(AliEMCALJetFinder,2) // JetFinder for EMCAL +} +; #endif // ALIEMCALJetFinder_H + -- 2.43.0