1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 //---------------------------------------------------------------------
18 // Stores the output of a jet algorithm
19 // Author: jgcn@mda.cinvestav.mx
20 //---------------------------------------------------------------------
22 #include <Riostream.h>
23 #include <TClonesArray.h>
24 #include <TLorentzVector.h>
30 ////////////////////////////////////////////////////////////////////////
37 fJets = new TClonesArray("TLorentzVector",1000);
41 fPtFromSignal=TArrayF();
42 fMultiplicities=TArrayI();
45 ////////////////////////////////////////////////////////////////////////
56 ////////////////////////////////////////////////////////////////////////
58 Bool_t AliJet::OutOfRange(Int_t i, const char *s) const
60 // checks if i is a valid index. s= name of calling method
61 if (i >= fNJets || i < 0) {
62 cout << s << " Index " << i << " out of range" << endl;
68 ////////////////////////////////////////////////////////////////////////
70 TLorentzVector* AliJet::GetJet(Int_t i)
73 if (OutOfRange(i, "AliJet::GetJet:")) return 0;
75 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
79 ////////////////////////////////////////////////////////////////////////
81 Int_t AliJet::GetMultiplicity(Int_t i)
83 // gets multiplicity of i-jet
84 if (OutOfRange(i, "AliJet::GetMultiplicity:")) return 0;
85 return fMultiplicities[i];
88 ////////////////////////////////////////////////////////////////////////
90 Double_t AliJet::GetPx(Int_t i)
92 // Get Px component of jet i
93 if (OutOfRange(i, "AliJet::GetPx:")) return -1e30;
95 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
99 ////////////////////////////////////////////////////////////////////////
101 Double_t AliJet::GetPy(Int_t i)
103 // Get Py component of jet i
104 if (OutOfRange(i, "AliJet::GetPy:")) return -1e30;
106 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
110 ////////////////////////////////////////////////////////////////////////
112 Double_t AliJet::GetPz(Int_t i)
114 // Get Pz component of jet i
115 if (OutOfRange(i, "AliJet::GetPz:")) return -1e30;
117 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
121 ////////////////////////////////////////////////////////////////////////
123 Double_t AliJet::GetP(Int_t i)
125 // Get momentum of jet i
126 if (OutOfRange(i, "AliJet::GetP:")) return -1e30;
128 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
132 ////////////////////////////////////////////////////////////////////////
134 Double_t AliJet::GetE(Int_t i)
136 // Get energy of jet i
137 if (OutOfRange(i, "AliJet::GetE:")) return -1e30;
139 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
143 ////////////////////////////////////////////////////////////////////////
145 Double_t AliJet::GetPt(Int_t i)
147 // Get transverse momentum of jet i
148 if (OutOfRange(i, "AliJet::GetPt:")) return -1e30;
150 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
154 ////////////////////////////////////////////////////////////////////////
156 Double_t AliJet::GetEta(Int_t i)
159 if (OutOfRange(i, "AliJet::GetEta:")) return -1e30;
161 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
165 ////////////////////////////////////////////////////////////////////////
167 Double_t AliJet::GetPhi(Int_t i)
170 if (OutOfRange(i, "AliJet::GetPhi:")) return -1e30;
172 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
173 return ( (lv->Phi() < 0) ? (lv->Phi()) + 2. * TMath::Pi() : lv->Phi());
176 ////////////////////////////////////////////////////////////////////////
178 Double_t AliJet::GetTheta(Int_t i)
180 // Get theta of jet i
181 if (OutOfRange(i, "AliJet::GetTheta:")) return -1e30;
183 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
187 ////////////////////////////////////////////////////////////////////////
189 Double_t AliJet::GetMass(Int_t i)
191 // Get invariant mass of jet i
192 if (OutOfRange(i, "AliJet::GetMass:")) return -1e30;
194 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
198 ////////////////////////////////////////////////////////////////////////
201 void AliJet::AddJet(Double_t px, Double_t py, Double_t pz, Double_t e)
203 // Add new jet to the list
204 new ((*fJets)[fNJets++]) TLorentzVector(px,py,pz,e);
207 ////////////////////////////////////////////////////////////////////////
209 void AliJet::SetInJet(Int_t* j)
211 // set information of which input object belongs
212 // to each jet. filled in by AliJetFinder
213 if (fNInput>0) fInJet.Set(fNInput, j);
216 ////////////////////////////////////////////////////////////////////////
218 void AliJet::SetPtFromSignal(Float_t* p)
220 // set information of percentage of pt of jets
221 // coming from signal (ie Pythia)
222 if (fNJets>0) fPtFromSignal.Set(fNJets, p);
225 ////////////////////////////////////////////////////////////////////////
227 void AliJet::SetMultiplicities(Int_t* m)
229 // set information of jet multiplicities
230 // filled in by AliJetFinder
231 if (fNJets>0) fMultiplicities.Set(fNJets, m);
234 ////////////////////////////////////////////////////////////////////////
236 void AliJet::ClearJets(Option_t *option)
239 fJets->Clear(option);
242 fMultiplicities.Set(0);
246 ////////////////////////////////////////////////////////////////////////
248 void AliJet::PrintJets()
250 // Print jet information
252 cout << " AliJet::PrintJets: There are no jets in this event " << endl;
255 cout << " AliJet::PrintJets: There are " << fNJets
256 << " jets in this event" << endl;
257 for(Int_t i=0;i<fNJets;i++) {
258 cout << " Jet " << i << " (px,py,pz,en)=(" << GetPx(i)
263 cout << " (pt,eta,phi)=(" << GetPt(i)
265 << "," << GetPhi(i) << ")" << endl;
266 cout << " # of tracks =" << GetMultiplicity(i) << endl;