pairinteraction
A Rydberg Interaction Calculator
KetAtomCreator.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2024 Pairinteraction Developers
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
5
9
10#include <cmath>
11
12namespace pairinteraction {
13KetAtomCreator::KetAtomCreator(std::string species, int n, double l, double j, double m)
14 : species(std::move(species)), quantum_number_f(j), quantum_number_m(m), quantum_number_n(n),
15 quantum_number_l(l), quantum_number_s(0.5), quantum_number_j(j) {}
16
17KetAtomCreator &KetAtomCreator::set_species(const std::string &value) {
18 species.emplace(value);
19 return *this;
20}
21
23 energy.emplace(value);
24 return *this;
25}
26
28 if (2 * value != std::rint(2 * value)) {
29 throw std::invalid_argument("Quantum number f must be an integer or half-integer.");
30 }
31 quantum_number_f.emplace(value);
32 return *this;
33}
34
36 if (2 * value != std::rint(2 * value)) {
37 throw std::invalid_argument("Quantum number m must be an integer or half-integer.");
38 }
39 quantum_number_m.emplace(value);
40 return *this;
41}
42
44 parity = value;
45 return *this;
46}
47
49 quantum_number_n.emplace(value);
50 return *this;
51}
52
54 quantum_number_nu.emplace(value);
55 return *this;
56}
57
59 quantum_number_nui.emplace(value);
60 return *this;
61}
62
64 quantum_number_l.emplace(value);
65 return *this;
66}
67
69 quantum_number_s.emplace(value);
70 return *this;
71}
72
74 quantum_number_j.emplace(value);
75 return *this;
76}
77
79 quantum_number_l_ryd.emplace(value);
80 return *this;
81}
82
84 quantum_number_j_ryd.emplace(value);
85 return *this;
86}
87
88std::shared_ptr<const KetAtom> KetAtomCreator::create(Database &database) const {
89
90 if (!species.has_value()) {
91 throw std::runtime_error("Species not set.");
92 }
93
94 AtomDescriptionByParameters description{parity,
95 energy,
96 quantum_number_f,
97 quantum_number_m,
98 quantum_number_n,
99 quantum_number_nu,
100 quantum_number_nui,
101 quantum_number_l,
102 quantum_number_s,
103 quantum_number_j,
104 quantum_number_l_ryd,
105 quantum_number_j_ryd};
106
107 return database.get_ket(species.value(), description);
108}
109} // namespace pairinteraction
std::shared_ptr< const KetAtom > get_ket(const std::string &species, const AtomDescriptionByParameters &description)
Definition: Database.cpp:154
Builder class for creating KetAtom objects.
KetAtomCreator & set_quantum_number_f(double value)
KetAtomCreator & set_quantum_number_n(int value)
KetAtomCreator & set_quantum_number_nu(double value)
std::shared_ptr< const KetAtom > create(Database &database) const
KetAtomCreator & set_quantum_number_l_ryd(double value)
KetAtomCreator & set_quantum_number_j_ryd(double value)
KetAtomCreator & set_quantum_number_j(double value)
KetAtomCreator & set_quantum_number_l(double value)
KetAtomCreator & set_quantum_number_nui(double value)
KetAtomCreator & set_quantum_number_s(double value)
KetAtomCreator & set_parity(Parity value)
KetAtomCreator & set_energy(double value)
KetAtomCreator & set_species(const std::string &value)
KetAtomCreator & set_quantum_number_m(double value)