Skip to content

FAQ

Is NeoMC an application or a library?

A C++ library. Your application owns the physical problem and downstream analysis. NeoMC owns supported data resolution, model compilation, transport, history statistics and structured results.

What is the main API?

Construct SimulationModel, then call run_simulation_model. The package data inside the model can come from a supported resolver or from explicit application assembly. Compile a SimulationRuntimeBundle only when the same physical model will run more than once.

cpp
SimulationTransportSessionResult result =
    run_simulation_model(std::move(model));

Do I need to copy a benchmark?

No. Benchmarks and tools are complete consumers that show data loading and model assembly. Use the public objects they use; leave experiment-specific constants and output formatting in the example.

Why does a calculation need external data?

Cross sections, stopping powers, final-state distributions and decay data are part of the physical model. NeoMC does not hide one global data library behind the API. Versioned resolvers are available for supported installations; other combinations remain explicit application choices.

cpp
CoupledEmSimulationPackage em =
    resolve_coupled_em_simulation_package(
        library, materials, transport, material_processes);

Which particles can be routed?

The current package owners are:

  • photon, electron and positron: coupled_em;
  • proton: proton;
  • neutron: neutron;
  • alpha: alpha;
  • deuteron, triton and helium-3: light_ion.

Actual process coverage is narrower than particle ownership. Check the coverage table.

cpp
std::optional<TransportPackageId> owner =
    owning_transport_package(ParticleType::alpha);

Why did model compilation reject a missing package?

A source or process can reach a particle whose owner is not enabled. Enable that package with suitable data or choose an explicit physical disposition supported by the initiating package. NeoMC does not silently drop it.

cpp
packages.required_capabilities.push_back(
    SimulationRequiredTransportCapability{
        .package = TransportPackageId::alpha,
        .capability = "alpha_data_driven_nuclear_reactions",
        .minimum_status = TransportCapabilityStatus::experimental,
    });

What is one statistical sample?

One source history. All source emissions, tracks and secondaries descended from that history remain correlated. standard_error is calculated over those history scores.

Is a zero standard error proof of precision?

No. A deterministic expected-value response can have no Monte Carlo sampling variance while still carrying evaluated-data, processing, model and experimental uncertainty.

cpp
std::cout << row.value << " +/- " << row.standard_error
          << ' ' << row.units << '\n';

Does benchmark agreement validate a package?

No. It supports the particle, material, energy range, process representation and observable named by that comparison.

Can I install NeoMC with find_package?

Not yet. The current CMake project builds static targets from source; integrate it with add_subdirectory.

NeoMC user documentation.