GetPseudoProperDecayTime added, (Igor Kulakov) https://savannah.cern.ch/support/...
authorshahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 1 Nov 2011 12:25:57 +0000 (12:25 +0000)
committershahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 1 Nov 2011 12:25:57 +0000 (12:25 +0000)
STEER/ESD/AliKFParticle.cxx
STEER/ESD/AliKFParticle.h
STEER/ESD/AliKFParticleBase.h

index 8abd1a0..a851c07 100644 (file)
@@ -360,3 +360,60 @@ void AliKFParticle::GetDStoParticleALICE( const AliKFParticleBase &p,
   return;
 }
 */
+
+  // * Pseudo Proper Time of decay = (r*pt) / |pt| * M/|pt|
+Double_t AliKFParticle::GetPseudoProperDecayTime( const AliKFParticle &pV, const Double_t& mass, Double_t* timeErr2 ) const
+{ // TODO optimize with respect to time and stability
+  const Double_t ipt2 = 1/( Px()*Px() + Py()*Py() );
+  const Double_t mipt2 = mass*ipt2;
+  const Double_t dx = X() - pV.X();
+  const Double_t dy = Y() - pV.Y();
+
+  if ( timeErr2 ) {
+      // -- calculate error = sigma(f(r)) = f'Cf'
+      // r = {x,y,px,py,x_pV,y_pV}
+      // df/dr = { px*m/pt^2,
+      //     py*m/pt^2,
+      //    ( x - x_pV )*m*(1/pt^2 - 2(px/pt^2)^2),
+      //    ( y - y_pV )*m*(1/pt^2 - 2(py/pt^2)^2),
+      //     -px*m/pt^2,
+      //     -py*m/pt^2 }
+    const Double_t f0 = Px()*mipt2;
+    const Double_t f1 = Py()*mipt2;
+    const Double_t mipt2derivative = mipt2*(1-2*Px()*Px()*ipt2);
+    const Double_t f2 = dx*mipt2derivative;
+    const Double_t f3 = -dy*mipt2derivative;
+    const Double_t f4 = -f0;
+    const Double_t f5 = -f1;
+
+    const Double_t& C00 =    GetCovariance(0,0);
+    const Double_t& C10 =    GetCovariance(0,1);
+    const Double_t& C11 =    GetCovariance(1,1);
+    const Double_t& C20 =    GetCovariance(3,0);
+    const Double_t& C21 =    GetCovariance(3,1);
+    const Double_t& C22 =    GetCovariance(3,3);
+    const Double_t& C30 =    GetCovariance(4,0);
+    const Double_t& C31 =    GetCovariance(4,1);
+    const Double_t& C32 =    GetCovariance(4,3);
+    const Double_t& C33 =    GetCovariance(4,4);
+    const Double_t& C44 = pV.GetCovariance(0,0);
+    const Double_t& C54 = pV.GetCovariance(1,0);
+    const Double_t& C55 = pV.GetCovariance(1,1);
+
+    *timeErr2 =
+      f5*C55*f5 +
+      f5*C54*f4 +
+      f4*C44*f4 +
+      f3*C33*f3 +
+      f3*C32*f2 +
+      f3*C31*f1 +
+      f3*C30*f0 +
+      f2*C22*f2 +
+      f2*C21*f1 +
+      f2*C20*f0 +
+      f1*C11*f1 +
+      f1*C10*f0 +
+      f0*C00*f0;
+  }
+  return ( dx*Px() + dy*Py() )*mipt2;
+}
index 0a988e1..3ae3e73 100644 (file)
@@ -93,6 +93,18 @@ class AliKFParticle :public AliKFParticleBase
   Int_t    GetQ    () const ; //* charge
   Double_t GetChi2 () const ; //* chi^2
   Int_t    GetNDF  () const ; //* Number of Degrees of Freedom
+
+  const Double_t& X    () const { return fP[0]; }
+  const Double_t& Y    () const { return fP[1]; }
+  const Double_t& Z    () const { return fP[2]; }
+  const Double_t& Px   () const { return fP[3]; }
+  const Double_t& Py   () const { return fP[4]; }
+  const Double_t& Pz   () const { return fP[5]; }
+  const Double_t& E    () const { return fP[6]; }
+  const Double_t& S    () const { return fP[7]; }
+  const Int_t   & Q    () const { return fQ;    }
+  const Double_t& Chi2 () const { return fChi2; }
+  const Int_t   & NDF  () const { return fNDF;  }
   
   Double_t GetParameter ( int i ) const ;
   Double_t GetCovariance( int i ) const ;
@@ -299,7 +311,13 @@ class AliKFParticle :public AliKFParticleBase
 
   void ConstructGamma( const AliKFParticle &daughter1,
                       const AliKFParticle &daughter2  );
-
+  
+    // * Pseudo Proper Time of decay = (r*pt) / |pt| * M/|pt|
+    // @primVertex - primary vertex
+    // @mass - mass of the mother particle (in the case of "Hb -> JPsi" it would be JPsi mass)
+    // @*timeErr2 - squared error of the decay time. If timeErr2 = 0 it isn't calculated
+  Double_t GetPseudoProperDecayTime( const AliKFParticle &primVertex, const Double_t& mass, Double_t* timeErr2 = 0 ) const;
+  
  protected: 
   
   //*
index 818087a..0c01d16 100644 (file)
@@ -96,6 +96,19 @@ class AliKFParticleBase :public TObject {
   Int_t    GetQ    () const { return fQ;    }
   Double_t GetChi2 () const { return fChi2; }
   Int_t    GetNDF  () const { return fNDF;  }
+
+  const Double_t& X    () const { return fP[0]; }
+  const Double_t& Y    () const { return fP[1]; }
+  const Double_t& Z    () const { return fP[2]; }
+  const Double_t& Px   () const { return fP[3]; }
+  const Double_t& Py   () const { return fP[4]; }
+  const Double_t& Pz   () const { return fP[5]; }
+  const Double_t& E    () const { return fP[6]; }
+  const Double_t& S    () const { return fP[7]; }
+  const Int_t   & Q    () const { return fQ;    }
+  const Double_t& Chi2 () const { return fChi2; }
+  const Int_t   & NDF  () const { return fNDF;  }
+
   
   Double_t GetParameter ( Int_t i )        const { return fP[i];       }
   Double_t GetCovariance( Int_t i )        const { return fC[i];       }
@@ -130,6 +143,8 @@ class AliKFParticleBase :public TObject {
   Double_t & Chi2 () { return fChi2; }
   Int_t    & NDF  () { return fNDF;  }
 
+  
+
   Double_t & Parameter ( Int_t i )        { return fP[i];       }
   Double_t & Covariance( Int_t i )        { return fC[i];       }
   Double_t & Covariance( Int_t i, Int_t j ) { return fC[IJ(i,j)]; }