#ifndef HKalTrackState_h
#define HKalTrackState_h
#include "TMatrixD.h"
class TVector3;
#include "TVectorD.h"
#include "hkaldef.h"
class HKalPlane;
using namespace Kalman;
class HKalTrackState : public TObject {
private:
kalFilterTypes type;
TMatrixD fPropagator;
TMatrixD fProjector;
TMatrixD fCovariance;
TMatrixD fProcessNoise;
TVectorD stateVec;
public:
HKalTrackState() {}
HKalTrackState(Kalman::kalFilterTypes stateType, Int_t measDim, Int_t stateDim);
HKalTrackState(Kalman::kalFilterTypes stateType, const TVectorD &sv, Int_t measDim);
virtual ~HKalTrackState();
virtual void calcDir (TVector3 &dir) const;
static void calcDir (TVector3 &dir, const TVectorD &sv);
virtual void calcMomVec (TVector3 &dir) const;
static void calcMomVec (TVector3 &dir, const TVectorD &sv);
virtual Bool_t calcPosAtPlane (TVector3 &pos, const HKalPlane &plane) const;
static Bool_t calcPosAtPlane (TVector3 &pos, const HKalPlane &plane, const TVectorD &sv);
virtual Bool_t calcPosAndDirAtPlane (TVector3 &pos, TVector3 &dir, const HKalPlane &plane) const;
static void calcStateVec (TVectorD &sv, Double_t qp, const TVector3 &pos, const TVector3 &dir);
virtual void clear();
virtual void print (const Option_t *opt="") const;
virtual void transform (const TRotation &transMat, const HKalPlane &plane);
static void transformFromLayerToSector(TVectorD &svSec, const TVectorD &svLay, const HKalPlane &plane);
static void transformFromSectorToLayer(TVectorD &svLay, const TVectorD &svSec, const HKalPlane &plane);
virtual TMatrixD const& getCovMat () const { return fCovariance; }
virtual TMatrixD const& getPropMat () const { return fPropagator; }
virtual TMatrixD const& getProjMat () const { return fProjector; }
virtual TMatrixD const& getProcNoiseMat() const { return fProcessNoise; }
virtual TVectorD const& getStateVec () const { return stateVec; }
virtual Int_t getStateType () const { return type; }
virtual Double_t getStateParam (Kalman::kalStateIdx par) const { return stateVec(par); }
virtual Int_t getMeasDim () const { return fProjector.GetNrows(); }
virtual Int_t getStateDim () const { return stateVec.GetNrows(); }
virtual void setCovMat (const TMatrixD &fCov);
virtual void setPropMat (const TMatrixD &fProp);
virtual void setProjMat (const TMatrixD &fProj);
virtual void setProcNoiseMat(const TMatrixD &fProc);
virtual void setStateVec (const TVectorD &sv);
virtual void setStateVec (Double_t qp, const TVector3 &pos, const TVector3 &dir) { calcStateVec(stateVec, qp, pos, dir); }
ClassDef(HKalTrackState,0)
};
#endif // HKalTrackState_h