| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

SolidBox.h

Go to the documentation of this file.
00001 // $Id: SolidBox.h,v 1.18 2007/09/20 15:17:05 wouter Exp $
00002 // ===========================================================================
00003 #ifndef     DETDESC_SOLIDBOX_H
00004 #define     DETDESC_SOLIDBOX_H
00006 #include <cmath> 
00007 #include <iostream> 
00009 #include "GaudiKernel/Point3DTypes.h"
00010 #include "GaudiKernel/Vector3DTypes.h"
00012 #include "DetDesc/SolidBase.h" 
00014 template <class TYPE>
00015 class SolidFactory;          
00016 
00025 class SolidBox: public virtual SolidBase
00026 {
00028   friend class SolidFactory<SolidBox>;
00029 
00030 public:
00031   
00039   SolidBox( const std::string& Name  ,
00040             const double       xHalf , 
00041             const double       yHalf , 
00042             const double       zHalf); 
00043   
00046   virtual ~SolidBox();  
00047   
00053   inline       std::string  typeName ()  const { return "SolidBox" ; };
00054   
00063   virtual bool isInside  ( const Gaudi::XYZPoint& point ) const;
00064   virtual bool isInside ( const Gaudi::Polar3DPoint& point ) const ;
00065   virtual bool isInside ( const Gaudi::RhoZPhiPoint& point ) const ;
00072   virtual const ISolid* cover () const ;
00073   
00082   virtual const ISolid* coverTop () const ;
00083   
00092   virtual std::ostream& printOut ( std::ostream& os ) const;
00093   
00102   virtual MsgStream&    printOut ( MsgStream&    os ) const;
00103   
00122   virtual unsigned int intersectionTicks( const Gaudi::XYZPoint&  Point  ,
00123                                           const Gaudi::XYZVector& Vector ,
00124                                           ISolid::Ticks   &  ticks  ) const ; 
00125   virtual unsigned int intersectionTicks( const Gaudi::Polar3DPoint  & Point,
00126                                           const Gaudi::Polar3DVector & Vector,
00127                                           ISolid::Ticks     & ticks) const ; 
00128   virtual unsigned int intersectionTicks( const Gaudi::RhoZPhiPoint  & Point,
00129                                           const Gaudi::RhoZPhiVector & Vector,
00130                                           ISolid::Ticks     & ticks) const ;
00152   virtual unsigned int intersectionTicks( const Gaudi::XYZPoint & Point,
00153                                           const Gaudi::XYZVector& Vector,
00154                                           const ISolid::Tick&     tickMin,
00155                                           const ISolid::Tick&     tickMax ,
00156                                           ISolid::Ticks&  ticks   ) const ;
00157 
00158   virtual unsigned int intersectionTicks( const Gaudi::Polar3DPoint& Point,
00159                                           const Gaudi::Polar3DVector & Vector,
00160                                           const ISolid::Tick& tickMin,
00161                                           const ISolid::Tick& tickMax,
00162                                           ISolid::Ticks& ticks   ) const ; 
00163 
00164   virtual unsigned int intersectionTicks( const Gaudi::RhoZPhiPoint& Point,
00165                                           const Gaudi::RhoZPhiVector & Vector,
00166                                           const ISolid::Tick& tickMin,
00167                                           const ISolid::Tick& tickMax,
00168                                           ISolid::Ticks& ticks   ) const ; 
00169 
00170 
00174   inline         double  xsize      ()  const 
00175   { return m_box_xHalfLength*2 ; };
00176   
00180   inline         double  ysize      ()  const 
00181   { return m_box_yHalfLength*2 ; };
00182   
00186   inline         double  zsize      ()  const 
00187   { return m_box_zHalfLength*2 ; };
00188   
00192   inline         double  xHalfLength()  const 
00193   { return m_box_xHalfLength   ; };
00194   
00198   inline         double  yHalfLength()  const 
00199   { return m_box_yHalfLength   ; };
00200   
00204   inline         double  zHalfLength()  const 
00205   { return m_box_zHalfLength   ; };
00206 
00207 
00212   Ticks::size_type maxNumberOfTicks() const { return 2 ; }
00213 
00214 protected:
00215   
00218   SolidBox(); 
00219   
00222   void setBP() ;
00223   
00224 private:
00225   
00226   SolidBox           ( const SolidBox & );  
00227   SolidBox& operator=( const SolidBox & );  
00228 
00234   template <class aPoint>
00235   bool isInsideImpl(const aPoint& point) const;
00236   template<class aPoint, class aVector>
00237 
00238   unsigned int intersectionTicksImpl( const aPoint  & Point,
00239                                       const aVector & Vector,
00240                                       const ISolid::Tick& tickMin,
00241                                       const ISolid::Tick& tickMax,
00242                                       ISolid::Ticks&  ticks) const;
00243 
00244   template<class aPoint, class aVector>
00245   unsigned int intersectionTicksImpl( const aPoint  & Point,
00246                                       const aVector & Vector,
00247                                       ISolid::Ticks& ticks ) const;
00248   
00249 private:
00250   
00251   double               m_box_xHalfLength ;   
00252   double               m_box_yHalfLength ;   
00253   double               m_box_zHalfLength ;   
00254 
00255 };
00256 
00257 
00259 #endif 
00260 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:00:13 2011 for DetDesc by doxygen 1.4.7