Welcome to OpenBNCT
OpenBNCT is an open-source research workbench for boron neutron capture therapy. Calculate neutron and photon component dose, study boron uptake and irradiation timing, compare biological models, optimize multi-field research plans and investigate uncertainty.
The Rust engine powers the CLI, Python package, desktop application and browser workbench. A deterministic multigroup solver works without an external transport code. OpenMC integration and MCNP/PHITS interchange support independent comparisons.
OpenBNCT 0.2.2 is the current workspace version. This handbook describes the current source tree. Packaged v0.2.2 releases predate later transport and research-workflow changes; build current source when following newer commands or reproducing current-source results.
Choose a starting point
| Your task | Start here |
|---|---|
| Explore a bundled dose result | Open the workbench, then your first study |
| Run a CT-to-report demonstration | Your first study |
| Bring an image, labelmap or beam spectrum | Imaging, materials and beams |
| Calculate and compare transport | Transport and benchmarks |
| Analyze dose arrays in a notebook | Python and NumPy |
| Study uptake, biology or plan alternatives | Boron, biological models and planning |
OpenBNCT is experimental research software. Its outputs are not commissioned or clinically qualified for patient care. The research scope explains this boundary and the evidence needed to interpret a calculation.
Source, releases and issues are on GitHub. OpenBNCT is developed by Avila Labs under the MIT license.
Install and choose a workflow
Browser workbench
Open openbnct.avilalabs.org. Load the bundled example or drop a supported dose bundle, plan, NIfTI volume or uncertainty budget into the page. Files are processed locally in the browser.
The web build supports viewing and supported in-browser analysis. Case folders and external process execution require desktop or CLI. Use a browser with WebGL2 or WebGPU enabled. The interface supports English, Japanese, Italian, Chinese and Spanish.
Published packages
cargo install openbnct-cli
python -m pip install openbnct
The CLI executable is openbnct. Desktop downloads are on GitHub Releases. Check the downloaded release’s version and notes; current-source features can be newer than packaged releases.
Build current source
Install Rust, then clone the repository. The toolchain is pinned to Rust 1.95.
git clone https://github.com/AvilaLabs/OpenBNCT.git
cd OpenBNCT
cargo build --release -p openbnct-cli
Use target/release/openbnct in the handbook’s commands, or add target/release to your executable path. Launch the desktop with cargo run --release --bin openbnct-gui.
For current Python bindings, use an activated virtual environment:
python -m pip install maturin
maturin develop --release --manifest-path bindings/python/Cargo.toml
For a local browser build, install Trunk 0.21.14 and the wasm32-unknown-unknown target, then run trunk serve in crates/openbnct-gui.
Optional external tools
The deterministic solver needs no OpenMC installation. Independent project verify comparisons require OpenMC 0.16.0 and the declared processed nuclear-data library, including thermal-scattering tables. NJOY, MCNP and PHITS workflows have separate installation and data requirements. Follow their applicable licenses and the usage reference.
Keep private data and generated studies in ignored cases/, runs/ or outputs/ directories.
Your first study
Explore a result in the browser
Open the workbench and choose Load example bundle in the dose workspace. Inspect the boron, nitrogen, hydrogen and photon components, then the physical total and its normalization.
Use the tri-planar view to locate regions and compare component distributions. A bundled result is a particular recorded calculation; opening it does not solve a new transport problem.
Run a synthetic CT-to-report study
Use a current source-built CLI for this workflow. From a working directory with fresh output names:
openbnct benchmark generate study/
openbnct project init --dicom study --output p001 --target CORE --spacing-mm 8
openbnct project run p001
This generates synthetic NF-BNCT-001 imaging and initializes a demonstration project. Its tissue calibration, beam and boron assumptions are example inputs. It is not a patient study.
The calculation can take several minutes with a release build. Read p001/out/report.md or report.json; per-structure DVH curves are under p001/out/dvh/.
Inspect and revise
The project report lists component means and dose-volume statistics, convergence status, normalization and exact step commands. Check all of these before interpreting a total.
Edit p001/project.toml to change an explicit study assumption. openbnct project status p001 shows its steps; project run resumes unchanged steps and recalculates affected outputs. Preserve a copy when comparing alternatives.
The current project default uses histogram-bin source weighting and transports capture photons separately. Disabling photon transport changes the photon-dose model to local deposition.
Compare independently
With OpenMC 0.16.0 and the declared processed library configured:
openbnct project verify p001 --particles 1e6
The report gains component ratios, statistical uncertainty, gamma results and an explicit verification verdict. A completed run can disagree with the deterministic calculation. See benchmarks before interpreting this result.
Next: read your results, then bring your own inputs.
Read your results
Start with the quantity, units, normalization, spatial frame and convergence status. Then read each physical component and its uncertainty before interpreting totals or weighted biological dose.
Physical components and normalization
The main components are boron, nitrogen, hydrogen and photon dose. Their definitions belong to the declared component profile and response data. In comparisons, check what the hydrogen channel represents and how capture photons are handled.
Per-source-particle results are not delivered Gy. A project report can scale dose using both source strength per second and irradiation time. A rate, per-particle quantity and accumulated dose need distinct interpretation; retain the declared source normalization when exchanging files.
Boron dose also depends on the specified B-10 concentration or distribution. Post-hoc scaling uses a trace-boron approximation; it does not recalculate how a changed absorber distribution modifies neutron transport.
Convergence and verification
A converged iterative solve has met its numerical stopping criterion. Mesh, energy-group, angular, source-model and nuclear-data errors can remain. An allowed unconverged result is provisional and must retain that status.
project verify compares the same project with continuous-energy OpenMC:
| Verdict | Meaning |
|---|---|
AGREES | All evaluated structure-mean total-dose ratios and gamma pass rates meet the declared gates. |
DISAGREES | At least one evaluated gate fails with adequate Monte Carlo precision. |
INCONCLUSIVE | Monte Carlo uncertainty prevents resolving a failing structure’s comparison. |
Input changes make old verification stale. A 15% component agreement observation does not satisfy a 5% total-dose gate automatically; inspect the actual evaluated quantities and thresholds.
Dose-volume and biological results
D95 is the dose reached by at least 95% of the selected region; Vx is the volume meeting the stated dose threshold. Masks, voxel volume and normalization affect these statistics.
Biological dose applies declared effectiveness or response models. Keep its model, validity domain and weighted units distinct from physical dose. TCP/NTCP outputs describe a chosen research model and parameter set.
See biological models, uncertainty and research scope.
Imaging, materials and beams
A transport study needs a grid, material assignment and source. Images and a beam description provide inputs to those declarations; importing a file does not establish their physical suitability.
CT and structures
The project workflow accepts a DICOM CT series with supported structures. The lower-level dicom import-ct path creates a transport grid, HU volume, scaffold case and ROI masks. The import accepts one CT series and at most one RT Structure Set or supported CT-lattice SEG object.
Transport voxels receive volume-averaged HU values from overlapping CT voxels. The grid retains the patient frame and direction cosines. Structure masks are resampled under the declared occupancy rule. Inspect spacing, orientation and structures before transport.
HU-to-material calibration assigns density and composition. The bundled generic calibration is a demonstration input; bind a suitable declared calibration for a research study.
Current source also accepts scalar HU NIfTI with import ct-nifti or project init --ct-nifti. An integer labelmap, label-name map and explicit target can supply structures. These paths preserve the image geometry and write import evidence. Use the CT benchmark for a documented public-data example; its target is synthetic.
Segmented phantoms
An integer NIfTI labelmap plus a label-to-material JSON table can create the same transport contracts:
openbnct import labelmap --nifti phantom.nii --materials materials.json \
--case-output case.json --case-id mylab.phantom.v1 \
--output assignment.json
The scaffold beam is a placeholder. Replace it with the intended source before solving. Supported volume paths also include NRRD and MetaImage; consult the reference for their restrictions.
Beam definition
A beam description declares spectrum bins, weights, port size, direction and source geometry. beam build accepts measured/digitized spectrum tables; beam bind applies a beam to a case. Bin edges must tile consistently. Declare the within-bin spectrum weighting used by the solver.
For MR/PET workflows, register and resample the image onto the case frame before using values for masks or uptake. A registered PET field still needs a declared conversion model.
Complete input schemas and commands: bring your own case and usage reference.
Neutron and photon transport
OpenBNCT’s deterministic solver uses multigroup discrete ordinates, with declared spatial/angular resolution and scattering moments. OpenMC supplies an independent Monte Carlo path. Compare both methods with matched inputs and adequate resolution.
Start with the project workflow
project run orchestrates imaging import, material calibration, beam binding, neutron transport, optional photon transport, boron scaling, metrics and reporting. Current defaults spread histogram bins uniformly per eV and transport capture photons with a separate photon solve.
Inspect [transport] in project.toml: angular order, iteration budget, source weighting, photon policy and the allowed-unconverged setting. A solve that fails to converge requires diagnosis before its dose field is interpreted.
A lower-level neutron example
From the current source checkout:
openbnct sn solve \
--case benchmarks/synthetic/layered-head-phantom/case.json \
--data benchmarks/synthetic/layered-head-phantom/multigroup-data-28g-v5-tsl.json \
--assignment benchmarks/synthetic/layered-head-phantom/assignment.json \
--source-weighting uniform_in_bin --dose dose.json --output flux.json
This produces a neutron flux and its folded dose. The project workflow additionally uses sn photon-solve and sn merge-photon-dose with compatible photon data. A neutron-only folded photon channel can use local capture-energy deposition, which changes the physical comparison.
Compare the same physics
Match geometry, density/composition, source distributions, thermal scattering and dose-response definitions. project verify uses the project’s boron assumptions and reports whether thermal-scattering physics matches.
Group collapse, mesh/angular resolution, void ray effects and Monte Carlo statistics can each cause differences. Increasing iteration count alone does not resolve those errors. Inspect regional and spatial discrepancies alongside a global mean.
Forward/adjoint and variance-reduction tools support additional research workflows. Their exact data requirements and options are in the usage reference. Read benchmarks for the tested regimes.
Boron uptake and timing
The boron component depends on B-10 concentration in the modeled tissue. OpenBNCT supports declared concentration fields, PET-derived estimates and time-varying uptake models. Record the assumptions behind each field.
Concentration maps
A project can apply blood concentration multiplied by tissue:blood ratios for named regions. Region precedence matters when masks overlap. Values in example projects are illustrative placeholders.
Registered PET/SUV images can be converted using a ratio, calibrated-linear or uniform uptake model. These are model-derived B-10 estimates. Inspect image registration, calibration, assay/compound assumptions and the declared uncertainty before comparing dose.
Post-hoc scaling
boron dose applies a concentration field to unit-concentration boron dose under the trace-B-10 approximation. This lets you compare uptake assumptions using an existing transport result.
That approximation assumes the changed boron does not materially change the transport field. For a materially different absorber composition, bind the appropriate materials and rerun transport. High-concentration cases require particular care with this boundary.
Kinetics and irradiation windows
Mono- or biexponential models can be fitted to declared concentration samples. Tissue:blood ratios and washout models support time-integrated component maps and comparisons of irradiation windows under declared organ-dose limits.
Separate an assay’s sample time from its availability time when using retrospective histories. Check whether a time model is interpolation, extrapolation or an assumed curve. A preferred window depends on the dose limits, uptake model and delivery assumptions you supplied.
Cell-level microdosimetry additionally models compartmental localization, cell-to-cell heterogeneity, stochastic captures and charged-particle tracks. Its cell-specific energy/survival outputs belong to that separate research model.
Commands and examples: usage reference, boron examples, and cell-model study.
Biological models
Biological interpretation starts with physical component dose and an explicit model. OpenBNCT retains separate weighted units and the model identity so those results remain distinguishable from absorbed dose.
Choose the question and model
Supported research families include fixed component CBE/RBE weighting, photon-isoeffective models, microdosimetric-kinetic and stochastic-MK models. Fractionation, BED/EQD2, combined-treatment analysis and declared TCP/NTCP/UTCP models support further comparisons.
A model’s parameters, reference radiation, compound, tissue system, endpoint and validity domain determine what its output means. A named model family alone does not supply those details.
Regional weights and overlap
For fixed weighting, each component gets a declared factor, with optional regional overrides. Photon-isoeffect weighting requires photon factors of 1.0. Overlapping region masks require explicit priority where the contract demands it; inspect which model applies to a nested target.
The weighted uncertainty follows the declared correlation assumptions. Components derived from shared transport histories should not be interpreted as independent merely because they occupy separate arrays.
Compare and report
Hold the physical bundle fixed when testing biological model changes. Use model comparisons and sensitivity sweeps to show the effect of parameters. Keep weighted dose and endpoint predictions accompanied by their exact model and assumptions.
Plan optimization’s isoeffective objectives use fixed component weights. Full nonlinear biological evaluation is a separate path; applying it afterward can change the interpretation of an optimized plan.
Parameter evidence can be inspected through the biological evidence library. A literature-derived research model and a passing software fixture do not establish clinical applicability to a particular tissue or patient.
Commands, models and evidence: usage reference and biological conformance cases.
Multi-field research plans
An exposure plan combines dose bundles under declared field weights, normalization and covariance assumptions. Use it to compare research alternatives and inspect how objectives respond to beam selection and weighting.
Bring a plan table
CSV and XLSX exposure tables can be imported and exported:
openbnct plan import --table schedule.xlsx --output plan.json
openbnct plan validate --plan plan.json
openbnct plan export --plan plan.json --output schedule.csv
Read the reported row-level issues. Bind the intended dose bundle for every exposure and keep their geometries and normalization compatible. The desktop Plan workspace displays the table and diagnostics alongside supported optimization controls.
Search alternatives
Research tools rank beam directions using tissue path or adjoint importance, select fields under objectives, and iteratively optimize weights. Spectrum/aperture sweeps and beamlet shaping support additional declared comparisons.
Use the objective values and violated constraints to interpret the selected weights. Check convergence, initial conditions and the supported candidate set. A better objective is conditional on those inputs and on the chosen dose/biology approximation.
Scenario and robustness studies
Named uptake, output and positioning scenarios can be evaluated and used for worst-case penalty optimization. The scenario set needs its own basis; it is not automatically a probability distribution.
Current positioning scenarios shift existing dose fields. They do not re-solve transport through moved anatomy. A fixed-weight biological objective also differs from a full nonlinear biological evaluation.
Study the known-answer scenario optimizer and FiR 1 scenario study. Command contracts are in the usage reference.
Uncertainty and sensitivity
OpenBNCT provides several uncertainty paths. Choose one that matches the quantity and sources you need to assess, and report which categories remain unassessed.
| Path | What it evaluates |
|---|---|
| Statistical sigma in a dose bundle | Available sampling uncertainty from the producing calculation |
| Systematic dose/plan tools | Declared uptake, positioning, component and metric uncertainty |
| Joint ensembles | Named correlated/shared sources applied to realized dose maps, with per-realization metrics |
| Nuclear-data propagation | Declared multigroup covariance propagated to an integrated component response |
| Morris/Sobol screening | Sensitivity of specified outputs to declared input variations |
Joint sources
Current source provides uq joint. Its input declares source identity, scope, distribution, evidence and dispositions for uncovered categories. Shared calibration draws apply across their scope; declared correlation groups are sampled jointly.
Metrics such as D95 are computed on each realized map before summarizing the ensemble. Quantiles of per-voxel fields do not substitute for quantiles of a dose-volume statistic. Optional PK integration applies where the bundle units and declared model support it.
The ensemble is conditional on its supplied distributions, correlations and dose adapters. It does not infer a complete patient uncertainty model from an input file.
Nuclear data and solver effects
uq propagate uses the declared covariance and finite-difference response sensitivities of the discrete solve. It reports response-space variance contributions. Supported ENDF MF33 inputs and multigroup covariance contracts have explicit coverage limits.
Iteration residual, discretization error, material/source mismatch, measurement error and statistical sigma are different quantities. A converged solve with small statistical uncertainty can still have a substantial systematic discrepancy.
Compare recorded validation, then use the uncertainty reference to declare the sources relevant to your research question. Retain unsupported categories in the report.
Prompt-gamma research
OpenBNCT supports research calculations connecting B-10 captures to 478 keV emission, detector response and reconstruction. The workflow separates the transport-derived emission field, detector model and inverse problem.
Forward model
Declare source geometry, detector/aperture acceptance, transport data and calibration. Tools produce emission maps, adjoint detector responses and expected counts under those assumptions. Counts depend on normalization, efficiency and measurement geometry as well as the emission field.
Inverse model
Regularized non-negative reconstruction estimates an emission field from declared observations and responses. Inspect the residual, regularization and spatial resolution. Fitting counts alone does not establish unique localization or a measured boron concentration map.
The BeNEdiCTE geometry study illustrates this boundary: the uncollimated inversion does not localize the sources, and the collimated example still merges its two vial sources.
Time-dependent research
Current source also includes measurement-informed boron and retrospective delivery workflows with explicit calibration, clock, gap and information-availability declarations. Their reduced models and observation assumptions must be assessed for the intended experiment. They do not constitute a commissioned monitoring or machine-control system.
Read the usage reference for the forward/inverse chain and related model contracts. Keep synthetic observations, actual measurements and fitted reconstructions identifiable in a reported study.
Python and NumPy
The openbnct package exposes the authoritative Rust contracts and calculations. It supports verified cases, dose analysis, model evaluation, interchange and a bounded deterministic-solver interface.
Use python -m pip install openbnct for the published package. Build the current source wheel to use later additions; see installation.
Read and analyze a bundle
import openbnct
bundle = openbnct.load_physical_dose_bundle("dose.json")
dose = bundle.physical_total.as_array()
print(dose.shape)
print(dose.mean())
Inspect the bundle’s units and normalization before interpreting the mean. A whole-array mean is not a target statistic; use the appropriate structure mask for regional analysis.
Solve with current source
From a source checkout with current bindings installed:
import openbnct
# Substitute your declared transport-case and compatible multigroup data.
solution = openbnct.sn_solve("case.json", "multigroup-data.json", order=4)
flux = solution.flux.as_array()
physical = solution.dose.physical_total.as_array()
The call releases the GIL and uses the Rust solver. Unconverged solutions raise by default; explicitly allowing them returns provisional output with a warning. The Python interface exposes a subset of CLI solver controls, so use the CLI/project path for the full current photon and source-weighting workflow.
Array conventions
Voxel arrays have C-order shape (nz, ny, nx): array[k, j, i] maps to x-index i, y-index j, z-index k. Flattening preserves x-fastest voxel order. Geometry shape, origin and spacing retain x/y/z order.
Flux adds a leading group axis: (groups, nz, ny, nx), in descending energy-boundary order. A flux JSON carries no grid by itself; bind geometry with with_geometry where needed.
Run the worked example for actual fixture paths, case generation, dose analysis and a tiny solver demonstration. Binding reference.
Import, export and compare
OpenBNCT exchanges explicit component dose and geometry so independent calculations can be compared meaningfully. Preserve normalization, spatial frame, component definitions and available uncertainty when importing another engine’s output.
Supported exchange paths
| Data | Research workflow |
|---|---|
| Component NIfTI | Import/export separate physical components and sigma volumes |
| MCNP | Export a declared deck; import supported meshtal output |
| PHITS | Export a declared deck; import supported component output |
| DICOM RT Dose | Import/resample supported Gy fields or export declared results |
| Static-beam RT Plan | Read/export supported plan summaries and fields |
| CSV/XLSX | Exchange validated exposure plans |
Parser conformance establishes behavior on the committed fixtures. It does not establish real-engine agreement across arbitrary MCNP/PHITS runs.
Compare bundles
compare produces component-wise dose comparisons; gamma evaluates declared dose/distance criteria. Use openbnct compare --help and openbnct gamma --help for your installed version, then consult the worked command reference.
Set the reference explicitly. Match geometry or apply a declared resampling operation; check units, normalization and masks. Monte Carlo sigma can explain a difference’s statistical precision, but cannot remove a systematic modeling difference.
Gamma depends on dose normalization, dose-difference percentage, distance-to-agreement, low-dose cutoff and voxel inclusion. Report those settings with the pass rate. A single gamma percentage can conceal component errors, so retain the component ratios and spatial distributions too.
Keep a research record
Project reports list their inputs and commands. Preserve the project configuration, exact data and result artifacts alongside exported views. Input changes invalidate the old comparison until recalculated.
Contracts and fixtures: schemas and conformance.
Benchmarks and code comparisons
OpenBNCT checks transport calculations against analytic solutions, published numerical problems, independent Monte Carlo and measured/digitized phantom data. Each comparison supports a particular claim under its stated inputs and gates.
What the comparison measures
| Evidence | Question |
|---|---|
| Analytic oracle | Does this modeled case recover a known answer? |
| Canonical transport case | How does the solver behave under declared mesh and angular resolution? |
| Independent-code comparison | Do two methods agree on matched geometry, source, materials and responses? |
| Measured phantom comparison | Does a specific modeled observable match the declared measurement? |
| Parser/model conformance | Does a supported contract produce or reject the expected fixture? |
Convergence and artifact verification are separate from these physical comparisons. A frozen historical result does not promise every later configuration will pass.
Deterministic transport versus OpenMC
The current-source project workflow has a documented synthetic layered-head comparison with continuous-energy OpenMC, matched thermal scattering and transported capture photons. The README records S8 and 5 million histories. Each component column below is the ratio S_N/MC:
| Region | Boron | Hydrogen | Photon |
|---|---|---|---|
| Whole phantom | 0.86 | 0.98 | 0.93 |
| Target | 1.06 | 0.90 | 1.03 |
A ratio of 1 means equal mean dose. A ratio of 0.86 is 14% below the Monte Carlo result; 1.06 is 6% above. These values describe structure means, not every voxel or a gamma pass rate. That fixture has no nitrogen component to grade.
These observations are stated in the current-source README and project report implementation. The earlier layered-head note describes older S4/free-gas and local-photon configurations; its ratios answer a different comparison. It must not be combined with the later matched-physics result.
Source-bin weighting, thermal scattering, component response and photon policy matter. With local capture-photon deposition, the documented photon mean was roughly 3–4 times high. The project photon-transport path changes that model; one component improvement does not qualify all transport cases.
Use project verify on your project rather than borrowing this fixture’s ratios. Its default gates are total-dose ratio within 5% and gamma pass rate at least 95% for evaluated structures, using global 3%/3 mm gamma with a 10% low-dose cutoff. Monte Carlo uncertainty can make the verdict inconclusive. A component within 15% does not automatically pass these stricter, differently defined gates.
Public CT geometry: a separate comparison
The head-and-neck CT benchmark uses a public scan cropped to 206,226 voxels at 4 mm, with an explicitly synthetic research target and illustrative boron assumptions. Its final recorded source build is b46ffb2, with 28 neutron groups, S4/P1, transported photons and 6 million OpenMC histories.
Structure-mean total-dose S_N/MC ratios are 0.982 for brain, 1.003 for BODY and 0.952 for the synthetic target. These are close regional means; they do not establish voxelwise agreement. The recorded overall verdict is INCONCLUSIVE, with eleven structures unresolved under the configured gates. Monte Carlo photon/total voxels were particularly noisy, and BODY’s reported gamma result came from a single evaluated voxel.
Keep the photon policy and build identity with these results. The earlier local-deposition run used a different build and reported photon ratios of 6.03 in brain and 8.10 in the target. Comparing those runs does not isolate one code change. The final run’s single-host timing was also observed with other jobs active, so it is not a controlled speed comparison.
This extends the tested geometry beyond a synthetic phantom. The scan, synthetic target, coarse small structures, illustrative uptake and unresolved statistics retain their stated research scope.
Analytic and canonical evidence
NF-BNCT-003 tests a one-group near-pure B-10 absorber. The recorded boron-dose attenuation slope matches the analytic −0.2308 cm⁻¹ within the declared tolerance. It tests that simple model rather than heterogeneous anatomical accuracy.
Reed and Azmy test source deposition, heterogeneity and discretization against published references. Reed records near-percent regional agreement; Azmy’s quadrant errors are 0.17%, 0.67% and 3.9% under its declared setup.
Kobayashi passes predeclared near-field probes at 5%, while documenting severe deep-field ray effects. The OpenMC multigroup comparison reports off-lobe underfill and large diagonal overshoot. Increasing angular order can sharpen those lobes. Its near-field pass does not establish full-field agreement.
Measured phantom comparisons
The historical three-group FiR 1 cylindrical-water comparison records peak-normalized depth-profile χ² = 6.7 over 12 bins. The PMMA comparison records χ² = 6.0 over 15 bins. Their sigma-weighted passes concern those normalized profiles, digitized from TECDOC-1223 figures.
Peak normalization removes overall amplitude, so a shape pass does not establish absolute dose. Later 28-group variants retain documented differences; the old three-group verdict cannot be transferred to them. Consult the water and PMMA records for the exact configurations.
Other research evidence
NF-BNCT-001’s 600-million-history OpenMC candidate passes its statistical gates; independent reproduction remains required for reference promotion. NF-BNCT-002’s frozen deep-penetration case remains unexecuted in the evidence catalogue.
Scenario optimization, PK timing, microdosimetry, joint uncertainty and prompt-gamma studies have their own models and gates. A known-answer optimizer fixture tests that optimization problem. Prompt-gamma examples also record localization failures. See the validation dossier and benchmark catalogue.
What a competitive comparison can establish
OpenMC comparisons support independent transport assessment on matched research cases. MCNP/PHITS parser fixtures support interchange. The repository does not establish clinical equivalence or broad superiority over commercial treatment-planning systems. A meaningful code comparison needs matching source physics, data, geometry, dose definitions, resolution and acceptance criteria, with statistical uncertainty and runtime conditions reported.
Research scope and qualification
OpenBNCT is experimental research software. It has not been clinically validated, commissioned for a treatment facility or authorized as a medical device. Do not use its output as the sole or primary basis for patient care, treatment delivery or regulatory submissions.
The repository disclaimer records this boundary. The MIT license remains a general software license; qualification describes the state of the software and evidence.
Interpret evidence by its scope
Software tests check implementation behavior. Analytic and canonical problems check specified equations and numerical regimes. Independent-code comparisons assess matched methods and inputs. Measured comparisons assess declared observables with their measurement and modeling limitations.
A passing synthetic demonstration cannot replace facility-specific physics, calibration, commissioning or external reproduction. Model validity, geometry transforms, boron assumptions, nuclear data and dose normalization require independent assessment for a reported study.
Current research boundaries
The deterministic method can show strong ray effects in void/deep-field regimes. Energy condensation and source/data choices can produce substantial model differences. Biological and uptake models remain conditional on their parameter evidence.
Positioning scenarios currently shift dose fields rather than rerunning transport in moved anatomy. Joint uncertainty tools require explicit source coverage and distributions. Prompt-gamma inversions depend on detector acceptance, calibration and identifiability. Individual features can differ across CLI, Python and GUI surfaces.
The validation dossier, qualification record and roadmap track scoped evidence and open work. Keep the exact source version with your study because later code changes do not rewrite frozen benchmark history.
Troubleshooting
| Symptom | Check next |
|---|---|
| A documented command is missing | Installed version; current project/solver additions postdate the packaged release. |
| Project import rejects DICOM | Multiple CT series, unsupported structure objects, geometry or missing calibration. |
| A scaffold case gives unexpected transport | Replace its placeholder source with the intended beam. |
| Solver stops without convergence | Residual history, iteration budget, mesh, source/data consistency and supported solver settings. |
| Report says provisional | An unconverged calculation was explicitly allowed; retain that status. |
| Photon dose disagrees strongly | Local deposition versus transported capture photons and compatible photon data. |
| OpenMC comparison differs | Source-bin weighting, S(α,β), material fractions, response definitions and Monte Carlo sigma. |
| Python image appears transposed | Arrays use (nz, ny, nx); geometry fields use x/y/z order. |
| An apparent dose is tiny or enormous | Per-particle versus rate versus Gy normalization, source strength and irradiation time. |
| Plan import flags a row | Referenced bundle, normalization, geometry and table contract. |
| Verification is stale | Inputs changed; rerun the affected calculation and comparison. |
| Browser cannot execute an external job | External processes and case folders require desktop/CLI. |
The browser needs enabled WebGL2 or WebGPU. Start with the bundled example to distinguish file/import issues from graphics support.
Report bugs with the version/commit, platform, exact command, convergence output and a minimal synthetic input through GitHub Issues. Preserve private imaging and study data locally; use shareable synthetic fixtures in public reports.
Contribute and cite
Start with CONTRIBUTING.md. The Rust crates are authoritative; GUI and Python operations reuse those implementations. Preserve versioned contracts, explicit units and qualification boundaries.
Frozen benchmark and validation artifacts remain immutable. New solver results need separately identified inputs, execution and evaluation evidence. Routine CI verifies the committed catalogue and qualification bindings without regenerating reference data.
Development gates include formatting, Clippy, workspace tests, WebAssembly checks, Python parity and independent DICOM checks. On the repository owner’s workstation, follow its resource limits and process-lifecycle rules in AGENTS.md.
Handbook changes build with mdBook 0.5.4. CI checks chapter membership, source references, local links, navigation, search, themes and mobile layout. See the documentation maintainer guide for publishing.
Cite a study
Use CITATION.cff, also available through GitHub’s Cite this repository control. Include the source commit or release, case/data versions, solver configuration, normalization, biological/boron assumptions and comparison criteria alongside reported results.
OpenBNCT is MIT-licensed. Third-party data and dependencies retain their terms; preserve the associated notices when redistributing artifacts.