pyradbio 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyradbio-0.1.0/.env.example +32 -0
- pyradbio-0.1.0/.gitattributes +4 -0
- pyradbio-0.1.0/.github/workflows/ci.yml +104 -0
- pyradbio-0.1.0/.gitignore +60 -0
- pyradbio-0.1.0/.gitlab-ci.yml +47 -0
- pyradbio-0.1.0/.pre-commit-config.yaml +34 -0
- pyradbio-0.1.0/AGENTS.md +220 -0
- pyradbio-0.1.0/CHANGELOG.md +168 -0
- pyradbio-0.1.0/CITATION.cff +22 -0
- pyradbio-0.1.0/CLAUDE.md +70 -0
- pyradbio-0.1.0/LICENSE +21 -0
- pyradbio-0.1.0/PKG-INFO +263 -0
- pyradbio-0.1.0/README.md +178 -0
- pyradbio-0.1.0/ROADMAP.md +223 -0
- pyradbio-0.1.0/THIRD_PARTY_NOTICES.md +58 -0
- pyradbio-0.1.0/data/stopping/README.md +38 -0
- pyradbio-0.1.0/data/stopping/ahlen1980/PROVENANCE.md +30 -0
- pyradbio-0.1.0/data/stopping/arb1973/PROVENANCE.md +39 -0
- pyradbio-0.1.0/data/stopping/astar/PROVENANCE.md +39 -0
- pyradbio-0.1.0/data/stopping/brandt1982/PROVENANCE.md +27 -0
- pyradbio-0.1.0/data/stopping/estar/PROVENANCE.md +39 -0
- pyradbio-0.1.0/data/stopping/icru49/PROVENANCE.md +58 -0
- pyradbio-0.1.0/data/stopping/icru73/PROVENANCE.md +75 -0
- pyradbio-0.1.0/data/stopping/icru73/README.md +47 -0
- pyradbio-0.1.0/data/stopping/icru90/PROVENANCE.md +49 -0
- pyradbio-0.1.0/data/stopping/mstar/PROVENANCE.md +82 -0
- pyradbio-0.1.0/data/stopping/nist_isotopes/PROVENANCE.md +44 -0
- pyradbio-0.1.0/data/stopping/pdg/PROVENANCE.md +39 -0
- pyradbio-0.1.0/data/stopping/pstar/PROVENANCE.md +51 -0
- pyradbio-0.1.0/docs/architecture.md +105 -0
- pyradbio-0.1.0/docs/parameter_conventions.md +29 -0
- pyradbio-0.1.0/docs/references/IMK_Matsuya2025.md +257 -0
- pyradbio-0.1.0/docs/references/Katz1971.md +166 -0
- pyradbio-0.1.0/docs/references/LEM_III_Elsasser2008.md +75 -0
- pyradbio-0.1.0/docs/references/LEM_II_Elsasser2007.md +259 -0
- pyradbio-0.1.0/docs/references/LEM_IV_Elsasser2010.md +143 -0
- pyradbio-0.1.0/docs/references/LEM_IV_Friedrich2012.md +466 -0
- pyradbio-0.1.0/docs/references/LEM_IV_OPEN_CHOICES.md +402 -0
- pyradbio-0.1.0/docs/references/LEM_I_ScholzKraft.md +351 -0
- pyradbio-0.1.0/docs/references/LEM_TrackStructure_Elsasser2008b.md +82 -0
- pyradbio-0.1.0/docs/references/MCDS_SemenenkoStewart2006.md +80 -0
- pyradbio-0.1.0/docs/references/Microdosimetry.md +243 -0
- pyradbio-0.1.0/docs/references/NanOx.md +241 -0
- pyradbio-0.1.0/docs/references/NorthcliffeSchilling1970.md +115 -0
- pyradbio-0.1.0/docs/references/OSMK_Inaniwa2021_2023.md +257 -0
- pyradbio-0.1.0/docs/references/Phenomenological_RBE_models.md +289 -0
- pyradbio-0.1.0/docs/references/README.md +72 -0
- pyradbio-0.1.0/docs/references/RMF_Carlson2008_Frese2012.md +165 -0
- pyradbio-0.1.0/docs/references/RadPhysBio.md +101 -0
- pyradbio-0.1.0/docs/references/SMK_Inaniwa2018.md +214 -0
- pyradbio-0.1.0/docs/references/StoppingPower.md +249 -0
- pyradbio-0.1.0/docs/references/mMKM_Inaniwa2010.md +50 -0
- pyradbio-0.1.0/docs/references/pide_schema.md +85 -0
- pyradbio-0.1.0/docs/references/pyMKM_API.md +110 -0
- pyradbio-0.1.0/docs/references/rapidLEM_KraemerScholz2006.md +70 -0
- pyradbio-0.1.0/docs/references/survival_repo_notes.md +282 -0
- pyradbio-0.1.0/examples/README.md +112 -0
- pyradbio-0.1.0/examples/dose_protraction_and_bed.py +198 -0
- pyradbio-0.1.0/examples/katz_ion_kill_and_gamma_kill.py +217 -0
- pyradbio-0.1.0/examples/lem1_variants.py +232 -0
- pyradbio-0.1.0/examples/lineal_energy_spectra.py +242 -0
- pyradbio-0.1.0/examples/mcf_mkm_rbe_vs_let.py +116 -0
- pyradbio-0.1.0/examples/mixed_field_parameters.py +181 -0
- pyradbio-0.1.0/examples/mkm_zstar_and_alpha.py +155 -0
- pyradbio-0.1.0/examples/model_comparison_alpha_beta.py +183 -0
- pyradbio-0.1.0/examples/nanox_local_and_global_events.py +248 -0
- pyradbio-0.1.0/examples/osmk_oxygen_effect.py +219 -0
- pyradbio-0.1.0/examples/phenomenological_rbe_models.py +248 -0
- pyradbio-0.1.0/examples/radial_dose_profiles.py +140 -0
- pyradbio-0.1.0/examples/rmf_dsb_and_binary_misrepair.py +223 -0
- pyradbio-0.1.0/examples/smk_nucleus_stochastics.py +172 -0
- pyradbio-0.1.0/examples/survival_and_rbe.py +80 -0
- pyradbio-0.1.0/examples/water_stopping_power.py +64 -0
- pyradbio-0.1.0/pyproject.toml +152 -0
- pyradbio-0.1.0/pyradbio/__init__.py +60 -0
- pyradbio-0.1.0/pyradbio/benchmark/__init__.py +7 -0
- pyradbio-0.1.0/pyradbio/benchmark/cell_identity.py +79 -0
- pyradbio-0.1.0/pyradbio/benchmark/checkpoint.py +604 -0
- pyradbio-0.1.0/pyradbio/benchmark/crosscheck.py +574 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure10_11MeVu_data.csv +21 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure10_11MeVu_modified_lem.csv +52 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure10_11MeVu_original_lem.csv +42 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure10_266.4MeVu_data.csv +11 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure10_266.4MeVu_modified_lem.csv +83 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure10_266.4MeVu_original_lem.csv +50 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure10_4.2MeVu_data.csv +15 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure10_4.2MeVu_modified_lem.csv +102 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure10_4.2MeVu_original_lem.csv +44 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure10_76.9MeVu_data.csv +13 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure10_76.9MeVu_modified_lem.csv +78 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure10_76.9MeVu_original_lem.csv +53 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure11_carbon_data.csv +19 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure11_carbon_modified_lem.csv +85 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure11_carbon_original_lem.csv +33 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure11_helium_data.csv +15 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure11_helium_modified_lem.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure11_helium_original_lem.csv +61 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure12_11MeVu_data.csv +18 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure12_11MeVu_modified_lem.csv +46 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure12_4.2MeVu_data.csv +18 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure12_4.2MeVu_modified_lem.csv +69 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure12_76.9MeVu_data.csv +14 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure12_76.9MeVu_modified_lem.csv +31 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure12_xray_reference.csv +37 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure2_eta.csv +204 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure3a_cluster.csv +54 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure3a_lq_shoulder.csv +23 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure3a_original.csv +48 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure3b_cluster.csv +58 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure3b_lq_shoulder.csv +22 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure3b_original.csv +54 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure4_neon_data.csv +18 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure4_neon_modified.csv +9 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure4_neon_original.csv +11 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure4_oxygen_data.csv +15 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure4_oxygen_modified.csv +41 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure4_oxygen_original.csv +24 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure6_clusters.csv +53 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure6_lem_new.csv +113 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure6_lem_old.csv +23 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure6_radial.csv +109 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure6_radial_clusters.csv +82 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure6_reduced_dt.csv +113 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure7_cluster_h10.csv +72 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure7_cluster_h10_dt11.csv +28 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure7_cluster_h20.csv +69 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure7_cluster_h35.csv +149 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure7_lem_new.csv +48 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure7_lem_old.csv +48 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure8_cho_data.csv +12 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure8_cho_modified_lem.csv +103 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure8_cho_original_lem.csv +87 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure8_v79_data.csv +10 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure8_v79_modified_lem.csv +40 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure8_v79_original_lem.csv +65 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure9_modified_lem_calc.csv +69 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure9_original_lem_calc.csv +37 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2007_figure9_v79_data.csv +11 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2010_figure4a_v79_helium_data_rbealpha.csv +9 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2010_figure4a_v79_helium_model_rbealpha.csv +150 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2010_figure4a_v79_proton_data_rbealpha.csv +15 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2010_figure4a_v79_proton_model_rbealpha.csv +146 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2010_figure4b_hsg_carbon_data_rbe10.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2010_figure4b_hsg_carbon_data_rbealpha.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2010_figure4b_hsg_carbon_model_rbe10.csv +150 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2010_figure4b_hsg_carbon_model_rbealpha.csv +149 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2010_figure4b_hsg_helium_data_rbe10.csv +16 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2010_figure4b_hsg_helium_data_rbealpha.csv +17 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2010_figure4b_hsg_helium_model_rbe10.csv +150 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/elsasser2010_figure4b_hsg_helium_model_rbealpha.csv +148 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/friedrich2012_figure3_v79_carbon_calc_rbe_10.csv +42 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/friedrich2012_figure3_v79_carbon_calc_rbe_alpha.csv +45 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/friedrich2012_figure3_v79_carbon_data_rbe_10.csv +28 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/friedrich2012_figure3_v79_carbon_data_rbe_alpha.csv +27 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/friedrich2012_figure4_hypothetical_carbon_approx_alpha.csv +37 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/friedrich2012_figure4_hypothetical_carbon_approx_beta.csv +40 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/friedrich2012_figure4_hypothetical_carbon_full_simulation_alpha.csv +27 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/friedrich2012_figure4_hypothetical_carbon_full_simulation_beta.csv +107 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2018_fig4a_z_domain.csv +1403 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2018_fig4b_z_star_domain.csv +1403 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2018_fig4c_z_nucleus.csv +1403 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2018_survival.csv +2402 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig5_hsg_C_exp_0mmHg.csv +22 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig5_hsg_C_osmk_0mmHg.csv +87 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig5_hsg_He_exp_0mmHg.csv +9 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig5_hsg_He_osmk_0mmHg.csv +67 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig5_hsg_Ne_exp_0mmHg.csv +22 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig5_hsg_Ne_osmk_0mmHg.csv +91 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig6_v79_C_exp_0mmHg.csv +23 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig6_v79_C_osmk_0mmHg.csv +85 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig6_v79_He_exp_0mmHg.csv +22 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig6_v79_He_osmk_0mmHg.csv +65 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig6_v79_Ne_exp_0mmHg.csv +16 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig6_v79_Ne_osmk_0mmHg.csv +68 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_C_exp_0mmHg.csv +8 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_C_exp_15p2mmHg.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_C_exp_1p14mmHg.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_C_exp_3p8mmHg.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_C_osmk_0mmHg.csv +39 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_C_osmk_15p2mmHg.csv +38 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_C_osmk_1p14mmHg.csv +39 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_C_osmk_3p8mmHg.csv +37 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_N_exp_0mmHg.csv +4 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_N_osmk_0mmHg.csv +32 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_O_exp_0mmHg.csv +4 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_O_osmk_0mmHg.csv +48 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_Si_exp_0mmHg.csv +4 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_Si_exp_15p2mmHg.csv +4 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_Si_exp_3p8mmHg.csv +4 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_Si_osmk_0mmHg.csv +61 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_Si_osmk_15p2mmHg.csv +24 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/inaniwa2021_fig7_cho_Si_osmk_3p8mmHg.csv +29 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/matsuya2025_fig2_survival.csv +323 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/matsuya2025_fig4_micronuclei.csv +319 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/matsuya2025_fig7_dose_rate.csv +199 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure1_carbon_approx.csv +22 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure1_carbon_exact.csv +21 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure1_protons_approx.csv +25 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure1_protons_exact.csv +26 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure2_carbon_exact_1MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure2_carbon_exact_400MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure2_carbon_exact_50MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure2_carbon_exact_8MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure2_protons_exact_1MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure2_protons_exact_200MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure2_protons_exact_50MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure2_protons_exact_8MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure3_carbon_approx.csv +17 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure3_carbon_exact.csv +16 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure3_protons_approx.csv +19 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure3_protons_exact.csv +21 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_carbon_approx_1MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_carbon_approx_200MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_carbon_approx_50MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_carbon_approx_8MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_carbon_exact_1MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_carbon_exact_200MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_carbon_exact_50MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_carbon_exact_8MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_protons_approx_1MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_protons_approx_200MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_protons_approx_50MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_protons_approx_8MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_protons_exact_1MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_protons_exact_200MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_protons_exact_50MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure4_protons_exact_8MeVu.csv +6 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_carbon_approx_1MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_carbon_approx_400MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_carbon_approx_50MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_carbon_approx_8MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_carbon_exact_1MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_carbon_exact_400MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_carbon_exact_50MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_carbon_exact_8MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_protons_approx_1MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_protons_approx_200MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_protons_approx_50MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_protons_approx_8MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_protons_exact_1MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_protons_exact_200MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_protons_exact_50MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz1997_figure5_protons_exact_8MeVu.csv +20 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure2_argon_data.csv +13 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure2_carbon_data.csv +11 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure2_curve1_calc.csv +44 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure2_curve2_calc.csv +37 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure2_curve3_calc.csv +44 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure2_curve4_calc.csv +15 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure2_curve5_calc.csv +14 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure2_curve6_calc.csv +15 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure2_helium_data.csv +10 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure2_krypton_data.csv +7 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure2_neon_data.csv +10 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure2_uranium_data.csv +13 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure2_xenon_data.csv +9 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure3_argon_calc.csv +49 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure3_argon_data.csv +13 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure3_carbon_calc.csv +52 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure3_carbon_data.csv +12 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure3_uranium_calc.csv +192 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure3_uranium_data.csv +17 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure4_carbon_calc_s0p01.csv +18 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure4_carbon_calc_s0p2.csv +18 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure4_carbon_calc_s0p8.csv +21 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure4_helium_calc_s0p01.csv +29 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure4_helium_calc_s0p2.csv +30 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure4_helium_calc_s0p8.csv +45 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure4_proton_calc_s0p01.csv +53 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure4_proton_calc_s0p2.csv +51 -0
- pyradbio-0.1.0/pyradbio/benchmark/data/scholz_kraft1996_figure4_proton_calc_s0p8.csv +63 -0
- pyradbio-0.1.0/pyradbio/benchmark/dataset.py +395 -0
- pyradbio-0.1.0/pyradbio/benchmark/elsasser2007.py +739 -0
- pyradbio-0.1.0/pyradbio/benchmark/elsasser2008.py +616 -0
- pyradbio-0.1.0/pyradbio/benchmark/elsasser2008b.py +173 -0
- pyradbio-0.1.0/pyradbio/benchmark/elsasser2010.py +270 -0
- pyradbio-0.1.0/pyradbio/benchmark/friedrich2012.py +523 -0
- pyradbio-0.1.0/pyradbio/benchmark/harness.py +1044 -0
- pyradbio-0.1.0/pyradbio/benchmark/hartzell2025.py +28 -0
- pyradbio-0.1.0/pyradbio/benchmark/inaniwa2018.py +478 -0
- pyradbio-0.1.0/pyradbio/benchmark/inaniwa2021.py +538 -0
- pyradbio-0.1.0/pyradbio/benchmark/manganaro2018.py +476 -0
- pyradbio-0.1.0/pyradbio/benchmark/matsuya2025.py +779 -0
- pyradbio-0.1.0/pyradbio/benchmark/metrics.py +264 -0
- pyradbio-0.1.0/pyradbio/benchmark/pide.py +395 -0
- pyradbio-0.1.0/pyradbio/benchmark/radphysbio.py +791 -0
- pyradbio-0.1.0/pyradbio/benchmark/reference_tables.py +575 -0
- pyradbio-0.1.0/pyradbio/benchmark/report.py +181 -0
- pyradbio-0.1.0/pyradbio/benchmark/sato2012.py +171 -0
- pyradbio-0.1.0/pyradbio/benchmark/scholz1997.py +724 -0
- pyradbio-0.1.0/pyradbio/benchmark/scholz_kraft1996.py +1270 -0
- pyradbio-0.1.0/pyradbio/benchmark/stopping.py +125 -0
- pyradbio-0.1.0/pyradbio/benchmark/sweeps.py +290 -0
- pyradbio-0.1.0/pyradbio/cli.py +453 -0
- pyradbio-0.1.0/pyradbio/core/__init__.py +88 -0
- pyradbio-0.1.0/pyradbio/core/cell.py +78 -0
- pyradbio-0.1.0/pyradbio/core/chromatin.py +147 -0
- pyradbio-0.1.0/pyradbio/core/constants.py +78 -0
- pyradbio-0.1.0/pyradbio/core/elements.py +64 -0
- pyradbio-0.1.0/pyradbio/core/lq.py +370 -0
- pyradbio-0.1.0/pyradbio/core/mixing.py +354 -0
- pyradbio-0.1.0/pyradbio/core/oxygen.py +133 -0
- pyradbio-0.1.0/pyradbio/core/photon.py +107 -0
- pyradbio-0.1.0/pyradbio/core/protraction.py +350 -0
- pyradbio-0.1.0/pyradbio/core/radiation.py +148 -0
- pyradbio-0.1.0/pyradbio/data/__init__.py +1 -0
- pyradbio-0.1.0/pyradbio/data/reference_parameters.py +24 -0
- pyradbio-0.1.0/pyradbio/datasets.py +172 -0
- pyradbio-0.1.0/pyradbio/micro/__init__.py +81 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_carbon_AMF_100MeVu.csv +35 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_carbon_AMF_10MeVu.csv +42 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_carbon_AMF_1MeVu.csv +42 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_carbon_nBio_100MeVu.csv +33 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_carbon_nBio_10MeVu.csv +47 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_carbon_nBio_1MeVu.csv +36 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_helium_AMF_100MeVu.csv +25 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_helium_AMF_10MeVu.csv +27 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_helium_AMF_1MeVu.csv +36 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_helium_nBio_100MeVu.csv +44 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_helium_nBio_10MeVu.csv +25 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_helium_nBio_1MeVu.csv +36 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_hydrogen_AMF_100MeVu.csv +19 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_hydrogen_AMF_10MeVu.csv +21 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_hydrogen_AMF_1MeVu.csv +24 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_hydrogen_nBio_100MeVu.csv +23 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_hydrogen_nBio_10MeVu.csv +28 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_hydrogen_nBio_1MeVu.csv +28 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_lithium_AMF_100MeVu.csv +29 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_lithium_AMF_10MeVu.csv +40 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_lithium_AMF_1MeVu.csv +35 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_lithium_nBio_100MeVu.csv +40 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_lithium_nBio_10MeVu.csv +34 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_lithium_nBio_1MeVu.csv +29 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_neon_AMF_100MeVu.csv +48 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_neon_AMF_10MeVu.csv +52 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_neon_AMF_1MeVu.csv +36 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_neon_nBio_100MeVu.csv +45 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_neon_nBio_10MeVu.csv +56 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_neon_nBio_1MeVu.csv +38 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_oxygen_AMF_100MeVu.csv +46 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_oxygen_AMF_10MeVu.csv +44 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_oxygen_AMF_1MeVu.csv +42 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_oxygen_nBio_100MeVu.csv +38 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_oxygen_nBio_10MeVu.csv +57 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure4_oxygen_nBio_1MeVu.csv +40 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure7_carbon_AMF_rD0p0015um.csv +57 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure7_carbon_AMF_rD0p015um.csv +47 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure7_carbon_AMF_rD0p05um.csv +23 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure7_carbon_AMF_rD0p3um.csv +20 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure7_carbon_AMF_rD0p5um.csv +36 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure7_carbon_nBio_rD0p0015um.csv +57 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure7_carbon_nBio_rD0p015um.csv +52 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure7_carbon_nBio_rD0p05um.csv +51 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure7_carbon_nBio_rD0p3um.csv +26 -0
- pyradbio-0.1.0/pyradbio/micro/data/hartzell2025_figure7_carbon_nBio_rD0p5um.csv +123 -0
- pyradbio-0.1.0/pyradbio/micro/hartzell2025.py +206 -0
- pyradbio-0.1.0/pyradbio/micro/impact_parameter.py +321 -0
- pyradbio-0.1.0/pyradbio/micro/library.py +173 -0
- pyradbio-0.1.0/pyradbio/micro/lineal_energy.py +1826 -0
- pyradbio-0.1.0/pyradbio/micro/mcds.py +188 -0
- pyradbio-0.1.0/pyradbio/micro/multi_event.py +257 -0
- pyradbio-0.1.0/pyradbio/micro/sato.py +239 -0
- pyradbio-0.1.0/pyradbio/micro/sato_coefficients.py +161 -0
- pyradbio-0.1.0/pyradbio/models/__init__.py +9 -0
- pyradbio-0.1.0/pyradbio/models/base.py +406 -0
- pyradbio-0.1.0/pyradbio/models/katz/__init__.py +20 -0
- pyradbio-0.1.0/pyradbio/models/katz/model.py +648 -0
- pyradbio-0.1.0/pyradbio/models/lem/__init__.py +5 -0
- pyradbio-0.1.0/pyradbio/models/lem/_discrete.py +286 -0
- pyradbio-0.1.0/pyradbio/models/lem/_intertrack_kernel.py +916 -0
- pyradbio-0.1.0/pyradbio/models/lem/_lem4_kernel.py +311 -0
- pyradbio-0.1.0/pyradbio/models/lem/_localdose.py +604 -0
- pyradbio-0.1.0/pyradbio/models/lem/_localdose_kernel.py +146 -0
- pyradbio-0.1.0/pyradbio/models/lem/_mc_kernel.py +782 -0
- pyradbio-0.1.0/pyradbio/models/lem/base.py +2458 -0
- pyradbio-0.1.0/pyradbio/models/lem/engine.py +21 -0
- pyradbio-0.1.0/pyradbio/models/lem/lem1.py +627 -0
- pyradbio-0.1.0/pyradbio/models/lem/lem2.py +477 -0
- pyradbio-0.1.0/pyradbio/models/lem/lem3.py +44 -0
- pyradbio-0.1.0/pyradbio/models/lem/lem4.py +2679 -0
- pyradbio-0.1.0/pyradbio/models/mkm/__init__.py +65 -0
- pyradbio-0.1.0/pyradbio/models/mkm/base.py +104 -0
- pyradbio-0.1.0/pyradbio/models/mkm/imk.py +424 -0
- pyradbio-0.1.0/pyradbio/models/mkm/model.py +174 -0
- pyradbio-0.1.0/pyradbio/models/mkm/native_backend.py +137 -0
- pyradbio-0.1.0/pyradbio/models/mkm/osmk.py +557 -0
- pyradbio-0.1.0/pyradbio/models/mkm/pymkm_backend.py +365 -0
- pyradbio-0.1.0/pyradbio/models/mkm/spectrum_models.py +1723 -0
- pyradbio-0.1.0/pyradbio/models/nanox/__init__.py +58 -0
- pyradbio-0.1.0/pyradbio/models/nanox/base.py +61 -0
- pyradbio-0.1.0/pyradbio/models/nanox/ellf.py +228 -0
- pyradbio-0.1.0/pyradbio/models/nanox/model.py +647 -0
- pyradbio-0.1.0/pyradbio/models/phenomenological/__init__.py +69 -0
- pyradbio-0.1.0/pyradbio/models/phenomenological/base.py +323 -0
- pyradbio-0.1.0/pyradbio/models/phenomenological/carabe.py +79 -0
- pyradbio-0.1.0/pyradbio/models/phenomenological/chen.py +90 -0
- pyradbio-0.1.0/pyradbio/models/phenomenological/frese.py +112 -0
- pyradbio-0.1.0/pyradbio/models/phenomenological/jones.py +120 -0
- pyradbio-0.1.0/pyradbio/models/phenomenological/mairani.py +65 -0
- pyradbio-0.1.0/pyradbio/models/phenomenological/mcnamara.py +58 -0
- pyradbio-0.1.0/pyradbio/models/phenomenological/peeler.py +85 -0
- pyradbio-0.1.0/pyradbio/models/phenomenological/rorvik.py +62 -0
- pyradbio-0.1.0/pyradbio/models/phenomenological/tilly.py +104 -0
- pyradbio-0.1.0/pyradbio/models/phenomenological/unkelbach.py +72 -0
- pyradbio-0.1.0/pyradbio/models/phenomenological/wedenberg.py +60 -0
- pyradbio-0.1.0/pyradbio/models/phenomenological/wilkens.py +82 -0
- pyradbio-0.1.0/pyradbio/models/rmf/__init__.py +32 -0
- pyradbio-0.1.0/pyradbio/models/rmf/model.py +372 -0
- pyradbio-0.1.0/pyradbio/plotting.py +111 -0
- pyradbio-0.1.0/pyradbio/tables/__init__.py +21 -0
- pyradbio-0.1.0/pyradbio/tables/alpha_beta.py +142 -0
- pyradbio-0.1.0/pyradbio/tables/io.py +190 -0
- pyradbio-0.1.0/pyradbio/tables/zstar.py +90 -0
- pyradbio-0.1.0/pyradbio/track/__init__.py +1 -0
- pyradbio-0.1.0/pyradbio/track/base.py +32 -0
- pyradbio-0.1.0/pyradbio/track/data/northcliffe_schilling1970_water.csv +3939 -0
- pyradbio-0.1.0/pyradbio/track/kiefer_chatterjee.py +160 -0
- pyradbio-0.1.0/pyradbio/track/northcliffe_schilling.py +185 -0
- pyradbio-0.1.0/pyradbio/track/scholz_kraft.py +277 -0
- pyradbio-0.1.0/pyradbio/track/srim.py +201 -0
- pyradbio-0.1.0/pyradbio/track/stopping/__init__.py +82 -0
- pyradbio-0.1.0/pyradbio/track/stopping/_tabulated.py +187 -0
- pyradbio-0.1.0/pyradbio/track/stopping/barkas.py +164 -0
- pyradbio-0.1.0/pyradbio/track/stopping/base.py +315 -0
- pyradbio-0.1.0/pyradbio/track/stopping/bethe.py +524 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/ahlen1980_cos_chi.csv +208 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/astar_water_liquid.csv +313 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/barkas_arb1973.csv +109 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/brandt1982_ionization.csv +129 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/density_effect_water_liquid.csv +437 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/icru49_empirical_water.csv +273 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/icru49_reduced_nuclear.csv +658 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/icru73_2005_water_liquid.csv +3741 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/icru73_2009_water_liquid.csv +3741 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/icru90_water_liquid.csv +1019 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/mstar_c_water_liquid.csv +5341 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/mstar_d_water_liquid.csv +5341 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/nist_isotope_masses.csv +2976 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/pstar_water_liquid.csv +363 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/shell_corrections_water.csv +143 -0
- pyradbio-0.1.0/pyradbio/track/stopping/data/sternheimer_water_liquid.csv +9 -0
- pyradbio-0.1.0/pyradbio/track/stopping/effective_charge.py +231 -0
- pyradbio-0.1.0/pyradbio/track/stopping/grid.py +344 -0
- pyradbio-0.1.0/pyradbio/track/stopping/higher_order.py +194 -0
- pyradbio-0.1.0/pyradbio/track/stopping/hubert.py +125 -0
- pyradbio-0.1.0/pyradbio/track/stopping/icru.py +133 -0
- pyradbio-0.1.0/pyradbio/track/stopping/icru49_empirical.py +77 -0
- pyradbio-0.1.0/pyradbio/track/stopping/icru90_procedure.py +377 -0
- pyradbio-0.1.0/pyradbio/track/stopping/masses.py +116 -0
- pyradbio-0.1.0/pyradbio/track/stopping/mstar/__init__.py +198 -0
- pyradbio-0.1.0/pyradbio/track/stopping/mstar/database.py +92 -0
- pyradbio-0.1.0/pyradbio/track/stopping/mstar/paul.py +212 -0
- pyradbio-0.1.0/pyradbio/track/stopping/mstar/spline.py +62 -0
- pyradbio-0.1.0/pyradbio/track/stopping/nuclear.py +234 -0
- pyradbio-0.1.0/pyradbio/track/stopping/shell.py +418 -0
- pyradbio-0.1.0/pyradbio/track/stopping/xstar.py +273 -0
- pyradbio-0.1.0/pyradbio/track/stopping_power.py +686 -0
- pyradbio-0.1.0/scripts/README.md +48 -0
- pyradbio-0.1.0/scripts/lem1_mc_reference.py +776 -0
- pyradbio-0.1.0/scripts/lem4_friedrich2012_mc.py +326 -0
- pyradbio-0.1.0/scripts/lem_mc_vs_survival.py +240 -0
- pyradbio-0.1.0/scripts/stopping/build_tables.py +734 -0
- pyradbio-0.1.0/scripts/stopping/fetch_sources.py +881 -0
- pyradbio-0.1.0/scripts/stopping/mstar_reference.py +135 -0
- pyradbio-0.1.0/scripts/survival_paired_mc.py +669 -0
- pyradbio-0.1.0/tests/__init__.py +0 -0
- pyradbio-0.1.0/tests/benchmark/__init__.py +0 -0
- pyradbio-0.1.0/tests/benchmark/fixtures/README.md +16 -0
- pyradbio-0.1.0/tests/benchmark/fixtures/make_synthetic_pide.py +65 -0
- pyradbio-0.1.0/tests/benchmark/fixtures/radphysbio_excerpt.csv +133 -0
- pyradbio-0.1.0/tests/benchmark/fixtures/synthetic_pide.xlsx +0 -0
- pyradbio-0.1.0/tests/benchmark/test_checkpoint.py +1070 -0
- pyradbio-0.1.0/tests/benchmark/test_cli_benchmark.py +189 -0
- pyradbio-0.1.0/tests/benchmark/test_crosscheck.py +409 -0
- pyradbio-0.1.0/tests/benchmark/test_dataset.py +138 -0
- pyradbio-0.1.0/tests/benchmark/test_elsasser2007.py +722 -0
- pyradbio-0.1.0/tests/benchmark/test_elsasser2008.py +204 -0
- pyradbio-0.1.0/tests/benchmark/test_elsasser2008b.py +154 -0
- pyradbio-0.1.0/tests/benchmark/test_elsasser2010.py +154 -0
- pyradbio-0.1.0/tests/benchmark/test_friedrich2012.py +241 -0
- pyradbio-0.1.0/tests/benchmark/test_harness.py +305 -0
- pyradbio-0.1.0/tests/benchmark/test_harness_extensions.py +239 -0
- pyradbio-0.1.0/tests/benchmark/test_harness_registry.py +394 -0
- pyradbio-0.1.0/tests/benchmark/test_hartzell2025.py +66 -0
- pyradbio-0.1.0/tests/benchmark/test_inaniwa2018.py +422 -0
- pyradbio-0.1.0/tests/benchmark/test_inaniwa2021.py +493 -0
- pyradbio-0.1.0/tests/benchmark/test_lem1_mc_fingerprints.py +305 -0
- pyradbio-0.1.0/tests/benchmark/test_manganaro2018.py +232 -0
- pyradbio-0.1.0/tests/benchmark/test_matsuya2025.py +767 -0
- pyradbio-0.1.0/tests/benchmark/test_metrics.py +90 -0
- pyradbio-0.1.0/tests/benchmark/test_metrics_summaries.py +306 -0
- pyradbio-0.1.0/tests/benchmark/test_paper_inputs_methods.py +262 -0
- pyradbio-0.1.0/tests/benchmark/test_pide_loader.py +195 -0
- pyradbio-0.1.0/tests/benchmark/test_radphysbio.py +413 -0
- pyradbio-0.1.0/tests/benchmark/test_reference_tables.py +590 -0
- pyradbio-0.1.0/tests/benchmark/test_report.py +103 -0
- pyradbio-0.1.0/tests/benchmark/test_sato2012.py +150 -0
- pyradbio-0.1.0/tests/benchmark/test_scholz1997.py +389 -0
- pyradbio-0.1.0/tests/benchmark/test_scholz_kraft1996.py +331 -0
- pyradbio-0.1.0/tests/benchmark/test_scholz_kraft1996_mc.py +282 -0
- pyradbio-0.1.0/tests/benchmark/test_survival_cache_fingerprint.py +58 -0
- pyradbio-0.1.0/tests/benchmark/test_sweeps.py +519 -0
- pyradbio-0.1.0/tests/conftest.py +79 -0
- pyradbio-0.1.0/tests/core/__init__.py +0 -0
- pyradbio-0.1.0/tests/core/test_cell.py +53 -0
- pyradbio-0.1.0/tests/core/test_chromatin.py +107 -0
- pyradbio-0.1.0/tests/core/test_lq.py +268 -0
- pyradbio-0.1.0/tests/core/test_lq_fits.py +476 -0
- pyradbio-0.1.0/tests/core/test_mixing.py +272 -0
- pyradbio-0.1.0/tests/core/test_oxygen.py +123 -0
- pyradbio-0.1.0/tests/core/test_photon.py +90 -0
- pyradbio-0.1.0/tests/core/test_protraction.py +490 -0
- pyradbio-0.1.0/tests/core/test_radiation.py +126 -0
- pyradbio-0.1.0/tests/examples/__init__.py +0 -0
- pyradbio-0.1.0/tests/examples/_harness.py +136 -0
- pyradbio-0.1.0/tests/examples/test_examples_imports.py +72 -0
- pyradbio-0.1.0/tests/examples/test_examples_smoke.py +68 -0
- pyradbio-0.1.0/tests/examples/test_harness.py +155 -0
- pyradbio-0.1.0/tests/micro/__init__.py +0 -0
- pyradbio-0.1.0/tests/micro/fixtures/1mm_synthetic/Proton_10.500000_MeV.csv +7 -0
- pyradbio-0.1.0/tests/micro/fixtures/1mm_synthetic/Proton_100.500000_MeV.csv +7 -0
- pyradbio-0.1.0/tests/micro/test_impact_parameter.py +116 -0
- pyradbio-0.1.0/tests/micro/test_library.py +113 -0
- pyradbio-0.1.0/tests/micro/test_lineal_energy.py +893 -0
- pyradbio-0.1.0/tests/micro/test_mcds.py +220 -0
- pyradbio-0.1.0/tests/micro/test_multi_event.py +297 -0
- pyradbio-0.1.0/tests/micro/test_sato_engine.py +139 -0
- pyradbio-0.1.0/tests/micro/test_spectrum_moments.py +84 -0
- pyradbio-0.1.0/tests/models/__init__.py +0 -0
- pyradbio-0.1.0/tests/models/lem/__init__.py +0 -0
- pyradbio-0.1.0/tests/models/lem/test_base.py +118 -0
- pyradbio-0.1.0/tests/models/lem/test_lem1.py +1695 -0
- pyradbio-0.1.0/tests/models/lem/test_lem2.py +393 -0
- pyradbio-0.1.0/tests/models/lem/test_lem3.py +278 -0
- pyradbio-0.1.0/tests/models/lem/test_lem4.py +1367 -0
- pyradbio-0.1.0/tests/models/lem/test_lem4_discrete.py +465 -0
- pyradbio-0.1.0/tests/models/lem/test_lem4_intertrack.py +748 -0
- pyradbio-0.1.0/tests/models/lem/test_lem4_localdose.py +1451 -0
- pyradbio-0.1.0/tests/models/lem/test_lem4_mc_fingerprint.py +204 -0
- pyradbio-0.1.0/tests/models/lem/test_mc_eta_kernel.py +151 -0
- pyradbio-0.1.0/tests/models/lem/test_mc_primitives.py +250 -0
- pyradbio-0.1.0/tests/models/lem/test_shared_beta_models.py +137 -0
- pyradbio-0.1.0/tests/models/test_binned_spectrum_mixing.py +296 -0
- pyradbio-0.1.0/tests/models/test_imk.py +399 -0
- pyradbio-0.1.0/tests/models/test_katz.py +428 -0
- pyradbio-0.1.0/tests/models/test_lem_impact_parameter_crosscheck.py +91 -0
- pyradbio-0.1.0/tests/models/test_mkm_adapter.py +350 -0
- pyradbio-0.1.0/tests/models/test_model_interface.py +317 -0
- pyradbio-0.1.0/tests/models/test_model_refactor_regressions.py +182 -0
- pyradbio-0.1.0/tests/models/test_nanox.py +885 -0
- pyradbio-0.1.0/tests/models/test_native_mkm_backend.py +185 -0
- pyradbio-0.1.0/tests/models/test_osmk.py +463 -0
- pyradbio-0.1.0/tests/models/test_phenomenological_rbe.py +823 -0
- pyradbio-0.1.0/tests/models/test_phenomenological_rorvik_group.py +386 -0
- pyradbio-0.1.0/tests/models/test_rmf.py +427 -0
- pyradbio-0.1.0/tests/models/test_smk.py +888 -0
- pyradbio-0.1.0/tests/models/test_spectrum_microdosimetry_cache.py +701 -0
- pyradbio-0.1.0/tests/models/test_spectrum_models.py +380 -0
- pyradbio-0.1.0/tests/scripts/__init__.py +0 -0
- pyradbio-0.1.0/tests/scripts/test_build_stopping_tables.py +93 -0
- pyradbio-0.1.0/tests/scripts/test_fetch_stopping_sources.py +329 -0
- pyradbio-0.1.0/tests/scripts/test_scripts_cli.py +197 -0
- pyradbio-0.1.0/tests/tables/__init__.py +0 -0
- pyradbio-0.1.0/tests/tables/test_alpha_beta.py +105 -0
- pyradbio-0.1.0/tests/tables/test_cli.py +332 -0
- pyradbio-0.1.0/tests/tables/test_io.py +53 -0
- pyradbio-0.1.0/tests/tables/test_pymkm_txt.py +64 -0
- pyradbio-0.1.0/tests/tables/test_zstar_build.py +99 -0
- pyradbio-0.1.0/tests/test_data_attribution.py +25 -0
- pyradbio-0.1.0/tests/test_import_layers.py +116 -0
- pyradbio-0.1.0/tests/test_plotting.py +110 -0
- pyradbio-0.1.0/tests/test_repository_hygiene.py +129 -0
- pyradbio-0.1.0/tests/test_version.py +20 -0
- pyradbio-0.1.0/tests/track/__init__.py +0 -0
- pyradbio-0.1.0/tests/track/stopping/__init__.py +0 -0
- pyradbio-0.1.0/tests/track/stopping/conftest.py +38 -0
- pyradbio-0.1.0/tests/track/stopping/test_barkas.py +111 -0
- pyradbio-0.1.0/tests/track/stopping/test_base.py +228 -0
- pyradbio-0.1.0/tests/track/stopping/test_bethe.py +514 -0
- pyradbio-0.1.0/tests/track/stopping/test_effective_charge.py +179 -0
- pyradbio-0.1.0/tests/track/stopping/test_grid.py +310 -0
- pyradbio-0.1.0/tests/track/stopping/test_higher_order.py +219 -0
- pyradbio-0.1.0/tests/track/stopping/test_hubert.py +166 -0
- pyradbio-0.1.0/tests/track/stopping/test_icru.py +274 -0
- pyradbio-0.1.0/tests/track/stopping/test_icru90_procedure.py +422 -0
- pyradbio-0.1.0/tests/track/stopping/test_masses.py +87 -0
- pyradbio-0.1.0/tests/track/stopping/test_mstar.py +361 -0
- pyradbio-0.1.0/tests/track/stopping/test_nuclear.py +209 -0
- pyradbio-0.1.0/tests/track/stopping/test_raw_sources.py +61 -0
- pyradbio-0.1.0/tests/track/stopping/test_shell.py +250 -0
- pyradbio-0.1.0/tests/track/stopping/test_shipped_anchors.py +118 -0
- pyradbio-0.1.0/tests/track/stopping/test_xstar.py +309 -0
- pyradbio-0.1.0/tests/track/test_kiefer_chatterjee.py +230 -0
- pyradbio-0.1.0/tests/track/test_northcliffe_schilling.py +304 -0
- pyradbio-0.1.0/tests/track/test_scholz_kraft.py +221 -0
- pyradbio-0.1.0/tests/track/test_srim.py +118 -0
- pyradbio-0.1.0/tests/track/test_stopping_power.py +246 -0
- pyradbio-0.1.0/tests/track/test_stopping_power_describe.py +573 -0
- pyradbio-0.1.0/tests/validation/__init__.py +0 -0
- pyradbio-0.1.0/tests/validation/test_common.py +225 -0
- pyradbio-0.1.0/tests/validation/test_elsasser2007_lem2.py +29 -0
- pyradbio-0.1.0/tests/validation/test_pide_quick.py +60 -0
- pyradbio-0.1.0/tests/validation/test_reference_scripts.py +183 -0
- pyradbio-0.1.0/tests/validation/test_scholz_lem1.py +97 -0
- pyradbio-0.1.0/tests/validation/test_validation_smoke.py +39 -0
- pyradbio-0.1.0/validation/README.md +86 -0
- pyradbio-0.1.0/validation/_common.py +208 -0
- pyradbio-0.1.0/validation/data/.gitkeep +0 -0
- pyradbio-0.1.0/validation/data/lem4_friedrich2012_mc.csv +107 -0
- pyradbio-0.1.0/validation/data/mc_results.csv +43 -0
- pyradbio-0.1.0/validation/data/sk1996_mc_observables.csv +45 -0
- pyradbio-0.1.0/validation/data/sk1997_z_slope.csv +100 -0
- pyradbio-0.1.0/validation/data/survival_our_mc.json +997 -0
- pyradbio-0.1.0/validation/elsasser2007_lem2.py +1313 -0
- pyradbio-0.1.0/validation/elsasser2008_lem3.py +221 -0
- pyradbio-0.1.0/validation/imk_matsuya2025.py +582 -0
- pyradbio-0.1.0/validation/lem4_elsasser2010_friedrich2012.py +836 -0
- pyradbio-0.1.0/validation/lineal_energy_decunha.py +178 -0
- pyradbio-0.1.0/validation/lineal_energy_hartzell2025.py +232 -0
- pyradbio-0.1.0/validation/nanox_alcocer_avila2023.py +108 -0
- pyradbio-0.1.0/validation/osmk_inaniwa2021.py +413 -0
- pyradbio-0.1.0/validation/pide_pfuhl2022.py +314 -0
- pyradbio-0.1.0/validation/pymkm_crosscheck.py +138 -0
- pyradbio-0.1.0/validation/scholz1997_lem1.py +710 -0
- pyradbio-0.1.0/validation/scholz_kraft1996_lem1.py +676 -0
- pyradbio-0.1.0/validation/smk_inaniwa2018.py +258 -0
- pyradbio-0.1.0/validation/smk_model_paths.py +383 -0
- pyradbio-0.1.0/validation/survival_code_lem.py +723 -0
- pyradbio-0.1.0/validation/survival_code_mmkm.py +122 -0
- pyradbio-0.1.0/validation/trip98_lem1_rbe.py +225 -0
- pyradbio-0.1.0/validation/trip98_lem4_rbe.py +506 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# pyRadBio external reference-data locations.
|
|
2
|
+
#
|
|
3
|
+
# Copy this file to `.env` (git-ignored) and point each variable at the folder
|
|
4
|
+
# where you keep that data type. Third-party reference/benchmark data is NOT
|
|
5
|
+
# committed to this repository (see AGENTS.md and THIRD_PARTY_NOTICES.md); only
|
|
6
|
+
# self-digitised paper data is bundled in the package.
|
|
7
|
+
#
|
|
8
|
+
# Paths may use `~` and forward slashes on every platform (pathlib normalises
|
|
9
|
+
# them on Windows). Variables already exported in your shell / CI take priority
|
|
10
|
+
# over this file. Resolution and error messages live in `pyradbio/datasets.py`.
|
|
11
|
+
|
|
12
|
+
# PIDE database (GSI; registration required, not redistributable).
|
|
13
|
+
# Loader also falls back to the git-ignored ./data/pide/ folder if unset.
|
|
14
|
+
PYRADBIO_PIDE_DIR=/path/to/biodata/pide
|
|
15
|
+
|
|
16
|
+
# RadPhysBio database export (NTUA; Zanni et al. 2024, CC BY 4.0). Export the CSV
|
|
17
|
+
# from https://radbiodb.physics.ntua.gr/radphysbio/ into this folder.
|
|
18
|
+
PYRADBIO_RADPHYSBIO_DIR=/path/to/biodata/RadPhysBio
|
|
19
|
+
|
|
20
|
+
# TRiP98 reference tables. Base folder containing DEDX/ and RBE/{LEM1,LEM4}/.
|
|
21
|
+
PYRADBIO_TRIP98_DIR=/path/to/biodata/TRIP98
|
|
22
|
+
|
|
23
|
+
# "batuff/Survival"-code JSON exports (e.g., rapidLEM, rapid mMKM); the *.json sit directly here.
|
|
24
|
+
PYRADBIO_SURVIVAL_DIR=/path/to/biodata/Survival
|
|
25
|
+
|
|
26
|
+
# DeCunha 2025 lineal-energy spectrum library (Geant4-DNA). Other lineal-energy
|
|
27
|
+
# sources get their own PYRADBIO_LINEAL_ENERGY_<SOURCE>_DIR variable.
|
|
28
|
+
PYRADBIO_LINEAL_ENERGY_DECUNHA_DIR=/path/to/biodata/LinealEnergySpectra/Library/csv
|
|
29
|
+
|
|
30
|
+
# batuff/Survival SOURCE checkout (GPL-2). Its data/ holds the SRIM <Ion>_Srim.dat
|
|
31
|
+
# stopping-power tables and eta_Elsasser2007.dat. Distinct from PYRADBIO_SURVIVAL_DIR above.
|
|
32
|
+
PYRADBIO_SURVIVAL_SRC_DIR=/path/to/src/Survival
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, develop]
|
|
6
|
+
pull_request:
|
|
7
|
+
# Manual runs add the validation quick-mode smoke job (validation-quick).
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
strategy:
|
|
14
|
+
fail-fast: false
|
|
15
|
+
matrix:
|
|
16
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
- uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: ${{ matrix.python-version }}
|
|
22
|
+
- name: Install
|
|
23
|
+
run: |
|
|
24
|
+
python -m pip install --upgrade pip
|
|
25
|
+
pip install -e ".[all]"
|
|
26
|
+
- name: Lint
|
|
27
|
+
run: ruff check .
|
|
28
|
+
- name: Format check
|
|
29
|
+
run: ruff format --check .
|
|
30
|
+
- name: Types
|
|
31
|
+
# mypy checks against python_version = 3.10 on every interpreter; 3.14
|
|
32
|
+
# needs numpy >= 2.3, whose stubs mypy rejects under that target (see
|
|
33
|
+
# pyproject.toml). The other four jobs cover it.
|
|
34
|
+
if: matrix.python-version != '3.14'
|
|
35
|
+
run: mypy pyradbio
|
|
36
|
+
- name: Test
|
|
37
|
+
# @slow tests (Monte-Carlo / full-simulation reconstructions) take
|
|
38
|
+
# multiple CPU-hours and are run locally, not in CI. PIDE-gated tests are
|
|
39
|
+
# skipped automatically (no --pide path in CI). The examples smoke tests
|
|
40
|
+
# (tests/examples) run in every job WITH coverage, so branches that only
|
|
41
|
+
# one Python version takes are covered once the per-version reports are
|
|
42
|
+
# combined; their 120 s duration guard is off under coverage and on CI.
|
|
43
|
+
env:
|
|
44
|
+
MPLBACKEND: Agg
|
|
45
|
+
run: >-
|
|
46
|
+
pytest -m "not slow and not benchmark" --cov=pyradbio
|
|
47
|
+
--cov-report=term-missing
|
|
48
|
+
--cov-report=xml:coverage-${{ matrix.python-version }}.xml
|
|
49
|
+
- name: Upload coverage to Codecov
|
|
50
|
+
# One report per interpreter, flagged by version; Codecov merges them.
|
|
51
|
+
# Needs the CODECOV_TOKEN repository secret; a failed upload does not fail CI.
|
|
52
|
+
if: ${{ !cancelled() }}
|
|
53
|
+
uses: codecov/codecov-action@v5
|
|
54
|
+
with:
|
|
55
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
56
|
+
files: coverage-${{ matrix.python-version }}.xml
|
|
57
|
+
flags: py${{ matrix.python-version }}
|
|
58
|
+
disable_search: true
|
|
59
|
+
fail_ci_if_error: false
|
|
60
|
+
- name: Upload coverage report
|
|
61
|
+
if: ${{ !cancelled() }}
|
|
62
|
+
uses: actions/upload-artifact@v4
|
|
63
|
+
with:
|
|
64
|
+
name: coverage-${{ matrix.python-version }}
|
|
65
|
+
path: coverage-${{ matrix.python-version }}.xml
|
|
66
|
+
if-no-files-found: warn
|
|
67
|
+
|
|
68
|
+
pymkm-validation:
|
|
69
|
+
# pyMKM is an optional validation reference (the `mkm` extra, not in `all`).
|
|
70
|
+
# This job installs it and runs only the tests that cross-check pyRadBio's
|
|
71
|
+
# native MKM engine and the Bethe stopping power against it.
|
|
72
|
+
runs-on: ubuntu-latest
|
|
73
|
+
steps:
|
|
74
|
+
- uses: actions/checkout@v4
|
|
75
|
+
- uses: actions/setup-python@v5
|
|
76
|
+
with:
|
|
77
|
+
python-version: "3.12"
|
|
78
|
+
- name: Install
|
|
79
|
+
run: |
|
|
80
|
+
python -m pip install --upgrade pip
|
|
81
|
+
pip install -e ".[all,mkm]"
|
|
82
|
+
- name: pyMKM cross-check tests
|
|
83
|
+
run: pytest -m "requires_pymkm and not slow and not benchmark"
|
|
84
|
+
|
|
85
|
+
validation-quick:
|
|
86
|
+
# The validation/ scripts in quick mode (PYRADBIO_QUICK=1). Manual only: it
|
|
87
|
+
# is @slow, and without the external datasets most scripts skip themselves
|
|
88
|
+
# (MissingDataExit / MissingExtraExit in validation/_common.py).
|
|
89
|
+
if: github.event_name == 'workflow_dispatch'
|
|
90
|
+
runs-on: ubuntu-latest
|
|
91
|
+
steps:
|
|
92
|
+
- uses: actions/checkout@v4
|
|
93
|
+
- uses: actions/setup-python@v5
|
|
94
|
+
with:
|
|
95
|
+
python-version: "3.12"
|
|
96
|
+
- name: Install
|
|
97
|
+
run: |
|
|
98
|
+
python -m pip install --upgrade pip
|
|
99
|
+
pip install -e ".[all]"
|
|
100
|
+
- name: Validation smoke (quick mode)
|
|
101
|
+
env:
|
|
102
|
+
MPLBACKEND: Agg
|
|
103
|
+
PYRADBIO_QUICK: "1"
|
|
104
|
+
run: pytest -m slow tests/validation
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.egg-info/
|
|
5
|
+
.eggs/
|
|
6
|
+
build/
|
|
7
|
+
dist/
|
|
8
|
+
.venv/
|
|
9
|
+
venv/
|
|
10
|
+
|
|
11
|
+
# Tooling
|
|
12
|
+
.pytest_cache/
|
|
13
|
+
.mypy_cache/
|
|
14
|
+
.ruff_cache/
|
|
15
|
+
.coverage
|
|
16
|
+
htmlcov/
|
|
17
|
+
.hypothesis/
|
|
18
|
+
|
|
19
|
+
# Local environment / external-data paths (see .env.example, which IS tracked).
|
|
20
|
+
.env
|
|
21
|
+
|
|
22
|
+
# Project data that must not be committed
|
|
23
|
+
# PIDE is distributed only after registration with an institutional e-mail
|
|
24
|
+
# (https://www.gsi.de/.../pide_project) and must NOT be redistributed.
|
|
25
|
+
# data/pide/ is the default local folder the loader reads from; drop your own
|
|
26
|
+
# PIDE export there. Everything in it is ignored EXCEPT the tracked README.
|
|
27
|
+
/data/pide/*
|
|
28
|
+
!/data/pide/README.md
|
|
29
|
+
# The PIDE publication -> PMID bridge is built from PIDE's reference list: local only.
|
|
30
|
+
pide_publications_pmid*.csv
|
|
31
|
+
*.PIDE
|
|
32
|
+
*.pide
|
|
33
|
+
# Raw water stopping-power sources (NIST PSTAR/ASTAR, the ICRU 90 addendum, MSTAR,
|
|
34
|
+
# NIST isotope masses, ICRU 73): fetched by scripts/stopping/fetch_sources.py and
|
|
35
|
+
# never committed. Only each source's PROVENANCE.md (origin, citation, notice,
|
|
36
|
+
# checksums), a per-source README (data format) and the folder README are tracked. What ships is our own regridded
|
|
37
|
+
# tables in pyradbio/track/stopping/data/.
|
|
38
|
+
/data/stopping/*/**
|
|
39
|
+
!/data/stopping/*/PROVENANCE.md
|
|
40
|
+
!/data/stopping/*/README.md
|
|
41
|
+
benchmark_results/
|
|
42
|
+
# alpha/beta tables written by `pyradbio table` (regenerate from the
|
|
43
|
+
# model_config header the CLI records in each file).
|
|
44
|
+
tables_*/
|
|
45
|
+
|
|
46
|
+
# Jupyter / jupytext
|
|
47
|
+
.ipynb_checkpoints/
|
|
48
|
+
# Notebooks are generated from the jupytext .py sources (the source of truth).
|
|
49
|
+
examples/**/*.ipynb
|
|
50
|
+
# Example figures are generated by running the example scripts.
|
|
51
|
+
examples/figures/
|
|
52
|
+
# Validation figures likewise; validation/data/ (our own offline-MC checkpoints)
|
|
53
|
+
# IS tracked.
|
|
54
|
+
validation/figures/
|
|
55
|
+
|
|
56
|
+
# Editors / OS / agent tooling
|
|
57
|
+
.idea/
|
|
58
|
+
.vscode/
|
|
59
|
+
.codex/
|
|
60
|
+
.DS_Store
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Internal GitLab pipeline: code quality and coverage as GitLab-native reports.
|
|
2
|
+
# The full Python-version matrix, Codecov and the pyMKM job run on GitHub Actions
|
|
3
|
+
# (.github/workflows/ci.yml); this mirrors its fast test selection on one version.
|
|
4
|
+
|
|
5
|
+
default:
|
|
6
|
+
image: python:3.12
|
|
7
|
+
before_script:
|
|
8
|
+
- python -m pip install --upgrade pip
|
|
9
|
+
- pip install -e ".[all]"
|
|
10
|
+
cache:
|
|
11
|
+
key: pip-$CI_COMMIT_REF_SLUG
|
|
12
|
+
paths: [.cache/pip]
|
|
13
|
+
|
|
14
|
+
variables:
|
|
15
|
+
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
|
|
16
|
+
MPLBACKEND: Agg
|
|
17
|
+
|
|
18
|
+
stages: [quality, test]
|
|
19
|
+
|
|
20
|
+
code-quality:
|
|
21
|
+
stage: quality
|
|
22
|
+
script:
|
|
23
|
+
# Report first (never fails), then the strict gates.
|
|
24
|
+
- ruff check --exit-zero --output-format=gitlab --output-file=gl-code-quality-report.json .
|
|
25
|
+
- ruff check .
|
|
26
|
+
- ruff format --check .
|
|
27
|
+
- mypy pyradbio
|
|
28
|
+
artifacts:
|
|
29
|
+
when: always
|
|
30
|
+
reports:
|
|
31
|
+
codequality: gl-code-quality-report.json
|
|
32
|
+
|
|
33
|
+
test:
|
|
34
|
+
stage: test
|
|
35
|
+
needs: []
|
|
36
|
+
script:
|
|
37
|
+
- >-
|
|
38
|
+
pytest -m "not slow and not benchmark" --cov=pyradbio
|
|
39
|
+
--cov-report=term --cov-report=xml:coverage.xml --junitxml=report.xml
|
|
40
|
+
coverage: '/^TOTAL\s+.*\s(\d+(?:\.\d+)?)%$/'
|
|
41
|
+
artifacts:
|
|
42
|
+
when: always
|
|
43
|
+
reports:
|
|
44
|
+
coverage_report:
|
|
45
|
+
coverage_format: cobertura
|
|
46
|
+
path: coverage.xml
|
|
47
|
+
junit: report.xml
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
3
|
+
rev: v0.17.4
|
|
4
|
+
hooks:
|
|
5
|
+
- id: ruff
|
|
6
|
+
args: [--fix]
|
|
7
|
+
- id: ruff-format
|
|
8
|
+
|
|
9
|
+
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
10
|
+
rev: v2.1.0
|
|
11
|
+
hooks:
|
|
12
|
+
- id: mypy
|
|
13
|
+
# numpy pinned to match the project cap (PEP 695 stubs in numpy >= 2.5
|
|
14
|
+
# break mypy under python_version = 3.10).
|
|
15
|
+
additional_dependencies: ["numpy<2.3", scipy]
|
|
16
|
+
args: [pyradbio]
|
|
17
|
+
# Type-check the package as a whole; do not also pass changed filenames
|
|
18
|
+
# (that double-counts modules under the flat layout -> "Duplicate module").
|
|
19
|
+
pass_filenames: false
|
|
20
|
+
|
|
21
|
+
- repo: https://github.com/codespell-project/codespell
|
|
22
|
+
rev: v2.4.2
|
|
23
|
+
hooks:
|
|
24
|
+
- id: codespell
|
|
25
|
+
args: [--toml, pyproject.toml]
|
|
26
|
+
- repo: https://github.com/abravalheri/validate-pyproject
|
|
27
|
+
rev: v0.25
|
|
28
|
+
hooks:
|
|
29
|
+
- id: validate-pyproject
|
|
30
|
+
|
|
31
|
+
- repo: https://gitlab.com/schmieder.matthias/python-kacl
|
|
32
|
+
rev: v0.7.3
|
|
33
|
+
hooks:
|
|
34
|
+
- id: kacl-verify
|
pyradbio-0.1.0/AGENTS.md
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
Operating contract for AI coding agents (Claude Code, etc.) working in this
|
|
4
|
+
repository. Read this fully before writing any code. `CLAUDE.md` mirrors this
|
|
5
|
+
file for Claude-specific tooling; if the two ever disagree, **this file wins**.
|
|
6
|
+
|
|
7
|
+
## What pyRadBio is
|
|
8
|
+
|
|
9
|
+
A radiobiological-modelling library for ion-beam therapy, centred on the
|
|
10
|
+
linear-quadratic (LQ) model `-ln S(D) = αD + βD²`. It computes ion- and
|
|
11
|
+
energy-resolved α/β tables, z\* tables, survival curves, RBE, and the dose
|
|
12
|
+
required for a target survival level, for both single ions and mixed
|
|
13
|
+
radiation fields.
|
|
14
|
+
|
|
15
|
+
It implements these model families (inventory, references and open work:
|
|
16
|
+
`ROADMAP.md`):
|
|
17
|
+
|
|
18
|
+
- **LEM family (LEM I–IV)** — implemented here, since no maintained,
|
|
19
|
+
permissively-licensed implementation exists. This is the bulk of the
|
|
20
|
+
original work.
|
|
21
|
+
- **MKM family (MKM, modified MKM, MCF MKM, SMK, OSMK, IMK)** — implemented
|
|
22
|
+
here on our own track-structure and microdosimetry engines. `MKMModel`'s
|
|
23
|
+
default `z*` backend is the native `NativeMKMBackend`. The external
|
|
24
|
+
MIT-licensed package **pyMKM** (`BeppeMagro/pymkm`, Magro et al.,
|
|
25
|
+
*Computation* 2025, doi:10.3390/computation13110264) is an **optional
|
|
26
|
+
validation dependency** (`mkm` extra), never a default: it is the
|
|
27
|
+
**cross-check reference** for the family, and every native MKM piece must be
|
|
28
|
+
tested against pyMKM where the two overlap (`requires_pymkm` tests, run by a
|
|
29
|
+
dedicated CI job).
|
|
30
|
+
- **Stopping power** — every model's default LET source goes through the one
|
|
31
|
+
seam `track.stopping_power.default_stopping_power()`, which returns
|
|
32
|
+
`DefaultStoppingPower`: ICRU 90's procedure (`track.stopping.ICRU90Procedure`,
|
|
33
|
+
within ~0.3% of ICRU 90/49 for p, alpha, C) for Z 1-18, Hubert et al. 1990's alpha
|
|
34
|
+
scaling (`track.stopping.HubertAlphaScaling`) for Z 19-92 from 2.5 MeV/u, and the
|
|
35
|
+
analytic `SimpleBetheStoppingPower` elsewhere, anchored to the adjacent branch at its
|
|
36
|
+
range edge so the default is continuous (unvalidated there).
|
|
37
|
+
The `track.stopping` classes (XSTAR, ICRU by edition, MSTAR, Bethe with
|
|
38
|
+
switchable corrections, nuclear stopping), NS1970, SRIM tables, libdEdx (GPL,
|
|
39
|
+
runtime opt-in) and pyMKM's tables via the pyMKM adapter are explicit opt-ins.
|
|
40
|
+
See `docs/references/StoppingPower.md`. Raw stopping-power data stays
|
|
41
|
+
git-ignored in `data/stopping/<source>/` with a committed `PROVENANCE.md`; only
|
|
42
|
+
our own regridded tables ship. Do not bundle third-party stopping-power data
|
|
43
|
+
whose licence restricts redistribution or use (e.g. Geant4's G4EMLOW), and never
|
|
44
|
+
use SRIM data.
|
|
45
|
+
- **Phenomenological LET-based RBE models, RMF, Katz, NanOx** — implemented
|
|
46
|
+
here from their source papers.
|
|
47
|
+
|
|
48
|
+
Above them sits a shared LQ / mixed-field / survival / RBE / benchmark layer
|
|
49
|
+
that is model-agnostic.
|
|
50
|
+
|
|
51
|
+
## Hard rules
|
|
52
|
+
|
|
53
|
+
1. **Test-Driven Development is mandatory.** For every behavioural change:
|
|
54
|
+
write a failing test first (red), implement the minimum to pass (green),
|
|
55
|
+
then refactor. Commits that add behaviour without a corresponding test
|
|
56
|
+
will be rejected in review. Never delete, skip or `xfail` a test to make CI
|
|
57
|
+
pass.
|
|
58
|
+
2. **Golden tests are sacred.** Tests marked `@pytest.mark.golden` pin model
|
|
59
|
+
output to published reference values and must cite the DOI in the test
|
|
60
|
+
docstring. Never weaken a golden tolerance to make a test pass — if it
|
|
61
|
+
fails, the implementation is wrong (or the reference was misread; document
|
|
62
|
+
which).
|
|
63
|
+
3. **Licence hygiene.** MIT only. Do not copy code from non-MIT/BSD/Apache
|
|
64
|
+
sources, with one closed list of exceptions: code whose authors' notice grants
|
|
65
|
+
use, copying, modification and distribution without copyleft. Each admitted
|
|
66
|
+
source is named here, its notice is reproduced verbatim in
|
|
67
|
+
`THIRD_PARTY_NOTICES.md` (which states that the notice, not MIT, applies to those
|
|
68
|
+
files), and the derived files say so in their header. Admitted so far: **MSTAR
|
|
69
|
+
3.12** (Paul & Schinner, freeware; condition: keep the authors' names in the
|
|
70
|
+
source comments) → `pyradbio/track/stopping/mstar/`. Adding a source to this
|
|
71
|
+
list is a maintainer decision; GPL/LGPL and other copyleft code never
|
|
72
|
+
qualifies. `batuff/Survival` may inform *architecture discussions only* — do
|
|
73
|
+
not copy its code; its numerical output is an independent cross-check, not
|
|
74
|
+
ground truth (`docs/references/survival_repo_notes.md`). pyMKM is MIT and may
|
|
75
|
+
be called as an optional validation dependency, not vendored and not made a
|
|
76
|
+
default.
|
|
77
|
+
4. **Never commit PIDE data.** The PIDE database is distributed only after
|
|
78
|
+
registration and may not be redistributed. The benchmark reads from the
|
|
79
|
+
git-ignored `data/pide/` folder by default (override via `PYRADBIO_PIDE_DIR`
|
|
80
|
+
or an explicit `--pide` path); only its `README.md` is tracked. Tested
|
|
81
|
+
against PIDE 3.4.
|
|
82
|
+
5. **No silent physics.** Every model parameter, default, and unit must be
|
|
83
|
+
explicit and documented at the point of definition with a paper/equation
|
|
84
|
+
reference. No magic numbers.
|
|
85
|
+
6. **Numerical integration discipline** — see "Numerics" below. This is a
|
|
86
|
+
correctness requirement, not a style preference.
|
|
87
|
+
|
|
88
|
+
## Toolchain
|
|
89
|
+
|
|
90
|
+
- Python ≥ 3.10, flat package layout, import root is `pyradbio`.
|
|
91
|
+
- Install dev env: `pip install -e ".[all]"`.
|
|
92
|
+
- Run tests: `pytest` (golden + unit). `pytest -m "not slow"` for the fast loop.
|
|
93
|
+
- Lint/format: `ruff check . && ruff format .`
|
|
94
|
+
- Types: `mypy pyradbio` (strict).
|
|
95
|
+
- All four (pytest, ruff check, ruff format --check, mypy) must pass before a
|
|
96
|
+
task is considered done. CI enforces them.
|
|
97
|
+
|
|
98
|
+
## Optional dependency boundaries
|
|
99
|
+
|
|
100
|
+
Core library code must not casually import dependencies from optional extras.
|
|
101
|
+
Before using `pandas`, `pyarrow`, `openpyxl`, `matplotlib`, `numba`, `pymkm`, or
|
|
102
|
+
any other extra-only package, check `pyproject.toml` and keep the import inside
|
|
103
|
+
the feature layer that owns that extra. In particular:
|
|
104
|
+
|
|
105
|
+
- `pandas`/`pyarrow`/`openpyxl` belong to the `tables` extra and the table I/O
|
|
106
|
+
layer (`pyradbio/tables/`). Model and backend seams should return small typed
|
|
107
|
+
Python objects, not DataFrames.
|
|
108
|
+
- `matplotlib` belongs to `examples/` and `validation/` (through the
|
|
109
|
+
matplotlib-free helpers of `pyradbio.plotting`); the only library module that
|
|
110
|
+
may draw is `benchmark/report.py` (`tests/test_import_layers.py`).
|
|
111
|
+
- `numba` belongs behind explicit acceleration paths.
|
|
112
|
+
- `pymkm` belongs only in `models/mkm/pymkm_backend.py` (the pyMKM adapter:
|
|
113
|
+
`PyMKMBackend`, `PyMKMStoppingPower`). `MKMModel` and shared core code must
|
|
114
|
+
remain importable and fully functional without the `mkm` extra.
|
|
115
|
+
- Layering: `core/`, `track/` and `micro/` never import `models/`,
|
|
116
|
+
`benchmark/`, `tables/` or `cli` (enforced by `tests/test_import_layers.py`).
|
|
117
|
+
|
|
118
|
+
## Numerics (read carefully)
|
|
119
|
+
|
|
120
|
+
These are the project's known correctness traps. Getting them wrong produces
|
|
121
|
+
plausible-but-wrong tables.
|
|
122
|
+
|
|
123
|
+
- **Mixed-field LQ mixing.** Dose-average α: `ᾱ = Σ dᵢ αᵢ / Σ dᵢ`.
|
|
124
|
+
Combine β via the dose-averaged square root: `√β̄ = Σ dᵢ √βᵢ / Σ dᵢ`
|
|
125
|
+
(Zaider–Rossi / Kanai convention). For the MKM, the mixing happens on the
|
|
126
|
+
saturation-corrected dose-mean specific energy `z*_1D` (dose-averaged), not
|
|
127
|
+
on α directly — see `mMKM_Inaniwa2010.md`, eq. (8) and appendix.
|
|
128
|
+
- **Spectral / intra-bin integration.** When integrating a model quantity `Q`
|
|
129
|
+
over a fluence spectrum φ(E), the dose weight is `d ∝ φ(E)·S(E)` with `S`
|
|
130
|
+
the (mass) stopping power. Across a wide energy bin, `S`, `z*`, and `α` all
|
|
131
|
+
vary, and the *product* `S·Q` does **not** equal `S(E_center)·Q(E_center)`.
|
|
132
|
+
The numerically significant error is the **intra-bin covariance** between
|
|
133
|
+
stopping power and the looked-up quantity, not the bin-mean approximation
|
|
134
|
+
alone. Integrate products (`S·z*`, `S·α`, `S·√β`) on a **fine logarithmic
|
|
135
|
+
sub-grid (~16 nodes/bin)**, not at bin centres. `core/mixing.py` owns this
|
|
136
|
+
(`dose_quadrature`), and models reach it only through the
|
|
137
|
+
`BiophysicalModel.alpha_beta` template -- never write a per-model mixing loop.
|
|
138
|
+
The mixing tests must include a bin wide enough to expose the covariance error and
|
|
139
|
+
assert the sub-grid result against a dense-reference integral.
|
|
140
|
+
- **Survival → dose inversion.** Solving `S(D)=S_target` for `D` under the LQ
|
|
141
|
+
model is a quadratic; prefer the closed form
|
|
142
|
+
`D = (-α + √(α² - 4β·lnS)) / (2β)` and guard `β→0`.
|
|
143
|
+
- **LEM local-dose integrals.** The radial dose `D(r) ∝ LET/r²` is singular;
|
|
144
|
+
respect `r_min`/`r_max` cutoffs per LEM version and normalise so the radial
|
|
145
|
+
integral reproduces the LET. Validate `r_max(E)` and (LEM III) the
|
|
146
|
+
velocity-dependent `r_min(β)=β·r_c` against the cited parameterisations.
|
|
147
|
+
|
|
148
|
+
## Layout & ownership
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
pyradbio/
|
|
152
|
+
core/ LQ model, radiation fields, photon refs, cell/target, MIXING (sub-grid)
|
|
153
|
+
track/ radial-dose models + stopping power (stopping/: water tables, ICRU 90
|
|
154
|
+
procedure = default for Z 1-18, Hubert alpha scaling Z 19-92)
|
|
155
|
+
micro/ microdosimetry: lineal-energy spectra and specific-energy engines
|
|
156
|
+
models/ base ABC; lem/ = LEM I–IV; mkm/ = engine-agnostic MKMModel +
|
|
157
|
+
MKMBackend protocol (NativeMKMBackend default, PyMKMBackend
|
|
158
|
+
optional cross-check) and the spectrum-based MKM variants; phenomenological/,
|
|
159
|
+
rmf/, katz/, nanox/
|
|
160
|
+
tables/ alpha-beta & z* table builders + serialization (csv/parquet/pyMKM .txt)
|
|
161
|
+
benchmark/ PIDE loader (user-supplied), paper reference data + inputs, metrics,
|
|
162
|
+
sweeps, MC checkpoint I/O, report
|
|
163
|
+
data/ bundled reference parameters (cell lines, etc.) — small, cited
|
|
164
|
+
plotting.py figure folder + save helpers for the scripts (no matplotlib import)
|
|
165
|
+
cli.py `pyradbio` entry point
|
|
166
|
+
examples/ runnable, notebook-pairable jupytext demos (see examples/README.md)
|
|
167
|
+
validation/ paper reconstructions + cross-code/data checks; data/ = tracked MC
|
|
168
|
+
checkpoints (see validation/README.md)
|
|
169
|
+
scripts/ offline MC generators that write validation/data/ (see scripts/README.md)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Every model family implements one interface on `BiophysicalModel`
|
|
173
|
+
(`models/base.py`): `alpha_beta(field)`, `survival(field, D)`,
|
|
174
|
+
`dose_for_survival(field, S)`, `rbe_at_survival(field, S)`, `rbe_at_dose(field, D)`,
|
|
175
|
+
`reference()` and `alpha_beta_table(...)`, plus a `capabilities: ModelCapabilities`
|
|
176
|
+
ClassVar. A new model implements `_alpha_beta_ion` and declares `capabilities`;
|
|
177
|
+
model-specific axes (pO2, dose schedule, ...) are keyword-only arguments, never new
|
|
178
|
+
positional ones. Details: `docs/architecture.md`.
|
|
179
|
+
|
|
180
|
+
## Examples, validation and scripts
|
|
181
|
+
|
|
182
|
+
Three folders, three jobs; each README holds the authoring rules — follow them.
|
|
183
|
+
|
|
184
|
+
- `examples/` **demonstrates** a capability: a small gallery of **jupytext
|
|
185
|
+
percent** scripts (plain `.py` that also opens as a notebook) that run with
|
|
186
|
+
only the `plot` extra, no external data and no network, within the 120 s
|
|
187
|
+
budget. The gallery is a fixed list (`tests/examples`), so a new example is a
|
|
188
|
+
deliberate decision.
|
|
189
|
+
- `validation/` **scores** a model against a published model line, another
|
|
190
|
+
code or a dataset (jupytext percent, minutes allowed). External data goes
|
|
191
|
+
through `pyradbio.datasets`, optional extras through `_common.require_extra`.
|
|
192
|
+
Every validation script supports `PYRADBIO_QUICK=1` (same figures, cheap
|
|
193
|
+
settings).
|
|
194
|
+
- `scripts/` holds offline generators (argparse, `main()`, `--dry-run`, no I/O
|
|
195
|
+
at import). Their outputs are the tracked checkpoints in `validation/data/`,
|
|
196
|
+
each gated by a fast numeric-fingerprint test.
|
|
197
|
+
|
|
198
|
+
**Illustrating capabilities is a continuous task.** Each major capability
|
|
199
|
+
should be illustrated by an example **or a validation script**; add or extend
|
|
200
|
+
one whenever a change introduces a user-facing capability.
|
|
201
|
+
|
|
202
|
+
- Name examples after the **concept**, never after a milestone or task, so the
|
|
203
|
+
gallery stays meaningful over time; name validation scripts after the paper
|
|
204
|
+
or code they score (`smk_inaniwa2018.py`).
|
|
205
|
+
- Every example is smoke-tested automatically (runs, writes a PNG, stays within
|
|
206
|
+
budget, imports only stdlib/numpy/scipy/matplotlib/pyradbio); every
|
|
207
|
+
validation script is smoke-tested in quick mode by the `@slow` suite.
|
|
208
|
+
|
|
209
|
+
## Definition of done
|
|
210
|
+
|
|
211
|
+
A change is done when: its golden + unit tests are green, coverage on touched
|
|
212
|
+
modules ≥ 90%, ruff + mypy clean, its public API has docstrings with
|
|
213
|
+
equation/DOI references, and `CHANGELOG.md` is updated.
|
|
214
|
+
|
|
215
|
+
## When unsure
|
|
216
|
+
|
|
217
|
+
Prefer to (a) read the relevant summary in `docs/references/`, (b) read the
|
|
218
|
+
cited paper section, (c) inspect the actual pyMKM API (`python -c "import
|
|
219
|
+
pymkm; help(pymkm.mktable)"`) rather than assuming it. Record any assumption
|
|
220
|
+
you could not verify as a `# ASSUMPTION:` comment and a note in the PR.
|