ROOT logo
AliRoot » STEER » ESD » AliKFParticleBase

class AliKFParticleBase: public TObject

 Implementation of the AliKFParticleBase class
 .
 @author  S.Gorbunov, I.Kisel, I.Kulakov, M.Zyzak
 @version 1.0
 @since   13.05.07

 Class to reconstruct and store the decayed particle parameters.
 The method is described in CBM-SOFT note 2007-003,
 ``Reconstruction of decayed particles based on the Kalman filter'',
 http://www.gsi.de/documents/DOC-2007-May-14-1.pdf

 This class describes general mathematics which is used by AliKFParticle class

  -= Copyright &copy ALICE HLT Group =-

Function Members (Methods)

 
    This is an abstract class, constructors will not be documented.
    Look at the header to check for available constructors.

public:
virtual~AliKFParticleBase()
voidTObject::AbstractMethod(const char* method) const
voidAddDaughter(const AliKFParticleBase& Daughter)
voidAddDaughterWithEnergyCalc(const AliKFParticleBase& Daughter)
voidAddDaughterWithEnergyFit(const AliKFParticleBase& Daughter)
voidAddDaughterWithEnergyFitMC(const AliKFParticleBase& Daughter)
virtual voidTObject::AppendPad(Option_t* option = "")
virtual voidTObject::Browse(TBrowser* b)
const Double_t&Chi2() const
Double_t&Chi2()
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidTObject::Clear(Option_t* = "")
virtual TObject*TObject::Clone(const char* newname = "") const
virtual Int_tTObject::Compare(const TObject* obj) const
voidConstruct(const AliKFParticleBase** vDaughters, Int_t NDaughters, const AliKFParticleBase* ProdVtx = 0, Double_t Mass = -1, Bool_t IsConstrained = 0)
voidConstructGammaBz(const AliKFParticleBase& daughter1, const AliKFParticleBase& daughter2, double Bz)
virtual voidTObject::Copy(TObject& object) const
Double_t&Covariance(Int_t i)
Double_t&Covariance(Int_t i, Int_t j)
virtual voidTObject::Delete(Option_t* option = "")MENU
virtual Int_tTObject::DistancetoPrimitive(Int_t px, Int_t py)
virtual voidTObject::Draw(Option_t* option = "")
virtual voidTObject::DrawClass() constMENU
virtual TObject*TObject::DrawClone(Option_t* option = "") constMENU
virtual voidTObject::Dump() constMENU
const Double_t&E() const
Double_t&E()
virtual voidTObject::Error(const char* method, const char* msgfmt) const
virtual voidTObject::Execute(const char* method, const char* params, Int_t* error = 0)
virtual voidTObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0)
virtual voidTObject::ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual voidTObject::Fatal(const char* method, const char* msgfmt) const
virtual TObject*TObject::FindObject(const char* name) const
virtual TObject*TObject::FindObject(const TObject* obj) const
static voidGetArmenterosPodolanski(AliKFParticleBase& positive, AliKFParticleBase& negative, Double_t* QtAlfa)
Double_tGetChi2() const
Double_tGetCovariance(Int_t i) const
Double_tGetCovariance(Int_t i, Int_t j) const
Int_tGetDecayLength(Double_t& L, Double_t& SigmaL) const
Int_tGetDecayLengthXY(Double_t& L, Double_t& SigmaL) const
Double_tGetDeviationFromParticle(const AliKFParticleBase& p) const
Double_tGetDeviationFromVertex(const AliKFParticleBase& Vtx) const
Double_tGetDeviationFromVertex(const Double_t* v, const Double_t* Cv = 0) const
Double_tGetDistanceFromParticle(const AliKFParticleBase& p) const
Double_tGetDistanceFromVertex(const Double_t* vtx) const
Double_tGetDistanceFromVertex(const AliKFParticleBase& Vtx) const
virtual Option_t*TObject::GetDrawOption() const
virtual voidGetDStoParticle(const AliKFParticleBase& p, Double_t& DS, Double_t& DSp) const
voidGetDStoParticleBz(Double_t Bz, const AliKFParticleBase& p, Double_t& dS, Double_t& dS1) const
virtual Double_tGetDStoPoint(const Double_t* xyz) const
Double_tGetDStoPointBz(Double_t Bz, const Double_t* xyz) const
static Long_tTObject::GetDtorOnly()
Double_tGetE() const
Int_tGetEta(Double_t& Eta, Double_t& SigmaEta) const
virtual voidGetFieldValue(const Double_t* xyz, Double_t* B) const
virtual const char*TObject::GetIconName() const
Int_tGetLifeTime(Double_t& T, Double_t& SigmaT) const
Int_tGetMass(Double_t& M, Double_t& SigmaM) const
const Double_t&GetMassHypo() const
Int_tGetMomentum(Double_t& P, Double_t& SigmaP) const
virtual const char*TObject::GetName() const
Int_tGetNDF() const
virtual char*TObject::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*TObject::GetOption() const
Double_tGetParameter(Int_t i) const
Int_tGetPhi(Double_t& Phi, Double_t& SigmaPhi) const
Int_tGetPt(Double_t& Pt, Double_t& SigmaPt) const
Double_tGetPx() const
Double_tGetPy() const
Double_tGetPz() const
Int_tGetQ() const
Int_tGetR(Double_t& R, Double_t& SigmaR) const
Double_tGetS() const
const Double_t&GetSumDaughterMass() const
virtual const char*TObject::GetTitle() const
virtual UInt_tTObject::GetUniqueID() const
Double_tGetX() const
Double_tGetY() const
Double_tGetZ() const
virtual Bool_tTObject::HandleTimer(TTimer* timer)
virtual ULong_tTObject::Hash() const
virtual voidTObject::Info(const char* method, const char* msgfmt) const
virtual Bool_tTObject::InheritsFrom(const char* classname) const
virtual Bool_tTObject::InheritsFrom(const TClass* cl) const
voidInitialize()
voidInitialize(const Double_t* Param, const Double_t* Cov, Int_t Charge, Double_t Mass)
virtual voidTObject::Inspect() constMENU
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTObject::IsFolder() const
Bool_tTObject::IsOnHeap() const
virtual Bool_tTObject::IsSortable() const
Bool_tTObject::IsZombie() const
virtual voidTObject::ls(Option_t* option = "") const
voidTObject::MayNotUse(const char* method) const
const Int_t&NDF() const
Int_t&NDF()
virtual Bool_tTObject::Notify()
voidTObject::Obsolete(const char* method, const char* asOfVers, const char* removedFromVers) const
static voidTObject::operator delete(void* ptr)
static voidTObject::operator delete(void* ptr, void* vp)
static voidTObject::operator delete[](void* ptr)
static voidTObject::operator delete[](void* ptr, void* vp)
void*TObject::operator new(size_t sz)
void*TObject::operator new(size_t sz, void* vp)
void*TObject::operator new[](size_t sz)
void*TObject::operator new[](size_t sz, void* vp)
voidoperator+=(const AliKFParticleBase& Daughter)
AliKFParticleBase&operator=(const AliKFParticleBase&)
virtual voidTObject::Paint(Option_t* option = "")
Double_t&Parameter(Int_t i)
virtual voidTObject::Pop()
virtual voidTObject::Print(Option_t* option = "") const
const Double_t&Px() const
Double_t&Px()
const Double_t&Py() const
Double_t&Py()
const Double_t&Pz() const
Double_t&Pz()
const Int_t&Q() const
Int_t&Q()
virtual Int_tTObject::Read(const char* name)
virtual voidTObject::RecursiveRemove(TObject* obj)
voidTObject::ResetBit(UInt_t f)
voidRotateXY(Double_t angle, Double_t* Vtx)
const Double_t&S() const
Double_t&S()
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU
virtual voidTObject::SavePrimitive(basic_ostream<char,char_traits<char> >& out, Option_t* option = "")
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
voidSetConstructMethod(Int_t m)
virtual voidTObject::SetDrawOption(Option_t* option = "")MENU
static voidTObject::SetDtorOnly(void* obj)
voidSetMassConstraint(Double_t Mass, Double_t SigmaMass = 0)
voidSetMassHypo(Double_t m)
voidSetNoDecayLength()
voidSetNonlinearMassConstraint(Double_t Mass)
static voidTObject::SetObjectStat(Bool_t stat)
voidSetProductionVertex(const AliKFParticleBase& Vtx)
virtual voidTObject::SetUniqueID(UInt_t uid)
voidSetVtxGuess(Double_t x, Double_t y, Double_t z)
virtual voidShowMembers(TMemberInspector&)
virtual voidStreamer(TBuffer&)
voidStreamerNVirtual(TBuffer& ClassDef_StreamerNVirtual_b)
voidSubtractFromVertex(AliKFParticleBase& Vtx) const
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
virtual voidTransport(Double_t dS, Double_t* P, Double_t* C) const
voidTransportBz(Double_t Bz, Double_t dS, Double_t* P, Double_t* C) const
voidTransportCBM(Double_t dS, Double_t* P, Double_t* C) const
voidTransportToDecayVertex()
voidTransportToDS(Double_t dS)
voidTransportToProductionVertex()
virtual voidTObject::UseCurrentStyle()
virtual voidTObject::Warning(const char* method, const char* msgfmt) const
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0)
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const
const Double_t&X() const
Double_t&X()
const Double_t&Y() const
Double_t&Y()
const Double_t&Z() const
Double_t&Z()
protected:
Double_t&Cij(Int_t i, Int_t j)
voidConvert(bool ToProduction)
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
Double_tGetDStoPointLine(const Double_t* xyz) const
voidGetMeasurement(const Double_t* XYZ, Double_t* m, Double_t* V) const
static Double_tGetSCorrection(const Double_t* Part, const Double_t* XYZ)
static Int_tIJ(Int_t i, Int_t j)
static Bool_tInvertSym3(const Double_t* A, Double_t* Ainv)
voidTObject::MakeZombie()
static voidMultQSQt(const Double_t* Q, const Double_t* S, Double_t* SOut)
voidSetMassConstraint(Double_t* mP, Double_t* mC, Double_t mJ[][7], Double_t mass)
voidTransportLine(Double_t S, Double_t* P, Double_t* C) const

Data Members

protected:
Double_tSumDaughterMass* sum of the daughter particles masses
Bool_tfAtProductionVertex* Flag shows that the particle error along
Double_tfC[36]* Low-triangle covariance matrix of fP
Double_tfChi2* Chi^2
Int_tfConstructMethod* Determines the method for the particle construction.
Bool_tfIsLinearized* Flag shows that the guess is present
Double_tfMassHypo* sum of the daughter particles masses
Int_tfNDF* Number of degrees of freedom
Double_tfP[8]* Main particle parameters {X,Y,Z,Px,Py,Pz,E,S[=DecayLength/P]}
Int_tfQ* Particle charge
Double_tfSFromDecay* Distance from decay vertex to current position
Double_tfVtxGuess[3]* Guess for the position of the decay vertex

Class Charts

Inheritance Chart:
TObject
AliKFParticleBase
AliKFParticle
AliKFConversionMother
AliKFConversionPhoton
AliKFVertex

Function documentation

void Initialize(const Double_t* Param, const Double_t* Cov, Int_t Charge, Double_t Mass)
 Constructor from "cartesian" track, particle mass hypothesis should be provided

 Param[6] = { X, Y, Z, Px, Py, Pz } - position and momentum
 Cov [21] = lower-triangular part of the covariance matrix:

                (  0  .  .  .  .  . )
                (  1  2  .  .  .  . )
  Cov. matrix = (  3  4  5  .  .  . ) - numbering of covariance elements in Cov[]
                (  6  7  8  9  .  . )
                ( 10 11 12 13 14  . )
                ( 15 16 17 18 19 20 )
void Initialize()
* Initialise covariance matrix and set current parameters to 0.0
void SetVtxGuess(Double_t x, Double_t y, Double_t z)
* Set decay vertex parameters for linearisation
Int_t GetMomentum(Double_t& P, Double_t& SigmaP) const
* Calculate particle momentum
Int_t GetPt(Double_t& Pt, Double_t& SigmaPt) const
* Calculate particle transverse momentum
Int_t GetEta(Double_t& Eta, Double_t& SigmaEta) const
* Calculate particle pseudorapidity
Int_t GetPhi(Double_t& Phi, Double_t& SigmaPhi) const
* Calculate particle polar angle
Int_t GetR(Double_t& R, Double_t& SigmaR) const
* Calculate distance to the origin
Int_t GetMass(Double_t& M, Double_t& SigmaM) const
* Calculate particle mass
Int_t GetDecayLength(Double_t& L, Double_t& SigmaL) const
* Calculate particle decay length [cm]
Int_t GetDecayLengthXY(Double_t& L, Double_t& SigmaL) const
* Calculate particle decay length in XY projection [cm]
Int_t GetLifeTime(Double_t& T, Double_t& SigmaT) const
* Calculate particle decay time [s]
Double_t GetSCorrection(const Double_t* Part, const Double_t* XYZ)
* Get big enough correction for S error to let the particle Part be fitted to XYZ point
void GetMeasurement(const Double_t* XYZ, Double_t* m, Double_t* V) const
* Get additional covariances V used during measurement
void AddDaughter(const AliKFParticleBase& Daughter)
void AddDaughterWithEnergyFit(const AliKFParticleBase& Daughter)
* Energy considered as an independent veriable, fitted independently from momentum, without any constraints on mass
void AddDaughterWithEnergyCalc(const AliKFParticleBase& Daughter)
* Energy considered as a dependent variable, calculated from the momentum and mass hypothesis
void AddDaughterWithEnergyFitMC(const AliKFParticleBase& Daughter)
* Energy considered as an independent variable, fitted independently from momentum, without any constraints on mass
void SetProductionVertex(const AliKFParticleBase& Vtx)
* Set production vertex for the particle, when the particle was not used in the vertex fit
void SetMassConstraint(Double_t* mP, Double_t* mC, Double_t mJ[][7], Double_t mass)
* Set nonlinear mass constraint (Mass) on the state vector mP with a covariance matrix mC.
void SetNonlinearMassConstraint(Double_t Mass)
* Set nonlinear mass constraint (mass)
void SetMassConstraint(Double_t Mass, Double_t SigmaMass = 0)
* Set hard( SigmaMass=0 ) or soft (SigmaMass>0) mass constraint
void SetNoDecayLength()
* Set no decay length for resonances
void Construct(const AliKFParticleBase** vDaughters, Int_t NDaughters, const AliKFParticleBase* ProdVtx = 0, Double_t Mass = -1, Bool_t IsConstrained = 0)
* Full reconstruction in one go
void Convert(bool ToProduction)
* Tricky function - convert the particle error along its trajectory to
* the value which corresponds to its production/decay vertex
* It is done by combination of the error of decay length with the position errors
void TransportToDecayVertex()
* Transport the particle to its decay vertex
void TransportToProductionVertex()
* Transport the particle to its production vertex
void TransportToDS(Double_t dS)
* Transport the particle on dS parameter (SignedPath/Momentum)
Double_t GetDStoPointLine(const Double_t* xyz) const
* Get dS to a certain space point without field
Double_t GetDStoPointBz( Double_t B, const Double_t xyz[] )
void GetDStoParticleBz( Double_t B, const AliKFParticleBase &p, Double_t &DS, Double_t &DS1 )
* Get dS to another particle for Bz field
void TransportCBM(Double_t dS, Double_t* P, Double_t* C) const
* Transport the particle on dS, output to P[],C[], for CBM field
void TransportBz(Double_t Bz, Double_t dS, Double_t* P, Double_t* C) const
* Transport the particle on dS, output to P[],C[], for Bz field
Double_t GetDistanceFromVertex(const AliKFParticleBase& Vtx) const
* Calculate distance from vertex [cm]
Double_t GetDistanceFromVertex(const Double_t* vtx) const
* Calculate distance from vertex [cm]
Double_t GetDistanceFromParticle( const AliKFParticleBase &p )
* Calculate distance to other particle [cm]
Double_t GetDeviationFromVertex(const AliKFParticleBase& Vtx) const
* Calculate sqrt(Chi2/ndf) deviation from vertex
Double_t GetDeviationFromVertex(const Double_t* v, const Double_t* Cv = 0) const
* Calculate sqrt(Chi2/ndf) deviation from vertex
* v = [xyz], Cv=[Cxx,Cxy,Cyy,Cxz,Cyz,Czz]-covariance matrix
Double_t GetDeviationFromParticle( const AliKFParticleBase &p )
* Calculate sqrt(Chi2/ndf) deviation from other particle
void SubtractFromVertex(AliKFParticleBase& Vtx) const
* Subtract the particle from the vertex
void TransportLine(Double_t S, Double_t* P, Double_t* C) const
* Transport the particle as a straight line
void ConstructGammaBz(const AliKFParticleBase& daughter1, const AliKFParticleBase& daughter2, double Bz)
* Create gamma
void GetArmenterosPodolanski(AliKFParticleBase& positive, AliKFParticleBase& negative, Double_t* QtAlfa)
 example:
       AliKFParticle PosParticle(...)
       AliKFParticle NegParticle(...)
       Gamma.ConstructGamma(PosParticle, NegParticle);
       Double_t VertexGamma[3] = {Gamma.GetX(), Gamma.GetY(), Gamma.GetZ()};
       PosParticle.TransportToPoint(VertexGamma);
       NegParticle.TransportToPoint(VertexGamma);
       Double_t armenterosQtAlfa[2] = {0.};
       AliKFParticle::GetArmenterosPodolanski(PosParticle, NegParticle, armenterosQtAlfa );
void RotateXY(Double_t angle, Double_t* Vtx)
 Rotates the KFParticle object around OZ axis, OZ axis is set by the vertex position
 Double_t angle - angle of rotation in XY plane in [rad]
 Double_t Vtx[3] - position of the vertex in [cm]
Bool_t InvertSym3(const Double_t* A, Double_t* Ainv)
* Invert symmetric matric stored in low-triagonal form
void MultQSQt(const Double_t* Q, const Double_t* S, Double_t* SOut)
* Matrix multiplication Q*S*Q^T, Q - square matrix, S - symmetric
void GetFieldValue(const Double_t* xyz, Double_t* B) const
*
* ABSTRACT METHODS HAVE TO BE DEFINED IN USER CLASS
*
* Virtual method to access the magnetic field
Double_t GetDStoPoint(const Double_t* xyz) const
* Virtual methods needed for particle transportation
* One can use particular implementations for collider (only Bz component)
* geometry and for fixed-target (CBM-like) geometry which are provided below
* in TRANSPORT section
* Get dS to xyz[] space point
void GetDStoParticle(const AliKFParticleBase& p, Double_t& DS, Double_t& DSp) const
* Get dS to other particle p (dSp for particle p also returned)
virtual ~AliKFParticleBase()
* Destructor
{ ; }
void SetConstructMethod(Int_t m)
* Set consruction method
void SetMassHypo(Double_t m)
* Set and get mass hypothesis of the particle
{ fMassHypo = m;}
const Double_t& GetMassHypo() const
{ return fMassHypo; }
const Double_t& GetSumDaughterMass() const
* Returns the sum of masses of the daughters
{return SumDaughterMass;}
Double_t GetX() const
*
*  ACCESSORS
*
* Simple accessors
{ return fP[0]; }
Double_t GetY() const
{ return fP[1]; }
Double_t GetZ() const
{ return fP[2]; }
Double_t GetPx() const
{ return fP[3]; }
Double_t GetPy() const
{ return fP[4]; }
Double_t GetPz() const
{ return fP[5]; }
Double_t GetE() const
{ return fP[6]; }
Double_t GetS() const
{ return fP[7]; }
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]; }
Double_t GetCovariance(Int_t i, Int_t j) const
{ return fC[IJ(i,j)]; }
Double_t & X()
*
*  MODIFIERS
*
{ return fP[0]; }
Double_t & Y()
{ return fP[1]; }
Double_t & Z()
{ return fP[2]; }
Double_t & Px()
{ return fP[3]; }
Double_t & Py()
{ return fP[4]; }
Double_t & Pz()
{ return fP[5]; }
Double_t & E()
{ return fP[6]; }
Double_t & S()
{ return fP[7]; }
Int_t & Q()
{ return fQ; }
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)]; }
Int_t IJ(Int_t i, Int_t j)
Double_t & Cij(Int_t i, Int_t j)
{ return fC[IJ(i,j)]; }