00001 // $Id: SolidTrd.h,v 1.11 2007/03/16 15:57:09 cattanem Exp $ 00002 // =========================================================================== 00003 #ifndef DETDESC_SOLIDTRD_H 00004 #define DETDESC_SOLIDTRD_H 1 00006 #include <cmath> 00007 #include <iostream> 00009 #include "DetDesc/SolidBase.h" 00010 #include "DetDesc/SolidPolyHedronHelper.h" 00012 template <class TYPE> 00013 class SolidFactory; 00014 00015 00024 class SolidTrd: public virtual SolidBase , 00025 protected virtual SolidPolyHedronHelper 00026 { 00028 friend class SolidFactory<SolidTrd>; 00029 00030 public: 00031 00041 SolidTrd( const std::string& name , 00042 const double zHalfLength , 00043 const double XHalfLength1 , 00044 const double YHalfLength1 , 00045 const double XHalfLength2 , 00046 const double YHalfLength2 ); 00047 00049 virtual ~SolidTrd(); 00050 00056 inline std::string typeName () const { return "SolidTrd"; }; 00057 00065 const ISolid* cover () const; 00066 00075 virtual std::ostream& printOut ( std::ostream& os = std::cout ) const; 00076 00085 virtual MsgStream& printOut ( MsgStream& os ) const; 00086 00090 inline double xHalfLength1() const 00091 { return m_trd_xHalfLength1; }; 00092 00096 inline double xHalfLength2() const 00097 { return m_trd_xHalfLength2; }; 00098 00102 inline double yHalfLength1() const 00103 { return m_trd_yHalfLength1; }; 00104 00108 inline double yHalfLength2() const 00109 { return m_trd_yHalfLength2; }; 00110 00114 inline double zHalfLength () const 00115 { return m_trd_zHalfLength; }; 00116 00120 inline double xLength1 () const 00121 { return m_trd_xHalfLength1 * 2 ; }; 00122 00126 inline double xLength2 () const 00127 { return m_trd_xHalfLength2 * 2 ; }; 00128 00132 inline double yLength1 () const 00133 { return m_trd_yHalfLength1 * 2 ; }; 00134 00138 inline double yLength2 () const 00139 { return m_trd_yHalfLength2 * 2 ; }; 00140 00144 inline double zLength () const 00145 { return m_trd_zHalfLength * 2 ; }; 00146 00147 // 00148 protected: 00149 00153 SolidTrd( const std::string& name = "Anonymous TRD"); 00155 private: 00156 00160 void makeAll() ; 00161 00162 private: 00163 00164 00165 SolidTrd( const SolidTrd & ); // no copy-constructor 00166 SolidTrd& operator=( const SolidTrd & ); // no assignment 00167 00168 private: 00169 00171 00172 double m_trd_zHalfLength ; 00173 double m_trd_xHalfLength1 ; 00174 double m_trd_xHalfLength2 ; 00175 double m_trd_yHalfLength1 ; 00176 double m_trd_yHalfLength2 ; 00178 }; 00179 00181 #endif 00182 00183 00184 00185 00186