00001 #ifndef CCTBX_ELTBX_XRAY_SCATTERING_N_GAUSSIAN_H
00002 #define CCTBX_ELTBX_XRAY_SCATTERING_N_GAUSSIAN_H
00003
00004 #include <cctbx/eltbx/xray_scattering/gaussian.h>
00005
00006 namespace cctbx { namespace eltbx { namespace xray_scattering {
00007 namespace n_gaussian {
00008
00009 std::size_t
00010 table_size();
00011
00012 std::size_t
00013 table_index(std::string label);
00014
00016 class table_entry
00017 {
00018 public:
00019 table_entry() {}
00020
00021 table_entry(
00022 std::size_t i_entry,
00023 std::size_t n_terms) { init(i_entry, n_terms); }
00024
00025 table_entry(
00026 std::string const&,
00027 std::size_t n_terms);
00028
00029 table_entry(
00030 std::size_t i_entry,
00031 double d_min,
00032 double max_relative_error);
00033
00034 table_entry(
00035 std::string const& label,
00036 double d_min,
00037 double max_relative_error);
00038
00039 std::string const&
00040 label() const { return label_; }
00041
00042 xray_scattering::gaussian const&
00043 gaussian() const { return gaussian_; }
00044
00045 double
00046 max_stol() const { return max_stol_; }
00047
00048 double
00049 d_min() const { return 1/(2*max_stol_); }
00050
00051 double
00052 max_relative_error() const { return max_relative_error_; }
00053
00054 protected:
00055 void
00056 init(
00057 std::size_t i_entry,
00058 std::size_t n_terms);
00059
00060 void
00061 init(
00062 std::size_t i_entry,
00063 double d_min,
00064 double max_relative_error);
00065
00066 void
00067 init_core(
00068 std::size_t i_entry,
00069 std::size_t n_terms);
00070
00071 std::string label_;
00072 xray_scattering::gaussian gaussian_;
00073 double max_stol_;
00074 double max_relative_error_;
00075 };
00076
00077 }}}}
00078
00079 #endif // CCTBX_ELTBX_XRAY_SCATTERING_N_GAUSSIAN_H