// // TStnTofGeometry.hh _ Declarations for the TOF detector geometry // // m jones _ 27 june 2002 // #ifndef __TOFGEOMETRY__ #define __TOFGEOMETRY__ #include #include #include "TPolyLine.h" #include "TMarker.h" #include "TVector3.h" #include "TRotation.h" #define SURVEY 1 #define ALIGNED 2 class TofHitBar { int _barNumber; int _trackNumber; int _went_in, _went_out; double _t_in, _t_out; double _ss_in, _ss_out; double _v_in, _v_out; double _u_in, _u_out; double _err_u_in, _err_u_out; double _dedx; TVector3 _in, _out; TVector3 _dirin, _dirout; public: TofHitBar() { }; TofHitBar(int); ~TofHitBar() { }; int BarNumber() const { return _barNumber; } int TrackNumber() const { return _trackNumber; } double getInZ() const { return _in.Z(); } double getInR() const { return _in.Perp(); } double getOutZ() const { return _out.Z(); } double getOutR() const { return _out.Perp(); } const TVector3 &inPoint() const { return _in; } const TVector3 &outPoint() const { return _out; } const TVector3 &inDirection() const { return _dirin; } const TVector3 &outDirection() const { return _dirout; } double inArcLength() const { return _ss_in; } double outArcLength() const { return _ss_out; } double pathLength() const { return (_out-_in).Mag(); } double inU() const { return _u_in; } double inV() const { return _v_in; } double outU() const { return _u_out; } double outV() const { return _v_out; } double inT() const { return _t_in; } double outT() const { return _t_out; } double inErrorU() const { return _err_u_out; } double outErrorU() const { return _err_u_out; } double dEdX() const { return _dedx; } void setdEdX(double dedx) { _dedx = dedx; } int inSurface() const { return _went_in; } int outSurface() const { return _went_out; } void setInOut(const TVector3 &,const TVector3 &); void setDirInOut(const TVector3 &,const TVector3 &); void setArcLengthInOut(double,double); void setTimeInOut(double,double); void setSurfaceInOut(int,int); void setUVInOut(double,double,double,double); void setUErrorInOut(double,double); }; class TofBar { int _ibar; double _phi; TVector3 _normal[6], _axis[6]; TVector3 _point[6]; double _length[6], _width[6], _dwdl[6]; TPolyLine *_box; double _phimin, _phimax; TMarker *_hit; public: TofBar(); void SetBarNumber(int ibar) { _ibar = ibar; } int BarNumber() const { return _ibar; } void SetPhi(double p) { _phi = p; } void transform(const TVector3 &,const TRotation &); void GetEdges(double &,double &); double getMinPhi() const { return _phimin; } double getMaxPhi() const { return _phimax; } const TVector3 &normal(int i) const { return _normal[i]; } const TVector3 &point(int i) const { return _point[i]; } double length(int i) const { return _length[i]; } double width(int i) const { return _width[i]; } double dwdl(int i) const { return _dwdl[i]; } const TVector3 *getNormal() const { return _normal; } const TVector3 *getPoint() const { return _point; } const TVector3 *getAxis() const { return _axis; } const double *getLength() const { return _length; } const double *getWidth() const { return _width; } const double *getDwdl() const { return _dwdl; } void DrawBar(int color=0); void DrawHit(TofHitBar *); }; class TofDetector { double _inrad, _outrad; double _phibnd[217]; class TofBar *bars[216]; public: TofDetector(int ilev=ALIGNED); ~TofDetector(); int barNumberAtPhi(double) const; void Draw(); void DrawBar(int i,int color=0); void DrawHit(TofHitBar *); TofHitBar *extrapolateTrack(int ibar,const float *par,const float *cov=NULL); TofHitBar *extrapolateTrack(int ibar,TVector3 &,TVector3 &); int linearizeTrack(double,const float *,TVector3 &,TVector3 &); int getHitBarNumbers(const float *,int &,int &); int getHitBarNumbers(TVector3 &,TVector3 &,int &,int &); // list getHitBars(const float *par,const float *cov=NULL); // list getHitBars(TVector3 &,TVector3 &); double innerRadius() const { return _inrad; } double outerRadius() const { return _outrad; } void getBarCenter(int,double &,double &); }; #endif // __TOFGEOMETRY__