00001
00002
00003 #ifndef DETDESC_ISOLID_H
00004 #define DETDESC_ISOLID_H 1
00006 #include <iostream>
00007 #include <string>
00008 #include <vector>
00010 #include "GaudiKernel/MsgStream.h"
00011 #include "GaudiKernel/Vector3DTypes.h"
00012 #include "GaudiKernel/Point3DTypes.h"
00014 #include "DetDesc/StaticArray.h"
00015
00017 static const InterfaceID IID_ISolid( "ISolid" , 4 , 1 );
00018
00028 class ISolid : public virtual IInterface
00029 {
00030 public:
00031
00035 typedef double Tick ;
00036 typedef StaticArray<Tick,64> Ticks ;
00037
00038 public:
00039
00044 static const InterfaceID& interfaceID() { return IID_ISolid; }
00045
00046 public:
00047
00051 virtual const std::string& name () const = 0;
00052
00056 virtual std::string typeName () const = 0;
00057
00064 virtual bool isInside ( const Gaudi::XYZPoint & point ) const = 0;
00065 virtual bool isInside ( const Gaudi::Polar3DPoint & point ) const = 0;
00066 virtual bool isInside ( const Gaudi::RhoZPhiPoint & point ) const = 0;
00067
00072 virtual const ISolid* cover () const = 0;
00073
00079 virtual const ISolid* coverTop () const = 0;
00080
00085 virtual std::ostream& printOut ( std::ostream& os = std::cout ) const = 0;
00086
00091 virtual MsgStream& printOut ( MsgStream& os ) const = 0;
00092
00098 virtual ISolid* reset() = 0;
00099
00117 virtual unsigned int
00118 intersectionTicks
00119 ( const Gaudi::XYZPoint & Point ,
00120 const Gaudi::XYZVector& Vector ,
00121 Ticks & ticks ) const = 0 ;
00122
00123 virtual unsigned int
00124 intersectionTicks
00125 ( const Gaudi::Polar3DPoint & Point ,
00126 const Gaudi::Polar3DVector& Vector ,
00127 Ticks & ticks ) const = 0 ;
00128
00129 virtual unsigned int
00130 intersectionTicks
00131 ( const Gaudi::RhoZPhiPoint & Point ,
00132 const Gaudi::RhoZPhiVector& Vector ,
00133 Ticks & ticks ) const = 0 ;
00134
00156 virtual unsigned int
00157 intersectionTicks
00158 ( const Gaudi::XYZPoint & Point ,
00159 const Gaudi::XYZVector& Vector ,
00160 const Tick & tickMin ,
00161 const Tick & tickMax ,
00162 Ticks & ticks ) const = 0 ;
00163
00164 virtual unsigned int
00165 intersectionTicks
00166 ( const Gaudi::Polar3DPoint & Point ,
00167 const Gaudi::Polar3DVector& Vector ,
00168 const Tick & tickMin ,
00169 const Tick & tickMax ,
00170 Ticks & ticks ) const = 0 ;
00171
00172 virtual unsigned int
00173 intersectionTicks
00174 ( const Gaudi::RhoZPhiPoint & Point ,
00175 const Gaudi::RhoZPhiVector& Vector ,
00176 const Tick & tickMin ,
00177 const Tick & tickMax ,
00178 Ticks & ticks ) const = 0 ;
00179
00184 virtual Ticks::size_type maxNumberOfTicks() const = 0 ;
00185
00189 virtual ~ISolid() ;
00190
00191 };
00192
00193
00199
00200 inline std::ostream& operator<<( std::ostream& os , const ISolid& solid )
00201 { return solid.printOut(os); }
00202
00203
00209
00210 inline std::ostream& operator<<( std::ostream& os , const ISolid* solid )
00211 { return ((0 == solid) ? (os<<"ISolid* points to NULL"):(os<<(*solid)));}
00212
00213
00219
00220 inline MsgStream& operator<<( MsgStream& os , const ISolid& solid )
00221 { return solid.printOut(os); }
00222
00223
00229
00230 inline MsgStream& operator<<( MsgStream& os , const ISolid* solid )
00231 { return ((0 == solid) ? (os<<"ISolid* points to NULL"):(os<<(*solid)));}
00232
00233
00234
00235
00236 #endif
00237 // ============================================================================
00238
00239
00240
00241
00242