/** Base class for material is being used by the CbmKF Kalman Filter * * @author S.Gorbunov * @version 0.0 * @since 02.12.05 * * Description will be here * */ #ifndef CBMKFMATERIAL_H #define CBMKFMATERIAL_H 1 #include "CbmKFTrackInterface.h" class CbmKFMaterial :public TObject { public: CbmKFMaterial(){ } virtual ~CbmKFMaterial(){ } Int_t ID; Double_t ZReference ; Double_t ZThickness ; Double_t RadLength ; Double_t F; virtual Bool_t IsOutside( Double_t x, Double_t y ){ return 0; } virtual void Pass( Double_t ZCross, Double_t ZThick, CbmKFTrackInterface &track, Bool_t downstream, Double_t &QP0 ); virtual void Pass( CbmKFTrackInterface &track, Bool_t downstream, Double_t &QP0 ){ Pass( ZReference, ZThickness, track, downstream, QP0); } virtual void Pass( CbmKFTrackInterface &track, Bool_t downstream ){ Double_t QP0 = track.GetTrack()[4]; Pass( ZReference, ZThickness, track, downstream, QP0); } static Bool_t comparePDown( const CbmKFMaterial *a, const CbmKFMaterial *b ){ return a->ZReference < b->ZReference; } static Bool_t compareP_z( const CbmKFMaterial *a, Double_t z ){ return (a->ZReference + a->ZThickness/2) < z ; } static Bool_t compareP_Z( Double_t z, const CbmKFMaterial *a ){ return z < (a->ZReference + a->ZThickness/2) ; } ClassDef(CbmKFMaterial,1) }; class CbmKFWall: public CbmKFMaterial{ public: CbmKFWall(){ } ~CbmKFWall(){ } ClassDef(CbmKFWall,1) }; class CbmKFTube: public CbmKFMaterial{ public: CbmKFTube(){} ~CbmKFTube(){} Double_t z, dz; Double_t r, R, rr, RR; Bool_t IsOutside( Double_t x, Double_t y ){ Double_t r2 = x*x + y*y; return ( r2