]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGJE/EMCALJetTasks/AliEmcalJet.cxx
Improved merging.
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / AliEmcalJet.cxx
1 // $Id$
2 //
3 // Emcal jet class.
4 //
5 // Author: C.Loizides
6
7 #include "AliEmcalJet.h"
8
9 ClassImp(AliEmcalJet)
10
11 //__________________________________________________________________________________________________
12 AliEmcalJet::AliEmcalJet() : 
13   AliVParticle(), 
14   fPt(0), 
15   fEta(0), 
16   fPhi(0), 
17   fM(0), 
18   fNEF(0),
19   fArea(0),       
20   fAreaEta(0),       
21   fAreaPhi(0),       
22   fAreaEmc(-1), 
23   fAxisInEmcal(0), 
24   fMaxCPt(0), 
25   fMaxNPt(0), 
26   fMCPt(0),
27   fNn(0), 
28   fNch(0),        
29   fPtEmc(0),
30   fNEmc(0),
31   fClusterIDs(),
32   fTrackIDs(),
33   fMatched(2),
34   fMatchingType(0),
35   fPtSub(0),
36   fPtVectSub(0),
37   fTriggers(0)
38 {
39   // Constructor.
40
41   fClosestJets[0] = 0;
42   fClosestJets[1] = 0; 
43   fClosestJetsDist[0] = 999; 
44   fClosestJetsDist[1] = 999; 
45 }
46
47 //__________________________________________________________________________________________________
48 AliEmcalJet::AliEmcalJet(Double_t px, Double_t py, Double_t pz) : 
49   AliVParticle(), 
50   fPt(TMath::Sqrt(px*px+py*py)), 
51   fEta(TMath::ASinH(pz/fPt)),
52   fPhi(0), 
53   fM(0), 
54   fNEF(0), 
55   fArea(0), 
56   fAreaEta(0),       
57   fAreaPhi(0),       
58   fAreaEmc(-1), 
59   fAxisInEmcal(0),
60   fMaxCPt(0), 
61   fMaxNPt(0), 
62   fMCPt(0),
63   fNn(0),
64   fNch(0),
65   fPtEmc(0),
66   fNEmc(0),
67   fClusterIDs(), 
68   fTrackIDs(),
69   fMatched(2),
70   fMatchingType(0),
71   fPtSub(0),
72   fPtVectSub(0),
73   fTriggers(0)
74 {    
75   // Constructor.
76
77   if (fPt != 0) {
78     fPhi = TMath::ATan2(py, px);
79     if (fPhi<0.) 
80       fPhi += 2. * TMath::Pi();
81   }
82
83   fClosestJets[0] = 0; 
84   fClosestJets[1] = 0;
85   fClosestJetsDist[0] = 999; 
86   fClosestJetsDist[1] = 999;
87 }
88
89 //_________________________________________________________________________________________________
90 AliEmcalJet::AliEmcalJet(Double_t pt, Double_t eta, Double_t phi, Double_t m) :
91   AliVParticle(), 
92   fPt(pt), 
93   fEta(eta), 
94   fPhi(phi), 
95   fM(m), 
96   fNEF(0), 
97   fArea(0), 
98   fAreaEta(0),       
99   fAreaPhi(0),       
100   fAreaEmc(-1), 
101   fAxisInEmcal(0),
102   fMaxCPt(0), 
103   fMaxNPt(0),
104   fMCPt(0),
105   fNn(0),
106   fNch(0), 
107   fPtEmc(0),
108   fNEmc(0),
109   fClusterIDs(), 
110   fTrackIDs(),
111   fMatched(2),
112   fMatchingType(0),
113   fPtSub(0),
114   fPtVectSub(0),
115   fTriggers(0)
116 {
117   // Constructor.
118
119   if (fPhi<0.) 
120     fPhi += TMath::TwoPi();
121
122   fClosestJets[0] = 0; 
123   fClosestJets[1] = 0;
124   fClosestJetsDist[0] = 999; 
125   fClosestJetsDist[1] = 999;
126 }
127
128 //_________________________________________________________________________________________________
129 AliEmcalJet::AliEmcalJet(const AliEmcalJet &jet) :
130   AliVParticle(jet),
131   fPt(jet.fPt), 
132   fEta(jet.fEta), 
133   fPhi(jet.fPhi), 
134   fM(jet.fM), 
135   fNEF(jet.fNEF), 
136   fArea(jet.fArea), 
137   fAreaEta(jet.fAreaEta),       
138   fAreaPhi(jet.fAreaPhi),       
139   fAreaEmc(jet.fAreaEmc), 
140   fAxisInEmcal(jet.fAxisInEmcal),
141   fMaxCPt(jet.fMaxCPt), 
142   fMaxNPt(jet.fMaxNPt), 
143   fMCPt(jet.fMCPt),
144   fNn(jet.fNn),
145   fNch(jet.fNch),
146   fPtEmc(jet.fPtEmc),
147   fNEmc(jet.fNEmc),
148   fClusterIDs(jet.fClusterIDs), 
149   fTrackIDs(jet.fTrackIDs),
150   fMatched(jet.fMatched),
151   fMatchingType(jet.fMatchingType),
152   fPtSub(jet.fPtSub),
153   fPtVectSub(jet.fPtVectSub),
154   fTriggers(jet.fTriggers)
155 {
156   // Copy constructor.
157
158   fClosestJets[0]     = jet.fClosestJets[0]; 
159   fClosestJets[1]     = jet.fClosestJets[1]; 
160   fClosestJetsDist[0] = jet.fClosestJetsDist[0];  
161   fClosestJetsDist[1] = jet.fClosestJetsDist[1]; 
162 }
163
164 //_________________________________________________________________________________________________
165 AliEmcalJet &AliEmcalJet::operator=(const AliEmcalJet &jet)
166 {
167   // Assignment operator.
168
169   if (this!=&jet) {
170     AliVParticle::operator=(jet);
171     fPt                 = jet.fPt;
172     fEta                = jet.fEta;
173     fPhi                = jet.fPhi;
174     fM                  = jet.fM; 
175     fNEF                = jet.fNEF;
176     fArea               = jet.fArea; 
177     fAreaEta            = jet.fAreaEta; 
178     fAreaPhi            = jet.fAreaPhi; 
179     fAreaEmc            = jet.fAreaEmc; 
180     fAxisInEmcal        = jet.fAxisInEmcal; 
181     fMaxCPt             = jet.fMaxCPt; 
182     fMaxNPt             = jet.fMaxNPt;
183     fMCPt               = jet.fMCPt;
184     fNn                 = jet.fNn;
185     fNch                = jet.fNch;
186     fPtEmc              = jet.fPtEmc;
187     fNEmc               = jet.fNEmc;
188     fClusterIDs         = jet.fClusterIDs;
189     fTrackIDs           = jet.fTrackIDs;
190     fClosestJets[0]     = jet.fClosestJets[0]; 
191     fClosestJets[1]     = jet.fClosestJets[1]; 
192     fClosestJetsDist[0] = jet.fClosestJetsDist[0];  
193     fClosestJetsDist[1] = jet.fClosestJetsDist[1]; 
194     fMatched            = jet.fMatched;
195     fPtSub              = jet.fPtSub;
196     fPtVectSub          = jet.fPtVectSub;
197     fTriggers           = jet.fTriggers;
198   }
199
200   return *this;
201 }
202
203 //_________________________________________________________________________________________________
204 Int_t AliEmcalJet::Compare(const TObject* obj) const
205 {
206   //Return -1 if this is smaller than obj, 0 if objects are equal and 1 if this is larger than obj.
207
208   const AliEmcalJet *jet = static_cast<const AliEmcalJet *>(obj);
209   if (!obj)
210     return 0;
211   if (Pt()>jet->Pt())
212     return -1;
213   return 1;
214 }
215
216 //__________________________________________________________________________________________________
217 void AliEmcalJet::GetMom(TLorentzVector &vec) const
218 {
219   // Return momentum as four vector.
220
221   Double_t p = fPt *TMath::CosH(fEta);
222   vec.SetPtEtaPhiE(fPt,fEta,fPhi,TMath::Sqrt(p*p+fM*fM));
223 }
224
225 //__________________________________________________________________________________________________
226 void AliEmcalJet::Print(Option_t* /*option*/) const
227 {
228   // Print jet information.
229
230   printf("Jet pt=%.2f, eta=%.2f, phi=%.2f, area=%.2f, NEF=%.2f\n", fPt, fEta, fPhi, fArea, fNEF);
231 }
232
233 //__________________________________________________________________________________________________
234 Double_t AliEmcalJet::PtSubVect(Double_t rho) const
235 {
236   // Return vectorial subtracted transverse momentum.
237
238   Double_t dx = Px() - rho * fArea * TMath::Cos(fAreaPhi);
239   Double_t dy = Py() - rho * fArea * TMath::Sin(fAreaPhi);
240   //Double_t dz = Pz() - rho * fArea * TMath::SinH(fAreaEta);
241   return TMath::Sqrt(dx*dx+dy*dy);
242 }
243
244 //__________________________________________________________________________________________________
245 void AliEmcalJet::SortConstituents()
246 {
247   // Sort constituent by index (increasing).
248
249   std::sort(fClusterIDs.GetArray(), fClusterIDs.GetArray() + fClusterIDs.GetSize());
250   std::sort(fTrackIDs.GetArray(), fTrackIDs.GetArray() + fTrackIDs.GetSize());
251 }
252
253 //__________________________________________________________________________________________________
254 AliVParticle* AliEmcalJet::GetLeadingTrack(TClonesArray *tracks) const
255 {
256   AliVParticle* maxTrack = 0;
257   for (Int_t i = 0; i < GetNumberOfTracks(); i++) {
258     AliVParticle *track = TrackAt(i, tracks);
259     if (!maxTrack || track->Pt() > maxTrack->Pt()) 
260       maxTrack = track;
261   }
262
263   return maxTrack;
264 }
265
266 //__________________________________________________________________________________________________
267 AliVCluster* AliEmcalJet::GetLeadingCluster(TClonesArray *clusters) const
268 {
269   AliVCluster* maxCluster = 0;
270   for (Int_t i = 0; i < GetNumberOfClusters(); i++) {
271     AliVCluster *cluster = ClusterAt(i, clusters);
272     if (!maxCluster || cluster->E() > maxCluster->E()) 
273       maxCluster = cluster;
274   }
275
276   return maxCluster;
277 }
278
279 //__________________________________________________________________________________________________
280 void AliEmcalJet::ResetMatching()
281 {
282   fClosestJets[0] = 0;
283   fClosestJets[1] = 0; 
284   fClosestJetsDist[0] = 999; 
285   fClosestJetsDist[1] = 999; 
286   fMatched = 2;
287 }