00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef MUC_REC_3DROAD_H
00013 #define MUC_REC_3DROAD_H
00014
00015 #include "GaudiKernel/ContainedObject.h"
00016 #include "GaudiKernel/SmartRef.h"
00017 #include "GaudiKernel/ObjectVector.h"
00018
00019 #include "MucRecEvent/MucRec2DRoad.h"
00020
00035 class MucRec3DRoad : virtual public ContainedObject
00036 {
00037 public:
00038
00040 MucRec3DRoad(MucRec2DRoad *road0, MucRec2DRoad *road1);
00041
00043 MucRec3DRoad &operator=(const MucRec3DRoad &orig);
00044
00046 MucRec3DRoad(const MucRec3DRoad &source);
00048 ~MucRec3DRoad();
00049
00051 void SetIndex(const int &index);
00052
00054 void SetGroup(const int &Group);
00055
00057 void SetSimpleFitParams(const float &m_SlopeZX,
00058 const float &m_InterceptZX,
00059 const float &m_SlopeZY,
00060 const float &m_InterceptZY);
00062 int RefitNoCurrentGap(const int &gap,
00063 float &slopeZX,
00064 float &interceptZX,
00065 float &slopeZY,
00066 float &interceptZY);
00067
00068 vector<Identifier> ProjectToStrip(const int& part, const int& gap, const HepPoint3D& gPoint, const Hep3Vector&gDirection);
00069
00070 vector<Identifier> ProjectToStrip(const int& part, const int& gap, const HepPoint3D& gPoint, const Hep3Vector&gDirection, vector<int>&padID, vector<float>&intersect_x, vector<float>&intersect_y, vector<float>&intersect_z);
00071
00073 void ProjectWithSigma(const int &gap, float &x, float &y, float &z, float &sigmaX, float &sigmaY, float &sigmaZ);
00074
00076 void ProjectNoCurrentGap(const int &gap, float &x, float &y, float &z, float &sigmaX, float &sigmaY, float &sigmaZ,
00077 float& quad_x1, float& quad_y1, float& quad_z1, float& quad_x2, float& quad_y2, float& quad_z2);
00078
00080 void Project(const int &gap, float &x1, float &y1, float &z1, float &x2, float &y2, float &z2);
00081
00083 void Project(const int &gap, const float zx, const float x0,const float zy,const float y0 , float &x1, float &y1, float &z1);
00084
00086
00087
00089
00090
00092 void TransformPhiRToXY(const float &vk, const float &vr,
00093 const float &k0, const float &r0,
00094 float &vx, float &vy,
00095 float &x0, float &y0) const;
00096
00098 float GetVxSign(const float vk) const;
00099
00101 int GetIndex() const;
00102
00104 int GetPart() const;
00105
00107 int GetSeg() const;
00108
00110 int GetGroup() const;
00111
00113 int GetLastGap() const;
00114
00116 int GetNGapsWithHits() const;
00117
00119 int GetTotalHits() const;
00120
00122 int GetHitsPerGap(const int &gap) const;
00123
00125 int GetMaxHitsPerGap() const;
00126
00128 bool HasHitInGap(const int &gap) const;
00129
00131 int GetNSharedHits(const MucRec3DRoad *road) const;
00132
00133
00134
00135
00137 int GetLastGapDelta() const;
00138
00140 int GetTotalHitsDelta() const;
00141
00143 int GetDegreesOfFreedom() const;
00144
00146 float GetReducedChiSquare() const;
00147
00149 float GetSlopeZX() const;
00150
00152 float GetInterceptZX() const;
00153
00155 float GetSlopeZY() const;
00156
00158 float GetInterceptZY() const;
00159
00161 MucRecHit *GetHit(const int &gap) const;
00162
00164
00165
00166
00168 MucRec2DRoad *Get2DRoad(const int &orient = 0) const;
00169
00171 vector<Identifier> GetHitsID() const;
00172
00174 void PrintHitsInfo();
00175
00176 private:
00177
00178 Hep3Vector m_VertexPos;
00179 Hep3Vector m_VertexSigma;
00180
00181 MucRec2DRoad *m_Road0;
00182 MucRec2DRoad *m_Road1;
00183
00184 int m_Index;
00185 int m_Part;
00186 int m_Seg;
00187 int m_LastGap;
00188 float m_Chi2;
00189 int m_DOF;
00190
00191 float m_SlopeZX;
00192 float m_InterceptZX;
00193 float m_SlopeZY;
00194 float m_InterceptZY;
00195
00196
00197
00198 int m_Group;
00199 };
00200
00201 typedef ObjectVector<MucRec3DRoad> MucRec3DRoadContainer;
00202
00203 #endif
00204