22 std::string species,
int n,
double nu,
double nui_exp,
double nui_std,
23 double l_exp,
double l_std,
double s_exp,
double s_std,
double j_exp,
double j_std,
24 double l_ryd_exp,
double l_ryd_std,
double j_ryd_exp,
double j_ryd_std,
25 bool is_j_total_momentum,
bool is_calculated_with_mqdt,
26 double underspecified_channel_contribution,
Database &database,
27 size_t id_in_database)
28 :
Ket(energy, f, m, p), species(std::move(species)), quantum_number_n(n), quantum_number_nu(nu),
29 quantum_number_nui_exp(nui_exp), quantum_number_nui_std(nui_std), quantum_number_l_exp(l_exp),
30 quantum_number_l_std(l_std), quantum_number_s_exp(s_exp), quantum_number_s_std(s_std),
31 quantum_number_j_exp(j_exp), quantum_number_j_std(j_std), quantum_number_l_ryd_exp(l_ryd_exp),
32 quantum_number_l_ryd_std(l_ryd_std), quantum_number_j_ryd_exp(j_ryd_exp),
33 quantum_number_j_ryd_std(j_ryd_std), is_j_total_momentum_(is_j_total_momentum),
34 is_calculated_with_mqdt_(is_calculated_with_mqdt),
35 underspecified_channel_contribution(underspecified_channel_contribution), database(database),
36 id_in_database(id_in_database) {}
43 size_t pos = species.find(
'_');
44 std::string label = (pos != std::string::npos) ? species.substr(0, pos) : species;
45 label[0] =
static_cast<char>(std::toupper(label[0]));
47 if (!is_calculated_with_mqdt_) {
48 if (quantum_number_s_exp == 0) {
50 }
else if (quantum_number_s_exp == 1) {
52 }
else if (quantum_number_s_exp != 0.5) {
53 throw std::runtime_error(
54 "Invalid value for quantum number s in the single-channel description.");
60 if (is_calculated_with_mqdt_) {
61 label += fmt::format(
"S={:.1f},nu={:.1f},L={:.1f},", quantum_number_s_exp,
62 quantum_number_nu, quantum_number_l_exp);
63 label += this->is_j_total_momentum_ ?
"J=" :
"F=";
65 label += fmt::format(
"{:d},", quantum_number_n);
66 if (quantum_number_l_exp == std::rint(quantum_number_l_exp) &&
70 label += fmt::format(
"{:.0f}", quantum_number_l_exp);
75 double total_momentum =
76 this->is_j_total_momentum_ ? this->quantum_number_j_exp : this->
quantum_number_f;
77 if (total_momentum == std::rint(total_momentum)) {
78 label += fmt::format(
"{:.0f}", total_momentum);
79 }
else if (2 * total_momentum == std::rint(2 * total_momentum)) {
80 label += fmt::format(
"{:.0f}/2", 2 * total_momentum);
98std::shared_ptr<KetAtom>
101 ket.quantum_number_m = new_quantum_number_m;
102 return std::make_shared<KetAtom>(ket);
140 return underspecified_channel_contribution;
145 quantum_number_n == other.quantum_number_n &&
146 quantum_number_nu == other.quantum_number_nu &&
147 quantum_number_nui_exp == other.quantum_number_nui_exp &&
148 quantum_number_nui_std == other.quantum_number_nui_std &&
149 quantum_number_l_exp == other.quantum_number_l_exp &&
150 quantum_number_l_std == other.quantum_number_l_std &&
151 quantum_number_s_exp == other.quantum_number_s_exp &&
152 quantum_number_s_std == other.quantum_number_s_std &&
153 quantum_number_j_exp == other.quantum_number_j_exp &&
154 quantum_number_j_std == other.quantum_number_j_std;
Class for representing atomic kets.
double get_quantum_number_nui() const
bool is_j_total_momentum() const
bool is_calculated_with_mqdt() const
std::string get_label() const override
size_t get_id_in_database() const
double get_quantum_number_j_ryd() const
double get_quantum_number_l_ryd_std() const
double get_quantum_number_nui_std() const
double get_quantum_number_l_std() const
double get_quantum_number_nu() const
double get_quantum_number_s_std() const
double get_quantum_number_j_ryd_std() const
bool operator!=(const KetAtom &other) const
const std::string & get_species() const
Database & get_database() const
double get_quantum_number_l() const
double get_quantum_number_s() const
bool operator==(const KetAtom &other) const
KetAtom(Private, double energy, double f, double m, Parity p, std::string species, int n, double nu, double nui_exp, double nui_std, double l_exp, double l_std, double s_exp, double s_std, double j_exp, double j_std, double l_ryd_exp, double l_ryd_std, double j_ryd_exp, double j_ryd_std, bool is_j_total_momentum, bool is_calculated_with_mqdt, double underspecified_channel_contribution, Database &database, size_t id_in_database)
int get_quantum_number_n() const
double get_quantum_number_j() const
std::shared_ptr< KetAtom > get_ket_for_different_quantum_number_m(double new_quantum_number_m) const
double get_underspecified_channel_contribution() const
double get_quantum_number_j_std() const
double get_quantum_number_l_ryd() const
bool operator==(const Ket &other) const
void hash_combine(std::size_t &seed, T const &v)
Combine hashes.
constexpr std::array< std::string_view, 6 > quantum_number_l_labels
std::size_t operator()(const KetAtom &k) const