#ifndef __PNDDRCOPTREFLABSABS_H__ namespace Drc { /*! \enum PndDrc::Reflectivity An enum holding the status of a photon at a surface.*/ enum Reflectivity { ReflTransmitted, //!< Photon is transmitted (internal refl, dichr. mirr.) ReflAbsorbed, //!< Photon is absorbed (mirror). ReflReflected, //!< Photon is reflected (mirror). ReflRefracted //!< Photon will be refracted (int. reflection or not) }; } /*! \brief Class for reflectivity of surfaces. Defines the reflectivity of surfaces, mirrors etc. A mirror can have ReflTransmitted, ReflAbsorbed, or ReflReflected. A eg. quartz bar can have ReflTransmitted (lost) or ReflRefracted, that is the refractive index determines further fate. */ class PndDrcOptReflAbs { protected: //! Random generator. mutable TRandom m_ran; public: //! Destructor. virtual ~PndDrcOptReflAbs(){}; /*! \brief Virtual copy constructor. \return Pointer to new allocated memory. */ virtual PndDrcOptReflAbs* clone() const = 0; /*! \brief Reflectivity of surface used for mirror surfaces or surfacec with internal reflection. \param ph The photon \param normal The normal vector of the surface. */ virtual const Drc::Reflectivity reflectivity(PndDrcPhoton& ph, XYZVector normal) const = 0; }; #endif