xcoll 0.4.0__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 +2 -1
- xcoll/beam_elements/__init__.py +7 -1
- xcoll/beam_elements/absorber.py +2 -2
- xcoll/beam_elements/base.py +105 -67
- xcoll/beam_elements/blowup.py +198 -0
- xcoll/beam_elements/{collimators_src → elements_src}/black_absorber.h +21 -3
- xcoll/beam_elements/{collimators_src → elements_src}/black_crystal.h +20 -2
- 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 +19 -2
- xcoll/beam_elements/{collimators_src → elements_src}/everest_collimator.h +19 -3
- xcoll/beam_elements/{collimators_src → elements_src}/everest_crystal.h +30 -9
- xcoll/beam_elements/everest.py +5 -6
- xcoll/beam_elements/monitor.py +428 -0
- xcoll/colldb.py +103 -74
- xcoll/general.py +4 -4
- xcoll/initial_distribution.py +18 -6
- xcoll/install.py +3 -1
- xcoll/interaction_record/interaction_record.py +126 -80
- xcoll/interaction_record/interaction_record_src/interaction_record.h +43 -43
- xcoll/line_tools.py +8 -9
- xcoll/lossmap.py +48 -38
- xcoll/scattering_routines/everest/amorphous.h +4 -11
- xcoll/scattering_routines/everest/channeling.h +3 -8
- xcoll/scattering_routines/everest/everest.h +4 -1
- xcoll/scattering_routines/everest/jaw.h +4 -3
- xcoll/scattering_routines/everest/materials.py +35 -15
- xcoll/scattering_routines/everest/multiple_coulomb_scattering.h +2 -2
- xcoll/scattering_routines/everest/nuclear_interaction.h +1 -1
- 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/collimator_geometry.h +9 -10
- xcoll/scattering_routines/geometry/crystal_geometry.h +9 -6
- {xcoll-0.4.0.dist-info → xcoll-0.5.0.dist-info}/METADATA +1 -1
- xcoll-0.5.0.dist-info/RECORD +413 -0
- xcoll/scattering_routines/fluka/build_fluka_input.py +0 -58
- xcoll-0.4.0.dist-info/RECORD +0 -126
- {xcoll-0.4.0.dist-info → xcoll-0.5.0.dist-info}/LICENSE +0 -0
- {xcoll-0.4.0.dist-info → xcoll-0.5.0.dist-info}/NOTICE +0 -0
- {xcoll-0.4.0.dist-info → xcoll-0.5.0.dist-info}/WHEEL +0 -0
xcoll/colldb.py
CHANGED
|
@@ -4,13 +4,16 @@
|
|
|
4
4
|
# ######################################### #
|
|
5
5
|
|
|
6
6
|
import io
|
|
7
|
+
import re
|
|
7
8
|
import json
|
|
8
9
|
import numpy as np
|
|
9
10
|
import pandas as pd
|
|
11
|
+
from pathlib import Path
|
|
10
12
|
|
|
11
13
|
import xtrack as xt
|
|
12
14
|
|
|
13
|
-
from .beam_elements import BlackAbsorber, EverestCollimator, EverestCrystal,
|
|
15
|
+
from .beam_elements import BlackAbsorber, BlackCrystal, EverestCollimator, EverestCrystal, \
|
|
16
|
+
BaseCollimator, BaseCrystal, _all_collimator_classes
|
|
14
17
|
from .install import install_elements
|
|
15
18
|
from .scattering_routines.everest.materials import SixTrack_to_xcoll
|
|
16
19
|
|
|
@@ -19,7 +22,7 @@ def _initialise_None(dct):
|
|
|
19
22
|
fields = {'gap': None, 'angle': 0, 'offset': 0, 'parking': 1, 'jaw': None, 'family': None}
|
|
20
23
|
fields.update({'overwritten_keys': [], 'side': 'both', 'material': None, 'stage': None})
|
|
21
24
|
fields.update({'length': 0, 'collimator_type': None, 'active': True, 'crystal': None, 'tilt': 0})
|
|
22
|
-
fields.update({'bending_radius':
|
|
25
|
+
fields.update({'bending_radius': None, 'bending_angle': None, 'width': 0, 'height': 0, 'miscut': 0})
|
|
23
26
|
for f, val in fields.items():
|
|
24
27
|
if f not in dct.keys():
|
|
25
28
|
dct[f] = val
|
|
@@ -76,7 +79,7 @@ class CollimatorDatabase:
|
|
|
76
79
|
kwargs.get('ignore_crystals', True))
|
|
77
80
|
self.nemitt_x = kwargs['nemitt_x']
|
|
78
81
|
self.nemitt_y = kwargs['nemitt_y']
|
|
79
|
-
self.
|
|
82
|
+
self._elements = {}
|
|
80
83
|
|
|
81
84
|
|
|
82
85
|
def _parse_dict(self, coll, fam, beam=None, _yaml_merged=False, ignore_crystals=True):
|
|
@@ -147,7 +150,6 @@ class CollimatorDatabase:
|
|
|
147
150
|
|
|
148
151
|
@classmethod
|
|
149
152
|
def from_yaml(cls, file, **kwargs):
|
|
150
|
-
|
|
151
153
|
# Only do the import here, as to not force people to install
|
|
152
154
|
# ruamel if they don't load CollimatorDatabase yaml's
|
|
153
155
|
from ruamel.yaml import YAML
|
|
@@ -155,7 +157,8 @@ class CollimatorDatabase:
|
|
|
155
157
|
if isinstance(file, io.IOBase):
|
|
156
158
|
dct = yaml.load(file)
|
|
157
159
|
else:
|
|
158
|
-
|
|
160
|
+
file = Path(file).resolve()
|
|
161
|
+
with file.open('r') as fid:
|
|
159
162
|
dct = yaml.load(fid)
|
|
160
163
|
dct = _dict_keys_to_lower(dct)
|
|
161
164
|
|
|
@@ -214,7 +217,8 @@ class CollimatorDatabase:
|
|
|
214
217
|
if isinstance(file, io.IOBase):
|
|
215
218
|
dct = json.load(file)
|
|
216
219
|
else:
|
|
217
|
-
|
|
220
|
+
file = Path(file).resolve()
|
|
221
|
+
with file.open('r') as fid:
|
|
218
222
|
dct = json.load(fid)
|
|
219
223
|
dct = _dict_keys_to_lower(dct)
|
|
220
224
|
return cls.from_dict(dct, **kwargs)
|
|
@@ -259,17 +263,16 @@ class CollimatorDatabase:
|
|
|
259
263
|
|
|
260
264
|
@classmethod
|
|
261
265
|
def from_SixTrack(cls, file, ignore_crystals=True, **kwargs):
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
with open(file, 'r') as infile:
|
|
266
|
+
file = Path(file).resolve()
|
|
267
|
+
with file.open('r') as fp:
|
|
265
268
|
coll_data_string = ''
|
|
266
269
|
family_settings = {}
|
|
267
270
|
family_types = {}
|
|
268
271
|
side = {}
|
|
269
|
-
cry_fields = ['bending_radius', 'width', 'height', 'thick', 'miscut', 'crystal']
|
|
272
|
+
cry_fields = ['bending_radius', 'width', 'height', 'thick', 'tilt', 'miscut', 'crystal']
|
|
270
273
|
cry = {}
|
|
271
274
|
|
|
272
|
-
for line in
|
|
275
|
+
for line in fp:
|
|
273
276
|
if line.startswith('#'):
|
|
274
277
|
continue # Comment
|
|
275
278
|
sline = line.split()
|
|
@@ -282,8 +285,8 @@ class CollimatorDatabase:
|
|
|
282
285
|
elif sline[0].lower() == "crystal":
|
|
283
286
|
cry[sline[1]] = {}
|
|
284
287
|
for i, key in enumerate(cry_fields):
|
|
285
|
-
idx = i+2
|
|
286
|
-
if i <
|
|
288
|
+
idx = i+2
|
|
289
|
+
if i < 6:
|
|
287
290
|
cry[sline[1]][key] = float(sline[idx])
|
|
288
291
|
else:
|
|
289
292
|
cry[sline[1]][key] = int(sline[idx])
|
|
@@ -507,77 +510,85 @@ class CollimatorDatabase:
|
|
|
507
510
|
_print_colls(bx_colls, self, 'bx', file)
|
|
508
511
|
print('WARNING -- some collimators could not be assigned to b1 or b2. Tracking might not work with those collimators. Please manually change the output file if necessary.')
|
|
509
512
|
|
|
513
|
+
|
|
510
514
|
# ====================================
|
|
511
515
|
# ====== Installing collimators ======
|
|
512
516
|
# ====================================
|
|
513
517
|
|
|
514
|
-
def
|
|
515
|
-
|
|
516
|
-
elements = []
|
|
517
|
-
if names is None:
|
|
518
|
+
def _get_names_from_line(self, line, names, families):
|
|
519
|
+
if names is None and families is None:
|
|
518
520
|
names = self.collimator_names
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
521
|
+
elif names is None:
|
|
522
|
+
names = self.get_collimators_from_family(families)
|
|
523
|
+
elif families is not None:
|
|
524
|
+
names.append(self.get_collimators_from_family(families))
|
|
525
|
+
return list(set(names)) # Remove duplicates
|
|
524
526
|
|
|
527
|
+
def _check_installed(self, line, name, collimator_class):
|
|
525
528
|
# Check that collimator is not installed as different type
|
|
526
529
|
# TODO: automatically replace collimator type and print warning
|
|
527
|
-
if isinstance(line[name],
|
|
528
|
-
raise ValueError(f"Trying to install {name} as {
|
|
529
|
-
+ f"
|
|
530
|
+
if isinstance(line[name], _all_collimator_classes):
|
|
531
|
+
raise ValueError(f"Trying to install {name} as {collimator_class.__name__}, "
|
|
532
|
+
+ f"but it is already installed as {line[name].__class__.__name__}!\n"
|
|
530
533
|
+ f"Please reconstruct the line.")
|
|
531
|
-
|
|
532
534
|
# TODO: only allow Marker elements, no Drifts!!
|
|
533
535
|
# How to do this with importing a line for MAD-X or SixTrack...?
|
|
536
|
+
# Maybe we want a DriftCollimator type in Xtrack as a general placeholder
|
|
534
537
|
elif not isinstance(line[name], (xt.Marker, xt.Drift)):
|
|
535
|
-
raise ValueError(f"Trying to install {name} as {
|
|
536
|
-
+ f"
|
|
538
|
+
raise ValueError(f"Trying to install {name} as {collimator_class.__name__}, "
|
|
539
|
+
+ f"but the line element to replace is not an xtrack.Marker "
|
|
537
540
|
+ f"(or xtrack.Drift)!\nPlease check the name, or correct the "
|
|
538
541
|
+ f"element.")
|
|
539
|
-
el.emittance = [self.nemitt_x, self.nemitt_y]
|
|
540
|
-
elements.append(el)
|
|
541
|
-
install_elements(line, names, elements, need_apertures=need_apertures)
|
|
542
542
|
|
|
543
|
-
def
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
if
|
|
547
|
-
|
|
543
|
+
def _create_collimator(self, line, collimator_class, name, **kwargs):
|
|
544
|
+
assert issubclass(collimator_class, BaseCollimator)
|
|
545
|
+
self._check_installed(line, name, collimator_class)
|
|
546
|
+
if kwargs.pop('verbose', False):
|
|
547
|
+
print(f"Installing {name:20} as {collimator_class.__name__}")
|
|
548
|
+
el = collimator_class(gap=self[name]['gap'], angle=self[name]['angle'],
|
|
549
|
+
length=self[name]['length'], side=self[name]['side'],
|
|
550
|
+
_tracking=False, **kwargs)
|
|
551
|
+
el.emittance = [self.nemitt_x, self.nemitt_y]
|
|
552
|
+
self._elements[name] = el
|
|
553
|
+
|
|
554
|
+
def _create_crystal(self, line, crystal_class, name, **kwargs):
|
|
555
|
+
assert issubclass(crystal_class, BaseCrystal)
|
|
556
|
+
self._check_installed(line, name, crystal_class)
|
|
557
|
+
if kwargs.pop('verbose', False):
|
|
558
|
+
print(f"Installing {name:20} as {crystal_class.__name__}")
|
|
559
|
+
el = crystal_class(gap=self[name]['gap'], angle=self[name]['angle'],
|
|
560
|
+
length=self[name]['length'], side=self[name]['side'],
|
|
561
|
+
bending_radius=self[name]['bending_radius'],
|
|
562
|
+
width=self[name]['width'], height=self[name]['height'],
|
|
563
|
+
_tracking=False, **kwargs)
|
|
564
|
+
el.emittance = [self.nemitt_x, self.nemitt_y]
|
|
565
|
+
self._elements[name] = el
|
|
566
|
+
|
|
567
|
+
def install_black_absorbers(self, line, *, names=None, families=None, verbose=False, need_apertures=True):
|
|
568
|
+
names = self._get_names_from_line(line, names, families)
|
|
548
569
|
for name in names:
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
if verbose: print(f"Installing {name:20} as EverestCollimator")
|
|
552
|
-
el = EverestCollimator(gap=self[name]['gap'], angle=self[name]['angle'],
|
|
553
|
-
length=self[name]['length'], side=self[name]['side'],
|
|
554
|
-
material=mat[0], _tracking=False)
|
|
570
|
+
if self[name]['bending_radius'] is None:
|
|
571
|
+
self._create_collimator(line, BlackAbsorber, name, verbose=verbose)
|
|
555
572
|
else:
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
lattice=self[name]['crystal'], bending_radius=self[name]['bending_radius'],
|
|
560
|
-
width=self[name]['width'], height=self[name]['height'],
|
|
561
|
-
miscut=self[name]['miscut'], _tracking=False)
|
|
562
|
-
|
|
563
|
-
# Check that collimator is not installed as different type
|
|
564
|
-
# TODO: automatically replace collimator type and print warning
|
|
565
|
-
if isinstance(line[name], tuple(collimator_classes)):
|
|
566
|
-
raise ValueError(f"Trying to install {name} as {el.__class__.__name__},"
|
|
567
|
-
+ f" but it is already installed as {line[name].__class__.__name__}!\n"
|
|
568
|
-
+ f"Please reconstruct the line.")
|
|
573
|
+
self._create_crystal(line, BlackCrystal, name, verbose=verbose)
|
|
574
|
+
elements = [self._elements[name] for name in names]
|
|
575
|
+
install_elements(line, names, elements, need_apertures=need_apertures)
|
|
569
576
|
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
577
|
+
def install_everest_collimators(self, line, *, names=None, families=None, verbose=False, need_apertures=True):
|
|
578
|
+
names = self._get_names_from_line(line, names, families)
|
|
579
|
+
for name in names:
|
|
580
|
+
mat = SixTrack_to_xcoll(self[name]['material'])
|
|
581
|
+
if self[name]['bending_radius'] is None:
|
|
582
|
+
self._create_collimator(line, EverestCollimator, name, material=mat[0],
|
|
583
|
+
verbose=verbose)
|
|
584
|
+
else:
|
|
585
|
+
self._create_crystal(line, EverestCrystal, name, material=mat[1],
|
|
586
|
+
lattice=self[name]['crystal'], verbose=verbose,
|
|
587
|
+
miscut=self[name]['miscut'])
|
|
588
|
+
elements = [self._elements[name] for name in names]
|
|
579
589
|
install_elements(line, names, elements, need_apertures=need_apertures)
|
|
580
590
|
|
|
591
|
+
|
|
581
592
|
# ==================================
|
|
582
593
|
# ====== Accessing attributes ======
|
|
583
594
|
# ==================================
|
|
@@ -588,15 +599,35 @@ class CollimatorDatabase:
|
|
|
588
599
|
|
|
589
600
|
@property
|
|
590
601
|
def collimator_families(self):
|
|
591
|
-
|
|
602
|
+
families = {fam: [] for fam in self._family_dict.keys()}
|
|
603
|
+
families["no family"] = []
|
|
604
|
+
for name in self.collimator_names:
|
|
605
|
+
if 'family' not in self[name] or self[name]['family'].lower() == 'unknown':
|
|
606
|
+
families["no family"].append(name)
|
|
607
|
+
else:
|
|
608
|
+
families[self[name]['family']].append(name)
|
|
609
|
+
return families
|
|
610
|
+
|
|
611
|
+
def get_collimators_from_family(self, family):
|
|
612
|
+
if not hasattr(family, '__iter__') and not isinstance(family, str):
|
|
613
|
+
family = [family]
|
|
614
|
+
result = []
|
|
615
|
+
for fam in family:
|
|
616
|
+
if fam not in self.collimator_families:
|
|
617
|
+
raise ValueError(f"Family '{fam}' not found in CollimatorDatabase!")
|
|
618
|
+
result += self.collimator_families[fam]
|
|
619
|
+
return result
|
|
592
620
|
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
621
|
+
@property
|
|
622
|
+
def properties(self):
|
|
623
|
+
return {attr for d in self._collimator_dict.values() for attr in d.keys()}
|
|
624
|
+
|
|
625
|
+
def __getattr__(self, attr):
|
|
626
|
+
if attr in self.properties:
|
|
627
|
+
# TODO: include families
|
|
628
|
+
return {kk: vv.get(attr, None) for kk, vv in self._collimator_dict.items()}
|
|
598
629
|
else:
|
|
599
|
-
raise ValueError(f"
|
|
630
|
+
raise ValueError(f"Property `{attr}` not present in CollimatorDatabase!")
|
|
600
631
|
|
|
601
632
|
def __getitem__(self, name):
|
|
602
633
|
if name in self._family_dict:
|
|
@@ -604,7 +635,5 @@ class CollimatorDatabase:
|
|
|
604
635
|
elif name in self._collimator_dict:
|
|
605
636
|
return self._collimator_dict[name]
|
|
606
637
|
else:
|
|
607
|
-
raise ValueError(f"Family nor collimator
|
|
608
|
-
|
|
609
|
-
|
|
638
|
+
raise ValueError(f"Family nor collimator `{name}` found in CollimatorDatabase!")
|
|
610
639
|
|
xcoll/general.py
CHANGED
|
@@ -9,8 +9,8 @@ _pkg_root = Path(__file__).parent.absolute()
|
|
|
9
9
|
|
|
10
10
|
citation = "F.F. Van der Veken, et al.: Recent Developments with the New Tools for Collimation Simulations in Xsuite, Proceedings of HB2023, Geneva, Switzerland."
|
|
11
11
|
|
|
12
|
-
#
|
|
12
|
+
# ======================
|
|
13
13
|
# Do not change
|
|
14
|
-
#
|
|
15
|
-
__version__ = '0.
|
|
16
|
-
#
|
|
14
|
+
# ======================
|
|
15
|
+
__version__ = '0.5.0'
|
|
16
|
+
# ======================
|
xcoll/initial_distribution.py
CHANGED
|
@@ -9,7 +9,7 @@ import xtrack as xt
|
|
|
9
9
|
import xobjects as xo
|
|
10
10
|
import xpart as xp
|
|
11
11
|
|
|
12
|
-
from .beam_elements import
|
|
12
|
+
from .beam_elements import _all_collimator_classes, EverestCrystal
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
def generate_pencil_on_collimator(line, name, num_particles, *, side='+-', pencil_spread=1e-6,
|
|
@@ -24,7 +24,7 @@ def generate_pencil_on_collimator(line, name, num_particles, *, side='+-', penci
|
|
|
24
24
|
|
|
25
25
|
coll = line[name]
|
|
26
26
|
|
|
27
|
-
if not isinstance(coll, tuple(
|
|
27
|
+
if not isinstance(coll, tuple(_all_collimator_classes)):
|
|
28
28
|
raise ValueError("Need to provide a valid collimator!")
|
|
29
29
|
|
|
30
30
|
if coll.optics is None:
|
|
@@ -171,14 +171,26 @@ def _generate_4D_pencil_one_jaw(line, name, num_particles, plane, side, impact_p
|
|
|
171
171
|
|
|
172
172
|
if side == '+':
|
|
173
173
|
if is_converging:
|
|
174
|
-
|
|
174
|
+
if isinstance(coll, EverestCrystal):
|
|
175
|
+
pencil_pos = coll.jaw_U + impact_parameter
|
|
176
|
+
else:
|
|
177
|
+
pencil_pos = coll.jaw_LU + impact_parameter
|
|
175
178
|
else:
|
|
176
|
-
|
|
179
|
+
if isinstance(coll, EverestCrystal):
|
|
180
|
+
pencil_pos = coll.jaw_D - impact_parameter
|
|
181
|
+
else:
|
|
182
|
+
pencil_pos = coll.jaw_LD + impact_parameter
|
|
177
183
|
elif side == '-':
|
|
178
184
|
if is_converging:
|
|
179
|
-
|
|
185
|
+
if isinstance(coll, EverestCrystal):
|
|
186
|
+
pencil_pos = coll.jaw_U - impact_parameter
|
|
187
|
+
else:
|
|
188
|
+
pencil_pos = coll.jaw_RU - impact_parameter
|
|
180
189
|
else:
|
|
181
|
-
|
|
190
|
+
if isinstance(coll, EverestCrystal):
|
|
191
|
+
pencil_pos = coll.jaw_D + impact_parameter
|
|
192
|
+
else:
|
|
193
|
+
pencil_pos = coll.jaw_RD - impact_parameter
|
|
182
194
|
|
|
183
195
|
# Collimator plane: generate pencil distribution
|
|
184
196
|
pencil, p_pencil = xp.generate_2D_pencil_with_absolute_cut(
|
xcoll/install.py
CHANGED
|
@@ -83,6 +83,8 @@ def _get_s_start(line, name, length, tab=None):
|
|
|
83
83
|
existing_length = line[name].length
|
|
84
84
|
else:
|
|
85
85
|
existing_length = 0
|
|
86
|
+
if name not in tab.name:
|
|
87
|
+
raise ValueError(f"Element {name} not found in line. Need to mmanually provide `at_s`.")
|
|
86
88
|
return tab.rows[name].s[0] + existing_length/2. - length/2
|
|
87
89
|
|
|
88
90
|
|
|
@@ -171,7 +173,7 @@ def prepare_space_for_element(line, name, s_start, s_end, tab=None, s_tol=1.e-6)
|
|
|
171
173
|
continue
|
|
172
174
|
if not element_type.startswith('Limit'):
|
|
173
175
|
print(f"Warning: Removed active element {element_name} "
|
|
174
|
-
+ f"at location inside collimator!")
|
|
176
|
+
+ f"at location inside collimator {name}!")
|
|
175
177
|
length = line[element_name].length if hasattr(line[element_name], 'length') else 0
|
|
176
178
|
line.element_dict[element_name] = xt.Drift(length=length)
|
|
177
179
|
|