/** The CbmKF Kalman Filter algorithm * * @author S.Gorbunov * @version 0.0 * @since 02.12.05 * * Description will be here * * To be used by high-level utilites like StsTrackFitter * */ #ifndef CBMKF_H #define CBMKF_H #include "CbmField.h" #include "CbmTask.h" #include "CbmStsDigiScheme.h" #include "CbmKFMaterial.h" class CbmKFTrackInterface; class CbmKFVertexInterface; #include #include using namespace std; class CbmGeoNode; class CbmKF :public CbmTask { public: CbmKF(const char *name="KF", Int_t iVerbose = 1 ); ~CbmKF(); static CbmKF *Instance(){ return fInstance; } /// * CbmTask methods void SetParContainers(); InitStatus ReInit(); InitStatus Init(); /// * Utilites Int_t GetMaterialIndex( Int_t uid ); /** Propagation of (T, C) to z_out without material, using linearisation at qp0 */ void Propagate( Double_t *T, Double_t *C, Double_t z_out, Double_t QP0 ); void PassMaterial( CbmKFTrackInterface &track, Double_t &QP0, Int_t ifst, Int_t ilst ); void PassMaterialBetween( CbmKFTrackInterface &track, Double_t &QP0, Int_t ifst, Int_t ilst ); void PassMaterialBetween( CbmKFTrackInterface &track, Double_t &QP0, CbmKFHit *fst, CbmKFHit *lst ); /// * Stored materials vector vMaterial; vector vStsMaterial; vector vMuchMaterial; vector vMuchDetectors; vector vRichMaterial; vector vTrdMaterial; vector vTargets; vector vPipe; /// * Usefull information CbmField *GetMagneticField(){ return fMagneticField; } map StsStationIDMap; map TrdStationIDMap; map MuchStationIDMap; Int_t GetMethod(){ return fMethod; } CbmStsDigiScheme StsDigi; private: static CbmKF *fInstance; CbmField *fMagneticField; Int_t fMethod; /* 0 = straight line, 1 = AnalyticLight 2 = Runge-Kutta 4 order, */ map fMaterialID2IndexMap; Int_t ReadTube( CbmKFTube &tube, CbmGeoNode *node); public: ClassDef( CbmKF, 1 ); }; #endif /* !CBMKF_H */