BmnRoot
Loading...
Searching...
No Matches
CbmKFParticle.h
Go to the documentation of this file.
1
10#ifndef CBMKFPARTICLE_H
11#define CBMKFPARTICLE_H
12
13#include "CbmKFTrackInterface.h"
15
16#include <vector>
17using namespace std;
18
19class CbmKFParticle: public TObject {
20
21 public:
22 int Id() const { return fId; };
23 int NDaughters() const { return fDaughtersIds.size(); };
24 const vector<int>& DaughterIds() const { return fDaughtersIds; };
25
26 void SetId( int id ){ fId = id; } // should be always used (manualy)
27 void SetNDaughters( int n ) { fDaughtersIds.reserve(n); }
28 void AddDaughter( int id ){ fDaughtersIds.push_back(id); }
29 void CleanDaughtersId() { fDaughtersIds.clear(); }
30
31 private:
32
33 int fId; // id of particle
34 vector<int> fDaughtersIds; // id of particles it created from. if size == 1 then this is id of track. TODO use in functions. why unsigned short int doesn't work???
35
36 int fPDG; // pdg hypothesis
37
38 public:
39
40 Double_t r[8], C[36];
41 Int_t NDF;
42 Double_t Chi2, Q;
44
45 float fieldRegion[10];
46
47 CbmKFParticle():fId(-1), fDaughtersIds(), fPDG(0), NDF(0), Chi2(0), Q(0), AtProductionVertex(0) {};
48 CbmKFParticle( CbmKFTrackInterface* Track, Double_t *z0=0, Int_t *qHypo=0, Int_t *pdg=0);
49
51
52 // Construction
53
54 void Construct( vector<CbmKFTrackInterface*> &vDaughters,
55 CbmKFVertexInterface *Parent=0,
56 Double_t Mass=-1, Double_t CutChi2=-1 );
57
58 void ConstructFromKFParticle( vector<CbmKFParticle*> &vDaughters, CbmKFVertexInterface *Parent=0, Double_t Mass=-1, Double_t CutChi2=-1 );
59
60 // Transportation
61
64
65 Double_t GetDStoPoint( const Double_t xyz[] ) const;
66
67 // Accessors ?
68
69 //* Simple accessors
70 Double_t GetX () const { return r[0]; }
71 Double_t GetY () const { return r[1]; }
72 Double_t GetZ () const { return r[2]; }
73 Double_t GetPx () const { return r[3]; }
74 Double_t GetPy () const { return r[4]; }
75 Double_t GetPz () const { return r[5]; }
76 Double_t GetE () const { return r[6]; }
77 Double_t GetS () const { return r[7]; }
78 Double_t GetQ () const { return Q; }
79 Double_t GetChi2 () const { return Chi2; }
80 Int_t GetNDF () const { return NDF; }
81 Double_t *GetParameters() { return r; }
82 Double_t *GetCovMatrix() { return C; }
83
84 Bool_t GetAtProductionVertex() const { return AtProductionVertex; }
85
86
87 Double_t GetParameter ( Int_t i ) const { return r[i]; }
88 Double_t GetCovariance( Int_t i ) const { return C[i]; }
89 Double_t GetCovariance( Int_t i, Int_t j ) const { return C[IJ(i,j)]; }
90
91 //*
92 //* MODIFIERS
93 //*
94
95 Double_t & rX () { return r[0]; }
96 Double_t & rY () { return r[1]; }
97 Double_t & rZ () { return r[2]; }
98 Double_t & rPx () { return r[3]; }
99 Double_t & rPy () { return r[4]; }
100 Double_t & rPz () { return r[5]; }
101 Double_t & rE () { return r[6]; }
102 Double_t & rS () { return r[7]; }
103 Double_t & rQ () { return Q; }
104 Double_t & rChi2 () { return Chi2; }
105 Int_t & rNDF () { return NDF; }
106
107 Double_t & rParameter ( Int_t i ) { return r[i]; }
108 Double_t & rCovariance( Int_t i ) { return C[i]; }
109 Double_t & rCovariance( Int_t i, Int_t j ) { return C[IJ(i,j)]; }
110
111 //* Accessor with calculations
112
113 void GetKFTrack( CbmKFTrackInterface* Track);
115 void GetMomentum( Double_t &P, Double_t &Error );
116 void GetMass( Double_t &M, Double_t &Error );
117 void GetDecayLength( Double_t &L, Double_t &Error );
118 void GetLifeTime( Double_t &T, Double_t &Error );
119
120 Double_t GetRapidity() const;
121 Double_t GetPt() const;
122 Double_t GetTheta() const;
123 Double_t GetPhi() const;
124
125 void Extrapolate( Double_t r0[], double T );
126 void ExtrapolateLine( Double_t r0[], double T );
127
128
129 void SetPDG ( int pdg ) { fPDG = pdg; }
130 int GetPDG () const { return fPDG; }
131 protected:
132
133 Double_t& Cij( Int_t i, Int_t j ){
134 return C[( j<=i ) ? i*(i+1)/2+j :j*(j+1)/2+i];
135 }
136 static Int_t IJ( Int_t i, Int_t j ){
137 return ( j<=i ) ? i*(i+1)/2+j :j*(j+1)/2+i;
138 }
139
140 void MeasureMass( Double_t r0[], Double_t Mass );
141 void MeasureProductionVertex( Double_t r0[], CbmKFVertexInterface *Parent);
142 void Convert( Double_t r0[], bool ToProduction );
143
144
146};
147#endif /* !CBMKFPARTICLE_H */
const Float_t z0
Definition BmnMwpcHit.cxx:6
int i
Definition P4_F32vec4.h:22
void SetNDaughters(int n)
void GetMomentum(Double_t &P, Double_t &Error)
int NDaughters() const
void Extrapolate(Double_t r0[], double T)
Double_t & rQ()
Double_t & rCovariance(Int_t i, Int_t j)
void GetMass(Double_t &M, Double_t &Error)
Double_t & rS()
ClassDef(CbmKFParticle, 1)
Double_t * GetParameters()
void SetId(int id)
void CleanDaughtersId()
Double_t r[8]
Double_t & rCovariance(Int_t i)
Double_t GetPt() const
Double_t GetPz() const
void ExtrapolateLine(Double_t r0[], double T)
Int_t GetNDF() const
Double_t GetE() const
void GetLifeTime(Double_t &T, Double_t &Error)
void GetDecayLength(Double_t &L, Double_t &Error)
Double_t GetRapidity() const
static Int_t IJ(Int_t i, Int_t j)
Double_t & rZ()
Double_t GetPx() const
Double_t & rX()
Double_t GetParameter(Int_t i) const
Double_t GetChi2() const
Double_t & Cij(Int_t i, Int_t j)
int GetPDG() const
Double_t GetS() const
Double_t & rY()
Double_t GetY() const
Double_t GetZ() const
void GetKFVertex(CbmKFVertexInterface &vtx)
void SetPDG(int pdg)
void TransportToProductionVertex()
Double_t GetTheta() const
Double_t GetCovariance(Int_t i) const
Double_t GetX() const
Bool_t GetAtProductionVertex() const
int Id() const
const vector< int > & DaughterIds() const
Double_t & rPy()
Double_t C[36]
Double_t & rPz()
Double_t GetQ() const
void MeasureProductionVertex(Double_t r0[], CbmKFVertexInterface *Parent)
float fieldRegion[10]
Bool_t AtProductionVertex
Double_t & rE()
void TransportToDecayVertex()
void AddDaughter(int id)
Double_t GetPy() const
Double_t GetDStoPoint(const Double_t xyz[]) const
Double_t & rChi2()
Double_t & rPx()
void MeasureMass(Double_t r0[], Double_t Mass)
void GetKFTrack(CbmKFTrackInterface *Track)
Double_t GetCovariance(Int_t i, Int_t j) const
Double_t & rParameter(Int_t i)
Double_t * GetCovMatrix()
void Convert(Double_t r0[], bool ToProduction)
void ConstructFromKFParticle(vector< CbmKFParticle * > &vDaughters, CbmKFVertexInterface *Parent=0, Double_t Mass=-1, Double_t CutChi2=-1)
Double_t GetPhi() const
void Construct(vector< CbmKFTrackInterface * > &vDaughters, CbmKFVertexInterface *Parent=0, Double_t Mass=-1, Double_t CutChi2=-1)
STL namespace.