//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // a local straight line track representation // // // Environment: // Software developed for the PANDA Detector at FAIR. // // Author List: // Sebastian Neubert TUM (original author) // // //----------------------------------------------------------- #ifndef LSLTRACKREP_HH #define LSLTRACKREP_HH // Base Class Headers ---------------- #include "AbsTrackRep.h" // Collaborating Class Headers ------- #include // remove if you do not need streaming op #include "TVectorT.h" // Collaborating Class Declarations -- class AbsBFieldIfc; class AbsNystromEQM; class LSLTrackRep : public AbsTrackRep { public: // Constructors/Destructors --------- LSLTrackRep(); LSLTrackRep(double z, double x, double y, double dxdz, double dydz, double invp, double sigx, double sigy, double sigdxdz, double sigdydz, double siginvp, AbsBFieldIfc* field); LSLTrackRep(const LSLTrackRep& rep); // copy ctor virtual ~LSLTrackRep(); virtual AbsTrackRep* clone(){return new LSLTrackRep(*this);} virtual AbsTrackRep* prototype(){return new LSLTrackRep();} // Operators friend std::ostream& operator<< (std::ostream& s, const LSLTrackRep& me); // Accessors ----------------------- virtual int getDim() const {return 5;} void init(const TVector3& pos, double dxdz, double dydz, double invp, double sigx, double sigy, double sigdxdz, double sigdydz, double siginvp, AbsBFieldIfc* field); // Modifiers void SetBField(AbsBFieldIfc* b); void setReferencePlane(const DetPlane& pl) {s=pl.getO().Z(); _refPlane=pl;} void setRungeKuttaAcc(double acc){_acc=acc;} void setRungeKuttaAdaptive(bool f){_adaptive=f;} // Operations ---------------------- virtual void predict(const DetPlane&,TMatrixT& statePred, TMatrixT& covPred,TMatrixT& jacobian); virtual void extrapolate(const DetPlane&, TMatrixT& statePred); //virtual void extrapolate(const DetPlane&, // const TMatrixT& stateFrom, // TMatrixT& stateResult); virtual void extrapolate(const DetPlane&, TMatrixT& statePred, TMatrixT& covPred, TMatrixT& jacobian); virtual void stepalong(double h); virtual DetPlane getVirtualDetPlane(AbsRecoHit* hit) const; virtual TVector3 getPos(const DetPlane&) ; virtual TVector3 getMom(const DetPlane&) ; virtual double getCharge()const {double fact= inverted ? -1.:1.; return state[4][0]<0 ? -fact : fact;} private: // Private Data Members ------------ // Private Methods ----------------- // equation of motion in a magnetic field //static TVectorT eqm(const TVectorT& u, // const TVectorT& uprim, // const TVectorT& par); double s; double _acc; // accuracy of runge kutta; default: 1E-2cm bool _adaptive; AbsNystromEQM* _eqm; //! // calculate jacobian of extrapolation void Jacobian(const DetPlane& pl, const TMatrixT& statePred, TMatrixT& jacResult); public: ClassDef(LSLTrackRep,1) }; #endif //-------------------------------------------------------------- // $Log$ //--------------------------------------------------------------