11-jun-2001 NvE ResultError correctly set in GetMomentum() of AliTrack and AliJet.
authornick <nick@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 13 Jun 2001 12:59:52 +0000 (12:59 +0000)
committernick <nick@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 13 Jun 2001 12:59:52 +0000 (12:59 +0000)
12-jun-2001 NvE Error calculation improved for spherical and cylindrical coord.
                in Ali3Vector::GetErrors().
13-jun-2001 NvE Memberfunctions GetVecTrans() and GetVecLong() introduced for
                Ali3Vector and Ali4Vector.
                Also GetScaTrans(), GetScaLong() and GetPseudoRapidity() introduced
                for Ali4Vector to provide a basis for e.g. E_trans and E_long calc.
                Memberfunctions GetPt(), GetPl(), GetEt(), GetEl() and GetMt()
                introduced for AliTrack and AliJet.
                For AliTrack there is an additional GetMt(j) to provide the Mt
                value for the jth mass hypothesis.

RALICE/Ali3Vector.cxx
RALICE/Ali3Vector.h
RALICE/Ali4Vector.cxx
RALICE/Ali4Vector.h
RALICE/AliJet.cxx
RALICE/AliJet.h
RALICE/AliTrack.cxx
RALICE/AliTrack.h
RALICE/history.txt

index 2868ca1..cdf6d31 100644 (file)
@@ -294,8 +294,11 @@ void Ali3Vector::GetErrors(Double_t* e,TString f)
  if (f == "sph") frame=2;
  if (f == "cyl") frame=3;
 
+ Double_t pi=acos(-1.);
+
  Double_t dr2,dtheta2,dphi2,rho,drho2;
  Double_t v[3]; 
+ Double_t rxy2; // Shorthand for (x*x+y*y)
 
  switch (frame)
  {
@@ -307,6 +310,8 @@ void Ali3Vector::GetErrors(Double_t* e,TString f)
 
   case 2: // Spherical coordinates
    GetVector(v,"car");
+   rxy2=pow(v[0],2)+pow(v[1],2);
+   if (sqrt(rxy2)<(fV*1e-10)) rxy2=0;
    if (fV) 
    {
     dr2=(pow((v[0]*fDx),2)+pow((v[1]*fDy),2)+pow((v[2]*fDz),2))/(fV*fV);
@@ -315,19 +320,22 @@ void Ali3Vector::GetErrors(Double_t* e,TString f)
    {
     dr2=0;
    }
-   if (v[2]-fV)
+   if (fV)
    {
-    dtheta2=(v[2]*v[2]/(pow(fV,4)-pow(v[2],2)*pow(fV,2)))*dr2
-            +pow(fDz,2)/(pow(fV,2)-pow(v[2],2));
+    dtheta2=rxy2*pow(fDz,2)/pow(fV,4);
+    if (v[2] && rxy2)
+    {
+     dtheta2+=rxy2*pow(v[2],2)*(pow((v[0]*fDx),2)+pow((v[1]*fDy),2)) /
+              pow(((pow(v[3],2)*rxy2)+pow(rxy2,2)),2);
+    }
    }
    else
    {
-//    dr2=fDz*fDz;
     dtheta2=0;
    }
-   if (v[0] || v[1])
+   if (rxy2)
    {
-    dphi2=(pow((v[1]*fDx),2)+pow((v[0]*fDy),2))/(pow(v[0],2)+pow(v[1],2));
+    dphi2=(pow((v[1]*fDx),2)+pow((v[0]*fDy),2))/(pow(rxy2,2));
    }
    else
    {
@@ -335,12 +343,15 @@ void Ali3Vector::GetErrors(Double_t* e,TString f)
    }
    e[0]=sqrt(dr2);
    e[1]=sqrt(dtheta2);
+   if (e[1]>pi) e[1]=pi;
    e[2]=sqrt(dphi2);
+   if (e[2]>(2.*pi)) e[2]=2.*pi;
    break;
 
   case 3: // Cylindrical coordinates
    GetVector(v,"car");
-   rho=fV*sin(fTheta);
+   rho=fabs(fV*sin(fTheta));
+   if (rho<(fV*1e-10)) rho=0;
    if (rho) 
    {
     drho2=(pow((v[0]*fDx),2)+pow((v[1]*fDy),2))/(rho*rho);
@@ -349,9 +360,9 @@ void Ali3Vector::GetErrors(Double_t* e,TString f)
    {
     drho2=0;
    }
-   if (v[0] || v[1])
+   if (rho)
    {
-    dphi2=(pow((v[1]*fDx),2)+pow((v[0]*fDy),2))/(pow(v[0],2)+pow(v[1],2));
+    dphi2=(pow((v[1]*fDx),2)+pow((v[0]*fDy),2))/(pow(rho,4));
    }
    else
    {
@@ -359,6 +370,7 @@ void Ali3Vector::GetErrors(Double_t* e,TString f)
    }
    e[0]=sqrt(drho2);
    e[1]=sqrt(dphi2);
+   if (e[1]>(2.*pi)) e[1]=2.*pi;
    e[2]=fDz;
    break;
 
@@ -720,3 +732,60 @@ Ali3Vector& Ali3Vector::operator/=(Double_t s)
  }
 }
 ///////////////////////////////////////////////////////////////////////////
+Ali3Vector Ali3Vector::GetVecTrans()
+{
+// Provide the transverse vector w.r.t. z-axis.
+// Error propagation is performed automatically
+ Double_t pi=acos(-1.);
+ Double_t a[3],ea[3];
+
+ GetVector(a,"sph");
+ GetErrors(ea,"sph");
+
+ Double_t vt,dvt2;
+ vt=a[0]*sin(a[1]);
+ dvt2=pow((sin(a[1])*ea[0]),2)+pow((a[0]*cos(a[1])*ea[1]),2);
+
+ a[0]=fabs(vt);
+ a[1]=pi/2.;
+
+ ea[0]=sqrt(dvt2);
+ ea[1]=0;
+
+ Ali3Vector v;
+ v.SetVector(a,"sph");
+ v.SetErrors(ea,"sph");
+  
+ return v;
+}
+///////////////////////////////////////////////////////////////////////////
+Ali3Vector Ali3Vector::GetVecLong()
+{
+// Provide the longitudinal vector w.r.t. z-axis.
+// Error propagation is performed automatically
+ Double_t pi=acos(-1.);
+ Double_t a[3],ea[3];
+
+ GetVector(a,"sph");
+ GetErrors(ea,"sph");
+
+ Double_t vl,dvl2;
+ vl=a[0]*cos(a[1]);
+ dvl2=pow((cos(a[1])*ea[0]),2)+pow((a[0]*sin(a[1])*ea[1]),2);
+
+ a[0]=fabs(vl);
+ a[1]=0;
+ if (vl<0) a[1]=pi;
+ a[2]=0;
+
+ ea[0]=sqrt(dvl2);
+ ea[1]=0;
+ ea[2]=0;
+
+ Ali3Vector v;
+ v.SetVector(a,"sph");
+ v.SetErrors(ea,"sph");
+  
+ return v;
+}
+///////////////////////////////////////////////////////////////////////////
index 023c76c..c48c1c0 100644 (file)
@@ -38,6 +38,8 @@ class Ali3Vector
   Ali3Vector& operator-=(Ali3Vector& q);         // Subtract vector q
   Ali3Vector& operator*=(Double_t s);            // Multiply with scalar s
   Ali3Vector& operator/=(Double_t s);            // Divide by scalar s
+  Ali3Vector GetVecTrans();                      // Provide transverse vector w.r.t. z-axis
+  Ali3Vector GetVecLong();                       // Provide longitudinal vector w.r.t. z-axis
 
  protected:
   Double_t fV,fTheta,fPhi;    // Vector in spherical coordinates
index 3891ad9..869139b 100644 (file)
@@ -711,3 +711,75 @@ Int_t Ali4Vector::GetScalarFlag()
  return fScalar;
 }
 ///////////////////////////////////////////////////////////////////////////
+Ali3Vector Ali4Vector::GetVecTrans()
+{
+// Provide the transverse vector part w.r.t. z-axis.
+// Error propagation is performed automatically
+  
+ return fV.GetVecTrans();
+}
+///////////////////////////////////////////////////////////////////////////
+Ali3Vector Ali4Vector::GetVecLong()
+{
+// Provide the longitudinal vector part w.r.t. z-axis.
+// Error propagation is performed automatically
+  
+ return fV.GetVecLong();
+}
+///////////////////////////////////////////////////////////////////////////
+Double_t Ali4Vector::GetScaTrans()
+{
+// Provide the "transverse value" of the scalar part w.r.t. z-axis.
+// This provides a basis for e.g. E_trans calculation.
+// Note : the returned value is always positive or zero.
+// The error on the value is available via GetResultError()
+// after invokation of GetScaTrans().
+ Double_t a[3],ea[3];
+
+ fV.GetVector(a,"sph");
+ fV.GetErrors(ea,"sph");
+
+ Double_t s=GetScalar();
+ Double_t ds=GetResultError();
+
+ Double_t st,dst2;
+ st=s*sin(a[1]);
+ dst2=pow((sin(a[1])*ds),2)+pow((s*cos(a[1])*ea[1]),2);
+
+ fDresult=sqrt(dst2);  
+ return fabs(st);
+}
+///////////////////////////////////////////////////////////////////////////
+Double_t Ali4Vector::GetScaLong()
+{
+// Provide the "longitudinal value" of the scalar part w.r.t. z-axis.
+// This provides a basis for e.g. E_long calculation.
+// Note : the returned value can also be negative.
+// The error on the value is available via GetResultError()
+// after invokation of GetScaLong().
+ Double_t a[3],ea[3];
+
+ fV.GetVector(a,"sph");
+ fV.GetErrors(ea,"sph");
+
+ Double_t s=GetScalar();
+ Double_t ds=GetResultError();
+
+ Double_t sl,dsl2;
+ sl=s*cos(a[1]);
+ dsl2=pow((cos(a[1])*ds),2)+pow((s*sin(a[1])*ea[1]),2);
+
+ fDresult=sqrt(dsl2);  
+ return sl;
+}
+///////////////////////////////////////////////////////////////////////////
+Double_t Ali4Vector::GetPseudoRapidity()
+{
+// Provide the pseudorapidity value of the vector part w.r.t. z-axis.
+// The error on the value is available via GetResultError()
+// after invokation of GetPseudoRapidity().
+ Double_t eta=fV.GetPseudoRapidity();
+ fDresult=fV.GetResultError();
+ return eta;
+}
+///////////////////////////////////////////////////////////////////////////
index 425c089..3b7e14d 100644 (file)
@@ -46,6 +46,9 @@ class Ali4Vector
   Ali4Vector& operator*=(Double_t s);               // Multiply with scalar s
   Ali4Vector& operator/=(Double_t s);               // Divide by scalar s
   Int_t GetScalarFlag();                            // Provide the fScalar flag value
+  Ali3Vector GetVecTrans();                         // Provide transverse vector part w.r.t. z-axis
+  Ali3Vector GetVecLong();                          // Provide longitudinal vector part w.r.t. z-axis
+  Double_t GetPseudoRapidity();                     // Provide pseudorapidity of vector part w.r.t z-axis
 
  protected:
   Double_t fV2;      // The Lorentz invariant (v^i*v_i)
@@ -55,6 +58,8 @@ class Ali4Vector
   Double_t fDv0;     // The error on the scalar part
   Double_t fDresult; // The error on the scalar result of an operation (e.g. dotproduct) 
   Int_t fScalar;     // Flag denoting scalar mode
+  Double_t GetScaTrans(); // Provide "transverse value" of scalar part w.r.t. z-axis
+  Double_t GetScaLong();  // Provide "longitudinal value" of scalar part w.r.t. z-axis
 
  ClassDef(Ali4Vector,1) // Handling of Lorentz 4-vectors in various reference frames.
 };
index a47e0f0..7e41e7c 100644 (file)
@@ -206,9 +206,11 @@ Double_t AliJet::GetEnergy()
 Double_t AliJet::GetMomentum()
 {
 // Return the value of the total jet 3-momentum
- Ali3Vector p=Get3Vector();
- Double_t p2=p.Dot(p);
- return sqrt(p2);
+// The error can be obtained by invoking GetResultError() after
+// invokation of GetMomentum().
+ Double_t norm=fV.GetNorm();
+ fDresult=fV.GetResultError();
+ return norm;
 }
 ///////////////////////////////////////////////////////////////////////////
 Ali3Vector AliJet::Get3Momentum()
@@ -244,3 +246,67 @@ AliTrack* AliJet::GetTrack(Int_t i)
  return (AliTrack*)fTracks->At(i-1);
 }
 ///////////////////////////////////////////////////////////////////////////
+Double_t AliJet::GetPt()
+{
+// Provide trans. momentum value w.r.t. z-axis.
+// The error on the value can be obtained by GetResultError()
+// after invokation of GetPt().
+ Ali3Vector v;
+ v=GetVecTrans();
+ Double_t norm=v.GetNorm();
+ fDresult=v.GetResultError();
+
+ return norm;
+}
+///////////////////////////////////////////////////////////////////////////
+Double_t AliJet::GetPl()
+{
+// Provide long. momentum value w.r.t. z-axis.
+// The error on the value can be obtained by GetResultError()
+// after invokation of GetPl().
+ Ali3Vector v;
+ v=GetVecLong();
+ Double_t norm=v.GetNorm();
+ fDresult=v.GetResultError();
+
+ return norm;
+}
+///////////////////////////////////////////////////////////////////////////
+Double_t AliJet::GetEt()
+{
+// Provide trans. energy value w.r.t. z-axis.
+// The error on the value can be obtained by GetResultError()
+// after invokation of GetEt().
+ Double_t et=GetScaTrans();
+
+ return et;
+}
+///////////////////////////////////////////////////////////////////////////
+Double_t AliJet::GetEl()
+{
+// Provide long. energy value w.r.t. z-axis.
+// The error on the value can be obtained by GetResultError()
+// after invokation of GetEl().
+ Double_t el=GetScaLong();
+
+ return el;
+}
+///////////////////////////////////////////////////////////////////////////
+Double_t AliJet::GetMt()
+{
+// Provide transverse mass value w.r.t. z-axis.
+// The error on the value can be obtained by GetResultError()
+// after invokation of GetMt().
+ Double_t pt=GetPt();
+ Double_t dpt=GetResultError();
+ Double_t m=GetInvmass();
+ Double_t dm=GetResultError();
+
+ Double_t mt=sqrt(pt*pt+m*m);
+ Double_t dmt2=0;
+ if (mt) dmt2=(pow((pt*dpt),2)+pow((m*dm),2))/(mt*mt);
+
+ fDresult=sqrt(dmt2);
+ return mt;
+}
+///////////////////////////////////////////////////////////////////////////
index 622fc87..6ee693f 100644 (file)
@@ -33,6 +33,11 @@ class AliJet : public TObject,public Ali4Vector
   Float_t GetCharge();               // Provide the total charge of the jet
   Int_t GetNtracks();                // Return the number of tracks in the jet
   AliTrack* GetTrack(Int_t i);       // Provide i-th track of the jet (1=first track)
+  Double_t GetPt();                  // Provide trans. momentum w.r.t. z-axis
+  Double_t GetPl();                  // Provide long. momentum w.r.t. z-axis
+  Double_t GetEt();                  // Provide trans. energy w.r.t. z-axis
+  Double_t GetEl();                  // Provide long. energy w.r.t. z-axis
+  Double_t GetMt();                  // Provide trans. mass w.r.t. z-axis
 
  protected:
   void SetNtinit(Int_t n=2); // Set the initial max. number of tracks for this Jet
index f51f086..1d66ae3 100644 (file)
@@ -282,10 +282,8 @@ Double_t AliTrack::GetMomentum()
 // Provide the value of the track 3-momentum.
 // The error can be obtained by invoking GetResultError() after
 // invokation of GetMomentum().
-
-// Ali3Vector p=Get3Vector();
-// return sqrt(p.Dot(p));
  Double_t norm=fV.GetNorm();
+ fDresult=fV.GetResultError();
  return norm;
 }
 ///////////////////////////////////////////////////////////////////////////
@@ -667,3 +665,87 @@ void AliTrack::RemoveMassHypothesis(Int_t j)
  }
 }
 ///////////////////////////////////////////////////////////////////////////
+Double_t AliTrack::GetPt()
+{
+// Provide trans. momentum value w.r.t. z-axis.
+// The error on the value can be obtained by GetResultError()
+// after invokation of GetPt().
+ Ali3Vector v;
+ v=GetVecTrans();
+ Double_t norm=v.GetNorm();
+ fDresult=v.GetResultError();
+
+ return norm;
+}
+///////////////////////////////////////////////////////////////////////////
+Double_t AliTrack::GetPl()
+{
+// Provide long. momentum value w.r.t. z-axis.
+// The error on the value can be obtained by GetResultError()
+// after invokation of GetPl().
+ Ali3Vector v;
+ v=GetVecLong();
+ Double_t norm=v.GetNorm();
+ fDresult=v.GetResultError();
+
+ return norm;
+}
+///////////////////////////////////////////////////////////////////////////
+Double_t AliTrack::GetEt()
+{
+// Provide trans. energy value w.r.t. z-axis.
+// The error on the value can be obtained by GetResultError()
+// after invokation of GetEt().
+ Double_t et=GetScaTrans();
+
+ return et;
+}
+///////////////////////////////////////////////////////////////////////////
+Double_t AliTrack::GetEl()
+{
+// Provide long. energy value w.r.t. z-axis.
+// The error on the value can be obtained by GetResultError()
+// after invokation of GetEl().
+ Double_t el=GetScaLong();
+
+ return el;
+}
+///////////////////////////////////////////////////////////////////////////
+Double_t AliTrack::GetMt()
+{
+// Provide transverse mass value w.r.t. z-axis.
+// The error on the value can be obtained by GetResultError()
+// after invokation of GetMt().
+ Double_t pt=GetPt();
+ Double_t dpt=GetResultError();
+ Double_t m=GetMass();
+ Double_t dm=GetResultError();
+
+ Double_t mt=sqrt(pt*pt+m*m);
+ Double_t dmt2=0;
+ if (mt) dmt2=(pow((pt*dpt),2)+pow((m*dm),2))/(mt*mt);
+
+ fDresult=sqrt(dmt2);
+ return mt;
+}
+///////////////////////////////////////////////////////////////////////////
+Double_t AliTrack::GetMt(Int_t j)
+{
+// Provide transverse mass value w.r.t. z-axis and jth mass hypothesis.
+// Note : the first hypothesis is indicated by j=1.
+//        j=0 ==> Hypothesis with highest probability.
+// The error on the value can be obtained by GetResultError()
+// after invokation of GetMt(j).
+ Double_t pt=GetPt();
+ Double_t dpt=GetResultError();
+ Double_t m=GetMassHypothesis(j);
+ Double_t dm=GetResultError();
+
+ Double_t mt=sqrt(pt*pt+m*m);
+ Double_t dmt2=0;
+ if (mt) dmt2=(pow((pt*dpt),2)+pow((m*dm),2))/(mt*mt);
+
+ fDresult=sqrt(dmt2);
+ return mt;
+}
+///////////////////////////////////////////////////////////////////////////
index 6ce524d..60c7572 100644 (file)
@@ -50,6 +50,12 @@ class AliTrack : public TObject,public Ali4Vector
   Double_t GetMassHypothesis(Int_t j=0);     // Provide mass of jth hypothesis 
   Double_t GetMassHypothesisProb(Int_t j=0); // Provide prob. of jth mass hypothesis 
   void RemoveMassHypothesis(Int_t j);        // Remove the jth mass hypothesis 
+  Double_t GetPt();                 // Provide trans. momentum w.r.t. z-axis
+  Double_t GetPl();                 // Provide long. momentum w.r.t. z-axis
+  Double_t GetEt();                 // Provide trans. energy w.r.t. z-axis
+  Double_t GetEl();                 // Provide long. energy w.r.t. z-axis
+  Double_t GetMt();                 // Provide trans. mass w.r.t. z-axis
+  Double_t GetMt(Int_t j);          // Provide trans. mass w.r.t. z-axis and jth mass hypothesis
  
  protected:
   Float_t fQ;          // The charge of the particle
index 9bb5252..7488abb 100644 (file)
                 subdirectory and file RALICEHeaders.h moved back to the RALICE
                 directory again to enable universal installation scripts.
                 Also name AliEvent.cxx added in Makefile.
+11-jun-2001 NvE ResultError correctly set in GetMomentum() of AliTrack and AliJet.
+12-jun-2001 NvE Error calculation improved for spherical and cylindrical coord.
+                in Ali3Vector::GetErrors().
+13-jun-2001 NvE Memberfunctions GetVecTrans() and GetVecLong() introduced for
+                Ali3Vector and Ali4Vector.
+                Also GetScaTrans(), GetScaLong() and GetPseudoRapidity() introduced
+                for Ali4Vector to provide a basis for e.g. E_trans and E_long calc.
+                Memberfunctions GetPt(), GetPl(), GetEt(), GetEl() and GetMt()
+                introduced for AliTrack and AliJet.
+                For AliTrack there is an additional GetMt(j) to provide the Mt
+                value for the jth mass hypothesis.