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

In This Package:

ILVolume.h

Go to the documentation of this file.
00001 // $Id: ILVolume.h,v 1.12 2007/01/17 12:10:10 cattanem Exp $ 
00002 // ===========================================================================
00003 #ifndef  DETDESC_ILVOLUME_H
00004 #define  DETDESC_ILVOLUME_H 1 
00006 #include <iostream> 
00007 #include <string> 
00008 #include <vector> 
00010 #include "GaudiKernel/MsgStream.h"
00011 #include "GaudiKernel/Point3DTypes.h"
00012 #include "GaudiKernel/Vector3DTypes.h"
00014 #include "DetDesc/ISolid.h"
00015 
00017 class StatusCode;
00018 class Material; 
00019 class IPVolume;
00020 class ISolid;
00021 template <class TYPE>
00022 class SmartRefVector;
00023 class Surface;
00024 
00026 static const InterfaceID IID_ILVolume( 153 , 3 , 1 );
00027 
00036 class ILVolume : virtual public IInterface
00037 {
00039 public:
00040   
00042   typedef  std::vector<IPVolume*>                        PVolumes;
00043   typedef  PVolumes::size_type                           ReplicaType;
00044   typedef  std::vector<ReplicaType>                      ReplicaPath;
00045   typedef  std::vector<const IPVolume*>                  PVolumePath;
00046 
00050   typedef std::pair<ISolid::Tick,ISolid::Tick>           Interval;  
00051   typedef std::pair<Interval,const Material*>            Intersection;
00052   typedef std::vector<Intersection>                      Intersections;
00053   
00055   typedef SmartRefVector<Surface>                         Surfaces;
00056   
00057 public:
00058   
00063   static const InterfaceID& interfaceID() { return IID_ILVolume; }
00064   
00065 public: 
00066   
00070   virtual const   std::string&  name          () const = 0;
00071   
00079   virtual bool                  isAssembly    () const = 0 ;
00080   
00084   virtual const ISolid*         solid         () const = 0;
00085   
00089   virtual const std::string&    materialName  () const = 0;
00090   
00095   virtual const Material*       material      () const = 0; 
00096   
00101   virtual       PVolumes&       pvolumes      ()       = 0 ;
00102   
00106   virtual const PVolumes&       pvolumes      () const = 0;
00107   
00111   virtual ILVolume::ReplicaType noPVolumes    () const = 0;
00112   
00117   virtual const IPVolume* operator[]
00118   ( const ILVolume::ReplicaType& index ) const = 0;
00119   
00124   virtual const IPVolume* operator[]
00125   ( const std::string&           name  ) const = 0;
00126   
00131   virtual const IPVolume* pvolume   
00132   ( const ILVolume::ReplicaType& index ) const = 0;
00133   
00138   virtual const IPVolume* pvolume   
00139   ( const std::string&           name  ) const = 0;
00140   
00144   virtual ILVolume::PVolumes::iterator       pvBegin     ()        = 0 ; 
00145   
00150   virtual ILVolume::PVolumes::const_iterator pvBegin     () const  = 0 ; 
00151 
00155   virtual ILVolume::PVolumes::iterator       pvEnd       ()        = 0 ; 
00156   
00161   virtual ILVolume::PVolumes::const_iterator pvEnd       () const  = 0 ; 
00162 
00170   virtual StatusCode traverse 
00171   ( ILVolume::ReplicaPath::const_iterator pathBegin,
00172     ILVolume::ReplicaPath::const_iterator pathEnd  ,
00173     ILVolume::PVolumePath&                volumePath ) const = 0;
00174   
00181   virtual StatusCode traverse 
00182   ( const ILVolume::ReplicaPath&  replicaPath,
00183     ILVolume::PVolumePath&        volumePath ) const = 0; 
00184   
00196   virtual bool isInside ( const Gaudi::XYZPoint& LocalPoint ) const = 0; 
00197   
00206   virtual StatusCode 
00207 belongsTo
00208   ( const Gaudi::XYZPoint&        localPoint ,
00209     const int                level      , 
00210     ILVolume::PVolumePath&   volumePath ) const = 0;
00211   
00220   virtual StatusCode belongsTo
00221   ( const Gaudi::XYZPoint&        localPoint ,
00222     const int                level      , 
00223     ILVolume::ReplicaPath&   replicaPath ) const = 0;      
00224   
00244   virtual unsigned int intersectLine
00245   ( const Gaudi::XYZPoint        & Point         ,  
00246     const Gaudi::XYZVector       & Vector        ,  
00247     ILVolume::Intersections & intersections ,
00248     const double              threshold     ) const = 0 ; 
00249   
00271   virtual unsigned int intersectLine
00272   ( const Gaudi::XYZPoint        & Point         ,
00273     const Gaudi::XYZVector       & Vector        ,
00274     ILVolume::Intersections & intersections , 
00275     const ISolid::Tick        tickMin       ,
00276     const ISolid::Tick        tickMax       , 
00277     const double              Threshold     ) const = 0 ;
00278   
00282   virtual const std::string& sdName   ()                const = 0 ; 
00283   
00287   virtual const std::string& mfName   ()                const = 0 ;
00288   
00292   virtual       Surfaces& surfaces()        = 0 ; 
00293   
00297   virtual const Surfaces& surfaces() const  = 0 ;
00298   
00303   virtual std::ostream& printOut( std::ostream & os = std::cout) const = 0;
00304   
00309   virtual MsgStream&    printOut( MsgStream    & os ) const = 0;
00310   
00314   virtual ILVolume*  reset() = 0; 
00315   
00316 protected: 
00317 
00320   virtual ~ILVolume() ;
00321 };
00322 
00323 // ============================================================================
00329 // ============================================================================
00330 inline std::ostream& operator<<( std::ostream& os , const ILVolume& lv ) 
00331 { return lv.printOut( os ); };
00332 
00333 // ============================================================================
00339 // ============================================================================
00340 inline std::ostream& operator<<( std::ostream& os , const ILVolume*  lv )
00341 { return ((0==lv)?( os<<" ILVolume* points to NULL "):(os<<(*lv)));};
00342 
00343 // ============================================================================
00349 // ============================================================================
00350 inline MsgStream& operator<<( MsgStream& os , const ILVolume& lv ) 
00351 { return lv.printOut( os ); };
00352 
00353 // ============================================================================
00359 // ============================================================================
00360 inline MsgStream& operator<<( MsgStream& os , const ILVolume*  lv )
00361 { return ((0==lv)?( os<<" ILVolume* points to NULL "):(os<<(*lv)));};
00362 
00363 // ============================================================================
00364 // The End 
00365 // ============================================================================
00366 #endif  
00367 // ============================================================================
| 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