File indexing completed on 2026-11-08 10:11:14
0001
0002
0003
0004
0005
0006
0007
0008 #pragma once
0009
0010 #include <string>
0011 #include <unordered_set>
0012 #include <vector>
0013
0014 #include "geocel/GeoOpticalIdMap.hh"
0015 #include "celeritas/Types.hh"
0016 #include "celeritas/inp/OpticalPhysics.hh"
0017
0018 class G4VProcess;
0019 class G4MaterialPropertiesTable;
0020
0021 namespace celeritas
0022 {
0023 struct ImportData;
0024 class GeantParticleView;
0025
0026 namespace detail
0027 {
0028 class GeantMaterialPropertyGetter;
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041 class GeantPhysicsLoader
0042 {
0043 public:
0044
0045 GeantPhysicsLoader(ImportData& imported,
0046 GeoOpticalIdMap const& optical_ids);
0047
0048
0049 bool operator()(G4VProcess const& p);
0050
0051
0052 bool operator()(GeantParticleView const& particle, G4VProcess const& p);
0053
0054 private:
0055
0056
0057 using PropGetter = GeantMaterialPropertyGetter;
0058
0059
0060
0061 ImportData& imported_;
0062 GeoOpticalIdMap const& optical_ids_;
0063 std::vector<G4Material const*> optical_g4mat_;
0064 std::unordered_set<G4VProcess const*> visited_;
0065
0066
0067
0068
0069 size_type cerenkov(G4VProcess const& p);
0070 size_type muon_minus_atomic_capture(G4VProcess const& p);
0071 size_type scintillation(G4VProcess const& p);
0072
0073
0074 size_type op_absorption(G4VProcess const& p);
0075 size_type op_boundary(G4VProcess const& p);
0076 size_type op_mie_hg(G4VProcess const& p);
0077 size_type op_rayleigh(G4VProcess const& p);
0078 size_type op_wls(G4VProcess const& p);
0079 size_type op_wls2(G4VProcess const& p);
0080
0081
0082 size_type mu_pair_production(GeantParticleView const&, G4VProcess const&);
0083
0084
0085
0086
0087 PropGetter property_getter(OptMatId) const;
0088
0089 inp::Grid load_mfp(OptMatId opt_id, std::string const& prop_name) const;
0090 };
0091
0092
0093 }
0094 }