xcoll 0.3.6__py3-none-any.whl → 0.5.0__py3-none-any.whl
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.
Potentially problematic release.
This version of xcoll might be problematic. Click here for more details.
- xcoll/__init__.py +13 -4
- xcoll/beam_elements/__init__.py +14 -6
- xcoll/beam_elements/absorber.py +41 -7
- xcoll/beam_elements/base.py +1202 -247
- xcoll/beam_elements/blowup.py +198 -0
- xcoll/beam_elements/elements_src/black_absorber.h +136 -0
- xcoll/beam_elements/elements_src/black_crystal.h +129 -0
- xcoll/beam_elements/elements_src/blowup.h +42 -0
- xcoll/beam_elements/elements_src/emittance_monitor.h +109 -0
- xcoll/beam_elements/{collimators_src → elements_src}/everest_block.h +59 -30
- xcoll/beam_elements/elements_src/everest_collimator.h +237 -0
- xcoll/beam_elements/elements_src/everest_crystal.h +280 -0
- xcoll/beam_elements/everest.py +65 -119
- xcoll/beam_elements/monitor.py +428 -0
- xcoll/colldb.py +276 -747
- xcoll/general.py +5 -5
- xcoll/headers/checks.h +1 -1
- xcoll/headers/particle_states.h +2 -2
- xcoll/initial_distribution.py +207 -0
- xcoll/install.py +179 -0
- xcoll/interaction_record/__init__.py +1 -0
- xcoll/interaction_record/interaction_record.py +298 -0
- xcoll/interaction_record/interaction_record_src/interaction_record.h +98 -0
- xcoll/{impacts → interaction_record}/interaction_types.py +11 -4
- xcoll/line_tools.py +82 -0
- xcoll/lossmap.py +219 -0
- xcoll/manager.py +2 -937
- xcoll/rf_sweep.py +1 -1
- xcoll/scattering_routines/everest/amorphous.h +232 -0
- xcoll/scattering_routines/everest/channeling.h +240 -0
- xcoll/scattering_routines/everest/crystal_parameters.h +137 -0
- xcoll/scattering_routines/everest/everest.h +11 -30
- xcoll/scattering_routines/everest/everest.py +13 -10
- xcoll/scattering_routines/everest/jaw.h +28 -197
- xcoll/scattering_routines/everest/materials.py +37 -15
- xcoll/scattering_routines/everest/multiple_coulomb_scattering.h +31 -10
- xcoll/scattering_routines/everest/nuclear_interaction.h +86 -0
- xcoll/scattering_routines/everest/properties.h +6 -1
- xcoll/scattering_routines/fluka/flukaio/lib/libFlukaIO64.a +0 -0
- xcoll/scattering_routines/geant4/collimasim/.git +1 -0
- xcoll/scattering_routines/geant4/collimasim/.gitignore +12 -0
- xcoll/scattering_routines/geant4/collimasim/.gitmodules +3 -0
- xcoll/scattering_routines/geant4/collimasim/CMakeLists.txt +26 -0
- xcoll/scattering_routines/geant4/collimasim/README.md +21 -0
- xcoll/scattering_routines/geant4/collimasim/docs/Makefile +20 -0
- xcoll/scattering_routines/geant4/collimasim/docs/make.bat +35 -0
- xcoll/scattering_routines/geant4/collimasim/docs/source/collimasim.rst +10 -0
- xcoll/scattering_routines/geant4/collimasim/docs/source/conf.py +59 -0
- xcoll/scattering_routines/geant4/collimasim/docs/source/index.rst +26 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.appveyor.yml +37 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.clang-format +19 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.clang-tidy +65 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.cmake-format.yaml +73 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.git +1 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/CODEOWNERS +9 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/CONTRIBUTING.md +386 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/ISSUE_TEMPLATE/bug-report.yml +45 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/ISSUE_TEMPLATE/config.yml +8 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/dependabot.yml +16 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/labeler.yml +8 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/labeler_merged.yml +3 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/pull_request_template.md +19 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/ci.yml +969 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/configure.yml +84 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/format.yml +48 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/labeler.yml +16 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/pip.yml +103 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.gitignore +45 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.pre-commit-config.yaml +151 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.readthedocs.yml +3 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/CMakeLists.txt +297 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/LICENSE +29 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/MANIFEST.in +6 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/README.rst +180 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/Doxyfile +23 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/Makefile +192 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/_static/theme_overrides.css +11 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/chrono.rst +81 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/custom.rst +93 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/eigen.rst +310 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/functional.rst +109 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/index.rst +43 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/overview.rst +171 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/stl.rst +251 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/strings.rst +305 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/classes.rst +1297 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/embedding.rst +262 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/exceptions.rst +396 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/functions.rst +568 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/misc.rst +337 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/index.rst +13 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/numpy.rst +463 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/object.rst +286 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/utilities.rst +155 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/smart_ptrs.rst +174 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/basics.rst +308 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/benchmark.py +91 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/benchmark.rst +95 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/changelog.rst +2050 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/classes.rst +542 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/cmake/index.rst +8 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/compiling.rst +648 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/conf.py +381 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/faq.rst +343 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/index.rst +48 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/installing.rst +105 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/limitations.rst +72 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11-logo.png +0 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python1.png +0 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python1.svg +427 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python2.png +0 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python2.svg +427 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/reference.rst +130 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/release.rst +96 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/requirements.txt +8 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/upgrade.rst +548 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/attr.h +605 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/buffer_info.h +144 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/cast.h +1432 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/chrono.h +213 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/common.h +2 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/complex.h +65 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/class.h +709 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/common.h +1021 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/descr.h +104 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/init.h +346 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/internals.h +467 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/type_caster_base.h +978 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/typeid.h +55 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/eigen.h +606 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/embed.h +284 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/eval.h +163 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/functional.h +121 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/gil.h +193 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/iostream.h +275 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/numpy.h +1741 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/operators.h +163 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/options.h +65 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/pybind11.h +2497 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/pytypes.h +1879 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl/filesystem.h +103 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl.h +375 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl_bind.h +747 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/noxfile.py +88 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/__init__.py +11 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/__main__.py +52 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/_version.py +12 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/_version.pyi +6 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/commands.py +21 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/py.typed +0 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/setup_helpers.py +482 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/setup_helpers.pyi +63 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pyproject.toml +41 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/setup.cfg +56 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/setup.py +155 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/CMakeLists.txt +503 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/conftest.py +208 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/constructor_stats.h +275 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/cross_module_gil_utils.cpp +73 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/env.py +33 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_python_package/pytest.ini +0 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_python_package/test_files.py +279 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_setuptools/pytest.ini +0 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_setuptools/test_setuphelper.py +143 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/local_bindings.h +85 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/object.h +179 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_cross_module_tests.cpp +151 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_tests.cpp +91 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_tests.h +85 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pytest.ini +19 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/requirements.txt +12 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_async.cpp +26 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_async.py +25 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_buffers.cpp +216 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_buffers.py +163 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_builtin_casters.cpp +286 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_builtin_casters.py +536 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_call_policies.cpp +107 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_call_policies.py +248 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_callbacks.cpp +227 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_callbacks.py +202 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_chrono.cpp +84 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_chrono.py +210 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_class.cpp +550 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_class.py +473 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/CMakeLists.txt +84 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/embed.cpp +21 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_embed/CMakeLists.txt +28 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_function/CMakeLists.txt +39 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_target/CMakeLists.txt +46 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/main.cpp +6 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt +41 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_function/CMakeLists.txt +35 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_target/CMakeLists.txt +41 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/test.py +10 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_constants_and_functions.cpp +165 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_constants_and_functions.py +53 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_copy_move.cpp +238 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_copy_move.py +126 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_casters.cpp +141 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_casters.py +117 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_setup.cpp +41 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_setup.py +50 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_docstring_options.cpp +69 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_docstring_options.py +42 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eigen.cpp +348 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eigen.py +771 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/CMakeLists.txt +47 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/catch.cpp +22 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/external_module.cpp +23 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/test_interpreter.cpp +326 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/test_interpreter.py +15 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_enum.cpp +148 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_enum.py +272 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval.cpp +119 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval.py +51 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval_call.py +5 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.cpp +285 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.h +12 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.py +265 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_factory_constructors.cpp +397 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_factory_constructors.py +520 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_gil_scoped.cpp +49 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_gil_scoped.py +94 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_iostream.cpp +125 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_iostream.py +331 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_kwargs_and_defaults.cpp +153 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_kwargs_and_defaults.py +284 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_local_bindings.cpp +107 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_local_bindings.py +257 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_methods_and_attributes.cpp +412 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_methods_and_attributes.py +517 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_modules.cpp +102 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_modules.py +92 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_multiple_inheritance.cpp +233 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_multiple_inheritance.py +360 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_array.cpp +472 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_array.py +593 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_dtypes.cpp +524 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_dtypes.py +441 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_vectorize.cpp +103 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_vectorize.py +267 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_opaque_types.cpp +73 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_opaque_types.py +59 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_operator_overloading.cpp +235 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_operator_overloading.py +146 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pickling.cpp +189 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pickling.py +82 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pytypes.cpp +560 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pytypes.py +651 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_sequences_and_iterators.cpp +500 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_sequences_and_iterators.py +253 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_smart_ptr.cpp +452 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_smart_ptr.py +318 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl.cpp +342 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl.py +291 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl_binders.cpp +131 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl_binders.py +318 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_tagbased_polymorphic.cpp +144 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_tagbased_polymorphic.py +29 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_thread.cpp +66 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_thread.py +44 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_union.cpp +22 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_union.py +9 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_virtual_functions.cpp +510 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_virtual_functions.py +408 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/valgrind-numpy-scipy.supp +140 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/valgrind-python.supp +117 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindCatch.cmake +70 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindEigen3.cmake +86 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindPythonLibsNew.cmake +257 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/check-style.sh +44 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/cmake_uninstall.cmake.in +23 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/libsize.py +39 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/make_changelog.py +64 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Common.cmake +402 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Config.cmake.in +233 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11NewTools.cmake +276 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Tools.cmake +214 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pyproject.toml +3 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/setup_global.py.in +65 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/setup_main.py.in +41 -0
- xcoll/scattering_routines/geant4/collimasim/pyproject.toml +8 -0
- xcoll/scattering_routines/geant4/collimasim/setup.py +144 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSPyATInterface.cpp +403 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSPyATInterface.hh +100 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSXtrackInterface.cpp +763 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSXtrackInterface.hh +118 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/__init__.py +8 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/bindings.cpp +63 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/pyCollimatorPass.py +142 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/xtrack_collimator.py +556 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/PKG-INFO +6 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/SOURCES.txt +24 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/dependency_links.txt +1 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/not-zip-safe +1 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/top_level.txt +1 -0
- xcoll/scattering_routines/geant4/collimasim/tests/README.md +25 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_forions.dat +25 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_new_example.dat +18 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_old_example.dat +68 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_testing.dat +15 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_yaml_example.yaml +110 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/collgaps.dat +7 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/collgaps_pyat_test.dat +3 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/collonly_twiss_file_example.tfs +54 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/settings.gmad +3 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/settings_black_absorber.gmad +3 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/settings_ions.gmad +5 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/twiss_file_testing.tfs +51 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_pyat.py +65 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_pyat_passmethod.py +59 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_pyat_tracking.py +102 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack.py +75 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_angle.py +74 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_colldb_load.py +84 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_interaction.py +159 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_interaction_ion.py +99 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_ions.py +78 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_lost_energy.py +88 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tilt.py +80 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tracking.py +97 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tracking_ions.py +96 -0
- xcoll/scattering_routines/geometry/__init__.py +6 -0
- xcoll/scattering_routines/geometry/collimator_geometry.h +218 -0
- xcoll/scattering_routines/geometry/crystal_geometry.h +153 -0
- xcoll/scattering_routines/geometry/geometry.py +26 -0
- xcoll/scattering_routines/geometry/get_s.h +92 -0
- xcoll/scattering_routines/geometry/methods.h +111 -0
- xcoll/scattering_routines/geometry/objects.h +154 -0
- xcoll/scattering_routines/geometry/rotation.h +23 -0
- xcoll/scattering_routines/geometry/segments.h +226 -0
- xcoll/scattering_routines/geometry/sort.h +184 -0
- {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/METADATA +1 -1
- xcoll-0.5.0.dist-info/RECORD +413 -0
- xcoll/beam_elements/collimators_src/absorber.h +0 -141
- xcoll/beam_elements/collimators_src/everest_collimator.h +0 -142
- xcoll/beam_elements/collimators_src/everest_crystal.h +0 -115
- xcoll/collimator_settings.py +0 -457
- xcoll/impacts/__init__.py +0 -1
- xcoll/impacts/impacts.py +0 -102
- xcoll/impacts/impacts_src/impacts.h +0 -99
- xcoll/scattering_routines/everest/crystal.h +0 -1302
- xcoll/scattering_routines/everest/scatter.h +0 -169
- xcoll/scattering_routines/everest/scatter_crystal.h +0 -260
- xcoll/scattering_routines/fluka/build_fluka_input.py +0 -58
- xcoll-0.3.6.dist-info/RECORD +0 -111
- {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/LICENSE +0 -0
- {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/NOTICE +0 -0
- {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/WHEEL +0 -0
|
@@ -1,34 +1,19 @@
|
|
|
1
1
|
// copyright ############################### #
|
|
2
2
|
// This file is part of the Xcoll Package. #
|
|
3
|
-
// Copyright (c) CERN,
|
|
3
|
+
// Copyright (c) CERN, 2024. #
|
|
4
4
|
// ######################################### #
|
|
5
5
|
|
|
6
6
|
#ifndef XCOLL_EVEREST_ENGINE_H
|
|
7
7
|
#define XCOLL_EVEREST_ENGINE_H
|
|
8
8
|
|
|
9
|
+
#define XCOLL_TRANSITION
|
|
9
10
|
|
|
10
11
|
typedef struct EverestCollData_ {
|
|
11
12
|
// Collimator properties
|
|
12
|
-
double aperture; // TODO: This should go out, as it's geometry and that should not be used in Everest scattering
|
|
13
|
-
double offset; // TODO: This should go out, as it's geometry and that should not be used in Everest scattering
|
|
14
|
-
double tilt_L; // TODO: This should go out, as it's geometry and that should not be used in Everest scattering
|
|
15
|
-
double tilt_R; // TODO: This should go out, as it's geometry and that should not be used in Everest scattering
|
|
16
|
-
double side; // TODO: This should go out, as it's geometry and that should not be used in Everest scattering
|
|
17
13
|
RandomRutherfordData restrict rng;
|
|
18
|
-
|
|
14
|
+
InteractionRecordData record;
|
|
19
15
|
RecordIndex record_index;
|
|
20
|
-
|
|
21
|
-
double bend_r;
|
|
22
|
-
double bend_ang;
|
|
23
|
-
double tilt;
|
|
24
|
-
double amorphous_layer;
|
|
25
|
-
double xdim;
|
|
26
|
-
double ydim;
|
|
27
|
-
int8_t orient;
|
|
28
|
-
double miscut;
|
|
29
|
-
double s_P;
|
|
30
|
-
double x_P;
|
|
31
|
-
double t_VImax;
|
|
16
|
+
int8_t record_scatterings;
|
|
32
17
|
// Material properties
|
|
33
18
|
// TODO: can we use pointers for the MaterialData? It then gets a bit difficult to read them, ie *coll->exenergy
|
|
34
19
|
double exenergy;
|
|
@@ -43,6 +28,8 @@ typedef struct EverestCollData_ {
|
|
|
43
28
|
double ai;
|
|
44
29
|
double eum;
|
|
45
30
|
double collnt;
|
|
31
|
+
double eta;
|
|
32
|
+
int8_t orient;
|
|
46
33
|
int8_t only_mcs;
|
|
47
34
|
} EverestCollData_;
|
|
48
35
|
typedef EverestCollData_ *EverestCollData;
|
|
@@ -62,6 +49,7 @@ typedef struct EverestData_ {
|
|
|
62
49
|
double prob_tail_c4;
|
|
63
50
|
double energy_loss;
|
|
64
51
|
double energy_loss_tail;
|
|
52
|
+
// Crystal data
|
|
65
53
|
double rescale_scattering;
|
|
66
54
|
double t_c;
|
|
67
55
|
double t_c0;
|
|
@@ -90,19 +78,12 @@ void Drift_single_particle_4d(LocalParticle* part, double length){
|
|
|
90
78
|
LocalParticle_set_zeta(part, zeta);
|
|
91
79
|
}
|
|
92
80
|
|
|
93
|
-
/*gpufun*/
|
|
94
|
-
double YRotation_single_particle_rotate_only(LocalParticle* part, double s, double angle){
|
|
95
|
-
double x = LocalParticle_get_x(part);
|
|
96
|
-
double rpp = LocalParticle_get_rpp(part);
|
|
97
|
-
double sin_y = sin(angle);
|
|
98
|
-
double cos_y = cos(angle);
|
|
99
|
-
LocalParticle_set_x(part, x*cos_y - s*sin_y);
|
|
100
|
-
LocalParticle_add_to_px(part,-angle/rpp);
|
|
101
|
-
return x*sin_y + s*cos_y; // new s
|
|
102
|
-
}
|
|
103
|
-
|
|
104
81
|
/*gpukern*/
|
|
105
82
|
void RandomRutherford_set_by_xcoll_material(RandomRutherfordData ran, GeneralMaterialData material){
|
|
83
|
+
if (GeneralMaterialData_get__only_mcs(material)){
|
|
84
|
+
RandomRutherford_set(ran, 1, 1, 0.0001, 0.01);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
106
87
|
double const zatom = GeneralMaterialData_get_Z(material);
|
|
107
88
|
double const emr = GeneralMaterialData_get_nuclear_radius(material);
|
|
108
89
|
double const hcut = GeneralMaterialData_get_hcut(material);
|
|
@@ -1,30 +1,33 @@
|
|
|
1
1
|
# copyright ############################### #
|
|
2
2
|
# This file is part of the Xcoll Package. #
|
|
3
|
-
# Copyright (c) CERN,
|
|
3
|
+
# Copyright (c) CERN, 2024. #
|
|
4
4
|
# ######################################### #
|
|
5
5
|
|
|
6
|
-
import xobjects as xo
|
|
7
6
|
import xtrack as xt
|
|
8
7
|
|
|
9
8
|
from .materials import Material, CrystalMaterial
|
|
10
|
-
from
|
|
9
|
+
from ..geometry import XcollGeometry
|
|
10
|
+
from ...interaction_record import InteractionRecord
|
|
11
11
|
from ...general import _pkg_root
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
class EverestEngine(
|
|
14
|
+
class EverestEngine(xt.BeamElement):
|
|
15
15
|
_xofields = {}
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
allow_track = False
|
|
18
|
+
|
|
19
|
+
_depends_on = [Material, CrystalMaterial, InteractionRecord, xt.RandomUniform, xt.RandomExponential,
|
|
20
|
+
xt.RandomNormal, xt.RandomRutherford, xt.Drift, XcollGeometry]
|
|
19
21
|
|
|
20
22
|
_extra_c_sources = [
|
|
23
|
+
_pkg_root.joinpath('scattering_routines','geometry','rotation.h'),
|
|
21
24
|
_pkg_root.joinpath('scattering_routines','everest','constants.h'),
|
|
22
25
|
_pkg_root.joinpath('scattering_routines','everest','everest.h'),
|
|
23
26
|
_pkg_root.joinpath('scattering_routines','everest','properties.h'),
|
|
24
|
-
# _pkg_root.joinpath('scattering_routines','everest','scatter_init.h'),
|
|
25
27
|
_pkg_root.joinpath('scattering_routines','everest','multiple_coulomb_scattering.h'),
|
|
28
|
+
_pkg_root.joinpath('scattering_routines','everest','nuclear_interaction.h'),
|
|
29
|
+
_pkg_root.joinpath('scattering_routines','everest','crystal_parameters.h'),
|
|
30
|
+
_pkg_root.joinpath('scattering_routines','everest','amorphous.h'),
|
|
26
31
|
_pkg_root.joinpath('scattering_routines','everest','jaw.h'),
|
|
27
|
-
_pkg_root.joinpath('scattering_routines','everest','
|
|
28
|
-
_pkg_root.joinpath('scattering_routines','everest','crystal.h'),
|
|
29
|
-
_pkg_root.joinpath('scattering_routines','everest','scatter_crystal.h')
|
|
32
|
+
_pkg_root.joinpath('scattering_routines','everest','channeling.h')
|
|
30
33
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// copyright ############################### #
|
|
2
2
|
// This file is part of the Xcoll Package. #
|
|
3
|
-
// Copyright (c) CERN,
|
|
3
|
+
// Copyright (c) CERN, 2024. #
|
|
4
4
|
// ######################################### #
|
|
5
5
|
|
|
6
6
|
#ifndef XCOLL_EVEREST_JAW_H
|
|
@@ -9,227 +9,58 @@
|
|
|
9
9
|
#include <stdio.h>
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
|
|
13
12
|
/*gpufun*/
|
|
14
|
-
double
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
double va2 = 0;
|
|
19
|
-
double vb2 = 0;
|
|
20
|
-
double r2 = 0;
|
|
21
|
-
double* result = (double*)malloc(2 * sizeof(double));
|
|
22
|
-
|
|
23
|
-
while (1) {
|
|
24
|
-
va = 2*RandomUniform_generate(part) - 1;
|
|
25
|
-
vb = RandomUniform_generate(part);
|
|
26
|
-
va2 = pow(va,2);
|
|
27
|
-
vb2 = pow(vb,2);
|
|
28
|
-
r2 = va2 + vb2;
|
|
29
|
-
if(r2 < 1) {
|
|
30
|
-
break;
|
|
31
|
-
}
|
|
13
|
+
double jaw(EverestData restrict everest, LocalParticle* part, double p, double length, int edge_check) {
|
|
14
|
+
if (LocalParticle_get_state(part) < 1){
|
|
15
|
+
// Do nothing if already absorbed
|
|
16
|
+
return p;
|
|
32
17
|
}
|
|
33
|
-
|
|
34
|
-
result[0] = (teta*((2*va)*vb))/r2;
|
|
35
|
-
result[1] = (teta*(va2 - vb2))/r2;
|
|
36
|
-
return result;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
/*gpufun*/
|
|
41
|
-
double* gettran(EverestData restrict everest, LocalParticle* part, double inter, double p) {
|
|
42
|
-
|
|
43
|
-
double* res = (double*)malloc(2 * sizeof(double));
|
|
44
|
-
|
|
45
|
-
// Neither if-statements below have an else, so defaulting function return to zero.
|
|
46
|
-
double result = 0;
|
|
47
|
-
|
|
48
|
-
if (inter==2) { // Nuclear Elastic
|
|
49
|
-
result = RandomExponential_generate(part)/everest->bn;
|
|
50
|
-
|
|
51
|
-
} else if (inter==3) { // pp Elastic
|
|
52
|
-
result = RandomExponential_generate(part)/everest->bpp;
|
|
53
|
-
|
|
54
|
-
} else if (inter==4) { // Single Diffractive
|
|
55
|
-
double xm2 = exp(RandomUniform_generate(part) * everest->xln15s);
|
|
56
|
-
double bsd = 0;
|
|
57
|
-
p = p * (1 - xm2/everest->ecmsq);
|
|
58
|
-
|
|
59
|
-
if (xm2 < 2) {
|
|
60
|
-
bsd = 2 * everest->bpp;
|
|
61
|
-
} else if ((xm2 >= 2) & (xm2 <= 5)) {
|
|
62
|
-
bsd = ((106.0 - 17.0*xm2)*everest->bpp)/36.0;
|
|
63
|
-
} else {
|
|
64
|
-
bsd = (7*everest->bpp)/12.0;
|
|
65
|
-
}
|
|
66
|
-
result = RandomExponential_generate(part)/bsd;
|
|
67
|
-
|
|
68
|
-
} else if (inter==5) { // Coulomb
|
|
69
|
-
result = RandomRutherford_generate(everest->coll->rng, part);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
res[0] = result;
|
|
73
|
-
res[1] = p;
|
|
74
|
-
return res;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
/*gpufun*/
|
|
79
|
-
int ichoix(EverestData restrict everest, LocalParticle* part) {
|
|
80
|
-
|
|
81
|
-
double aran = RandomUniform_generate(part);
|
|
82
|
-
int i;
|
|
83
|
-
for (i = 0; i < 5; ++i) {
|
|
84
|
-
if (aran < everest->cprob[i]) {
|
|
85
|
-
break;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return i;
|
|
89
|
-
}
|
|
90
18
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
double* result = (double*)malloc(3 * sizeof(double));
|
|
96
|
-
|
|
97
|
-
double s;
|
|
98
|
-
double nabs = 0;
|
|
99
|
-
double rlen = zlm;
|
|
100
|
-
double m_dpodx = 0.;
|
|
101
|
-
double t;
|
|
102
|
-
double tx;
|
|
103
|
-
double tz;
|
|
104
|
-
|
|
105
|
-
double rpp_in = LocalParticle_get_rpp(part);
|
|
106
|
-
double x = LocalParticle_get_x(part);
|
|
107
|
-
double xp = LocalParticle_get_px(part)*rpp_in;
|
|
108
|
-
double z = LocalParticle_get_y(part);
|
|
109
|
-
double zp = LocalParticle_get_py(part)*rpp_in;
|
|
19
|
+
double rlen = length;
|
|
20
|
+
double s0 = LocalParticle_get_s(part);
|
|
21
|
+
p /= 1e9; // Energy (not momentum) in GeV
|
|
110
22
|
|
|
111
23
|
if (everest->coll->only_mcs) {
|
|
112
|
-
|
|
113
|
-
s = res[0];
|
|
114
|
-
x = res[1];
|
|
115
|
-
xp = res[2];
|
|
116
|
-
z = res[3];
|
|
117
|
-
zp = res[4];
|
|
118
|
-
free(res);
|
|
24
|
+
mcs(everest, part, rlen, p, edge_check);
|
|
119
25
|
|
|
120
26
|
} else {
|
|
121
27
|
// Do a step for a point-like interaction.
|
|
122
28
|
// Get monte-carlo interaction length.
|
|
123
29
|
while (1) {
|
|
124
|
-
|
|
125
30
|
calculate_ionisation_properties(everest, p);
|
|
126
|
-
double
|
|
31
|
+
double length_step = everest->xintl*RandomExponential_generate(part);
|
|
127
32
|
|
|
128
|
-
// If the monte-carlo interaction length is longer than the
|
|
129
|
-
//
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
if (zlm1 > rlen) {
|
|
133
|
-
zlm1 = rlen;
|
|
134
|
-
double* res = mcs(everest, part, zlm1, p, x, xp, z, zp, edge_check);
|
|
135
|
-
s = res[0];
|
|
136
|
-
x = res[1];
|
|
137
|
-
xp = res[2];
|
|
138
|
-
z = res[3];
|
|
139
|
-
zp = res[4];
|
|
140
|
-
free(res);
|
|
141
|
-
|
|
142
|
-
s = zlm - rlen + s;
|
|
143
|
-
m_dpodx = calcionloss(everest, part, rlen); // DM routine to include tail // TODO: should not be rlen but s after updating
|
|
144
|
-
p = p-m_dpodx*s; // This is correct: ionisation loss is only calculated and applied at end of while (break)
|
|
33
|
+
// If the monte-carlo interaction length is longer than the remaining
|
|
34
|
+
// length, then put it to the remaining length, do mcs and return.
|
|
35
|
+
if (length_step > rlen) {
|
|
36
|
+
mcs(everest, part, rlen, p, edge_check);
|
|
145
37
|
break;
|
|
146
38
|
}
|
|
147
|
-
// Otherwise do multi-coulomb scattering.
|
|
148
|
-
// REGULAR STEP IN ITERATION LOOP
|
|
149
|
-
double* res1 = mcs(everest, part, zlm1, p, x, xp, z, zp, edge_check);
|
|
150
|
-
s = res1[0];
|
|
151
|
-
x = res1[1];
|
|
152
|
-
xp = res1[2];
|
|
153
|
-
z = res1[3];
|
|
154
|
-
zp = res1[4];
|
|
155
|
-
free(res1);
|
|
156
39
|
|
|
157
|
-
//
|
|
158
|
-
|
|
159
|
-
// reduce momentum (output as dpop) and return.
|
|
160
|
-
// PARTICLE LEFT COLLIMATOR BEFORE ITS END.
|
|
40
|
+
// Otherwise do multi-coulomb scattering.
|
|
41
|
+
mcs(everest, part, length_step, p, edge_check);
|
|
161
42
|
|
|
162
|
-
if(
|
|
163
|
-
|
|
164
|
-
m_dpodx = calcionloss(everest, part, rlen); // TODO: should not be rlen but s after updating
|
|
165
|
-
p = p-m_dpodx*s; // correct
|
|
43
|
+
if(LocalParticle_get_x(part) <= 0) {
|
|
44
|
+
// PARTICLE LEFT COLLIMATOR BEFORE ITS END.
|
|
166
45
|
break;
|
|
167
46
|
}
|
|
168
47
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
// PARTICLE WAS ABSORBED INSIDE COLLIMATOR DURING MCS.
|
|
173
|
-
|
|
174
|
-
int inter = ichoix(everest, part);
|
|
175
|
-
nabs = inter;
|
|
176
|
-
if (inter == 1) {
|
|
177
|
-
s = zlm - rlen + zlm1;
|
|
178
|
-
m_dpodx = calcionloss(everest, part, rlen);
|
|
179
|
-
p = p-m_dpodx*s;
|
|
48
|
+
p = nuclear_interaction(everest, part, p);
|
|
49
|
+
if (LocalParticle_get_state(part) < 1){
|
|
50
|
+
// PARTICLE WAS ABSORBED INSIDE COLLIMATOR DURING MCS.
|
|
180
51
|
break;
|
|
181
52
|
}
|
|
182
53
|
|
|
183
|
-
|
|
184
|
-
// Now treat the other types of interaction, as determined by ICHOIX:
|
|
185
|
-
|
|
186
|
-
// Nuclear-Elastic: inter = 2
|
|
187
|
-
// pp Elastic: inter = 3
|
|
188
|
-
// Single-Diffractive: inter = 4 (changes momentum p)
|
|
189
|
-
// Coulomb: inter = 5
|
|
190
|
-
|
|
191
|
-
// Gettran returns some monte carlo number, that, as I believe, gives the rms transverse momentum transfer.
|
|
192
|
-
|
|
193
|
-
double* res2 = gettran(everest, part, inter, p);
|
|
194
|
-
t = res2[0];
|
|
195
|
-
p = res2[1];
|
|
196
|
-
free(res2);
|
|
197
|
-
|
|
198
|
-
// Tetat calculates from the rms transverse momentum transfer in
|
|
199
|
-
// monte-carlo fashion the angle changes for x and z planes. The
|
|
200
|
-
// angle change is proportional to SQRT(t) and 1/p, as expected.
|
|
201
|
-
|
|
202
|
-
double* res3 = tetat(part, t, p);
|
|
203
|
-
tx = res3[0];
|
|
204
|
-
tz = res3[1];
|
|
205
|
-
free(res3);
|
|
206
|
-
|
|
207
|
-
// Apply angle changes
|
|
208
|
-
xp = xp + tx;
|
|
209
|
-
zp = zp + tz;
|
|
210
|
-
|
|
211
|
-
// Treat single-diffractive scattering. TODO: this does nothing??
|
|
212
|
-
if(inter == 4) {
|
|
213
|
-
// added update for s
|
|
214
|
-
s = zlm - rlen + zlm1;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
54
|
// Calculate the remaining interaction length and close the iteration loop.
|
|
218
|
-
rlen = rlen -
|
|
55
|
+
rlen = rlen - length_step;
|
|
219
56
|
}
|
|
57
|
+
// TODO: ionisation loss should also be calculated when only_mcs
|
|
58
|
+
double m_dpodx = calcionloss(everest, part, rlen); // DM routine to include tail // TODO: should not be rlen but s after updating
|
|
59
|
+
double s = LocalParticle_get_s(part) - s0;
|
|
60
|
+
p = p-m_dpodx*s; // TODO: This is correct: ionisation loss is only calculated and applied at end of while (break)
|
|
220
61
|
}
|
|
221
62
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
LocalParticle_set_y(part, z);
|
|
225
|
-
LocalParticle_set_py(part, zp/rpp_in);
|
|
226
|
-
LocalParticle_add_to_s(part, s); // TODO: is this correct with tilt etc?
|
|
227
|
-
|
|
228
|
-
result[0] = p;
|
|
229
|
-
result[1] = nabs;
|
|
230
|
-
result[2] = s;
|
|
231
|
-
return result;
|
|
232
|
-
}
|
|
233
|
-
|
|
63
|
+
return p*1e9; // Back to eV
|
|
64
|
+
}
|
|
234
65
|
|
|
235
66
|
#endif /* XCOLL_EVEREST_JAW_H */
|
|
@@ -18,6 +18,8 @@ import xobjects as xo
|
|
|
18
18
|
# as xobjects enforces a strict order: static fields first, and then dynamic fields.
|
|
19
19
|
# See struct.py, in __new__ of MetaStruct
|
|
20
20
|
|
|
21
|
+
# A HybridClass needs something to depend on, otherwise the class is added twice in the cdefs during compilation
|
|
22
|
+
|
|
21
23
|
class GeneralMaterial(xo.HybridClass):
|
|
22
24
|
_xofields = {
|
|
23
25
|
'Z': xo.Float64, # zatom
|
|
@@ -325,19 +327,39 @@ Inermet = Material(
|
|
|
325
327
|
_context=_materials_context,
|
|
326
328
|
)
|
|
327
329
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
"
|
|
331
|
-
"
|
|
332
|
-
"
|
|
333
|
-
"
|
|
334
|
-
"
|
|
335
|
-
"
|
|
336
|
-
"
|
|
337
|
-
"
|
|
338
|
-
"
|
|
339
|
-
"
|
|
340
|
-
"
|
|
341
|
-
"
|
|
342
|
-
"
|
|
330
|
+
|
|
331
|
+
_SixTrack_to_xcoll = {
|
|
332
|
+
"BE": [Beryllium],
|
|
333
|
+
"AL": [Aluminium],
|
|
334
|
+
"CU": [Copper],
|
|
335
|
+
"W": [Tungsten, TungstenCrystal],
|
|
336
|
+
"PB": [Lead],
|
|
337
|
+
"C": [Carbon, CarbonCrystal],
|
|
338
|
+
"C2": [Carbon2],
|
|
339
|
+
"Si": [Silicon, SiliconCrystal],
|
|
340
|
+
"Ge": [Germanium, GermaniumCrystal],
|
|
341
|
+
"MoGR": [MolybdenumGraphite],
|
|
342
|
+
"CuCD": [CopperDiamond],
|
|
343
|
+
"Mo": [Molybdenum],
|
|
344
|
+
"Glid": [Glidcop],
|
|
345
|
+
"Iner": [Inermet]
|
|
343
346
|
}
|
|
347
|
+
|
|
348
|
+
def SixTrack_to_xcoll(mat):
|
|
349
|
+
materials = {kk.lower(): vv for kk, vv in _SixTrack_to_xcoll.items()}
|
|
350
|
+
return materials[mat.lower()]
|
|
351
|
+
|
|
352
|
+
def SixTrack_from_xcoll(material):
|
|
353
|
+
results = [kk for kk, vv in _SixTrack_to_xcoll.items()
|
|
354
|
+
if material.name == vv[0].name]
|
|
355
|
+
if len(results) == 0:
|
|
356
|
+
raise ValueError(f"Material {material.name} not found in SixTrack library!")
|
|
357
|
+
return results[0]
|
|
358
|
+
|
|
359
|
+
def SixTrack_from_xcoll_crystal(material):
|
|
360
|
+
results = [kk for kk, vv in _SixTrack_to_xcoll.items()
|
|
361
|
+
if len(vv) > 1 and material.name == vv[1].name]
|
|
362
|
+
if len(results) == 0:
|
|
363
|
+
raise ValueError(f"Material {material.name} not found in SixTrack library!")
|
|
364
|
+
return results[0]
|
|
365
|
+
|
|
@@ -80,7 +80,7 @@ double soln3(double a, double b, double dh, double smax) {
|
|
|
80
80
|
/*gpufun*/
|
|
81
81
|
double* scamcs(LocalParticle* part, double x0, double xp0, double s) {
|
|
82
82
|
double* result = (double*)malloc(2 * sizeof(double));
|
|
83
|
-
|
|
83
|
+
|
|
84
84
|
// Generate two Gaussian random numbers z1 and z2
|
|
85
85
|
double r2 = 0;
|
|
86
86
|
double v1 = 0;
|
|
@@ -107,7 +107,14 @@ double* scamcs(LocalParticle* part, double x0, double xp0, double s) {
|
|
|
107
107
|
|
|
108
108
|
|
|
109
109
|
/*gpufun*/
|
|
110
|
-
|
|
110
|
+
void mcs(EverestData restrict everest, LocalParticle* part, double length, double p, int edge_check){
|
|
111
|
+
InteractionRecordData record = everest->coll->record;
|
|
112
|
+
RecordIndex record_index = everest->coll->record_index;
|
|
113
|
+
int8_t sc = everest->coll->record_scatterings;
|
|
114
|
+
|
|
115
|
+
// First log particle at start of multiple coulomb scattering
|
|
116
|
+
int64_t i_slot = -1;
|
|
117
|
+
if (sc) i_slot = InteractionRecordData_log(record, record_index, part, XC_MULTIPLE_COULOMB_SCATTERING);
|
|
111
118
|
|
|
112
119
|
double const radl = everest->coll->radl;
|
|
113
120
|
double s;
|
|
@@ -115,9 +122,18 @@ double* mcs(EverestData restrict everest, LocalParticle* part, double zlm1, doub
|
|
|
115
122
|
double h = 0.001;
|
|
116
123
|
double dh = 0.0001;
|
|
117
124
|
double bn0 = 0.4330127019;
|
|
118
|
-
double rlen0 =
|
|
125
|
+
double rlen0 = length/radl;
|
|
119
126
|
double rlen = rlen0;
|
|
120
|
-
|
|
127
|
+
|
|
128
|
+
double x = LocalParticle_get_x(part);
|
|
129
|
+
double z = LocalParticle_get_y(part);
|
|
130
|
+
#ifdef XCOLL_USE_EXACT
|
|
131
|
+
double xp = LocalParticle_get_exact_xp(part); // This is tangent
|
|
132
|
+
double zp = LocalParticle_get_exact_yp(part); // This is tangent
|
|
133
|
+
#else
|
|
134
|
+
double xp = LocalParticle_get_xp(part);
|
|
135
|
+
double zp = LocalParticle_get_yp(part);
|
|
136
|
+
#endif
|
|
121
137
|
|
|
122
138
|
x = (x/theta)/radl;
|
|
123
139
|
xp = xp/theta;
|
|
@@ -169,12 +185,17 @@ double* mcs(EverestData restrict everest, LocalParticle* part, double zlm1, doub
|
|
|
169
185
|
zp = res[1];
|
|
170
186
|
free(res);
|
|
171
187
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
188
|
+
LocalParticle_set_x(part, x*theta*radl);
|
|
189
|
+
LocalParticle_set_y(part, z*theta*radl);
|
|
190
|
+
#ifdef XCOLL_USE_EXACT
|
|
191
|
+
LocalParticle_set_exact_xp_yp(part, xp*theta, zp*theta);
|
|
192
|
+
#else
|
|
193
|
+
LocalParticle_set_xp_yp(part, xp*theta, zp*theta);
|
|
194
|
+
#endif
|
|
195
|
+
LocalParticle_add_to_s(part, s*radl);
|
|
196
|
+
|
|
197
|
+
// Finally log particle at end of multiple coulomb scattering
|
|
198
|
+
if (sc) InteractionRecordData_log_child(record, i_slot, part);
|
|
178
199
|
}
|
|
179
200
|
|
|
180
201
|
#endif /* XCOLL_EVEREST_MCS_H */
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// copyright ############################### #
|
|
2
|
+
// This file is part of the Xcoll Package. #
|
|
3
|
+
// Copyright (c) CERN, 2024. #
|
|
4
|
+
// ######################################### #
|
|
5
|
+
|
|
6
|
+
#ifndef XCOLL_EVEREST_NUCL_H
|
|
7
|
+
#define XCOLL_EVEREST_NUCL_H
|
|
8
|
+
#include <math.h>
|
|
9
|
+
#include <stdio.h>
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
/*gpufun*/
|
|
13
|
+
double nuclear_interaction(EverestData restrict everest, LocalParticle* part, double pc) {
|
|
14
|
+
InteractionRecordData record = everest->coll->record;
|
|
15
|
+
RecordIndex record_index = everest->coll->record_index;
|
|
16
|
+
int8_t sc = everest->coll->record_scatterings;
|
|
17
|
+
|
|
18
|
+
#ifdef XCOLL_REFINE_ENERGY
|
|
19
|
+
calculate_scattering(everest, pc);
|
|
20
|
+
#endif
|
|
21
|
+
|
|
22
|
+
//Choose nuclear interaction
|
|
23
|
+
double aran = RandomUniform_generate(part);
|
|
24
|
+
int ichoix = 1;
|
|
25
|
+
|
|
26
|
+
while (aran > everest->cprob[ichoix]) {
|
|
27
|
+
ichoix += 1;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
//Do the interaction
|
|
31
|
+
int64_t i_slot = -1;
|
|
32
|
+
if (ichoix==1) {
|
|
33
|
+
if (sc) i_slot = InteractionRecordData_log(record, record_index, part, XC_ABSORBED);
|
|
34
|
+
LocalParticle_set_state(part, XC_LOST_ON_EVEREST_COLL);
|
|
35
|
+
|
|
36
|
+
} else {
|
|
37
|
+
double teta;
|
|
38
|
+
if (ichoix==2) { // p-n elastic
|
|
39
|
+
if (sc) i_slot = InteractionRecordData_log(record, record_index, part, XC_PN_ELASTIC);
|
|
40
|
+
teta = sqrt(RandomExponential_generate(part)/everest->bn)/pc;
|
|
41
|
+
|
|
42
|
+
} else if (ichoix==3) { // p-p elastic
|
|
43
|
+
if (sc) i_slot = InteractionRecordData_log(record, record_index, part, XC_PP_ELASTIC);
|
|
44
|
+
teta = sqrt(RandomExponential_generate(part)/everest->bpp)/pc;
|
|
45
|
+
|
|
46
|
+
} else if (ichoix==4) { // Single diffractive
|
|
47
|
+
if (sc) i_slot = InteractionRecordData_log(record, record_index, part, XC_SINGLE_DIFFRACTIVE);
|
|
48
|
+
double xm2 = exp(RandomUniform_generate(part)*everest->xln15s);
|
|
49
|
+
double bsd;
|
|
50
|
+
if (xm2 < 2.) {
|
|
51
|
+
bsd = 2*everest->bpp;
|
|
52
|
+
} else if (xm2 >= 2. && xm2 <= 5.) {
|
|
53
|
+
bsd = ((106.0 - 17.0*xm2)*everest->bpp)/36.0;
|
|
54
|
+
} else {
|
|
55
|
+
bsd = (7*everest->bpp)/12.0;
|
|
56
|
+
}
|
|
57
|
+
double pc_in = pc;
|
|
58
|
+
pc = pc*(1 - xm2/everest->ecmsq);
|
|
59
|
+
// Corrected 1/p into 1/sqrt(pp')
|
|
60
|
+
teta = sqrt(RandomExponential_generate(part)/bsd)/sqrt(pc_in*pc);
|
|
61
|
+
|
|
62
|
+
} else { // Coulomb
|
|
63
|
+
if (sc) i_slot = InteractionRecordData_log(record, record_index, part, XC_COULOMB);
|
|
64
|
+
teta = sqrt(RandomRutherford_generate(everest->coll->rng, part))/pc;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// TODO: I am not convinced that we can just sample two independent random numbers
|
|
68
|
+
// I believe it should be tan(tx) = cos(phi) * tan(teta) and tan(ty) = sin(phi) * tan(teta)
|
|
69
|
+
// with phi uniformly sampled between 0 and 2 pi
|
|
70
|
+
double tx = teta*RandomNormal_generate(part);
|
|
71
|
+
double tz = teta*RandomNormal_generate(part);
|
|
72
|
+
|
|
73
|
+
//Change the angles
|
|
74
|
+
#ifdef XCOLL_USE_EXACT
|
|
75
|
+
LocalParticle_add_to_exact_xp_yp(part, tx, tz);
|
|
76
|
+
#else
|
|
77
|
+
LocalParticle_add_to_xp_yp(part, tx, tz);
|
|
78
|
+
#endif
|
|
79
|
+
|
|
80
|
+
if (sc) InteractionRecordData_log_child(record, i_slot, part);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return pc;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
#endif /* XCOLL_EVEREST_NUCL_H */
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
|
|
13
13
|
/*gpufun*/
|
|
14
14
|
void calculate_scattering(EverestData restrict everest, double p) {
|
|
15
|
-
|
|
15
|
+
if (everest->coll->only_mcs){ // TODO: this should be done smarter
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
16
18
|
// Material properties
|
|
17
19
|
double const anuc = everest->coll->anuc;
|
|
18
20
|
double const rho = everest->coll->rho;
|
|
@@ -92,6 +94,9 @@ void calculate_scattering(EverestData restrict everest, double p) {
|
|
|
92
94
|
|
|
93
95
|
/*gpufun*/
|
|
94
96
|
void calculate_ionisation_properties(EverestData restrict everest, double pc) {
|
|
97
|
+
if (everest->coll->only_mcs){ // TODO: this should be done smarter
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
95
100
|
|
|
96
101
|
// Material properties
|
|
97
102
|
double const exenergy = everest->coll->exenergy;
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
gitdir: ../../../../.git/modules/xcoll/scattering_routines/geant4/collimasim
|