12template <
typename Scalar>
14 species.emplace(value);
18template <
typename Scalar>
20 range_energy = {min, max};
24template <
typename Scalar>
27 if (2 * min != std::rint(2 * min) || 2 * max != std::rint(2 * max)) {
28 throw std::invalid_argument(
"Quantum number f must be an integer or half-integer.");
30 range_quantum_number_f = {min, max};
34template <
typename Scalar>
37 if (2 * min != std::rint(2 * min) || 2 * max != std::rint(2 * max)) {
38 throw std::invalid_argument(
"Quantum number m must be an integer or half-integer.");
40 range_quantum_number_m = {min, max};
44template <
typename Scalar>
50template <
typename Scalar>
52 range_quantum_number_n = {min, max};
56template <
typename Scalar>
59 range_quantum_number_nu = {min, max};
63template <
typename Scalar>
66 range_quantum_number_nui = {min, max};
70template <
typename Scalar>
73 range_quantum_number_l = {min, max};
77template <
typename Scalar>
80 range_quantum_number_s = {min, max};
84template <
typename Scalar>
87 range_quantum_number_j = {min, max};
91template <
typename Scalar>
94 range_quantum_number_l_ryd = {min, max};
98template <
typename Scalar>
101 range_quantum_number_j_ryd = {min, max};
105template <
typename Scalar>
108 if (additional_ket_species.has_value() &&
109 additional_ket_species.value() != ket->get_species()) {
110 throw std::invalid_argument(
"Species mismatch.");
112 additional_ket_species.emplace(ket->get_species());
113 additional_ket_ids.push_back(ket->get_id_in_database());
117template <
typename Scalar>
118std::shared_ptr<const BasisAtom<Scalar>>
121 if (species.has_value() && additional_ket_species.has_value() &&
122 species.value() != additional_ket_species.value()) {
123 throw std::invalid_argument(
"Species mismatch.");
126 std::string extracted_species;
127 if (species.has_value()) {
128 extracted_species = species.value();
129 }
else if (additional_ket_species.has_value()) {
130 extracted_species = additional_ket_species.value();
132 throw std::runtime_error(
"Species not set.");
137 range_quantum_number_f,
138 range_quantum_number_m,
139 range_quantum_number_n,
140 range_quantum_number_nu,
141 range_quantum_number_nui,
142 range_quantum_number_l,
143 range_quantum_number_s,
144 range_quantum_number_j,
145 range_quantum_number_l_ryd,
146 range_quantum_number_j_ryd};
148 return database.
get_basis<Scalar>(extracted_species, description, additional_ket_ids);
Builder class for creating BasisAtom objects.
BasisAtomCreator< Scalar > & restrict_quantum_number_nui(real_t min, real_t max)
BasisAtomCreator< Scalar > & restrict_quantum_number_m(real_t min, real_t max)
BasisAtomCreator< Scalar > & append_ket(const std::shared_ptr< const ket_t > &ket)
std::shared_ptr< const BasisAtom< Scalar > > create(Database &database) const
BasisAtomCreator< Scalar > & restrict_quantum_number_l_ryd(real_t min, real_t max)
BasisAtomCreator< Scalar > & set_species(const std::string &value)
BasisAtomCreator< Scalar > & restrict_quantum_number_j_ryd(real_t min, real_t max)
BasisAtomCreator< Scalar > & restrict_quantum_number_j(real_t min, real_t max)
BasisAtomCreator< Scalar > & restrict_quantum_number_s(real_t min, real_t max)
BasisAtomCreator< Scalar > & restrict_quantum_number_n(int min, int max)
BasisAtomCreator< Scalar > & restrict_parity(Parity value)
BasisAtomCreator< Scalar > & restrict_energy(real_t min, real_t max)
BasisAtomCreator< Scalar > & restrict_quantum_number_f(real_t min, real_t max)
BasisAtomCreator< Scalar > & restrict_quantum_number_l(real_t min, real_t max)
BasisAtomCreator< Scalar > & restrict_quantum_number_nu(real_t min, real_t max)
typename traits::NumTraits< Scalar >::real_t real_t
std::shared_ptr< const BasisAtom< Scalar > > get_basis(const std::string &species, const AtomDescriptionByRanges &description, std::vector< size_t > additional_ket_ids)