]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGJE/EMCALJetTasks/AliEmcalJet.cxx
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / AliEmcalJet.cxx
index 9f99aeaa271cc33da423229667d1463f57224b44..b6075322baaaeee553e28b850b9771b2c115eb32 100644 (file)
 ClassImp(AliEmcalJet)
 
 //__________________________________________________________________________________________________
-AliEmcalJet::AliEmcalJet() : 
-  AliVParticle(), 
-  fPt(0), 
-  fEta(0), 
-  fPhi(0), 
-  fM(0), 
+AliEmcalJet::AliEmcalJet() :
+  AliVParticle(),
+  fPt(0),
+  fEta(0),
+  fPhi(0),
+  fM(0),
   fNEF(0),
-  fArea(0),       
-  fAreaEta(0),       
-  fAreaPhi(0),       
-  fAreaEmc(-1), 
-  fAxisInEmcal(0), 
+  fArea(0),
+  fAreaEta(0),
+  fAreaPhi(0),
+  fAreaE(0),
+  fAreaEmc(-1),
+  fAxisInEmcal(0),
   fFlavourTagging(0),
-  fMaxCPt(0), 
-  fMaxNPt(0), 
+  fMaxCPt(0),
+  fMaxNPt(0),
   fMCPt(0),
-  fNn(0), 
-  fNch(0),        
+  fNn(0),
+  fNch(0),
   fPtEmc(0),
   fNEmc(0),
   fClusterIDs(),
@@ -38,7 +39,7 @@ AliEmcalJet::AliEmcalJet() :
   fTaggedJet(0x0),
   fTagStatus(-1),
   fPtSub(0),
-  fPtVectSub(0),
+  fPtSubVect(0),
   fTriggers(0),
   fJetShapeMassFirstDer(0),
   fJetShapeMassSecondDer(0),
@@ -61,6 +62,10 @@ AliEmcalJet::AliEmcalJet() :
   fJetShapeCircularitySecondDer(0),
   fJetShapeCircularityFirstSub(0),
   fJetShapeCircularitySecondSub(0),
+  fJetShapeSigma2FirstDer(0),
+  fJetShapeSigma2SecondDer(0),
+  fJetShapeSigma2FirstSub(0),
+  fJetShapeSigma2SecondSub(0),
   fJetShapeConstituentFirstDer(0),
   fJetShapeConstituentSecondDer(0),
   fJetShapeConstituentFirstSub(0),
@@ -71,42 +76,42 @@ AliEmcalJet::AliEmcalJet() :
   fJetShapeLeSubSecondSub(0)
 {
   // Constructor.
-
   fClosestJets[0] = 0;
-  fClosestJets[1] = 0; 
-  fClosestJetsDist[0] = 999; 
-  fClosestJetsDist[1] = 999; 
+  fClosestJets[1] = 0;
+  fClosestJetsDist[0] = 999;
+  fClosestJetsDist[1] = 999;
 }
 
 //__________________________________________________________________________________________________
-AliEmcalJet::AliEmcalJet(Double_t px, Double_t py, Double_t pz) : 
-  AliVParticle(), 
-  fPt(TMath::Sqrt(px*px+py*py)), 
-  fEta(TMath::ASinH(pz/fPt)),
-  fPhi(0), 
-  fM(0), 
-  fNEF(0), 
-  fArea(0), 
-  fAreaEta(0),       
-  fAreaPhi(0),       
-  fAreaEmc(-1), 
+AliEmcalJet::AliEmcalJet(Double_t px, Double_t py, Double_t pz) :
+  AliVParticle(),
+  fPt(TMath::Sqrt(px * px + py* py)),
+  fEta(TMath::ASinH(pz / fPt)),
+  fPhi(0),
+  fM(0),
+  fNEF(0),
+  fArea(0),
+  fAreaEta(0),
+  fAreaPhi(0),
+  fAreaE(0),
+  fAreaEmc(-1),
   fAxisInEmcal(0),
   fFlavourTagging(0),
-  fMaxCPt(0), 
-  fMaxNPt(0), 
+  fMaxCPt(0),
+  fMaxNPt(0),
   fMCPt(0),
   fNn(0),
   fNch(0),
   fPtEmc(0),
   fNEmc(0),
-  fClusterIDs(), 
+  fClusterIDs(),
   fTrackIDs(),
   fMatched(2),
   fMatchingType(0),
   fTaggedJet(0x0),
   fTagStatus(-1),
   fPtSub(0),
-  fPtVectSub(0),
+  fPtSubVect(0),
   fTriggers(0),
   fJetShapeMassFirstDer(0),
   fJetShapeMassSecondDer(0),
@@ -117,11 +122,11 @@ AliEmcalJet::AliEmcalJet(Double_t px, Double_t py, Double_t pz) :
   fGRDenominator(0),
   fGRNumeratorSub(0),
   fGRDenominatorSub(0),
-    fJetShapeAngularityFirstDer(0),
+  fJetShapeAngularityFirstDer(0),
   fJetShapeAngularitySecondDer(0),
   fJetShapeAngularityFirstSub(0),
   fJetShapeAngularitySecondSub(0),
-   fJetShapepTDFirstDer(0),
+  fJetShapepTDFirstDer(0),
   fJetShapepTDSecondDer(0),
   fJetShapepTDFirstSub(0),
   fJetShapepTDSecondSub(0),
@@ -129,58 +134,61 @@ AliEmcalJet::AliEmcalJet(Double_t px, Double_t py, Double_t pz) :
   fJetShapeCircularitySecondDer(0),
   fJetShapeCircularityFirstSub(0),
   fJetShapeCircularitySecondSub(0),
+  fJetShapeSigma2FirstDer(0),
+  fJetShapeSigma2SecondDer(0),
+  fJetShapeSigma2FirstSub(0),
+  fJetShapeSigma2SecondSub(0),
   fJetShapeConstituentFirstDer(0),
   fJetShapeConstituentSecondDer(0),
   fJetShapeConstituentFirstSub(0),
   fJetShapeConstituentSecondSub(0),
-   fJetShapeLeSubFirstDer(0),
+  fJetShapeLeSubFirstDer(0),
   fJetShapeLeSubSecondDer(0),
   fJetShapeLeSubFirstSub(0),
   fJetShapeLeSubSecondSub(0)
-{    
+{
   // Constructor.
 
-  if (fPt != 0) {
-    fPhi = TMath::ATan2(py, px);
-    if (fPhi<0.) 
-      fPhi += 2. * TMath::Pi();
+  if(fPt != 0) {
+    fPhi = TVector2::Phi_0_2pi(TMath::ATan2(py, px));
   }
 
-  fClosestJets[0] = 0; 
+  fClosestJets[0] = 0;
   fClosestJets[1] = 0;
-  fClosestJetsDist[0] = 999; 
+  fClosestJetsDist[0] = 999;
   fClosestJetsDist[1] = 999;
 }
 
 //_________________________________________________________________________________________________
 AliEmcalJet::AliEmcalJet(Double_t pt, Double_t eta, Double_t phi, Double_t m) :
-  AliVParticle(), 
-  fPt(pt), 
-  fEta(eta), 
-  fPhi(phi), 
-  fM(m), 
-  fNEF(0), 
-  fArea(0), 
-  fAreaEta(0),       
-  fAreaPhi(0),       
-  fAreaEmc(-1), 
+  AliVParticle(),
+  fPt(pt),
+  fEta(eta),
+  fPhi(phi),
+  fM(m),
+  fNEF(0),
+  fArea(0),
+  fAreaEta(0),
+  fAreaPhi(0),
+  fAreaE(0),
+  fAreaEmc(-1),
   fAxisInEmcal(0),
   fFlavourTagging(0),
-  fMaxCPt(0), 
+  fMaxCPt(0),
   fMaxNPt(0),
   fMCPt(0),
   fNn(0),
-  fNch(0), 
+  fNch(0),
   fPtEmc(0),
   fNEmc(0),
-  fClusterIDs(), 
+  fClusterIDs(),
   fTrackIDs(),
   fMatched(2),
   fMatchingType(0),
   fTaggedJet(0x0),
   fTagStatus(-1),
   fPtSub(0),
-  fPtVectSub(0),
+  fPtSubVect(0),
   fTriggers(0),
   fJetShapeMassFirstDer(0),
   fJetShapeMassSecondDer(0),
@@ -203,6 +211,10 @@ AliEmcalJet::AliEmcalJet(Double_t pt, Double_t eta, Double_t phi, Double_t m) :
   fJetShapeCircularitySecondDer(0),
   fJetShapeCircularityFirstSub(0),
   fJetShapeCircularitySecondSub(0),
+  fJetShapeSigma2FirstDer(0),
+  fJetShapeSigma2SecondDer(0),
+  fJetShapeSigma2FirstSub(0),
+  fJetShapeSigma2SecondSub(0),
   fJetShapeConstituentFirstDer(0),
   fJetShapeConstituentSecondDer(0),
   fJetShapeConstituentFirstSub(0),
@@ -215,44 +227,44 @@ AliEmcalJet::AliEmcalJet(Double_t pt, Double_t eta, Double_t phi, Double_t m) :
 {
   // Constructor.
 
-  if (fPhi<0.) 
-    fPhi += TMath::TwoPi();
+  fPhi = TVector2::Phi_0_2pi(fPhi);
 
-  fClosestJets[0] = 0; 
+  fClosestJets[0] = 0;
   fClosestJets[1] = 0;
-  fClosestJetsDist[0] = 999; 
+  fClosestJetsDist[0] = 999;
   fClosestJetsDist[1] = 999;
 }
 
 //_________________________________________________________________________________________________
-AliEmcalJet::AliEmcalJet(const AliEmcalJet &jet) :
+AliEmcalJet::AliEmcalJet(const AliEmcalJetjet) :
   AliVParticle(jet),
-  fPt(jet.fPt), 
-  fEta(jet.fEta), 
-  fPhi(jet.fPhi), 
-  fM(jet.fM), 
-  fNEF(jet.fNEF), 
-  fArea(jet.fArea), 
-  fAreaEta(jet.fAreaEta),       
-  fAreaPhi(jet.fAreaPhi),       
-  fAreaEmc(jet.fAreaEmc), 
+  fPt(jet.fPt),
+  fEta(jet.fEta),
+  fPhi(jet.fPhi),
+  fM(jet.fM),
+  fNEF(jet.fNEF),
+  fArea(jet.fArea),
+  fAreaEta(jet.fAreaEta),
+  fAreaPhi(jet.fAreaPhi),
+  fAreaE(jet.fAreaE),
+  fAreaEmc(jet.fAreaEmc),
   fAxisInEmcal(jet.fAxisInEmcal),
   fFlavourTagging(jet.fFlavourTagging),
-  fMaxCPt(jet.fMaxCPt), 
-  fMaxNPt(jet.fMaxNPt), 
+  fMaxCPt(jet.fMaxCPt),
+  fMaxNPt(jet.fMaxNPt),
   fMCPt(jet.fMCPt),
   fNn(jet.fNn),
   fNch(jet.fNch),
   fPtEmc(jet.fPtEmc),
   fNEmc(jet.fNEmc),
-  fClusterIDs(jet.fClusterIDs), 
+  fClusterIDs(jet.fClusterIDs),
   fTrackIDs(jet.fTrackIDs),
   fMatched(jet.fMatched),
   fMatchingType(jet.fMatchingType),
   fTaggedJet(jet.fTaggedJet),
   fTagStatus(jet.fTagStatus),
   fPtSub(jet.fPtSub),
-  fPtVectSub(jet.fPtVectSub),
+  fPtSubVect(jet.fPtSubVect),
   fTriggers(jet.fTriggers),
   fJetShapeMassFirstDer(jet.fJetShapeMassFirstDer),
   fJetShapeMassSecondDer(jet.fJetShapeMassSecondDer),
@@ -263,58 +275,58 @@ AliEmcalJet::AliEmcalJet(const AliEmcalJet &jet) :
   fGRDenominator(jet.fGRDenominator),
   fGRNumeratorSub(jet.fGRNumeratorSub),
   fGRDenominatorSub(jet.fGRDenominatorSub),
-   fJetShapeAngularityFirstDer(jet.fJetShapeAngularityFirstDer),
+  fJetShapeAngularityFirstDer(jet.fJetShapeAngularityFirstDer),
   fJetShapeAngularitySecondDer(jet.fJetShapeAngularitySecondDer),
   fJetShapeAngularityFirstSub(jet.fJetShapeAngularityFirstSub),
   fJetShapeAngularitySecondSub(jet.fJetShapeAngularitySecondSub),
-
   fJetShapepTDFirstDer(jet.fJetShapepTDFirstDer),
   fJetShapepTDSecondDer(jet.fJetShapepTDSecondDer),
   fJetShapepTDFirstSub(jet.fJetShapepTDFirstSub),
   fJetShapepTDSecondSub(jet.fJetShapepTDSecondSub),
-
   fJetShapeCircularityFirstDer(jet.fJetShapeCircularityFirstDer),
   fJetShapeCircularitySecondDer(jet.fJetShapeCircularitySecondDer),
   fJetShapeCircularityFirstSub(jet.fJetShapeCircularityFirstSub),
   fJetShapeCircularitySecondSub(jet.fJetShapeCircularitySecondSub),
-
+  fJetShapeSigma2FirstDer(jet.fJetShapeSigma2FirstDer),
+  fJetShapeSigma2SecondDer(jet.fJetShapeSigma2SecondDer),
+  fJetShapeSigma2FirstSub(jet.fJetShapeSigma2FirstSub),
+  fJetShapeSigma2SecondSub(jet.fJetShapeSigma2SecondSub),
   fJetShapeConstituentFirstDer(jet.fJetShapeConstituentFirstDer),
   fJetShapeConstituentSecondDer(jet.fJetShapeConstituentSecondDer),
   fJetShapeConstituentFirstSub(jet.fJetShapeConstituentFirstSub),
   fJetShapeConstituentSecondSub(jet.fJetShapeConstituentSecondSub),
-
   fJetShapeLeSubFirstDer(jet.fJetShapeLeSubFirstDer),
   fJetShapeLeSubSecondDer(jet.fJetShapeLeSubSecondDer),
   fJetShapeLeSubFirstSub(jet.fJetShapeLeSubFirstSub),
   fJetShapeLeSubSecondSub(jet.fJetShapeLeSubSecondSub)
 {
   // Copy constructor.
-
-  fClosestJets[0]     = jet.fClosestJets[0]; 
-  fClosestJets[1]     = jet.fClosestJets[1]; 
-  fClosestJetsDist[0] = jet.fClosestJetsDist[0];  
-  fClosestJetsDist[1] = jet.fClosestJetsDist[1]; 
+  fClosestJets[0]     = jet.fClosestJets[0];
+  fClosestJets[1]     = jet.fClosestJets[1];
+  fClosestJetsDist[0] = jet.fClosestJetsDist[0];
+  fClosestJetsDist[1] = jet.fClosestJetsDist[1];
 }
 
 //_________________________________________________________________________________________________
-AliEmcalJet &AliEmcalJet::operator=(const AliEmcalJet &jet)
+AliEmcalJet& AliEmcalJet::operator=(const AliEmcalJet& jet)
 {
   // Assignment operator.
 
-  if (this!=&jet) {
+  if(this != &jet) {
     AliVParticle::operator=(jet);
     fPt                 = jet.fPt;
     fEta                = jet.fEta;
     fPhi                = jet.fPhi;
-    fM                  = jet.fM; 
+    fM                  = jet.fM;
     fNEF                = jet.fNEF;
-    fArea               = jet.fArea; 
-    fAreaEta            = jet.fAreaEta; 
-    fAreaPhi            = jet.fAreaPhi; 
-    fAreaEmc            = jet.fAreaEmc; 
-    fAxisInEmcal        = jet.fAxisInEmcal; 
+    fArea               = jet.fArea;
+    fAreaEta            = jet.fAreaEta;
+    fAreaPhi            = jet.fAreaPhi;
+    fAreaE              = jet.fAreaE;
+    fAreaEmc            = jet.fAreaEmc;
+    fAxisInEmcal        = jet.fAxisInEmcal;
     fFlavourTagging     = jet.fFlavourTagging;
-    fMaxCPt             = jet.fMaxCPt; 
+    fMaxCPt             = jet.fMaxCPt;
     fMaxNPt             = jet.fMaxNPt;
     fMCPt               = jet.fMCPt;
     fNn                 = jet.fNn;
@@ -323,15 +335,15 @@ AliEmcalJet &AliEmcalJet::operator=(const AliEmcalJet &jet)
     fNEmc               = jet.fNEmc;
     fClusterIDs         = jet.fClusterIDs;
     fTrackIDs           = jet.fTrackIDs;
-    fClosestJets[0]     = jet.fClosestJets[0]; 
-    fClosestJets[1]     = jet.fClosestJets[1]; 
-    fClosestJetsDist[0] = jet.fClosestJetsDist[0];  
-    fClosestJetsDist[1] = jet.fClosestJetsDist[1]; 
+    fClosestJets[0]     = jet.fClosestJets[0];
+    fClosestJets[1]     = jet.fClosestJets[1];
+    fClosestJetsDist[0] = jet.fClosestJetsDist[0];
+    fClosestJetsDist[1] = jet.fClosestJetsDist[1];
     fMatched            = jet.fMatched;
     fTaggedJet          = jet.fTaggedJet;
     fTagStatus          = jet.fTagStatus;
     fPtSub              = jet.fPtSub;
-    fPtVectSub          = jet.fPtVectSub;
+    fPtSubVect          = jet.fPtSubVect;
     fTriggers           = jet.fTriggers;
     fJetShapeMassFirstDer  = jet.fJetShapeMassFirstDer;
     fJetShapeMassSecondDer = jet.fJetShapeMassSecondDer;
@@ -342,22 +354,22 @@ AliEmcalJet &AliEmcalJet::operator=(const AliEmcalJet &jet)
     fGRDenominator      = jet.fGRDenominator;
     fGRNumeratorSub     = jet.fGRNumeratorSub;
     fGRDenominatorSub   = jet.fGRDenominatorSub;
-           fJetShapeAngularityFirstDer  = jet.fJetShapeAngularityFirstDer;
+    fJetShapeAngularityFirstDer  = jet.fJetShapeAngularityFirstDer;
     fJetShapeAngularitySecondDer = jet.fJetShapeAngularitySecondDer;
     fJetShapeAngularityFirstSub  = jet.fJetShapeAngularityFirstSub;
     fJetShapeAngularitySecondSub = jet.fJetShapeAngularitySecondSub;
-
     fJetShapepTDFirstDer  = jet.fJetShapepTDFirstDer;
     fJetShapepTDSecondDer = jet.fJetShapepTDSecondDer;
     fJetShapepTDFirstSub  = jet.fJetShapepTDFirstSub;
     fJetShapepTDSecondSub = jet.fJetShapepTDSecondSub;
-
     fJetShapeCircularityFirstDer  = jet.fJetShapeCircularityFirstDer;
     fJetShapeCircularitySecondDer = jet.fJetShapeCircularitySecondDer;
     fJetShapeCircularityFirstSub  = jet.fJetShapeCircularityFirstSub;
     fJetShapeCircularitySecondSub = jet.fJetShapeCircularitySecondSub;
-
+    fJetShapeSigma2FirstDer  = jet.fJetShapeSigma2FirstDer;
+    fJetShapeSigma2SecondDer = jet.fJetShapeSigma2SecondDer;
+    fJetShapeSigma2FirstSub  = jet.fJetShapeSigma2FirstSub;
+    fJetShapeSigma2SecondSub = jet.fJetShapeSigma2SecondSub;
     fJetShapeConstituentFirstDer  = jet.fJetShapeConstituentFirstDer;
     fJetShapeConstituentSecondDer = jet.fJetShapeConstituentSecondDer;
     fJetShapeConstituentFirstSub  = jet.fJetShapeConstituentFirstSub;
@@ -376,21 +388,20 @@ Int_t AliEmcalJet::Compare(const TObject* obj) const
 {
   //Return -1 if this is smaller than obj, 0 if objects are equal and 1 if this is larger than obj.
 
-  const AliEmcalJet *jet = static_cast<const AliEmcalJet *>(obj);
-  if (!obj)
+  const AliEmcalJet* jet = static_cast<const AliEmcalJet*>(obj);
+  if(!obj)
     return 0;
-  if (Pt()>jet->Pt())
+  if(Pt() > jet->Pt())
     return -1;
   return 1;
 }
 
 //__________________________________________________________________________________________________
-void AliEmcalJet::GetMom(TLorentzVector &vec) const
+void AliEmcalJet::GetMom(TLorentzVectorvec) const
 {
-  // Return momentum as four vector.
+  // Return momentum as four-vector.
 
-  Double_t p = fPt *TMath::CosH(fEta);
-  vec.SetPtEtaPhiE(fPt,fEta,fPhi,TMath::Sqrt(p*p+fM*fM));
+  vec.SetPtEtaPhiE(fPt, fEta, fPhi, E());
 }
 
 //__________________________________________________________________________________________________
@@ -402,14 +413,51 @@ void AliEmcalJet::Print(Option_t* /*option*/) const
 }
 
 //__________________________________________________________________________________________________
-Double_t AliEmcalJet::PtSubVect(Double_t rho) const
+Double_t AliEmcalJet::PtSub(Double_t rho, Bool_t save)
 {
-  // Return vectorial subtracted transverse momentum.
+  // Return transverse momentum after scalar subtraction. Save the result if required.
+  // Result can be negative.
+
+  Double_t ptcorr = fPt - rho * fArea;
+  if(save)
+    fPtSub = ptcorr;
+  return ptcorr;
+}
+
+//__________________________________________________________________________________________________
+Double_t AliEmcalJet::PtSubVect(Double_t rho, Bool_t save)
+{
+  // Return transverse momentum after vectorial subtraction. Save the result if required.
+  // Result cannot be negative.
 
   Double_t dx = Px() - rho * fArea * TMath::Cos(fAreaPhi);
   Double_t dy = Py() - rho * fArea * TMath::Sin(fAreaPhi);
   //Double_t dz = Pz() - rho * fArea * TMath::SinH(fAreaEta);
-  return TMath::Sqrt(dx*dx+dy*dy);
+  Double_t ptcorr = TMath::Sqrt(dx * dx + dy * dy);
+  if(save)
+    fPtSubVect = ptcorr;
+  return ptcorr;
+}
+
+//__________________________________________________________________________________________________
+TLorentzVector AliEmcalJet::SubtractRhoVect(Double_t rho, Bool_t save)
+{
+  // Return four-momentum after vectorial subtraction. Save pt if required.
+  // Saved value of pt is negative if the corrected momentum is pointing to the opposite half-plane in the x-y plane w.r.t. the raw momentum.
+
+  TLorentzVector vecCorr;
+  GetMom(vecCorr);
+  TLorentzVector vecBg;
+  vecBg.SetPtEtaPhiE(fArea, fAreaEta, fAreaPhi, fAreaE);
+  vecBg *= rho;
+  vecCorr -= vecBg;
+  if(save)
+  {
+    Double_t dPhi = TMath::Abs(TVector2::Phi_mpi_pi(Phi() - vecCorr.Phi()));
+    Int_t signum = dPhi <= TMath::PiOver2() ? 1 : -1;
+    fPtSubVect = signum * vecCorr.Pt();
+  }
+  return vecCorr;
 }
 
 //__________________________________________________________________________________________________
@@ -422,61 +470,84 @@ void AliEmcalJet::SortConstituents()
 }
 
 //__________________________________________________________________________________________________
-Double_t AliEmcalJet::DeltaR (const AliVParticle* part) const
-{ // Helper function to calculate the distance between two jets or a jet and a particle
-    Double_t dPhi = this->Phi() - part->Phi();
-    Double_t dEta = this->Eta() - part->Eta();
-    dPhi = TVector2::Phi_mpi_pi ( dPhi );
+Double_t AliEmcalJet::DeltaR(const AliVParticle* part) const
+{
+  // Helper function to calculate the distance between two jets or a jet and a particle
 
-    return TMath::Sqrt ( dPhi * dPhi + dEta * dEta );
+  Double_t dPhi = Phi() - part->Phi();
+  Double_t dEta = Eta() - part->Eta();
+  dPhi = TVector2::Phi_mpi_pi(dPhi);
+  return TMath::Sqrt(dPhi * dPhi + dEta * dEta);
 }
 
 
 //__________________________________________________________________________________________________
-std::vector<int> AliEmcalJet::SortConstituentsPt( TClonesArray *tracks ) const
-{   //___________________________________________
-    // Sorting by p_T (decreasing) jet constituents
-    //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-    typedef std::pair<Double_t, Int_t> ptidx_pair;
+std::vector<int> AliEmcalJet::SortConstituentsPt(TClonesArray* tracks) const
+{
+  // Sorting by p_T (decreasing) jet constituents
 
-    // Create vector for Pt sorting
-    std::vector<ptidx_pair> pair_list ;
+  typedef std::pair<Double_t, Int_t> ptidx_pair;
 
-    for ( Int_t i_entry = 0; i_entry < GetNumberOfTracks(); i_entry++ )
-        {
-        AliVParticle *track = TrackAt(i_entry, tracks);
-        if (!track)
-            {
-            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()));
-            continue;
-            }
+  // Create vector for Pt sorting
+  std::vector<ptidx_pair> pair_list ;
 
-        pair_list.push_back( std::make_pair ( track->Pt(), i_entry ) );
-        }
+  for(Int_t i_entry = 0; i_entry < GetNumberOfTracks(); i_entry++)
+  {
+    AliVParticle* track = TrackAt(i_entry, tracks);
+    if(!track)
+    {
+      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()));
+      continue;
+    }
 
-    std::stable_sort( pair_list.begin() , pair_list.end() , sort_descend() );
+    pair_list.push_back(std::make_pair(track->Pt(), i_entry));
+  }
 
-    // return an vector of indexes of constituents (sorted descending by pt)
-    std::vector <int> index_sorted_list;
+  std::stable_sort(pair_list.begin() , pair_list.end() , sort_descend());
 
-    for ( std::vector< std::pair<Double_t,Int_t> >::iterator it = pair_list.begin(); it != pair_list.end(); ++it)
-        { index_sorted_list.push_back( (*it).second ); } // populating the return object with indexes of sorted tracks
+  // return an vector of indexes of constituents (sorted descending by pt)
+  std::vector <int> index_sorted_list;
 
-    return index_sorted_list;
+  for(std::vector< std::pair<Double_t, Int_t> >::iterator it = pair_list.begin(); it != pair_list.end(); ++it)
+  { index_sorted_list.push_back((*it).second); }   // populating the return object with indexes of sorted tracks
+
+  return index_sorted_list;
+}
+
+//________________________________________________________________________
+Double_t AliEmcalJet::GetZ(const Double_t trkPx, const Double_t trkPy, const Double_t trkPz) const
+{
+  // Get the z of a constituent inside of a jet
+
+  Double_t pJetSq = P();
+  pJetSq *= pJetSq;
+
+  if(pJetSq > 1e-6)
+  { return (trkPx * Px() + trkPy * Py() + trkPz * Pz()) / pJetSq ; }
+  else
+  { AliWarning(Form("%s: strange, pjet*pjet seems to be zero pJetSq: %f", GetName(), pJetSq)); return -1; }
+}
+
+//________________________________________________________________________
+Double_t AliEmcalJet::GetZ(const AliVParticle* trk) const
+{
+  // Get Z of constituent trk
+
+  return GetZ(trk->Px(), trk->Py(), trk->Pz());
 }
 
 //__________________________________________________________________________________________________
-AliVParticle* AliEmcalJet::GetLeadingTrack(TClonesArray *tracks) const
+AliVParticle* AliEmcalJet::GetLeadingTrack(TClonesArraytracks) const
 {
   AliVParticle* maxTrack = 0;
-  for (Int_t i = 0; i < GetNumberOfTracks(); i++) {
-    AliVParticle *track = TrackAt(i, tracks);
-    if (!track) {
+  for(Int_t i = 0; i < GetNumberOfTracks(); i++) {
+    AliVParticletrack = TrackAt(i, tracks);
+    if(!track) {
       AliError(Form("Unable to find jet track %d in collection %s (pos in collection %d, max %d)",
-                   i,tracks->GetName(),TrackAt(i),tracks->GetEntriesFast()));
+                    i, tracks->GetName(), TrackAt(i), tracks->GetEntriesFast()));
       continue;
     }
-    if (!maxTrack || track->Pt() > maxTrack->Pt()) 
+    if(!maxTrack || track->Pt() > maxTrack->Pt())
       maxTrack = track;
   }
 
@@ -484,17 +555,17 @@ AliVParticle* AliEmcalJet::GetLeadingTrack(TClonesArray *tracks) const
 }
 
 //__________________________________________________________________________________________________
-AliVCluster* AliEmcalJet::GetLeadingCluster(TClonesArray *clusters) const
+AliVCluster* AliEmcalJet::GetLeadingCluster(TClonesArrayclusters) const
 {
   AliVCluster* maxCluster = 0;
-  for (Int_t i = 0; i < GetNumberOfClusters(); i++) {
-    AliVCluster *cluster = ClusterAt(i, clusters);
-    if (!cluster) {
+  for(Int_t i = 0; i < GetNumberOfClusters(); i++) {
+    AliVClustercluster = ClusterAt(i, clusters);
+    if(!cluster) {
       AliError(Form("Unable to find jet cluster %d in collection %s (pos in collection %d, max %d)",
-                   i,clusters->GetName(),ClusterAt(i),clusters->GetEntriesFast()));
+                    i, clusters->GetName(), ClusterAt(i), clusters->GetEntriesFast()));
       continue;
     }
-    if (!maxCluster || cluster->E() > maxCluster->E()) 
+    if(!maxCluster || cluster->E() > maxCluster->E())
       maxCluster = cluster;
   }
 
@@ -505,15 +576,16 @@ AliVCluster* AliEmcalJet::GetLeadingCluster(TClonesArray *clusters) const
 void AliEmcalJet::ResetMatching()
 {
   fClosestJets[0] = 0;
-  fClosestJets[1] = 0; 
-  fClosestJetsDist[0] = 999; 
-  fClosestJetsDist[1] = 999; 
+  fClosestJets[1] = 0;
+  fClosestJetsDist[0] = 999;
+  fClosestJetsDist[1] = 999;
   fMatched = 2;
 }
 
 //__________________________________________________________________________________________________
-void AliEmcalJet::PrintGR() {
-  for(Int_t i = 0; i<fGRNumerator.GetSize(); i++) {
-    Printf("num[%d] = %f",i,fGRNumerator.At(i));
+void AliEmcalJet::PrintGR()
+{
+  for(Int_t i = 0; i < fGRNumerator.GetSize(); i++) {
+    Printf("num[%d] = %f", i, fGRNumerator.At(i));
   }
 }