#ifndef __JPHYSICS__JDISPERSIONINTERFACE__ #define __JPHYSICS__JDISPERSIONINTERFACE__ #include /** * \author mdejong */ namespace JPHYSICS {} namespace JPP { using namespace JPHYSICS; } namespace JPHYSICS { /** * Light dispersion inteface. */ class JDispersionInterface { public: /** * Virtual destructor. */ virtual ~JDispersionInterface() {} /** * Index of refraction for phase velocity. * * \param lambda wavelenth [nm] * \return index of refraction */ virtual double getIndexOfRefractionPhase(const double lambda) const = 0; /** * Dispersion of light for phase velocity. * * \param lambda wavelength of light [nm] * \return dn/dlambda */ virtual double getDispersionPhase(const double lambda) const = 0; /** * Index of refraction for group velocity. * * \param lambda wavelenth [nm] * \return index of refraction */ virtual double getIndexOfRefractionGroup(const double lambda) const { const double n = getIndexOfRefractionPhase(lambda); const double y = getDispersionPhase(lambda); return n / (1.0 + y*lambda/n); } /** * Dispersion of light for group velocity. * * \param lambda wavelength of light [nm] * \return dn/dlambda */ virtual double getDispersionGroup(const double lambda) const = 0; /** * Get effective index of refraction for muon light. * * \param lambda wavelength of light [nm] * \return index of refraction */ double getKappa(const double lambda) const { const double n = getIndexOfRefractionPhase(lambda); const double ng = getIndexOfRefractionGroup(lambda); return (ng * n - 1.0) / sqrt(n*n - 1.0); } /** * Get smallest index of refraction for Bremsstrahlung light (i.e.\ point at which dt/dz = 0). * * \param lambda wavelength of light [nm] * \return index of refraction */ double getKmin(const double lambda) const { const double ng = getIndexOfRefractionGroup(lambda); return sqrt(ng*ng - 1.0); } }; } #endif