Fix momentum implementation.
authormarkus <markus@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 14 Mar 2007 15:33:01 +0000 (15:33 +0000)
committermarkus <markus@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 14 Mar 2007 15:33:01 +0000 (15:33 +0000)
STEER/AliAODTrack.cxx
STEER/AliAODTrack.h

index cb791c8..ce0c44a 100644 (file)
@@ -108,7 +108,6 @@ AliAODTrack::AliAODTrack(Int_t id,
   SetUsedForPrimVtxFit(usedForPrimVtxFit);
   if(covMatrix) SetCovMatrix(covMatrix);
   SetPID(pid);
-
 }
 
 //______________________________________________________________________________
@@ -179,14 +178,14 @@ template <class T> void AliAODTrack::SetP(const T *p, const Bool_t cartesian)
 
   if (p) {
     if (cartesian) {
-      Double_t pt = TMath::Sqrt(p[0]*p[0] + p[1]*p[1]);
-      Double_t P = TMath::Sqrt(pt*pt + p[2]*p[2]);
+      Double_t pt2 = p[0]*p[0] + p[1]*p[1];
+      Double_t P = TMath::Sqrt(pt2 + p[2]*p[2]);
       
-      fMomentum[0] = 1./pt;
-      fMomentum[1] = TMath::ACos(p[2]/P);
-      fMomentum[2] = TMath::ATan2(p[1], p[0]);
+      fMomentum[0] = TMath::Sqrt(pt2); // pt
+      fMomentum[1] = (pt2 != 0.) ? TMath::ATan2(p[1], p[0]) : -999; // phi
+      fMomentum[2] = (P != 0.) ? TMath::ACos(p[2]/P) : -999.; // theta
     } else {
-      fMomentum[0] = p[0];  // 1/pt
+      fMomentum[0] = p[0];  // pt
       fMomentum[1] = p[1];  // phi
       fMomentum[2] = p[2];  // theta
     }
index c8f9f08..d06bca2 100644 (file)
@@ -27,8 +27,8 @@ class AliAODTrack : public AliVirtualParticle {
     kUsedForPrimVtxFit=BIT(15) // set if this track was used to fit the primary vertex
   };
 
-  enum AODTrkPID_t {
-    kUnknown=0, kElectron, kMuon, kPion, kProton, kDeuton, kTriton, kAlpha, kOther};
+  enum AODTrkPID_t { // not clear why this was introduced
+    kUnknown=0, kElectron, kMuon, kPion, kProton, kDeuteron, kTriton, kAlpha, kOther}; // Where is the Kaon, why the Triton? 
 
   AliAODTrack();
   AliAODTrack(Int_t id,
@@ -64,14 +64,14 @@ class AliAODTrack : public AliVirtualParticle {
   AliAODTrack& operator=(const AliAODTrack& trk);
 
   // kinematics
-  virtual Double_t OneOverPt() const { return fMomentum[0]; }
+  virtual Double_t OneOverPt() const { return (fMomentum[0] != 0.) ? 1./fMomentum[0] : -999.; }
   virtual Double_t Phi()       const { return fMomentum[1]; }
   virtual Double_t Theta()     const { return fMomentum[2]; }
   
-  virtual Double_t Px() const { return TMath::Cos(fMomentum[1])/fMomentum[0]; }
-  virtual Double_t Py() const { return TMath::Sin(fMomentum[1])/fMomentum[0]; }
-  virtual Double_t Pz() const { return 1./(fMomentum[0] * TMath::Tan(fMomentum[2])); }
-  virtual Double_t Pt() const { return 1./fMomentum[0]; }
+  virtual Double_t Px() const { return fMomentum[0] * TMath::Cos(fMomentum[1]); }
+  virtual Double_t Py() const { return fMomentum[0] * TMath::Sin(fMomentum[1]); }
+  virtual Double_t Pz() const { return fMomentum[0] / TMath::Tan(fMomentum[2]); }
+  virtual Double_t Pt() const { return fMomentum[0]; }
   virtual Double_t P()  const { return TMath::Sqrt(Pt()*Pt()+Pz()*Pz()); }
 
           Double_t Chi2() const { return fChi2; }
@@ -137,7 +137,7 @@ class AliAODTrack : public AliVirtualParticle {
   void SetUsedForPrimVtxFit(Bool_t used = kTRUE) { used ? SetBit(kUsedForPrimVtxFit) : ResetBit(kUsedForPrimVtxFit); }
 
   void SetOneOverPt(Double_t oneOverPt) { fMomentum[0] = oneOverPt; }
-  void SetPt(Double_t pt) { fMomentum[0] = 1./pt; };
+  void SetPt(Double_t pt) { fMomentum[0] = pt; };
   void SetPhi(Double_t phi) { fMomentum[1] = phi; }
   void SetTheta(Double_t theta) { fMomentum[2] = theta; }
   template <class T> void SetP(const T *p, Bool_t cartesian = kTRUE);
@@ -156,7 +156,7 @@ class AliAODTrack : public AliVirtualParticle {
  private :
 
   // Momentum & position
-  Double32_t    fMomentum[3];    // momemtum stored in 1/pt, phi, theta
+  Double32_t    fMomentum[3];    // momemtum stored in pt, phi, theta
   Double32_t    fPosition[3];    // position of first point on track or dca
 
   Double32_t    fPID[10];        // [0.,1.,8] pointer to PID object