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 **************************************************************************/
18 //---------------------------------------------------------------------
20 // Stores the output of a jet algorithm
21 // Author: jgcn@mda.cinvestav.mx
22 //---------------------------------------------------------------------
25 #include <Riostream.h>
27 #include <TClonesArray.h>
28 #include <TLorentzVector.h>
54 // Default constructor
55 fJets = new TClonesArray("TLorentzVector",1000);
60 fPtFromSignal = TArrayF();
61 fMultiplicities = TArrayI();
63 fPtChPtCutIn = TArrayF();
64 fEnTotChPtCutIn = TArrayF();
65 fVectorSizeIn = TArrayI();
69 ////////////////////////////////////////////////////////////////////////
80 ////////////////////////////////////////////////////////////////////////
82 Bool_t AliJet::OutOfRange(Int_t i, const char *s) const
84 // checks if i is a valid index. s = name of calling method
85 if (i >= fNJets || i < 0) {
86 cout << s << " Index " << i << " out of range" << endl;
92 ////////////////////////////////////////////////////////////////////////
94 TLorentzVector* AliJet::GetJet(Int_t i)
97 if (OutOfRange(i, "AliJet::GetJet:")) return 0;
98 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
102 ////////////////////////////////////////////////////////////////////////
104 Int_t AliJet::GetMultiplicity(Int_t i) const
106 // gets multiplicity of i-jet
107 if (OutOfRange(i, "AliJet::GetMultiplicity:")) return 0;
108 return fMultiplicities[i];
111 ////////////////////////////////////////////////////////////////////////
113 Int_t AliJet::GetNCell(Int_t i) const
115 // gets number of cell of i-jet
116 if (OutOfRange(i, "AliJet::GetNCell:")) return 0;
120 ////////////////////////////////////////////////////////////////////////
122 Double_t AliJet::GetPx(Int_t i)
124 // Get Px component of jet i
125 if (OutOfRange(i, "AliJet::GetPx:")) return -1e30;
126 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
130 ////////////////////////////////////////////////////////////////////////
132 Double_t AliJet::GetPy(Int_t i)
134 // Get Py component of jet i
135 if (OutOfRange(i, "AliJet::GetPy:")) return -1e30;
136 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
140 ////////////////////////////////////////////////////////////////////////
142 Double_t AliJet::GetPz(Int_t i)
144 // Get Pz component of jet i
145 if (OutOfRange(i, "AliJet::GetPz:")) return -1e30;
146 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
150 ////////////////////////////////////////////////////////////////////////
152 Double_t AliJet::GetP(Int_t i)
154 // Get momentum of jet i
155 if (OutOfRange(i, "AliJet::GetP:")) return -1e30;
156 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
160 ////////////////////////////////////////////////////////////////////////
162 Double_t AliJet::GetE(Int_t i)
164 // Get energy of jet i
165 if (OutOfRange(i, "AliJet::GetE:")) return -1e30;
166 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
170 ////////////////////////////////////////////////////////////////////////
172 Double_t AliJet::GetPt(Int_t i)
174 // Get transverse momentum of jet i
175 if (OutOfRange(i, "AliJet::GetPt:")) return -1e30;
176 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
180 ////////////////////////////////////////////////////////////////////////
182 Double_t AliJet::GetEta(Int_t i)
185 if (OutOfRange(i, "AliJet::GetEta:")) return -1e30;
186 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
190 ////////////////////////////////////////////////////////////////////////
192 Double_t AliJet::GetPhi(Int_t i)
195 if (OutOfRange(i, "AliJet::GetPhi:")) return -1e30;
196 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
197 return ( (lv->Phi() < 0) ? (lv->Phi()) + 2. * TMath::Pi() : lv->Phi());
200 ////////////////////////////////////////////////////////////////////////
202 Double_t AliJet::GetTheta(Int_t i)
204 // Get theta of jet i
205 if (OutOfRange(i, "AliJet::GetTheta:")) return -1e30;
206 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
210 ////////////////////////////////////////////////////////////////////////
212 Double_t AliJet::GetMass(Int_t i)
214 // Get invariant mass of jet i
215 if (OutOfRange(i, "AliJet::GetMass:")) return -1e30;
216 TLorentzVector *lv = (TLorentzVector*) fJets->At(i);
220 ////////////////////////////////////////////////////////////////////////
223 void AliJet::AddJet(Double_t px, Double_t py, Double_t pz, Double_t e)
225 // Add new jet to the list
226 new ((*fJets)[fNJets++]) TLorentzVector(px,py,pz,e);
229 ////////////////////////////////////////////////////////////////////////
231 void AliJet::SetInJet(Int_t* j)
233 // set information of which input object belongs
234 // to each jet. If zero, object was not assigned to
235 // a jet, if n,positive, it was assiged to jet n
236 // if n, negative, it is within cone of jet n, but
237 // it did not passed the user cuts. filled in by AliJetFinder
238 if (fNInput>0) fInJet.Set(fNInput, j);
241 ////////////////////////////////////////////////////////////////////////
243 void AliJet::SetEtaIn(Float_t* r)
245 if (fNInput>0) fEtaIn.Set(fNInput, r);
248 ////////////////////////////////////////////////////////////////////////
250 void AliJet::SetPtIn(Float_t* pt)
252 if (fNInput>0) fPtIn.Set(fNInput, pt);
255 ////////////////////////////////////////////////////////////////////////
257 void AliJet::SetPhiIn(Float_t* x)
259 if (fNInput>0) fPhiIn.Set(fNInput, x);
261 ////////////////////////////////////////////////////////////////////////
263 void AliJet::SetPtChargedPtCutIn(Float_t* x)
265 if (fNInput>0) fPtChPtCutIn.Set(fNInput, x);
267 ////////////////////////////////////////////////////////////////////////
269 void AliJet::SetEnTotChargedPtCutIn(Float_t* x)
271 if (fNInput>0) fEnTotChPtCutIn.Set(fNInput, x);
274 ////////////////////////////////////////////////////////////////////////
276 void AliJet::SetDetectorFlagIn(Int_t* x)
278 if (fNInput>0) fDetIn.Set(fNInput, x);
281 ////////////////////////////////////////////////////////////////////////
283 void AliJet::SetVectorSizeIn(Int_t* x)
285 if (fNInput>0) fVectorSizeIn.Set(fNInput, x);
288 ////////////////////////////////////////////////////////////////////////
290 void AliJet::SetVectorPxIn(vector< vector<Float_t> > pxT)
295 ////////////////////////////////////////////////////////////////////////
297 void AliJet::SetVectorPyIn(vector< vector<Float_t> > pyT)
302 ////////////////////////////////////////////////////////////////////////
304 void AliJet::SetVectorPzIn(vector< vector<Float_t> > pzT)
309 ////////////////////////////////////////////////////////////////////////
311 void AliJet::SetPtFromSignal(Float_t* p)
313 // set information of percentage of pt of jets
314 // coming from signal (ie Pythia)
315 if (fNJets>0) fPtFromSignal.Set(fNJets, p);
318 ////////////////////////////////////////////////////////////////////////
320 void AliJet::SetMultiplicities(Int_t* m)
322 // set information of jet multiplicities
323 // filled in by AliJetFinder
324 if (fNJets>0) fMultiplicities.Set(fNJets, m);
327 ////////////////////////////////////////////////////////////////////////
329 void AliJet::SetNCells(Int_t* n)
331 if (fNJets>0) fNCells.Set(fNJets, n);
334 ////////////////////////////////////////////////////////////////////////
336 void AliJet::ClearJets(Option_t *option)
339 fJets->Clear(option);
342 fMultiplicities.Set(0);
344 fPtFromSignal.Set(0);
350 fEnTotChPtCutIn.Set(0);
351 fVectorSizeIn.Set(0);
355 ////////////////////////////////////////////////////////////////////////
357 void AliJet::PrintJets()
359 // Print jet information
361 cout << " AliJet::PrintJets: There are no jets in this event " << endl;
364 cout << " AliJet::PrintJets: There are " << fNJets
365 << " jets in this event" << endl;
366 for(Int_t i=0;i<fNJets;i++) {
367 cout << " Jet " << i << " (px,py,pz,en)=(" << GetPx(i)
372 cout << " (pt,eta,phi)=(" << GetPt(i)
374 << "," << GetPhi(i) << ")" << endl;
375 cout << " # of tracks =" << GetMultiplicity(i) << endl;