File indexing completed on 2025-09-17 08:53:35
0001
0002
0003
0004
0005
0006
0007 #pragma once
0008
0009 #include <set>
0010 #include <string_view>
0011
0012 #include "celeritas/Quantities.hh"
0013 #include "celeritas/em/data/MuHadIonizationData.hh"
0014 #include "celeritas/phys/Applicability.hh"
0015 #include "celeritas/phys/ParticleParams.hh"
0016
0017 namespace celeritas
0018 {
0019 namespace detail
0020 {
0021
0022
0023
0024
0025
0026
0027
0028 class MuHadIonizationBuilder
0029 {
0030 public:
0031
0032
0033 using Energy = units::MevEnergy;
0034 using SetApplicability = std::set<Applicability>;
0035
0036
0037 public:
0038
0039 inline MuHadIonizationBuilder(ParticleParams const& particles,
0040 std::string_view label);
0041
0042
0043 inline MuHadIonizationData operator()(SetApplicability const&) const;
0044
0045 private:
0046 ParticleParams const& particles_;
0047 std::string_view label_;
0048 };
0049
0050
0051
0052
0053
0054
0055
0056 MuHadIonizationBuilder::MuHadIonizationBuilder(ParticleParams const& particles,
0057 std::string_view label)
0058 : particles_(particles), label_(label)
0059 {
0060 }
0061
0062
0063
0064
0065
0066 MuHadIonizationData
0067 MuHadIonizationBuilder::operator()(SetApplicability const& applicability) const
0068 {
0069 CELER_EXPECT(!applicability.empty());
0070
0071 MuHadIonizationData data;
0072
0073 for (auto const& applic : applicability)
0074 {
0075 CELER_VALIDATE(
0076 applic,
0077 << "invalid applicability with particle `"
0078 << (applic.particle ? particles_.id_to_label(applic.particle) : "")
0079 << "' and energy limits (" << value_as<Energy>(applic.lower)
0080 << ", " << value_as<Energy>(applic.upper) << ") [MeV] for model '"
0081 << label_ << "'");
0082 }
0083
0084 data.electron = particles_.find(pdg::electron());
0085 CELER_VALIDATE(data.electron,
0086 << "missing electron (required for model '" << label_
0087 << "')");
0088
0089 data.electron_mass = particles_.get(data.electron).mass();
0090
0091 CELER_ENSURE(data);
0092 return data;
0093 }
0094
0095
0096 }
0097 }