// // genPXR class header // // author: richard.t.jones at uconn.edu // version: september 2, 2021 // #include #include #ifndef GENPXR_CLASS_DEFINED_ #define GENPXR_CLASS_DEFINED_ 1 class genPXR { public: genPXR(double Ebeam_GeV); ~genPXR(); private: genPXR(const genPXR &src); genPXR &operator=(const genPXR &src); public: double FFatomic(double q_keV); double FFatomic_Lobato(double q_keV); double omega_keV(const int hkl[3], const std::vector &khat); double Esuscept(const int hkl[3], double ome_keV); double refIndex(double ome_keV); std::vector crystalWavenumber(const int hkl[3]); void setCrystal(double phideg=999, double alphax=999, double alphay=999, int verbose=1); void setFilterLimits(double ome_low_limit_keV, double om_high_limit_keV); double frequency_filter(double ome_keV); double dNdOmegadz(double thetadeg, double phideg, int verbosity=0); double dNdOmegadz2(double thetadeg, double phideg, int verbosity=0); // some physical constants static const double mElectron_keV; static const double alphaQED; static const double hbarc_keV_m; static const double cLight_m__s; static const double BohrRadius_m; protected: // radiator crystal properties std::vector latticeConst_m; std::vector atomsPerUnitCell; std::vector atomicZ; double delta_10keV; // crystal orientation parameters, matrix double crystalPhiAlphaXY[3]; double aLattice[3][3]; // beam properties double Ebeam_keV; double betabeam[3]; // detector frequency filter parameters double frequency_filter_limits_keV[2]; }; #endif