//****************************************************************************** //** SCATMECH: Polarized Light Scattering C++ Class Library //** //** File: optconst.h //** //** Thomas A. Germer //** Optical Technology Division, National Institute of Standards and Technology //** 100 Bureau Dr. Stop 8443; Gaithersburg, MD 20899-8443 //** Phone: (301) 975-2876; FAX: (301) 975-6991 //** Email: thomas.germer@nist.gov //** //** Version: 6.00 (February 2008) //** //****************************************************************************** #ifndef SCATMECH_OPTCONST_H #define SCATMECH_OPTCONST_H #include #include #include "scatmech.h" namespace SCATMECH { class dielectric_constant; class optical_constant { public: double n; double k; optical_constant(): n(1.), k(0.) {} optical_constant(const COMPLEX& x): n(std::real(x)),k(std::imag(x)) {} optical_constant(double x, double y=0.): n(x),k(y) {} optical_constant(const dielectric_constant& e); optical_constant(const optical_constant& oc): n(oc.n), k(oc.k) {} operator COMPLEX() const {return COMPLEX(n,k);} friend std::istream& operator>>(std::istream& is,optical_constant& nn) {COMPLEX temp; is >> temp; nn=temp; return is;} friend std::ostream& operator<<(std::ostream& os,const optical_constant& nn) {return os << '(' << nn.n << ',' << nn.k << ')';} }; class dielectric_constant { public: double e1; double e2; dielectric_constant(): e1(1.),e2(0.) {} dielectric_constant( const COMPLEX& x): e1(std::real(x)),e2(std::imag(x)) {} dielectric_constant( double x, double y=0.): e1(x),e2(y) {} dielectric_constant( const optical_constant& n); dielectric_constant( const dielectric_constant& dc) : e1(dc.e1),e2(dc.e2) {} operator COMPLEX() const {return COMPLEX(e1,e2);} friend std::istream& operator>>(std::istream& is,dielectric_constant& e) {COMPLEX temp; is >> temp; e=temp; return is;} friend std::ostream& operator<<(std::ostream& os,const dielectric_constant& ee) {return os << '(' << ee.e1 << ',' << ee.e2 << ')';} }; inline dielectric_constant:: dielectric_constant(const optical_constant& n) { *this = dielectric_constant((COMPLEX)n*(COMPLEX)n); } inline optical_constant:: optical_constant(const dielectric_constant& e) { *this = optical_constant(std::sqrt((COMPLEX)e)); } optical_constant AskUser(const std::string& query,const optical_constant& deflt); extern optical_constant vacuum; } // namespace SCATMECH #endif