LCOV - code coverage report
Current view: top level - src/ket - KetAtomCreator.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 20 27 74.1 %
Date: 2026-06-19 12:50:25 Functions: 4 5 80.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             : 
       9             : #include <cmath>
      10             : 
      11             : namespace pairinteraction {
      12           8 : KetAtomCreator::KetAtomCreator(std::string species, int n, double l, double j, double m)
      13           8 :     : species(std::move(species)) {
      14           8 :     set_quantum_number("n", n);
      15           8 :     set_quantum_number("l", l);
      16           8 :     set_quantum_number("j", j);
      17           8 :     set_quantum_number("m", m);
      18           8 : }
      19             : 
      20         418 : KetAtomCreator &KetAtomCreator::set_species(const std::string &value) {
      21         418 :     species.emplace(value);
      22         418 :     return *this;
      23             : }
      24             : 
      25           0 : KetAtomCreator &KetAtomCreator::set_energy(double value) {
      26           0 :     energy.emplace(value);
      27           0 :     return *this;
      28             : }
      29             : 
      30        1684 : KetAtomCreator &KetAtomCreator::set_quantum_number(const std::string &name, double value) {
      31        1684 :     if ((name == "f" || name == "m") && 2 * value != std::rint(2 * value)) {
      32           0 :         throw std::invalid_argument("Quantum number " + name +
      33           0 :                                     " must be an integer or half-integer.");
      34             :     }
      35        1684 :     if (name == "parity" && value != 1 && value != -1) {
      36           0 :         throw std::invalid_argument("The parity must be +1 or -1.");
      37             :     }
      38        1684 :     quantum_numbers[name] = value;
      39        1684 :     return *this;
      40             : }
      41             : 
      42         426 : std::shared_ptr<const KetAtom> KetAtomCreator::create(Database &database) const {
      43             : 
      44         426 :     if (!species.has_value()) {
      45           0 :         throw std::runtime_error("Species not set.");
      46             :     }
      47             : 
      48         426 :     AtomDescriptionByParameters description{energy, quantum_numbers};
      49             : 
      50         846 :     return database.get_ket(species.value(), description);
      51         426 : }
      52             : } // namespace pairinteraction

Generated by: LCOV version 1.16