77e4a94002fa65be8c0e51a67142687962051dce
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / AliEmcalJet.cxx
1 //
2 // Emcal jet class.
3 //
4 // Author: C.Loizides
5
6 #include "AliEmcalJet.h"
7
8 #include "AliLog.h"
9 #include "Riostream.h"
10
11 ClassImp(AliEmcalJet)
12
13 //__________________________________________________________________________________________________
14 AliEmcalJet::AliEmcalJet() : 
15   AliVParticle(), 
16   fPt(0), 
17   fEta(0), 
18   fPhi(0), 
19   fM(0), 
20   fNEF(0),
21   fArea(0),       
22   fAreaEta(0),       
23   fAreaPhi(0),       
24   fAreaEmc(-1), 
25   fAxisInEmcal(0), 
26   fFlavourTagging(0),
27   fMaxCPt(0), 
28   fMaxNPt(0), 
29   fMCPt(0),
30   fNn(0), 
31   fNch(0),        
32   fPtEmc(0),
33   fNEmc(0),
34   fClusterIDs(),
35   fTrackIDs(),
36   fMatched(2),
37   fMatchingType(0),
38   fTaggedJet(0x0),
39   fTagStatus(-1),
40   fPtSub(0),
41   fPtVectSub(0),
42   fTriggers(0),
43   fJetShapeMassFirstDer(0),
44   fJetShapeMassSecondDer(0),
45   fJetShapeMassFirstSub(0),
46   fJetShapeMassSecondSub(0),
47   fLabel(-1),
48   fGRNumerator(0),
49   fGRDenominator(0),
50   fGRNumeratorSub(0),
51   fGRDenominatorSub(0),
52   fJetShapeAngularityFirstDer(0),
53   fJetShapeAngularitySecondDer(0),
54   fJetShapeAngularityFirstSub(0),
55   fJetShapeAngularitySecondSub(0),
56   fJetShapepTDFirstDer(0),
57   fJetShapepTDSecondDer(0),
58   fJetShapepTDFirstSub(0),
59   fJetShapepTDSecondSub(0),
60   fJetShapeCircularityFirstDer(0),
61   fJetShapeCircularitySecondDer(0),
62   fJetShapeCircularityFirstSub(0),
63   fJetShapeCircularitySecondSub(0),
64   fJetShapeSigma2FirstDer(0),
65   fJetShapeSigma2SecondDer(0),
66   fJetShapeSigma2FirstSub(0),
67   fJetShapeSigma2SecondSub(0),
68   fJetShapeConstituentFirstDer(0),
69   fJetShapeConstituentSecondDer(0),
70   fJetShapeConstituentFirstSub(0),
71   fJetShapeConstituentSecondSub(0),
72   fJetShapeLeSubFirstDer(0),
73   fJetShapeLeSubSecondDer(0),
74   fJetShapeLeSubFirstSub(0),
75   fJetShapeLeSubSecondSub(0)
76 {
77   // Constructor.
78   fClosestJets[0] = 0;
79   fClosestJets[1] = 0; 
80   fClosestJetsDist[0] = 999; 
81   fClosestJetsDist[1] = 999; 
82 }
83
84 //__________________________________________________________________________________________________
85 AliEmcalJet::AliEmcalJet(Double_t px, Double_t py, Double_t pz) : 
86   AliVParticle(), 
87   fPt(TMath::Sqrt(px*px+py*py)), 
88   fEta(TMath::ASinH(pz/fPt)),
89   fPhi(0), 
90   fM(0), 
91   fNEF(0), 
92   fArea(0), 
93   fAreaEta(0),       
94   fAreaPhi(0),       
95   fAreaEmc(-1), 
96   fAxisInEmcal(0),
97   fFlavourTagging(0),
98   fMaxCPt(0), 
99   fMaxNPt(0), 
100   fMCPt(0),
101   fNn(0),
102   fNch(0),
103   fPtEmc(0),
104   fNEmc(0),
105   fClusterIDs(), 
106   fTrackIDs(),
107   fMatched(2),
108   fMatchingType(0),
109   fTaggedJet(0x0),
110   fTagStatus(-1),
111   fPtSub(0),
112   fPtVectSub(0),
113   fTriggers(0),
114   fJetShapeMassFirstDer(0),
115   fJetShapeMassSecondDer(0),
116   fJetShapeMassFirstSub(0),
117   fJetShapeMassSecondSub(0),
118   fLabel(-1),
119   fGRNumerator(0),
120   fGRDenominator(0),
121   fGRNumeratorSub(0),
122   fGRDenominatorSub(0),
123   fJetShapeAngularityFirstDer(0),
124   fJetShapeAngularitySecondDer(0),
125   fJetShapeAngularityFirstSub(0),
126   fJetShapeAngularitySecondSub(0),
127   fJetShapepTDFirstDer(0),
128   fJetShapepTDSecondDer(0),
129   fJetShapepTDFirstSub(0),
130   fJetShapepTDSecondSub(0),
131   fJetShapeCircularityFirstDer(0),
132   fJetShapeCircularitySecondDer(0),
133   fJetShapeCircularityFirstSub(0),
134   fJetShapeCircularitySecondSub(0),
135   fJetShapeSigma2FirstDer(0),
136   fJetShapeSigma2SecondDer(0),
137   fJetShapeSigma2FirstSub(0),
138   fJetShapeSigma2SecondSub(0),
139   fJetShapeConstituentFirstDer(0),
140   fJetShapeConstituentSecondDer(0),
141   fJetShapeConstituentFirstSub(0),
142   fJetShapeConstituentSecondSub(0),
143   fJetShapeLeSubFirstDer(0),
144   fJetShapeLeSubSecondDer(0),
145   fJetShapeLeSubFirstSub(0),
146   fJetShapeLeSubSecondSub(0)
147 {    
148   // Constructor.
149
150   if (fPt != 0) {
151     fPhi = TMath::ATan2(py, px);
152     if (fPhi<0.) 
153       fPhi += 2. * TMath::Pi();
154   }
155
156   fClosestJets[0] = 0; 
157   fClosestJets[1] = 0;
158   fClosestJetsDist[0] = 999; 
159   fClosestJetsDist[1] = 999;
160 }
161
162 //_________________________________________________________________________________________________
163 AliEmcalJet::AliEmcalJet(Double_t pt, Double_t eta, Double_t phi, Double_t m) :
164   AliVParticle(), 
165   fPt(pt), 
166   fEta(eta), 
167   fPhi(phi), 
168   fM(m), 
169   fNEF(0), 
170   fArea(0), 
171   fAreaEta(0),       
172   fAreaPhi(0),       
173   fAreaEmc(-1), 
174   fAxisInEmcal(0),
175   fFlavourTagging(0),
176   fMaxCPt(0), 
177   fMaxNPt(0),
178   fMCPt(0),
179   fNn(0),
180   fNch(0), 
181   fPtEmc(0),
182   fNEmc(0),
183   fClusterIDs(), 
184   fTrackIDs(),
185   fMatched(2),
186   fMatchingType(0),
187   fTaggedJet(0x0),
188   fTagStatus(-1),
189   fPtSub(0),
190   fPtVectSub(0),
191   fTriggers(0),
192   fJetShapeMassFirstDer(0),
193   fJetShapeMassSecondDer(0),
194   fJetShapeMassFirstSub(0),
195   fJetShapeMassSecondSub(0),
196   fLabel(-1),
197   fGRNumerator(0),
198   fGRDenominator(0),
199   fGRNumeratorSub(0),
200   fGRDenominatorSub(0),
201   fJetShapeAngularityFirstDer(0),
202   fJetShapeAngularitySecondDer(0),
203   fJetShapeAngularityFirstSub(0),
204   fJetShapeAngularitySecondSub(0),
205   fJetShapepTDFirstDer(0),
206   fJetShapepTDSecondDer(0),
207   fJetShapepTDFirstSub(0),
208   fJetShapepTDSecondSub(0),
209   fJetShapeCircularityFirstDer(0),
210   fJetShapeCircularitySecondDer(0),
211   fJetShapeCircularityFirstSub(0),
212   fJetShapeCircularitySecondSub(0),
213   fJetShapeSigma2FirstDer(0),
214   fJetShapeSigma2SecondDer(0),
215   fJetShapeSigma2FirstSub(0),
216   fJetShapeSigma2SecondSub(0),
217   fJetShapeConstituentFirstDer(0),
218   fJetShapeConstituentSecondDer(0),
219   fJetShapeConstituentFirstSub(0),
220   fJetShapeConstituentSecondSub(0),
221   fJetShapeLeSubFirstDer(0),
222   fJetShapeLeSubSecondDer(0),
223   fJetShapeLeSubFirstSub(0),
224   fJetShapeLeSubSecondSub(0)
225
226 {
227   // Constructor.
228
229   if (fPhi<0.) 
230     fPhi += TMath::TwoPi();
231
232   fClosestJets[0] = 0; 
233   fClosestJets[1] = 0;
234   fClosestJetsDist[0] = 999; 
235   fClosestJetsDist[1] = 999;
236 }
237
238 //_________________________________________________________________________________________________
239 AliEmcalJet::AliEmcalJet(const AliEmcalJet &jet) :
240   AliVParticle(jet),
241   fPt(jet.fPt), 
242   fEta(jet.fEta), 
243   fPhi(jet.fPhi), 
244   fM(jet.fM), 
245   fNEF(jet.fNEF), 
246   fArea(jet.fArea), 
247   fAreaEta(jet.fAreaEta),       
248   fAreaPhi(jet.fAreaPhi),       
249   fAreaEmc(jet.fAreaEmc), 
250   fAxisInEmcal(jet.fAxisInEmcal),
251   fFlavourTagging(jet.fFlavourTagging),
252   fMaxCPt(jet.fMaxCPt), 
253   fMaxNPt(jet.fMaxNPt), 
254   fMCPt(jet.fMCPt),
255   fNn(jet.fNn),
256   fNch(jet.fNch),
257   fPtEmc(jet.fPtEmc),
258   fNEmc(jet.fNEmc),
259   fClusterIDs(jet.fClusterIDs), 
260   fTrackIDs(jet.fTrackIDs),
261   fMatched(jet.fMatched),
262   fMatchingType(jet.fMatchingType),
263   fTaggedJet(jet.fTaggedJet),
264   fTagStatus(jet.fTagStatus),
265   fPtSub(jet.fPtSub),
266   fPtVectSub(jet.fPtVectSub),
267   fTriggers(jet.fTriggers),
268   fJetShapeMassFirstDer(jet.fJetShapeMassFirstDer),
269   fJetShapeMassSecondDer(jet.fJetShapeMassSecondDer),
270   fJetShapeMassFirstSub(jet.fJetShapeMassFirstSub),
271   fJetShapeMassSecondSub(jet.fJetShapeMassSecondSub),
272   fLabel(jet.fLabel),
273   fGRNumerator(jet.fGRNumerator),
274   fGRDenominator(jet.fGRDenominator),
275   fGRNumeratorSub(jet.fGRNumeratorSub),
276   fGRDenominatorSub(jet.fGRDenominatorSub),
277   fJetShapeAngularityFirstDer(jet.fJetShapeAngularityFirstDer),
278   fJetShapeAngularitySecondDer(jet.fJetShapeAngularitySecondDer),
279   fJetShapeAngularityFirstSub(jet.fJetShapeAngularityFirstSub),
280   fJetShapeAngularitySecondSub(jet.fJetShapeAngularitySecondSub),
281   fJetShapepTDFirstDer(jet.fJetShapepTDFirstDer),
282   fJetShapepTDSecondDer(jet.fJetShapepTDSecondDer),
283   fJetShapepTDFirstSub(jet.fJetShapepTDFirstSub),
284   fJetShapepTDSecondSub(jet.fJetShapepTDSecondSub),
285   fJetShapeCircularityFirstDer(jet.fJetShapeCircularityFirstDer),
286   fJetShapeCircularitySecondDer(jet.fJetShapeCircularitySecondDer),
287   fJetShapeCircularityFirstSub(jet.fJetShapeCircularityFirstSub),
288   fJetShapeCircularitySecondSub(jet.fJetShapeCircularitySecondSub),
289   fJetShapeSigma2FirstDer(jet.fJetShapeSigma2FirstDer),
290   fJetShapeSigma2SecondDer(jet.fJetShapeSigma2SecondDer),
291   fJetShapeSigma2FirstSub(jet.fJetShapeSigma2FirstSub),
292   fJetShapeSigma2SecondSub(jet.fJetShapeSigma2SecondSub),
293   fJetShapeConstituentFirstDer(jet.fJetShapeConstituentFirstDer),
294   fJetShapeConstituentSecondDer(jet.fJetShapeConstituentSecondDer),
295   fJetShapeConstituentFirstSub(jet.fJetShapeConstituentFirstSub),
296   fJetShapeConstituentSecondSub(jet.fJetShapeConstituentSecondSub),
297   fJetShapeLeSubFirstDer(jet.fJetShapeLeSubFirstDer),
298   fJetShapeLeSubSecondDer(jet.fJetShapeLeSubSecondDer),
299   fJetShapeLeSubFirstSub(jet.fJetShapeLeSubFirstSub),
300   fJetShapeLeSubSecondSub(jet.fJetShapeLeSubSecondSub)
301 {
302   // Copy constructor.
303   fClosestJets[0]     = jet.fClosestJets[0]; 
304   fClosestJets[1]     = jet.fClosestJets[1]; 
305   fClosestJetsDist[0] = jet.fClosestJetsDist[0];  
306   fClosestJetsDist[1] = jet.fClosestJetsDist[1]; 
307 }
308
309 //_________________________________________________________________________________________________
310 AliEmcalJet &AliEmcalJet::operator=(const AliEmcalJet &jet)
311 {
312   // Assignment operator.
313
314   if (this!=&jet) {
315     AliVParticle::operator=(jet);
316     fPt                 = jet.fPt;
317     fEta                = jet.fEta;
318     fPhi                = jet.fPhi;
319     fM                  = jet.fM; 
320     fNEF                = jet.fNEF;
321     fArea               = jet.fArea; 
322     fAreaEta            = jet.fAreaEta; 
323     fAreaPhi            = jet.fAreaPhi; 
324     fAreaEmc            = jet.fAreaEmc; 
325     fAxisInEmcal        = jet.fAxisInEmcal; 
326     fFlavourTagging     = jet.fFlavourTagging;
327     fMaxCPt             = jet.fMaxCPt; 
328     fMaxNPt             = jet.fMaxNPt;
329     fMCPt               = jet.fMCPt;
330     fNn                 = jet.fNn;
331     fNch                = jet.fNch;
332     fPtEmc              = jet.fPtEmc;
333     fNEmc               = jet.fNEmc;
334     fClusterIDs         = jet.fClusterIDs;
335     fTrackIDs           = jet.fTrackIDs;
336     fClosestJets[0]     = jet.fClosestJets[0]; 
337     fClosestJets[1]     = jet.fClosestJets[1]; 
338     fClosestJetsDist[0] = jet.fClosestJetsDist[0];  
339     fClosestJetsDist[1] = jet.fClosestJetsDist[1]; 
340     fMatched            = jet.fMatched;
341     fTaggedJet          = jet.fTaggedJet;
342     fTagStatus          = jet.fTagStatus;
343     fPtSub              = jet.fPtSub;
344     fPtVectSub          = jet.fPtVectSub;
345     fTriggers           = jet.fTriggers;
346     fJetShapeMassFirstDer  = jet.fJetShapeMassFirstDer;
347     fJetShapeMassSecondDer = jet.fJetShapeMassSecondDer;
348     fJetShapeMassFirstSub  = jet.fJetShapeMassFirstSub;
349     fJetShapeMassSecondSub = jet.fJetShapeMassSecondSub;
350     fLabel              = jet.fLabel;
351     fGRNumerator        = jet.fGRNumerator;
352     fGRDenominator      = jet.fGRDenominator;
353     fGRNumeratorSub     = jet.fGRNumeratorSub;
354     fGRDenominatorSub   = jet.fGRDenominatorSub;
355     fJetShapeAngularityFirstDer  = jet.fJetShapeAngularityFirstDer;
356     fJetShapeAngularitySecondDer = jet.fJetShapeAngularitySecondDer;
357     fJetShapeAngularityFirstSub  = jet.fJetShapeAngularityFirstSub;
358     fJetShapeAngularitySecondSub = jet.fJetShapeAngularitySecondSub;
359     fJetShapepTDFirstDer  = jet.fJetShapepTDFirstDer;
360     fJetShapepTDSecondDer = jet.fJetShapepTDSecondDer;
361     fJetShapepTDFirstSub  = jet.fJetShapepTDFirstSub;
362     fJetShapepTDSecondSub = jet.fJetShapepTDSecondSub;
363     fJetShapeCircularityFirstDer  = jet.fJetShapeCircularityFirstDer;
364     fJetShapeCircularitySecondDer = jet.fJetShapeCircularitySecondDer;
365     fJetShapeCircularityFirstSub  = jet.fJetShapeCircularityFirstSub;
366     fJetShapeCircularitySecondSub = jet.fJetShapeCircularitySecondSub;
367     fJetShapeSigma2FirstDer  = jet.fJetShapeSigma2FirstDer;
368     fJetShapeSigma2SecondDer = jet.fJetShapeSigma2SecondDer;
369     fJetShapeSigma2FirstSub  = jet.fJetShapeSigma2FirstSub;
370     fJetShapeSigma2SecondSub = jet.fJetShapeSigma2SecondSub;
371     fJetShapeConstituentFirstDer  = jet.fJetShapeConstituentFirstDer;
372     fJetShapeConstituentSecondDer = jet.fJetShapeConstituentSecondDer;
373     fJetShapeConstituentFirstSub  = jet.fJetShapeConstituentFirstSub;
374     fJetShapeConstituentSecondSub = jet.fJetShapeConstituentSecondSub;
375     fJetShapeLeSubFirstDer  = jet.fJetShapeLeSubFirstDer;
376     fJetShapeLeSubSecondDer = jet.fJetShapeLeSubSecondDer;
377     fJetShapeLeSubFirstSub  = jet.fJetShapeLeSubFirstSub;
378     fJetShapeLeSubSecondSub = jet.fJetShapeLeSubSecondSub;
379   }
380
381   return *this;
382 }
383
384 //_________________________________________________________________________________________________
385 Int_t AliEmcalJet::Compare(const TObject* obj) const
386 {
387   //Return -1 if this is smaller than obj, 0 if objects are equal and 1 if this is larger than obj.
388
389   const AliEmcalJet *jet = static_cast<const AliEmcalJet *>(obj);
390   if (!obj)
391     return 0;
392   if (Pt()>jet->Pt())
393     return -1;
394   return 1;
395 }
396
397 //__________________________________________________________________________________________________
398 void AliEmcalJet::GetMom(TLorentzVector &vec) const
399 {
400   // Return momentum as four vector.
401
402   Double_t p = fPt *TMath::CosH(fEta);
403   vec.SetPtEtaPhiE(fPt,fEta,fPhi,TMath::Sqrt(p*p+fM*fM));
404 }
405
406 //__________________________________________________________________________________________________
407 void AliEmcalJet::Print(Option_t* /*option*/) const
408 {
409   // Print jet information.
410
411   Printf("Jet pt=%.2f, eta=%.2f, phi=%.2f, area=%.2f, NEF=%.2f", fPt, fEta, fPhi, fArea, fNEF);
412 }
413
414 //__________________________________________________________________________________________________
415 Double_t AliEmcalJet::PtSubVect(Double_t rho) const
416 {
417   // Return vectorial subtracted transverse momentum.
418
419   Double_t dx = Px() - rho * fArea * TMath::Cos(fAreaPhi);
420   Double_t dy = Py() - rho * fArea * TMath::Sin(fAreaPhi);
421   //Double_t dz = Pz() - rho * fArea * TMath::SinH(fAreaEta);
422   return TMath::Sqrt(dx*dx+dy*dy);
423 }
424
425 //__________________________________________________________________________________________________
426 void AliEmcalJet::SortConstituents()
427 {
428   // Sort constituent by index (increasing).
429
430   std::sort(fClusterIDs.GetArray(), fClusterIDs.GetArray() + fClusterIDs.GetSize());
431   std::sort(fTrackIDs.GetArray(), fTrackIDs.GetArray() + fTrackIDs.GetSize());
432 }
433
434 //__________________________________________________________________________________________________
435 Double_t AliEmcalJet::DeltaR (const AliVParticle* part) const
436 { // Helper function to calculate the distance between two jets or a jet and a particle
437     Double_t dPhi = this->Phi() - part->Phi();
438     Double_t dEta = this->Eta() - part->Eta();
439     dPhi = TVector2::Phi_mpi_pi ( dPhi );
440
441     return TMath::Sqrt ( dPhi * dPhi + dEta * dEta );
442 }
443
444
445 //__________________________________________________________________________________________________
446 std::vector<int> AliEmcalJet::SortConstituentsPt( TClonesArray *tracks ) const
447 {   //___________________________________________
448     // Sorting by p_T (decreasing) jet constituents
449     //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
450     typedef std::pair<Double_t, Int_t> ptidx_pair;
451
452     // Create vector for Pt sorting
453     std::vector<ptidx_pair> pair_list ;
454
455     for ( Int_t i_entry = 0; i_entry < GetNumberOfTracks(); i_entry++ )
456         {
457         AliVParticle *track = TrackAt(i_entry, tracks);
458         if (!track)
459             {
460             AliError(Form("Unable to find jet track %d in collection %s (pos in collection %d, max %d)", i_entry, tracks->GetName(), TrackAt(i_entry), tracks->GetEntriesFast()));
461             continue;
462             }
463
464         pair_list.push_back( std::make_pair ( track->Pt(), i_entry ) );
465         }
466
467     std::stable_sort( pair_list.begin() , pair_list.end() , sort_descend() );
468
469     // return an vector of indexes of constituents (sorted descending by pt)
470     std::vector <int> index_sorted_list;
471
472     for ( std::vector< std::pair<Double_t,Int_t> >::iterator it = pair_list.begin(); it != pair_list.end(); ++it)
473         { index_sorted_list.push_back( (*it).second ); } // populating the return object with indexes of sorted tracks
474
475     return index_sorted_list;
476 }
477
478 //________________________________________________________________________
479 Double_t AliEmcalJet::GetZ ( const Double_t trkPx, const Double_t trkPy, const Double_t trkPz ) const
480     {
481     // Get the z of a constituent inside of a jet
482     Double_t pJetSq = this->Px() * this->Px() + this->Py() * this->Py() + this->Pz() * this->Pz();
483
484     if(pJetSq>1e-6)
485         { return ( trkPx * this->Px() + trkPy * this->Py() + trkPz * this->Pz() ) / pJetSq ; }
486     else
487         { AliWarning(Form("%s: strange, pjet*pjet seems to be zero pJetSq: %f",GetName(), pJetSq)); return -1; }
488
489     }
490
491 //________________________________________________________________________
492 Double_t AliEmcalJet::GetZ ( const AliVParticle* trk )          const
493     {
494     // Get Z of constituent trk
495     return GetZ ( trk->Px(), trk->Py(), trk->Pz() );
496     }
497
498 //__________________________________________________________________________________________________
499 AliVParticle* AliEmcalJet::GetLeadingTrack(TClonesArray *tracks) const
500 {
501   AliVParticle* maxTrack = 0;
502   for (Int_t i = 0; i < GetNumberOfTracks(); i++) {
503     AliVParticle *track = TrackAt(i, tracks);
504     if (!track) {
505       AliError(Form("Unable to find jet track %d in collection %s (pos in collection %d, max %d)",
506                     i,tracks->GetName(),TrackAt(i),tracks->GetEntriesFast()));
507       continue;
508     }
509     if (!maxTrack || track->Pt() > maxTrack->Pt()) 
510       maxTrack = track;
511   }
512
513   return maxTrack;
514 }
515
516 //__________________________________________________________________________________________________
517 AliVCluster* AliEmcalJet::GetLeadingCluster(TClonesArray *clusters) const
518 {
519   AliVCluster* maxCluster = 0;
520   for (Int_t i = 0; i < GetNumberOfClusters(); i++) {
521     AliVCluster *cluster = ClusterAt(i, clusters);
522     if (!cluster) {
523       AliError(Form("Unable to find jet cluster %d in collection %s (pos in collection %d, max %d)",
524                     i,clusters->GetName(),ClusterAt(i),clusters->GetEntriesFast()));
525       continue;
526     }
527     if (!maxCluster || cluster->E() > maxCluster->E()) 
528       maxCluster = cluster;
529   }
530
531   return maxCluster;
532 }
533
534 //__________________________________________________________________________________________________
535 void AliEmcalJet::ResetMatching()
536 {
537   fClosestJets[0] = 0;
538   fClosestJets[1] = 0; 
539   fClosestJetsDist[0] = 999; 
540   fClosestJetsDist[1] = 999; 
541   fMatched = 2;
542 }
543
544 //__________________________________________________________________________________________________
545 void AliEmcalJet::PrintGR() {
546   for(Int_t i = 0; i<fGRNumerator.GetSize(); i++) {
547     Printf("num[%d] = %f",i,fGRNumerator.At(i));
548   }
549 }