Physics Data And Cross Sections
This page explains how neomc currently ingests, validates, binds, and uses physics data. For real users, this is as important as the process list itself: transport only works when the right element-resolved tables are present and cover every material component used in the run.
Mental Model
The current coupled-EM data path is:
upstream reference files
-> importer functions
-> runtime tables
-> per-material process builders
-> transport driverIn practical terms:
reference_root + material elements
-> photon/electron importers
-> PhotonRuntimeTable / ElectronRuntimeTable
-> PhotonMaterialProcess / ElectronMaterialProcess
-> CoupledEmModel or MixedTransportModelRuntime Table Types
The main public runtime-table types are:
PhotonRuntimeTableElectronRuntimeTableDecayRuntimeTableNeutronMicroscopicCrossSectionTable
These are compact neomc runtime objects. They are what transport and source code consume. The transport layer does not read upstream HDF5 or ENDF files directly during a run.
Photon Data
Photon data is stored per element in PhotonElementData.
What PhotonElementData Contains
The public fields show that the imported photon table contains:
- energy grid;
- coherent cross section;
- incoherent cross section;
- photoelectric cross section;
- pair-production cross section in the electron field;
- pair-production cross section in the nuclear field;
- heating cross section;
- coherent and incoherent scattering factors;
- Compton profile data;
- shell binding energies and shell electron counts;
- subshell photoelectric data;
- subshell transition data for atomic relaxation;
- mean excitation energy and shell ionization data used by charged transport support code.
Photon Importers
The public importer entry points are:
nndc_photon_hdf5_pathimport_nndc_photon_hdf5import_nndc_photon_elementsimport_nndc_photon_runtime_table
The user-facing pattern is:
- determine which elements appear in the material set;
- resolve the per-element upstream file path under
reference_root; - import those elements;
- build one
PhotonRuntimeTable.
Electron Data
Electron data is stored per element in ElectronElementData.
What ElectronElementData Contains
The public fields show that the imported electron table contains:
- elastic cross section;
- bremsstrahlung cross section;
- excitation cross section;
- ionization subshell binding energies;
- ionization subshell cross sections;
- elastic angular distributions;
- bremsstrahlung photon spectra;
- optional Seltzer-Berger bremsstrahlung data;
- optional Sternheimer density-effect data;
- bremsstrahlung electron-energy tables;
- excitation energy-loss tables;
- ionization ejected-electron spectra.
The enclosing ElectronRuntimeTable also contains:
- electron/positron MSC correction data;
- shared Goudsmit-Saunderson MSC angular-grid data.
Electron Importers
The public importer entry points are:
endfb_eedl_electron_endf_pathimport_eedl_electron_endfimport_endfb_eedl_electron_elementsimport_endfb_eedl_electron_runtime_table
As with photons, the intended user flow is element-driven: import only the elements actually used by the current material set, then build one runtime table covering those elements.
Decay Data
Decay data is stored in DecayRuntimeTable, which contains DecayNuclideData records.
Each nuclide record contains:
- nuclide identity;
- atomic and mass number;
- half-life;
source_path;- decay modes;
- emission records.
Public importer entry points:
import_endfb_decay_endfimport_endfb_decay_runtime_table
This table is consumed by:
sample_decay_eventStaticDecayInventorySourceevolve_decay_inventoryevolve_one_group_activation_inventory
Neutron Microscopic Cross-Section Data
NeutronMicroscopicCrossSectionTable is the current public neutron data surface.
Each table contains:
- one target nuclide;
- one MT reaction identifier;
- one reaction classification;
source_path;- energy grid;
- microscopic cross section in barns.
Public helpers include:
neutron_reaction_type_from_mtneutron_reaction_type_namevalidate_neutron_microscopic_cross_section_tableevaluate_neutron_microscopic_cross_section_barn
Public importer entry point:
import_endfb_neutron_mf3
These tables are now also the data input for the experimental neutron transport package. Current neutron transport uses a narrow subset: total, elastic, and capture reactions in a free-flight / sink-accounting model.
Stopping-Power And Range Reference Data
The public data surface also includes stopping-power and range reference utilities used by benchmarks and validation workflows.
Electron Stopping-Power Tables
ElectronStoppingPowerTable contains:
- material name;
source_path;- energy grid;
- collision mass stopping power;
- radiative mass stopping power;
- total mass stopping power;
- CSDA range.
Public helpers:
validate_electron_stopping_power_tableevaluate_electron_collision_mass_stopping_mev_cm2_per_gevaluate_electron_radiative_mass_stopping_mev_cm2_per_gevaluate_electron_total_mass_stopping_mev_cm2_per_gevaluate_electron_csda_range_g_cm2
Public importer:
import_geant4_estar_table
Proton Stopping And Range
The current proton stopping helper surface is a built-in NIST PSTAR water reference path:
nist_pstar_water_proton_stopping_sourcenist_pstar_water_proton_min_energy_evnist_pstar_water_proton_max_energy_evnist_pstar_water_proton_electronic_mass_stopping_powernist_pstar_water_proton_covers_energynist_pstar_water_proton_csda_range_cm
Alpha Stopping And Range
The current alpha stopping helper surface is a built-in NIST ASTAR water reference path:
nist_astar_water_alpha_stopping_sourcenist_astar_water_alpha_min_energy_evnist_astar_water_alpha_max_energy_evnist_astar_water_alpha_electronic_mass_stopping_powernist_astar_water_alpha_csda_range_cm
The alpha transport package uses the ASTAR-water stopping model for its current CSDA electronic-stopping scope.
Provenance And Source Paths
Every imported element, table, or nuclide record includes a source_path field. That is the user-visible provenance trail inside the runtime data.
In practical terms, this means:
- imported photon records remember which upstream file produced them;
- imported electron records remember which upstream file produced them;
- imported decay nuclides remember which upstream file produced them;
- imported neutron tables remember which upstream file produced them.
This is important when validating physics results or auditing a generated runtime table.
Element Discovery And Binding
The data-import path is driven by material composition, not by a global "import everything" step.
The normal public flow is:
- define materials;
- resolve them into
MaterialDefinitionorMaterial; - call
material_element_records(...); - import photon/electron tables for those elements;
- populate
CoupledEmPhysicsData.
The key helper here is:
material_element_records
That gives the element list used by the importer functions.
Atomic Weights
Photon and electron material-process builders also require std::vector<ElementAtomicWeight>.
These are used to convert authored material composition into material-level properties such as:
- atom densities;
- electron density;
- effective Z;
- radiation length and related charged-transport properties.
Relevant public surfaces:
ElementAtomicWeightstandard_atomic_weightmaterial_element_atom_densities
From Runtime Tables To Material Processes
Importing tables is only the first half of the chain. The next step is binding those per-element tables to each material in the run.
Photon Material Processes
build_photon_material_processes(...) consumes:
- materials;
PhotonRuntimeTable;- atomic weights;
- photon policy controls.
It produces PhotonMaterialProcess records containing:
MaterialId;- one
PhotonInteractionProcessper material-element contribution; - atom density per barn-cm;
- configured Compton / relaxation / triplet policies.
Electron Material Processes
build_electron_material_processes(...) consumes:
- materials;
ElectronRuntimeTable;- relaxation
PhotonRuntimeTable; - atomic weights.
It produces ElectronMaterialProcess records containing:
MaterialId;- one
ElectronElementDatacontribution; - atom density per barn-cm;
- charged-material transport properties;
- relaxation subshell data;
- ionization-to-relaxation shell mappings.
This is the step where raw imported cross sections become material-resolved transport data.
Why Relaxation Uses Photon Data
The current CoupledEmPhysicsData layout contains:
photonelectronrelaxationatomic_weights
relaxation is also a PhotonRuntimeTable.
That is because the current atomic-relaxation information used by coupled EM is stored in the photon-side shell and transition data. Repository example code therefore commonly does:
- import photon table;
- assign it to
physics_data.photon; - reuse it for
physics_data.relaxation.
Model Coverage Validation
The model layer performs explicit coverage checks before transport starts.
CoupledEmModel Checks
CoupledEmModel rejects a definition if:
- photon data is missing;
- electron data is missing;
- relaxation photon data is missing;
- any imported photon or electron record fails validation;
- any material component is not elemental;
- any material element is missing photon data;
- any material element is missing relaxation data;
- any material element is missing electron data.
MixedTransportModel Checks
MixedTransportModel performs the same element-coverage checks for material regions that can enter the coupled-EM side of the run.
When neutron transport is enabled, neutron physics data is also validated before the run. Missing or invalid required cross-section data is meant to fail during model construction or session compilation, not silently during tracking.
Current Material Limitation
The coupled-EM and mixed model validation code currently requires elemental material components when building EM material processes.
That means:
ComponentKind::elementis supported for EM material binding;- nuclide-level material components are not currently accepted by the coupled-EM material coverage checks.
This is an important user constraint: if your material authoring path does not resolve to elemental composition, the current EM model build will fail.
Current Failure Modes Users Should Expect
At model construction time, the current code is expected to reject:
- missing photon element coverage;
- missing electron element coverage;
- missing relaxation element coverage;
- non-elemental EM material components;
- empty required physics tables;
- invalid imported table content.
That fail-closed behavior is part of the public semantics, not just an implementation detail.