LCOV - code coverage report
Current view: top level - include/pairinteraction/basis - BasisAtomCreator.hpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 1 100.0 %
Date: 2026-04-30 10:44:11 Functions: 2 2 100.0 %

          Line data    Source code
       1             : // SPDX-FileCopyrightText: 2024 PairInteraction Developers
       2             : // SPDX-License-Identifier: LGPL-3.0-or-later
       3             : 
       4             : #pragma once
       5             : 
       6             : #include "pairinteraction/enums/Parity.hpp"
       7             : #include "pairinteraction/utils/Range.hpp"
       8             : #include "pairinteraction/utils/traits.hpp"
       9             : 
      10             : #include <complex>
      11             : #include <memory>
      12             : #include <optional>
      13             : #include <string>
      14             : #include <vector>
      15             : 
      16             : namespace pairinteraction {
      17             : template <typename Scalar>
      18             : class BasisAtom;
      19             : 
      20             : class KetAtom;
      21             : 
      22             : class Database;
      23             : 
      24             : /**
      25             :  * @class BasisAtomCreator
      26             :  *
      27             :  * @brief Builder class for creating BasisAtom objects.
      28             :  *
      29             :  * @tparam Scalar Complex number type.
      30             :  */
      31             : template <typename Scalar>
      32             : class BasisAtomCreator {
      33             :     static_assert(traits::NumTraits<Scalar>::from_floating_point_v);
      34             : 
      35             : public:
      36             :     using real_t = typename traits::NumTraits<Scalar>::real_t;
      37             :     using ket_t = KetAtom;
      38         231 :     BasisAtomCreator() = default;
      39             :     BasisAtomCreator<Scalar> &set_species(const std::string &value);
      40             :     BasisAtomCreator<Scalar> &restrict_energy(real_t min, real_t max);
      41             :     BasisAtomCreator<Scalar> &restrict_quantum_number_f(real_t min, real_t max);
      42             :     BasisAtomCreator<Scalar> &restrict_quantum_number_m(real_t min, real_t max);
      43             :     BasisAtomCreator<Scalar> &restrict_parity(Parity value);
      44             :     BasisAtomCreator<Scalar> &restrict_quantum_number_n(int min, int max);
      45             :     BasisAtomCreator<Scalar> &restrict_quantum_number_nu(real_t min, real_t max);
      46             :     BasisAtomCreator<Scalar> &restrict_quantum_number_nui(real_t min, real_t max);
      47             :     BasisAtomCreator<Scalar> &restrict_quantum_number_l(real_t min, real_t max);
      48             :     BasisAtomCreator<Scalar> &restrict_quantum_number_s(real_t min, real_t max);
      49             :     BasisAtomCreator<Scalar> &restrict_quantum_number_j(real_t min, real_t max);
      50             :     BasisAtomCreator<Scalar> &restrict_quantum_number_l_ryd(real_t min, real_t max);
      51             :     BasisAtomCreator<Scalar> &restrict_quantum_number_j_ryd(real_t min, real_t max);
      52             :     BasisAtomCreator<Scalar> &append_ket(const std::shared_ptr<const ket_t> &ket);
      53             :     std::shared_ptr<const BasisAtom<Scalar>> create(Database &database) const;
      54             : 
      55             : private:
      56             :     std::optional<std::string> species;
      57             :     Parity parity{Parity::UNKNOWN};
      58             :     Range<real_t> range_energy;
      59             :     Range<real_t> range_quantum_number_f;
      60             :     Range<real_t> range_quantum_number_m;
      61             :     Range<int> range_quantum_number_n;
      62             :     Range<real_t> range_quantum_number_nu;
      63             :     Range<real_t> range_quantum_number_nui;
      64             :     Range<real_t> range_quantum_number_l;
      65             :     Range<real_t> range_quantum_number_s;
      66             :     Range<real_t> range_quantum_number_j;
      67             :     Range<real_t> range_quantum_number_l_ryd;
      68             :     Range<real_t> range_quantum_number_j_ryd;
      69             :     std::vector<size_t> additional_ket_ids;
      70             :     std::optional<std::string> additional_ket_species;
      71             : };
      72             : 
      73             : extern template class BasisAtomCreator<double>;
      74             : extern template class BasisAtomCreator<std::complex<double>>;
      75             : } // namespace pairinteraction

Generated by: LCOV version 1.16