8#include "FairRootManager.h"
9#include "CbmStsTrack.h"
13#include "TClonesArray.h"
27 fCheckTrigSi(CheckTrigSi)
32 FairRootManager *rootMgr = FairRootManager::Instance();
34 cout <<
"-E- CbmStsKFTrackFitter::Init(): "
35 <<
"ROOT manager is not instantiated!" << endl;
39 fStsHitsArray =
reinterpret_cast<TClonesArray*
>(rootMgr->GetObject(
"StsHit"));
40 if ( !fStsHitsArray ) {
41 cout <<
"-W- CbmStsKFTrackFitter::Init: "
42 <<
"no STS hits array" << endl;
47 fStsHitsArray =
reinterpret_cast<TClonesArray*
>(rootMgr->GetObject(
"StsHitSi"));
48 if ( !fStsHitsArray ) {
49 cout <<
"-W- CbmStsKFTrackFitter::Init: "
50 <<
"no STS hits array" << endl;
54 fMvdHitsArray =
reinterpret_cast<TClonesArray*
>(rootMgr->GetObject(
"MvdHit"));
55 if( !fMvdHitsArray ) {
56 cout <<
"-W- CbmStsKFTrackFitter::Init: "
57 <<
"no MVD hits array" << endl;
67 if( !fIsInitialised )
Init();
69 Int_t NStsHits = ( fStsHitsArray ) ?track->
GetNStsHits() :0;
70 Int_t NMvdHits= ( fMvdHitsArray) ?track->
GetNMvdHits() :0;
72 fHits.resize( NMvdHits + NStsHits );
74 for (Int_t
i=0;
i<NMvdHits;
i++){
76 fHits[
i].Create(
reinterpret_cast<CbmMvdHit*
>(fMvdHitsArray->At(j)) );
77 T.
fHits.push_back(&(fHits[
i]));
80 if( NStsHits>0 && fStsHitsArray ){
81 for (Int_t
i=0;
i<NStsHits;
i++){
84 if(!
bkg) fHits[NMvdHits+
i].Create(
reinterpret_cast<CbmStsHit*
>(fStsHitsArray->At(j)) );
87 T.
fHits.push_back(&(fHits[NMvdHits+
i]));
104 Int_t err = T.
Fit( 1 );
105 Bool_t ok = (!err) && CheckTrack( T );
109 ok = ok && (!err) && CheckTrack( T );
115 for(
int i=0;
i<6 ;
i++) t[
i] = 0;
116 for(
int i=0;
i<15;
i++) c[
i] = 0;
117 c[0] = c[2] = c[5] = c[9] = c[14] = 100.;
146 if( z<=fpar->GetZ() ){
149 }
else if( z<fpar->GetZ()+0.1 ){
152 }
else if( lpar->GetZ()<=z ){
155 }
else if( lpar->GetZ()-0.1<z ){
170 FairRootManager *fManger = FairRootManager::Instance();
171 vtx =
reinterpret_cast<CbmVertex *
>(fManger->GetObject(
"PrimaryVertex"));
173 cout<<
"-W- CbmStsKFTrackFitter::GetChiToVertex: No Primary Vertex found!"<<endl;
183 Double_t Cv[3] = { tmp(0,0), tmp(0,1), tmp(1,1) };
193 if( !track || !vtx || !v_track )
return ret;
200 if( finite(ret) ) ret =
sqrt(ret);
205Bool_t CbmStsKFTrackFitter::CheckTrack(
CbmKFTrack &T )
210 for(
int i=0;
i<6;
i++) ok = ok && finite(t[
i]) && TMath::Abs(t[
i])<1.e5;
211 for(
int i=0;
i<15;
i++) ok = ok && finite(c[
i]);
214 ok = ok && ( c[ 0] > 0 );
215 ok = ok && ( c[ 2] > 0 );
216 ok = ok && ( c[ 5] > 0 );
217 ok = ok && ( c[ 9] > 0 );
218 ok = ok && ( c[14] > 0 );
221 Double_t c00 = TMath::Sqrt(c[ 0]);
222 Double_t c11 = TMath::Sqrt(c[ 2]);
223 Double_t c22 = TMath::Sqrt(c[ 5]);
224 Double_t c33 = TMath::Sqrt(c[ 9]);
225 Double_t c44 = TMath::Sqrt(c[14]);
226 Double_t a = c11*c00;
227 if( c[ 1] > a ) c[ 1] = a;
228 if( c[ 1] < -a ) c[ 1] = -a;
230 if( c[ 3] > a ) c[ 3] = a;
231 if( c[ 3] < -a ) c[ 3] = -a;
233 if( c[ 4] > a ) c[ 4] = a;
234 if( c[ 4] < -a ) c[ 4] = -a;
236 if( c[ 6] > a ) c[ 6] = a;
237 if( c[ 6] < -a ) c[ 6] = -a;
239 if( c[ 7] > a ) c[ 7] = a;
240 if( c[ 7] < -a ) c[ 7] = -a;
242 if( c[ 8] > a ) c[ 8] = a;
243 if( c[ 8] < -a ) c[ 8] = -a;
245 if( c[10] > a ) c[10] = a;
246 if( c[10] < -a ) c[10] = -a;
248 if( c[11] > a ) c[11] = a;
249 if( c[11] < -a ) c[11] = -a;
251 if( c[12] > a ) c[12] = a;
252 if( c[12] < -a ) c[12] = -a;
254 if( c[13] > a ) c[13] = a;
255 if( c[13] < -a ) c[13] = -a;
258 for(
int i=0;
i<6 ;
i++) t[
i] = 0;
259 for(
int i=0;
i<15;
i++) c[
i] = 0;
260 c[0] = c[2] = c[5] = c[9] = c[14] = 100.;
Bool_t fIsInitialised
kTRUE if Init() was called
friend F32vec4 sqrt(const F32vec4 &a)
static Double_t getDeviation(Double_t x, Double_t y, Double_t C[], Double_t vx, Double_t vy, Double_t Cv[]=0)
Int_t Propagate(Double_t z_out, Double_t QP0, Bool_t line=false)
Int_t Extrapolate(Double_t z, Double_t *QP0=0, Bool_t line=false)
Access to i-th hit.
Int_t Fit(Bool_t downstream=1, Bool_t line=false)
void Fit2Vertex(CbmKFVertexInterface &vtx)
void GetStsTrack(CbmStsTrack &track, bool first=1)
std::vector< CbmKFHit * > fHits
void SetStsTrack(CbmStsTrack &track, bool first=1)
void SetTrackParam(FairTrackParam &track)
void GetTrackParam(FairTrackParam &track)
Double_t * GetTrack()
Is it electron.
Double_t & GetRefChi2()
array[15] of covariance matrix
Int_t & GetRefNDF()
Chi^2 after fit.
Double_t * GetCovMatrix()
array[6] of track parameters(x,y,tx,ty,qp,z)
void SetPID(Int_t pidHypo)
void SetKFHits(CbmKFTrack &T, CbmStsTrack *track)
CbmStsKFTrackFitter(Bool_t CheckTrigSi=false)
Double_t GetChiToVertex(CbmStsTrack *track, CbmVertex *vtx=0)
void Extrapolate(CbmStsTrack *track, Double_t z, FairTrackParam *e_track)
Double_t FitToVertex(CbmStsTrack *track, CbmVertex *vtx, FairTrackParam *v_track)
Int_t DoFit(CbmStsTrack *track, Int_t pidHypo=211)
FairTrackParam * GetParamLast()
Int_t GetNMvdHits() const
Int_t GetMvdHitIndex(Int_t iHit) const
TClonesArray * GetStsHitArr()
Int_t GetNStsHits() const
Int_t GetStsHitIndex(Int_t iHit) const
FairTrackParam * GetParamFirst()
void SetPidHypo(Int_t pid)
void CovMatrix(TMatrixFSym &covMat) const