00001
00002
00003 #ifndef DETDESC_IPVOLUME_H
00004 #define DETDESC_IPVOLUME_H 1
00006 #include <iostream>
00007 #include <string>
00009 #include "GaudiKernel/IInterface.h"
00010 #include "GaudiKernel/Point3DTypes.h"
00011 #include "GaudiKernel/Vector3DTypes.h"
00012 #include "GaudiKernel/Transform3DTypes.h"
00014 #include "DetDesc/ILVolume.h"
00015 #include "DetDesc/ISolid.h"
00016
00020 static const InterfaceID IID_IPVolume( 154 , 5 , 0 );
00021
00033 class IPVolume : virtual public IInterface
00034 {
00035 public:
00036
00040 static const InterfaceID& interfaceID() { return IID_IPVolume; }
00041
00042 public:
00043
00048 virtual const std::string& name () const = 0;
00049
00053 virtual const std::string& lvolumeName() const = 0;
00054
00058 virtual const ILVolume* lvolume () const = 0;
00059
00063 virtual const Gaudi::Transform3D& matrix () const = 0;
00064
00068 virtual const Gaudi::Transform3D& matrixInv () const = 0;
00069
00074 virtual Gaudi::XYZPoint toLocal
00075 ( const Gaudi::XYZPoint& PointInMother ) const = 0;
00076
00081 virtual Gaudi::XYZPoint toMother
00082 ( const Gaudi::XYZPoint& PointInLocal ) const = 0;
00083
00088 virtual bool isInside
00089 ( const Gaudi::XYZPoint& PointInMother ) const = 0;
00090
00112 virtual unsigned int intersectLine
00113 ( const Gaudi::XYZPoint & Point ,
00114 const Gaudi::XYZVector & Vector ,
00115 ILVolume::Intersections & intersections ,
00116 const double threshold ) const = 0 ;
00117
00141 virtual unsigned int intersectLine
00142 ( const Gaudi::XYZPoint & Point ,
00143 const Gaudi::XYZVector & Vector ,
00144 ILVolume::Intersections & intersections ,
00145 const ISolid::Tick tickMin ,
00146 const ISolid::Tick tickMax ,
00147 const double Threshold ) const = 0 ;
00148
00153 virtual std::ostream& printOut
00154 ( std::ostream & os = std::cout ) const = 0;
00155
00160 virtual MsgStream& printOut
00161 ( MsgStream & os ) const = 0;
00162
00166 virtual IPVolume* reset () = 0 ;
00167
00174
00175
00180 virtual const Gaudi::Transform3D&
00181 applyMisAlignment ( const Gaudi::Transform3D& ma ) = 0 ;
00182
00186 virtual const Gaudi::Transform3D&
00187 resetMisAlignment ( ) = 0 ;
00188
00190 virtual ~IPVolume();
00191
00192 };
00193
00194
00200
00201 inline std::ostream& operator<<
00202 ( std::ostream& os , const IPVolume& pv )
00203 { return pv.printOut( os ); };
00204
00205
00211
00212 inline std::ostream& operator<<
00213 ( std::ostream& os , const IPVolume* pv )
00214 { return ((0==pv)?( os<<" IPVolume* points to NULL "):(os<<(*pv)));};
00215
00216
00222
00223 inline MsgStream& operator<<
00224 ( MsgStream& os , const IPVolume& pv )
00225 { return pv.printOut( os ); };
00226
00227
00233
00234 inline MsgStream& operator<<
00235 ( MsgStream& os , const IPVolume* pv )
00236 { return ((0==pv)?( os<<" IPVolume* points to NULL "):(os<<(*pv)));};
00237
00238
00239
00240
00241 #endif
00242 // ============================================================================