10#include "FairRootManager.h"
31 FairRootManager* rootMgr = FairRootManager::Instance();
32 if (NULL == rootMgr) {
33 cout <<
"-E- CbmStsKFTrackFitter::Init(): "
34 <<
"ROOT manager is not instantiated!" << endl;
40 cout <<
"-W- CbmStsKFTrackFitter::Init: "
41 <<
"no STS hits array" << endl;
48 cout <<
"-W- CbmStsKFTrackFitter::Init: "
49 <<
"no STS hits array" << endl;
55 cout <<
"-W- CbmStsKFTrackFitter::Init: "
56 <<
"no MVD hits array" << endl;
73 fHits.resize(NMvdHits + NStsHits);
75 for (
Int_t i = 0;
i < NMvdHits;
i++) {
78 T.fHits.push_back(&(
fHits[
i]));
82 for (
Int_t i = 0;
i < NStsHits;
i++) {
90 T.fHits.push_back(&(
fHits[NMvdHits +
i]));
103 T.GetTrack()[
i] = 0.;
108 Int_t err = T.Fit(1);
115 T.GetStsTrack(*track, 1);
120 for (
int i = 0;
i < 6;
i++)
122 for (
int i = 0;
i < 15;
i++)
124 c[0] = c[2] = c[5] = c[9] = c[14] = 100.;
125 T.GetRefChi2() = 100.;
127 T.GetStsTrack(*track, 0);
128 T.GetStsTrack(*track, 1);
144 T.GetTrackParam(*e_track);
154 if (z <= fpar->GetZ()) {
155 T.SetTrackParam(*fpar);
157 }
else if (z < fpar->GetZ() + 0.1) {
158 T.SetTrackParam(*fpar);
160 }
else if (lpar->GetZ() <= z) {
161 T.SetTrackParam(*lpar);
163 }
else if (lpar->GetZ() - 0.1 < z) {
164 T.SetTrackParam(*lpar);
168 T.SetTrackParam(*fpar);
172 T.GetTrackParam(*e_track);
178 FairRootManager* fManger = FairRootManager::Instance();
179 vtx =
reinterpret_cast<CbmVertex*
>(fManger->GetObject(
"PrimaryVertex"));
181 cout <<
"-W- CbmStsKFTrackFitter::GetChiToVertex: No Primary Vertex found!" << endl;
187 T.Extrapolate(vtx->
GetZ());
191 Double_t Cv[3] = {tmp(0, 0), tmp(0, 1), tmp(1, 1)};
199 if (!track || !vtx || !v_track)
204 T.GetTrackParam(*v_track);
205 if (T.GetRefNDF() > 0 && T.GetRefChi2() >= 0) {
206 ret = T.GetRefChi2() / T.GetRefNDF();
218 for (
int i = 0;
i < 6;
i++)
220 for (
int i = 0;
i < 15;
i++)
221 ok = ok && finite(c[
i]);
222 ok = ok && finite(T.GetMass()) && finite(T.GetRefChi2());
224 ok = ok && (c[0] > 0);
225 ok = ok && (c[2] > 0);
226 ok = ok && (c[5] > 0);
227 ok = ok && (c[9] > 0);
228 ok = ok && (c[14] > 0);
288 for (
int i = 0;
i < 6;
i++)
290 for (
int i = 0;
i < 15;
i++)
292 c[0] = c[2] = c[5] = c[9] = c[14] = 100.;
293 T.GetRefChi2() = 100.;
TMatrixTSym< Float_t > TMatrixFSym
static Double_t getDeviation(Double_t x, Double_t y, Double_t C[], Double_t vx, Double_t vy, Double_t Cv[]=0)
void SetStsTrack(CbmStsTrack &track, bool first=1)
void SetTrackParam(FairTrackParam &track)
void SetPID(Int_t pidHypo)
TClonesArray * fStsHitsArray
void SetKFHits(CbmKFTrack &T, CbmStsTrack *track)
CbmStsKFTrackFitter(Bool_t CheckTrigSi=false)
Default constructor.
Double_t GetChiToVertex(CbmStsTrack *track, CbmVertex *vtx=0)
Get normalized (in sigma's) impact parameter form vertex vtx if no vtx given, return deviation from p...
std::vector< CbmKFStsHit > fHits
void Extrapolate(CbmStsTrack *track, Double_t z, FairTrackParam *e_track)
Extrapolate track to any Z position.
Double_t FitToVertex(CbmStsTrack *track, CbmVertex *vtx, FairTrackParam *v_track)
Fit track to a vertex.
TClonesArray * fMvdHitsArray
Int_t DoFit(CbmStsTrack *track, Int_t pidHypo=211)
Fit given track using Kalman Filter algorithm.
Bool_t CheckTrack(CbmKFTrack &T)
void Init()
Initialisation.
FairTrackParam * GetParamLast()
Int_t GetNMvdHits() const
Int_t GetMvdHitIndex(Int_t iHit) const
TClonesArray * GetStsHitArr()
Int_t GetNStsHits() const
Accessors.
Int_t GetStsHitIndex(Int_t iHit) const
FairTrackParam * GetParamFirst()
void SetPidHypo(Int_t pid)
Modifiers.
void CovMatrix(TMatrixFSym &covMat) const
Double_t GetX() const
Accessors.
TObject * At(Int_t idx) const override
friend friend class TClonesArray
RVec< PromoteType< T > > sqrt(const RVec< T > &v)
Double_t Sqrt(Double_t x)