#ifndef _fdet_Mirror_h_ #define _fdet_Mirror_h__ /** \file \brief Description of a mirror. \author L. Prado Jr \author S. Argiro \version $Id: Mirror.h 21179 2012-05-17 18:05:47Z javierg $ \date 29 Jun 2003 */ #include #include namespace utl { class TabulatedFunction; } namespace fdet { class Telescope; /** \class Mirror \brief Description of a mirror. \author L. Prado Jr \author S. Argiro \version $Id: Mirror.h 21179 2012-05-17 18:05:47Z javierg $ \date 29 Jun 2003 \ingroup fdet */ class Mirror { public: unsigned int GetEyeId() const { return fEyeId; } unsigned int GetTelescopeId() const { return fTelescopeId; } /// Average reflectivity of the segments as a function of the wavelength const utl::TabulatedFunction& GetReflectivity() const; /// Average radius of curvature for the segments double GetRadiusOfCurvature() const; /// Variable to model the mirror surface imperfection double GetSigmaNormal() const; void Update(); private: Mirror(const unsigned int eyeId, const unsigned int telId, const std::string& physEyeIdString, const std::string& physTelIdString); ~Mirror(); // prevent copying Mirror(const Mirror&); Mirror& operator=(const Mirror&); template inline const T& GetMirrorData(T*& requestedData, const std::string& property, const std::string& component, const std::string& errorMsg) const; template inline void GetMirrorData(T& requestedData, const std::string& property, const std::string& component, const std::string& errorMsg) const; unsigned int fEyeId; unsigned int fTelescopeId; std::string fPhysicalEyeIdString; std::string fPhysicalTelescopeIdString; // Quantities filled by lazy evaluation // ------------------------------------ mutable double* fRadiusOfCurvature; mutable double* fSigmaNormal; mutable utl::TabulatedFunction* fReflectivity; friend class Telescope; }; } #endif //_fdet_Mirror_h_ // Configure (x)emacs for this file ... // Local Variables: // mode: c++ // compile-command: "make -C .. FDetector/Mirror.o -k" // End: