LCOV - code coverage report
Current view: top level - src/ket - KetAtomCreator.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 31 52 59.6 %
Date: 2025-05-02 21:49:25 Functions: 9 15 60.0 %

          Line data    Source code
       1             : // SPDX-FileCopyrightText: 2024 Pairinteraction Developers
       2             : // SPDX-License-Identifier: LGPL-3.0-or-later
       3             : 
       4             : #include "pairinteraction/ket/KetAtomCreator.hpp"
       5             : 
       6             : #include "pairinteraction/database/AtomDescriptionByParameters.hpp"
       7             : #include "pairinteraction/database/Database.hpp"
       8             : #include "pairinteraction/enums/Parity.hpp"
       9             : 
      10             : #include <cmath>
      11             : 
      12             : namespace pairinteraction {
      13           7 : KetAtomCreator::KetAtomCreator(std::string species, int n, double l, double j, double m)
      14          14 :     : species(std::move(species)), quantum_number_f(j), quantum_number_m(m), quantum_number_n(n),
      15          14 :       quantum_number_l(l), quantum_number_s(0.5), quantum_number_j(j) {}
      16             : 
      17          19 : KetAtomCreator &KetAtomCreator::set_species(const std::string &value) {
      18          19 :     species.emplace(value);
      19          19 :     return *this;
      20             : }
      21             : 
      22           0 : KetAtomCreator &KetAtomCreator::set_energy(double value) {
      23           0 :     energy.emplace(value);
      24           0 :     return *this;
      25             : }
      26             : 
      27           1 : KetAtomCreator &KetAtomCreator::set_quantum_number_f(double value) {
      28           1 :     if (2 * value != std::rint(2 * value)) {
      29           0 :         throw std::invalid_argument("Quantum number f must be an integer or half-integer.");
      30             :     }
      31           1 :     quantum_number_f.emplace(value);
      32           1 :     return *this;
      33             : }
      34             : 
      35          19 : KetAtomCreator &KetAtomCreator::set_quantum_number_m(double value) {
      36          19 :     if (2 * value != std::rint(2 * value)) {
      37           0 :         throw std::invalid_argument("Quantum number m must be an integer or half-integer.");
      38             :     }
      39          19 :     quantum_number_m.emplace(value);
      40          19 :     return *this;
      41             : }
      42             : 
      43           0 : KetAtomCreator &KetAtomCreator::set_parity(Parity value) {
      44           0 :     parity = value;
      45           0 :     return *this;
      46             : }
      47             : 
      48          19 : KetAtomCreator &KetAtomCreator::set_quantum_number_n(int value) {
      49          19 :     quantum_number_n.emplace(value);
      50          19 :     return *this;
      51             : }
      52             : 
      53           0 : KetAtomCreator &KetAtomCreator::set_quantum_number_nu(double value) {
      54           0 :     quantum_number_nu.emplace(value);
      55           0 :     return *this;
      56             : }
      57             : 
      58           0 : KetAtomCreator &KetAtomCreator::set_quantum_number_nui(double value) {
      59           0 :     quantum_number_nui.emplace(value);
      60           0 :     return *this;
      61             : }
      62             : 
      63          19 : KetAtomCreator &KetAtomCreator::set_quantum_number_l(double value) {
      64          19 :     quantum_number_l.emplace(value);
      65          19 :     return *this;
      66             : }
      67             : 
      68           1 : KetAtomCreator &KetAtomCreator::set_quantum_number_s(double value) {
      69           1 :     quantum_number_s.emplace(value);
      70           1 :     return *this;
      71             : }
      72             : 
      73          11 : KetAtomCreator &KetAtomCreator::set_quantum_number_j(double value) {
      74          11 :     quantum_number_j.emplace(value);
      75          11 :     return *this;
      76             : }
      77             : 
      78           0 : KetAtomCreator &KetAtomCreator::set_quantum_number_l_ryd(double value) {
      79           0 :     quantum_number_l_ryd.emplace(value);
      80           0 :     return *this;
      81             : }
      82             : 
      83           0 : KetAtomCreator &KetAtomCreator::set_quantum_number_j_ryd(double value) {
      84           0 :     quantum_number_j_ryd.emplace(value);
      85           0 :     return *this;
      86             : }
      87             : 
      88          26 : std::shared_ptr<const KetAtom> KetAtomCreator::create(Database &database) const {
      89             : 
      90          26 :     if (!species.has_value()) {
      91           0 :         throw std::runtime_error("Species not set.");
      92             :     }
      93             : 
      94          26 :     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          26 :                                             quantum_number_j_ryd};
     106             : 
     107          52 :     return database.get_ket(species.value(), description);
     108             : }
     109             : } // namespace pairinteraction

Generated by: LCOV version 1.16