/** \file \brief Description of a mirror segment. \author L. Prado Jr \author S. Argiro \version $Id: MirrorSegment.h 17294 2010-07-08 15:57:51Z smueller $ \date 29 Jun 2003 */ #ifndef _fdet_MirrorSegment_h_ #define _fdet_MirrorSegment_h__ #include namespace utl { class TabulatedFunction; } namespace fdet { /** \class MirrorSegment \brief Description of a mirror segment. \author L. Prado Jr \author S. Argiro \version $Id: MirrorSegment.h 17294 2010-07-08 15:57:51Z smueller $ \date 29 Jun 2003 \ingroup fdet */ class Telescope; class MirrorSegment { public: /// Reflectivity of the mirror segment as a function of the wavelength const utl::TabulatedFunction& GetReflectivity() const; /// Radius of curvature of the segment double GetRadiusOfCurvature() const; /// Variable to model the surface imperfection of the segment double GetSigmaNormal() const; private: MirrorSegment(); ~MirrorSegment(); private: template inline const T& GetMirrorSegmentData(T*& requestedData, const std::string& property, const std::string& component, const std::string& errorMsg) const; template inline void GetMirrorSegmentData(T& requestedData, const std::string& property, const std::string& component, const std::string& errorMsg) const; private: // Quantities filled by lazy evaluation // ------------------------------------ mutable double* fRadiusOfCurvature; mutable double* fSigmaNormal; mutable utl::TabulatedFunction* fReflectivity; friend class Telescope; }; } #endif //_fdet_MirrorSegment_h_ // Configure (x)emacs for this file ... // Local Variables: // mode:c++ // compile-command: "make -C .. FDetector/MirrorSegment.o -k" // End: