00001 // $Id: IDetectorElement.h,v 1.22 2008/10/28 12:04:36 cattanem Exp $ 00002 // $ID: $ 00003 #ifndef DETDESC_IDETECTORELEMENT_H 00004 #define DETDESC_IDETECTORELEMENT_H 1 00005 00006 // Include files 00007 #include <iostream> 00008 #include <string> 00009 00010 // Framework include files 00011 #include "GaudiKernel/IInterface.h" 00012 #include "GaudiKernel/SmartRef.h" 00013 #include "GaudiKernel/Point3DTypes.h" 00014 00015 // Forward declarations 00016 class IGeometryInfo; 00017 class IAlignment; 00018 class ICalibration; 00019 class IReadOut; 00020 class ISlowControl; 00021 class IFastControl; 00022 00023 class Condition; 00024 class ParamValidDataObject; 00025 00029 static const InterfaceID IID_IDetectorElement( 156 , 2 , 2 ); 00030 00042 class IDetectorElement : virtual public IInterface 00043 { 00045 public: 00047 typedef std::vector<IDetectorElement*> IDEContainer; 00049 public: 00050 00054 static const InterfaceID& interfaceID() { return IID_IDetectorElement; } 00055 00057 virtual const std::string& name () const = 0; 00058 00060 virtual bool hasCondition(const std::string &name) const = 0; 00061 00063 virtual SmartRef<Condition> condition(const std::string &name) const = 0; 00064 00069 virtual IGeometryInfo* geometry () = 0; 00071 virtual const IGeometryInfo* geometry () const = 0; 00073 virtual IAlignment* alignment () = 0; 00075 virtual const IAlignment* alignment () const = 0; 00077 virtual ICalibration* calibration() = 0; 00079 virtual const ICalibration* calibration() const = 0; 00081 virtual IReadOut* readOut () = 0; 00083 virtual const IReadOut* readOut () const = 0; 00085 virtual ISlowControl* slowControl() = 0; 00087 virtual const ISlowControl* slowControl() const = 0; 00089 virtual IFastControl* fastControl() = 0; 00090 // "accessor": delegates the IFastControl Interface (const) 00091 virtual const IFastControl* fastControl() const = 0; 00094 virtual operator IGeometryInfo*() = 0; 00096 virtual operator const IGeometryInfo*() const = 0; 00098 virtual operator IAlignment* () = 0; 00100 virtual operator const IAlignment* () const = 0; 00102 virtual operator ICalibration* () = 0; 00104 virtual operator const ICalibration* () const = 0; 00106 virtual operator IReadOut* () = 0; 00108 virtual operator const IReadOut* () const = 0; 00110 virtual operator ISlowControl* () = 0; 00112 virtual operator const ISlowControl* () const = 0; 00114 virtual operator IFastControl* () = 0; 00116 virtual operator const IFastControl* () const = 0; 00117 00119 00121 virtual operator IGeometryInfo&() = 0; 00123 virtual operator const IGeometryInfo&() const = 0; 00125 virtual operator IAlignment& () = 0; 00127 virtual operator const IAlignment& () const = 0; 00129 virtual operator ICalibration& () = 0; 00131 virtual operator const ICalibration& () const = 0; 00133 virtual operator IReadOut& () = 0; 00135 virtual operator const IReadOut& () const = 0; 00137 virtual operator ISlowControl& () = 0; 00139 virtual operator const ISlowControl& () const = 0; 00141 virtual operator IFastControl& () = 0; 00143 virtual operator const IFastControl& () const = 0; 00144 00148 virtual IDetectorElement* parentIDetectorElement() const = 0 ; 00150 virtual IDetectorElement::IDEContainer& 00151 childIDetectorElements() const = 0; 00154 virtual IDetectorElement::IDEContainer::iterator childBegin() = 0; 00155 virtual IDetectorElement::IDEContainer::const_iterator childBegin() const = 0; 00157 virtual IDetectorElement::IDEContainer::iterator childEnd() = 0 ; 00158 virtual IDetectorElement::IDEContainer::const_iterator childEnd() const = 0 ; 00160 virtual std::ostream& printOut ( std::ostream& ) const = 0; 00162 virtual IDetectorElement* reset() = 0 ; 00163 00168 virtual const ParamValidDataObject *params() const = 0; 00169 00175 virtual int sensitiveVolumeID(const Gaudi::XYZPoint& globalPos ) const=0; 00176 00182 virtual StatusCode initialize() = 0; 00183 00185 virtual ~IDetectorElement() ; 00186 00187 }; 00189 inline std::ostream& operator<<( std::ostream& os , 00190 const IDetectorElement& de ) 00191 { 00192 return de.printOut(os); 00193 }; 00195 inline std::ostream& operator<<( std::ostream& os , 00196 const IDetectorElement* de ) 00197 { 00198 return 00199 ( (0 == de) ? (os << "IDetectorElement* points to NULL") : (os << *de) ) ; 00200 }; 00201 00203 #endif 00204 00205 00206 00207 00208 00209 00210 00211 00212 00213