/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Muc/MucRecEvent/MucRecEvent-00-02-52/MucRecEvent/MucRec3DRoad.h

Go to the documentation of this file.
00001 //$id$
00002 //
00003 //$log$
00004 
00005 /*
00006  *    2003/12/25   Zhengyun You      Peking University
00007  * 
00008  *    2005/02/27   Zhengyun You      Peking University
00009  *                 transplanted to Gaudi framework
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   //void ProjectToReference(float &x, float &y, float &z);
00087 
00089   //void ProjectToZ(float &x, float &y, float &zplane);
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   // Are the two X and Y clusters in each gap in the same panel?
00134   // bool ClusterPanelsMatch() const;
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   //bool IsIntersectionOK(const TMuiCluster *hcluster,
00165   //            const TMuiCluster *vcluster) const;
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;    // Event vertex position.
00179   Hep3Vector m_VertexSigma;  // Uncertainty of event vertex position.
00180 
00181   MucRec2DRoad *m_Road0;  // object describing the 2-D road orient 0
00182   MucRec2DRoad *m_Road1;  // object describing the 2-D road orient 1
00183 
00184   int   m_Index;            // uniquely identifies this road in the event
00185   int   m_Part;            // the part in which this road was found
00186   int   m_Seg;             // the segment in which this road was found
00187   int   m_LastGap;         // Last gap with attached hits.
00188   float m_Chi2;            // Chi-square parameter of trajectory fit.
00189   int   m_DOF;             // Number of degrees of freedom of fit.
00190 
00191   float m_SlopeZX;         // X = m_InterceptZX + m_SlopeZX * Z.
00192   float m_InterceptZX;     // X = m_InterceptZX + m_SlopeZX * Z.
00193   float m_SlopeZY;         // Y = m_InterceptZY + m_SlopeZY * Z.
00194   float m_InterceptZY;     // Y = m_InterceptZY + m_SlopeZY * Z.
00195 
00196   // == true if X and Y clusters are in the same panels in all gaps.
00197   //bool  m_ClusterPanelsMatch;
00198   int m_Group;            // Which group does this road belong to?
00199 };
00200 
00201 typedef ObjectVector<MucRec3DRoad> MucRec3DRoadContainer;
00202 
00203 #endif  /* MUC_REC_3DROAD_H */
00204 

Generated on Tue Nov 29 23:12:58 2016 for BOSS_7.0.2 by  doxygen 1.4.7