Skip to content

Results And Uncertainty

Start from the observable you defined, then use package summaries to audit the transport behind it.

Select Rows By Identity

For one scalar response:

cpp
const SimulationObservableRow &dose =
    require_simulation_observable_row(
        result,
        TransportPackageId::coupled_em,
        "energy_deposit_dose",
        "total",
        ObservableId{3});

For a binned response:

cpp
std::vector<const SimulationObservableRow *> spectrum =
    find_simulation_observable_rows(
        result,
        TransportPackageId::coupled_em,
        "energy_deposit_edep",
        ObservableId{4});

Do not select rows by vector position. Use package, observable type, ObservableId, response_id and bin bounds.

Interpret A Row

FieldMeaning
valuemean score per source history
standard_errorstandard error of that history mean
unitsunits after response folding and normalization
historiessource histories accumulated
nonzero_historieshistories with a nonzero score in this row
score_sumsum of per-history scores
score_sum_squaresum of squared per-history scores

The current normalization is per_source_history. A decay history can contain several correlated emissions; those emissions are not independent samples.

nonzero_histories is useful for diagnosing rare scores. It is not an uncertainty estimate and should not replace standard_error.

Bins

Depending on the observable, a row can carry:

  • energy bounds;
  • direction-cosine or projected-angle bounds;
  • time bounds;
  • x, y or z position bounds;
  • multiplicity bounds;
  • target nuclide and reaction MT.

The axis definition controls binning. Integrate rows using their score semantics; do not multiply or divide by bin width unless the requested observable is explicitly a density.

Audit Transport

cpp
const SimulationPackageResultSummary &summary =
    require_simulation_package_result(
        result, TransportPackageId::coupled_em);

Inspect at least:

  • package_status, transport_model and profile fields;
  • histories, tracks, collisions and stopped/escaped tracks;
  • deposited, escaped and secondary-handoff energy;
  • energy_balance_residual;
  • unresolved event counts and residual fields;
  • reaction-by-reaction accounting for nuclear transport.

An unresolved evaluated product marginal is deliberately reported separately from a resolved exclusive event. Do not reinterpret that residual as a floating-point conservation error.

Export

cpp
std::ofstream output{"observables.csv"};
write_simulation_observables_csv(
    output, result, "case-001", "neomc");

The CSV is the preferred boundary for plotting and comparison. Keep case id, model inputs, data versions, seeds and run settings with the exported table.

NeoMC user documentation.