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.

Files changed (350) hide show
  1. xcoll/__init__.py +13 -4
  2. xcoll/beam_elements/__init__.py +14 -6
  3. xcoll/beam_elements/absorber.py +41 -7
  4. xcoll/beam_elements/base.py +1202 -247
  5. xcoll/beam_elements/blowup.py +198 -0
  6. xcoll/beam_elements/elements_src/black_absorber.h +136 -0
  7. xcoll/beam_elements/elements_src/black_crystal.h +129 -0
  8. xcoll/beam_elements/elements_src/blowup.h +42 -0
  9. xcoll/beam_elements/elements_src/emittance_monitor.h +109 -0
  10. xcoll/beam_elements/{collimators_src → elements_src}/everest_block.h +59 -30
  11. xcoll/beam_elements/elements_src/everest_collimator.h +237 -0
  12. xcoll/beam_elements/elements_src/everest_crystal.h +280 -0
  13. xcoll/beam_elements/everest.py +65 -119
  14. xcoll/beam_elements/monitor.py +428 -0
  15. xcoll/colldb.py +276 -747
  16. xcoll/general.py +5 -5
  17. xcoll/headers/checks.h +1 -1
  18. xcoll/headers/particle_states.h +2 -2
  19. xcoll/initial_distribution.py +207 -0
  20. xcoll/install.py +179 -0
  21. xcoll/interaction_record/__init__.py +1 -0
  22. xcoll/interaction_record/interaction_record.py +298 -0
  23. xcoll/interaction_record/interaction_record_src/interaction_record.h +98 -0
  24. xcoll/{impacts → interaction_record}/interaction_types.py +11 -4
  25. xcoll/line_tools.py +82 -0
  26. xcoll/lossmap.py +219 -0
  27. xcoll/manager.py +2 -937
  28. xcoll/rf_sweep.py +1 -1
  29. xcoll/scattering_routines/everest/amorphous.h +232 -0
  30. xcoll/scattering_routines/everest/channeling.h +240 -0
  31. xcoll/scattering_routines/everest/crystal_parameters.h +137 -0
  32. xcoll/scattering_routines/everest/everest.h +11 -30
  33. xcoll/scattering_routines/everest/everest.py +13 -10
  34. xcoll/scattering_routines/everest/jaw.h +28 -197
  35. xcoll/scattering_routines/everest/materials.py +37 -15
  36. xcoll/scattering_routines/everest/multiple_coulomb_scattering.h +31 -10
  37. xcoll/scattering_routines/everest/nuclear_interaction.h +86 -0
  38. xcoll/scattering_routines/everest/properties.h +6 -1
  39. xcoll/scattering_routines/fluka/flukaio/lib/libFlukaIO64.a +0 -0
  40. xcoll/scattering_routines/geant4/collimasim/.git +1 -0
  41. xcoll/scattering_routines/geant4/collimasim/.gitignore +12 -0
  42. xcoll/scattering_routines/geant4/collimasim/.gitmodules +3 -0
  43. xcoll/scattering_routines/geant4/collimasim/CMakeLists.txt +26 -0
  44. xcoll/scattering_routines/geant4/collimasim/README.md +21 -0
  45. xcoll/scattering_routines/geant4/collimasim/docs/Makefile +20 -0
  46. xcoll/scattering_routines/geant4/collimasim/docs/make.bat +35 -0
  47. xcoll/scattering_routines/geant4/collimasim/docs/source/collimasim.rst +10 -0
  48. xcoll/scattering_routines/geant4/collimasim/docs/source/conf.py +59 -0
  49. xcoll/scattering_routines/geant4/collimasim/docs/source/index.rst +26 -0
  50. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.appveyor.yml +37 -0
  51. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.clang-format +19 -0
  52. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.clang-tidy +65 -0
  53. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.cmake-format.yaml +73 -0
  54. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.git +1 -0
  55. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/CODEOWNERS +9 -0
  56. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/CONTRIBUTING.md +386 -0
  57. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/ISSUE_TEMPLATE/bug-report.yml +45 -0
  58. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/ISSUE_TEMPLATE/config.yml +8 -0
  59. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/dependabot.yml +16 -0
  60. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/labeler.yml +8 -0
  61. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/labeler_merged.yml +3 -0
  62. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/pull_request_template.md +19 -0
  63. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/ci.yml +969 -0
  64. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/configure.yml +84 -0
  65. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/format.yml +48 -0
  66. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/labeler.yml +16 -0
  67. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/pip.yml +103 -0
  68. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.gitignore +45 -0
  69. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.pre-commit-config.yaml +151 -0
  70. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.readthedocs.yml +3 -0
  71. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/CMakeLists.txt +297 -0
  72. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/LICENSE +29 -0
  73. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/MANIFEST.in +6 -0
  74. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/README.rst +180 -0
  75. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/Doxyfile +23 -0
  76. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/Makefile +192 -0
  77. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/_static/theme_overrides.css +11 -0
  78. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/chrono.rst +81 -0
  79. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/custom.rst +93 -0
  80. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/eigen.rst +310 -0
  81. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/functional.rst +109 -0
  82. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/index.rst +43 -0
  83. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/overview.rst +171 -0
  84. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/stl.rst +251 -0
  85. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/strings.rst +305 -0
  86. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/classes.rst +1297 -0
  87. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/embedding.rst +262 -0
  88. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/exceptions.rst +396 -0
  89. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/functions.rst +568 -0
  90. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/misc.rst +337 -0
  91. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/index.rst +13 -0
  92. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/numpy.rst +463 -0
  93. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/object.rst +286 -0
  94. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/utilities.rst +155 -0
  95. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/smart_ptrs.rst +174 -0
  96. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/basics.rst +308 -0
  97. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/benchmark.py +91 -0
  98. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/benchmark.rst +95 -0
  99. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/changelog.rst +2050 -0
  100. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/classes.rst +542 -0
  101. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/cmake/index.rst +8 -0
  102. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/compiling.rst +648 -0
  103. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/conf.py +381 -0
  104. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/faq.rst +343 -0
  105. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/index.rst +48 -0
  106. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/installing.rst +105 -0
  107. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/limitations.rst +72 -0
  108. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11-logo.png +0 -0
  109. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python1.png +0 -0
  110. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python1.svg +427 -0
  111. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python2.png +0 -0
  112. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python2.svg +427 -0
  113. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/reference.rst +130 -0
  114. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/release.rst +96 -0
  115. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/requirements.txt +8 -0
  116. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/upgrade.rst +548 -0
  117. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/attr.h +605 -0
  118. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/buffer_info.h +144 -0
  119. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/cast.h +1432 -0
  120. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/chrono.h +213 -0
  121. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/common.h +2 -0
  122. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/complex.h +65 -0
  123. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/class.h +709 -0
  124. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/common.h +1021 -0
  125. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/descr.h +104 -0
  126. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/init.h +346 -0
  127. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/internals.h +467 -0
  128. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/type_caster_base.h +978 -0
  129. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/typeid.h +55 -0
  130. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/eigen.h +606 -0
  131. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/embed.h +284 -0
  132. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/eval.h +163 -0
  133. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/functional.h +121 -0
  134. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/gil.h +193 -0
  135. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/iostream.h +275 -0
  136. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/numpy.h +1741 -0
  137. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/operators.h +163 -0
  138. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/options.h +65 -0
  139. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/pybind11.h +2497 -0
  140. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/pytypes.h +1879 -0
  141. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl/filesystem.h +103 -0
  142. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl.h +375 -0
  143. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl_bind.h +747 -0
  144. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/noxfile.py +88 -0
  145. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/__init__.py +11 -0
  146. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/__main__.py +52 -0
  147. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/_version.py +12 -0
  148. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/_version.pyi +6 -0
  149. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/commands.py +21 -0
  150. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/py.typed +0 -0
  151. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/setup_helpers.py +482 -0
  152. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/setup_helpers.pyi +63 -0
  153. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pyproject.toml +41 -0
  154. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/setup.cfg +56 -0
  155. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/setup.py +155 -0
  156. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/CMakeLists.txt +503 -0
  157. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/conftest.py +208 -0
  158. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/constructor_stats.h +275 -0
  159. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/cross_module_gil_utils.cpp +73 -0
  160. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/env.py +33 -0
  161. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_python_package/pytest.ini +0 -0
  162. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_python_package/test_files.py +279 -0
  163. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_setuptools/pytest.ini +0 -0
  164. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_setuptools/test_setuphelper.py +143 -0
  165. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/local_bindings.h +85 -0
  166. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/object.h +179 -0
  167. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_cross_module_tests.cpp +151 -0
  168. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_tests.cpp +91 -0
  169. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_tests.h +85 -0
  170. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pytest.ini +19 -0
  171. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/requirements.txt +12 -0
  172. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_async.cpp +26 -0
  173. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_async.py +25 -0
  174. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_buffers.cpp +216 -0
  175. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_buffers.py +163 -0
  176. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_builtin_casters.cpp +286 -0
  177. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_builtin_casters.py +536 -0
  178. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_call_policies.cpp +107 -0
  179. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_call_policies.py +248 -0
  180. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_callbacks.cpp +227 -0
  181. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_callbacks.py +202 -0
  182. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_chrono.cpp +84 -0
  183. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_chrono.py +210 -0
  184. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_class.cpp +550 -0
  185. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_class.py +473 -0
  186. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/CMakeLists.txt +84 -0
  187. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/embed.cpp +21 -0
  188. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_embed/CMakeLists.txt +28 -0
  189. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_function/CMakeLists.txt +39 -0
  190. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_target/CMakeLists.txt +46 -0
  191. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/main.cpp +6 -0
  192. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt +41 -0
  193. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_function/CMakeLists.txt +35 -0
  194. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_target/CMakeLists.txt +41 -0
  195. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/test.py +10 -0
  196. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_constants_and_functions.cpp +165 -0
  197. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_constants_and_functions.py +53 -0
  198. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_copy_move.cpp +238 -0
  199. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_copy_move.py +126 -0
  200. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_casters.cpp +141 -0
  201. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_casters.py +117 -0
  202. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_setup.cpp +41 -0
  203. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_setup.py +50 -0
  204. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_docstring_options.cpp +69 -0
  205. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_docstring_options.py +42 -0
  206. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eigen.cpp +348 -0
  207. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eigen.py +771 -0
  208. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/CMakeLists.txt +47 -0
  209. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/catch.cpp +22 -0
  210. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/external_module.cpp +23 -0
  211. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/test_interpreter.cpp +326 -0
  212. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/test_interpreter.py +15 -0
  213. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_enum.cpp +148 -0
  214. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_enum.py +272 -0
  215. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval.cpp +119 -0
  216. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval.py +51 -0
  217. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval_call.py +5 -0
  218. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.cpp +285 -0
  219. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.h +12 -0
  220. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.py +265 -0
  221. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_factory_constructors.cpp +397 -0
  222. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_factory_constructors.py +520 -0
  223. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_gil_scoped.cpp +49 -0
  224. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_gil_scoped.py +94 -0
  225. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_iostream.cpp +125 -0
  226. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_iostream.py +331 -0
  227. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_kwargs_and_defaults.cpp +153 -0
  228. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_kwargs_and_defaults.py +284 -0
  229. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_local_bindings.cpp +107 -0
  230. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_local_bindings.py +257 -0
  231. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_methods_and_attributes.cpp +412 -0
  232. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_methods_and_attributes.py +517 -0
  233. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_modules.cpp +102 -0
  234. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_modules.py +92 -0
  235. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_multiple_inheritance.cpp +233 -0
  236. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_multiple_inheritance.py +360 -0
  237. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_array.cpp +472 -0
  238. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_array.py +593 -0
  239. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_dtypes.cpp +524 -0
  240. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_dtypes.py +441 -0
  241. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_vectorize.cpp +103 -0
  242. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_vectorize.py +267 -0
  243. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_opaque_types.cpp +73 -0
  244. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_opaque_types.py +59 -0
  245. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_operator_overloading.cpp +235 -0
  246. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_operator_overloading.py +146 -0
  247. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pickling.cpp +189 -0
  248. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pickling.py +82 -0
  249. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pytypes.cpp +560 -0
  250. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pytypes.py +651 -0
  251. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_sequences_and_iterators.cpp +500 -0
  252. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_sequences_and_iterators.py +253 -0
  253. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_smart_ptr.cpp +452 -0
  254. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_smart_ptr.py +318 -0
  255. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl.cpp +342 -0
  256. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl.py +291 -0
  257. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl_binders.cpp +131 -0
  258. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl_binders.py +318 -0
  259. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_tagbased_polymorphic.cpp +144 -0
  260. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_tagbased_polymorphic.py +29 -0
  261. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_thread.cpp +66 -0
  262. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_thread.py +44 -0
  263. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_union.cpp +22 -0
  264. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_union.py +9 -0
  265. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_virtual_functions.cpp +510 -0
  266. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_virtual_functions.py +408 -0
  267. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/valgrind-numpy-scipy.supp +140 -0
  268. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/valgrind-python.supp +117 -0
  269. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindCatch.cmake +70 -0
  270. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindEigen3.cmake +86 -0
  271. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindPythonLibsNew.cmake +257 -0
  272. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/check-style.sh +44 -0
  273. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/cmake_uninstall.cmake.in +23 -0
  274. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/libsize.py +39 -0
  275. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/make_changelog.py +64 -0
  276. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Common.cmake +402 -0
  277. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Config.cmake.in +233 -0
  278. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11NewTools.cmake +276 -0
  279. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Tools.cmake +214 -0
  280. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pyproject.toml +3 -0
  281. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/setup_global.py.in +65 -0
  282. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/setup_main.py.in +41 -0
  283. xcoll/scattering_routines/geant4/collimasim/pyproject.toml +8 -0
  284. xcoll/scattering_routines/geant4/collimasim/setup.py +144 -0
  285. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSPyATInterface.cpp +403 -0
  286. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSPyATInterface.hh +100 -0
  287. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSXtrackInterface.cpp +763 -0
  288. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSXtrackInterface.hh +118 -0
  289. xcoll/scattering_routines/geant4/collimasim/src/collimasim/__init__.py +8 -0
  290. xcoll/scattering_routines/geant4/collimasim/src/collimasim/bindings.cpp +63 -0
  291. xcoll/scattering_routines/geant4/collimasim/src/collimasim/pyCollimatorPass.py +142 -0
  292. xcoll/scattering_routines/geant4/collimasim/src/collimasim/xtrack_collimator.py +556 -0
  293. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/PKG-INFO +6 -0
  294. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/SOURCES.txt +24 -0
  295. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/dependency_links.txt +1 -0
  296. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/not-zip-safe +1 -0
  297. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/top_level.txt +1 -0
  298. xcoll/scattering_routines/geant4/collimasim/tests/README.md +25 -0
  299. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_forions.dat +25 -0
  300. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_new_example.dat +18 -0
  301. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_old_example.dat +68 -0
  302. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_testing.dat +15 -0
  303. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_yaml_example.yaml +110 -0
  304. xcoll/scattering_routines/geant4/collimasim/tests/resources/collgaps.dat +7 -0
  305. xcoll/scattering_routines/geant4/collimasim/tests/resources/collgaps_pyat_test.dat +3 -0
  306. xcoll/scattering_routines/geant4/collimasim/tests/resources/collonly_twiss_file_example.tfs +54 -0
  307. xcoll/scattering_routines/geant4/collimasim/tests/resources/settings.gmad +3 -0
  308. xcoll/scattering_routines/geant4/collimasim/tests/resources/settings_black_absorber.gmad +3 -0
  309. xcoll/scattering_routines/geant4/collimasim/tests/resources/settings_ions.gmad +5 -0
  310. xcoll/scattering_routines/geant4/collimasim/tests/resources/twiss_file_testing.tfs +51 -0
  311. xcoll/scattering_routines/geant4/collimasim/tests/test_pyat.py +65 -0
  312. xcoll/scattering_routines/geant4/collimasim/tests/test_pyat_passmethod.py +59 -0
  313. xcoll/scattering_routines/geant4/collimasim/tests/test_pyat_tracking.py +102 -0
  314. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack.py +75 -0
  315. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_angle.py +74 -0
  316. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_colldb_load.py +84 -0
  317. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_interaction.py +159 -0
  318. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_interaction_ion.py +99 -0
  319. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_ions.py +78 -0
  320. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_lost_energy.py +88 -0
  321. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tilt.py +80 -0
  322. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tracking.py +97 -0
  323. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tracking_ions.py +96 -0
  324. xcoll/scattering_routines/geometry/__init__.py +6 -0
  325. xcoll/scattering_routines/geometry/collimator_geometry.h +218 -0
  326. xcoll/scattering_routines/geometry/crystal_geometry.h +153 -0
  327. xcoll/scattering_routines/geometry/geometry.py +26 -0
  328. xcoll/scattering_routines/geometry/get_s.h +92 -0
  329. xcoll/scattering_routines/geometry/methods.h +111 -0
  330. xcoll/scattering_routines/geometry/objects.h +154 -0
  331. xcoll/scattering_routines/geometry/rotation.h +23 -0
  332. xcoll/scattering_routines/geometry/segments.h +226 -0
  333. xcoll/scattering_routines/geometry/sort.h +184 -0
  334. {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/METADATA +1 -1
  335. xcoll-0.5.0.dist-info/RECORD +413 -0
  336. xcoll/beam_elements/collimators_src/absorber.h +0 -141
  337. xcoll/beam_elements/collimators_src/everest_collimator.h +0 -142
  338. xcoll/beam_elements/collimators_src/everest_crystal.h +0 -115
  339. xcoll/collimator_settings.py +0 -457
  340. xcoll/impacts/__init__.py +0 -1
  341. xcoll/impacts/impacts.py +0 -102
  342. xcoll/impacts/impacts_src/impacts.h +0 -99
  343. xcoll/scattering_routines/everest/crystal.h +0 -1302
  344. xcoll/scattering_routines/everest/scatter.h +0 -169
  345. xcoll/scattering_routines/everest/scatter_crystal.h +0 -260
  346. xcoll/scattering_routines/fluka/build_fluka_input.py +0 -58
  347. xcoll-0.3.6.dist-info/RECORD +0 -111
  348. {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/LICENSE +0 -0
  349. {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/NOTICE +0 -0
  350. {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,74 @@
1
+ import numpy as np
2
+ import xobjects as xo
3
+ import xtrack as xt
4
+ import xpart as xp
5
+
6
+ import collimasim as cs
7
+ from matplotlib import pyplot as plt
8
+
9
+ import multiprocessing
10
+
11
+ def make_particles():
12
+ np.random.seed(seed=1994)
13
+ n_part = 100
14
+ particles = xp.Particles(
15
+ _capacity=n_part,
16
+ p0c = 1.e3, # 1 KeV dummy particles
17
+ mass0 = xp.ELECTRON_MASS_EV,
18
+ x=np.linspace(0.15, 0.25, n_part), # Offsets are x=0.2, y=0.3
19
+ px=np.zeros(n_part),
20
+ y=np.linspace(0.25, 0.35, n_part),
21
+ py=np.zeros(n_part),
22
+ zeta=np.zeros(n_part),
23
+ delta=np.zeros(n_part),
24
+ )
25
+
26
+ return particles
27
+
28
+
29
+ def test_xtrack_rotation():
30
+ np.random.seed(seed=1994)
31
+
32
+ particles = make_particles()
33
+ g4man = cs.Geant4CollimationManager(collimator_file="resources/CollDB_testing.dat",
34
+ bdsim_config_file="resources/settings_black_absorber.gmad",
35
+ tfs_file="resources/twiss_file_testing.tfs",
36
+ reference_pdg_id=-11,
37
+ reference_kinetic_energy=0.510998946e6 * 10000,
38
+ emittance_norm=(1.e-6, 1.e-6),
39
+ relative_energy_cut=0.001,
40
+ seed=1993,
41
+ # batchMode=False
42
+ batchMode=True
43
+ )
44
+
45
+ coll1 = g4man.make_xtg4_collimator("coll_skew") # Use new convenience method
46
+
47
+ # Generate a simple sequence
48
+ line = xt.Line(
49
+ elements=[coll1,
50
+ ])
51
+
52
+ context = xo.ContextCpu()
53
+ line.build_tracker(_context=context)
54
+
55
+ part_copy = particles.copy()
56
+ line.track(part_copy, num_turns=1)
57
+
58
+ print(f"Lost particles: {sum(part_copy.state==-333)} / {len(part_copy.state)}")
59
+ assert sum(part_copy.state==-333) == 30
60
+
61
+ return part_copy
62
+
63
+
64
+ def main():
65
+ part_g4 = test_xtrack_rotation()
66
+
67
+ # plt.scatter(part_g4.x, part_g4.y)
68
+ # plt.show()
69
+
70
+ print('Done!')
71
+
72
+
73
+ if __name__ == '__main__':
74
+ main()
@@ -0,0 +1,84 @@
1
+ import numpy as np
2
+ import collimasim as cs
3
+
4
+ def test_yaml_colldb_load():
5
+ try: # yaml file loading is not implemented yet, so expect an error
6
+ g4man = cs.Geant4CollimationManager(collimator_file="resources/CollDB_yaml_example.yaml",
7
+ bdsim_config_file="resources/settings_black_absorber.gmad",
8
+ tfs_file="resources/twiss_file_testing.tfs",
9
+ reference_pdg_id=-11,
10
+ reference_kinetic_energy=182.4994890018054e9, # eV
11
+ emittance_norm=(0.000521429683675842, 1.0357164949725628e-06),
12
+ relative_energy_cut=0.001,
13
+ seed=1993,
14
+ batchMode=True)
15
+ except ValueError as e:
16
+ print(f"YAML file loading sucessfuly reports an error: {e}")
17
+
18
+
19
+ def test_old_colldb_load():
20
+ g4man = cs.Geant4CollimationManager(collimator_file="resources/CollDB_old_example.dat",
21
+ bdsim_config_file="resources/settings_black_absorber.gmad",
22
+ tfs_file="resources/collonly_twiss_file_example.tfs",
23
+ reference_pdg_id=-11,
24
+ reference_kinetic_energy=182.4994890018054e9, # eV
25
+ emittance_norm=(0.000521429683675842, 1.0357164949725628e-06),
26
+ relative_energy_cut=0.001,
27
+ seed=1993,
28
+ batchMode=True)
29
+ assert np.isclose(g4man.collimators['tcp.a.b1']['halfgap'], 0.00976272689045678, atol=1e-10, rtol=1e-6)
30
+
31
+
32
+ def test_new_colldb_load():
33
+ g4man = cs.Geant4CollimationManager(collimator_file="resources/CollDB_new_example.dat",
34
+ bdsim_config_file="resources/settings_black_absorber.gmad",
35
+ tfs_file="resources/collonly_twiss_file_example.tfs",
36
+ reference_pdg_id=-11,
37
+ reference_kinetic_energy=182.4994890018054e9, # eV
38
+ emittance_norm=(0.000521429683675842, 1.0357164949725628e-06),
39
+ relative_energy_cut=0.001,
40
+ seed=1993,
41
+ batchMode=True)
42
+ assert np.isclose(g4man.collimators['tcp.a.b1']['halfgap'], 0.00976272689045678, atol=1e-10, rtol=1e-6)
43
+
44
+
45
+ def test_collgaps_load():
46
+ g4man = cs.Geant4CollimationManager(collimator_file="resources/collgaps.dat",
47
+ bdsim_config_file="resources/settings_black_absorber.gmad",
48
+ tfs_file="resources/collonly_twiss_file_example.tfs",
49
+ reference_pdg_id=-11,
50
+ reference_kinetic_energy=182.4994890018054e9, # eV
51
+ emittance_norm=(0.000521429683675842, 1.0357164949725628e-06),
52
+ relative_energy_cut=0.001,
53
+ seed=1993,
54
+ batchMode=True)
55
+ assert np.isclose(g4man.collimators['tcp.a.b1']['halfgap'], 0.00976272689045678, atol=1e-10, rtol=1e-6)
56
+
57
+
58
+ def test_badfile_load():
59
+ try:
60
+ # This is an example of loading an invalid file
61
+ g4man = cs.Geant4CollimationManager(collimator_file="resources/settings.gmad",
62
+ bdsim_config_file="resources/settings_black_absorber.gmad",
63
+ tfs_file="resources/collonly_twiss_file_example.tfs",
64
+ reference_pdg_id=-11,
65
+ reference_kinetic_energy=182.4994890018054e9, # eV
66
+ emittance_norm=(0.000521429683675842, 1.0357164949725628e-06),
67
+ relative_energy_cut=0.001,
68
+ seed=1993,
69
+ batchMode=True)
70
+ except ValueError as e:
71
+ print(f"Invalid file loading sucessfuly reports an error: {e}")
72
+
73
+
74
+ def main():
75
+ # test_yaml_colldb_load()
76
+ test_new_colldb_load()
77
+ # test_old_colldb_load()
78
+ # test_collgaps_load()
79
+ # test_badfile_load()
80
+
81
+ if __name__ == '__main__':
82
+ main()
83
+
84
+
@@ -0,0 +1,159 @@
1
+ import numpy as np
2
+ import xobjects as xo
3
+ import xtrack as xt
4
+ import xpart as xp
5
+
6
+ import collimasim as cs
7
+
8
+ import multiprocessing
9
+
10
+ def test_fodo():
11
+ np.random.seed(seed=1994)
12
+
13
+ g4man = cs.Geant4CollimationManager(#collimator_file="resources/CollDB_new_example.dat",
14
+ #collimator_file="resources/CollDB_old_example.dat",
15
+ collimator_file="resources/collgaps.dat",
16
+ bdsim_config_file="resources/settings.gmad",
17
+ tfs_file="resources/collonly_twiss_file_example.tfs",
18
+ reference_pdg_id=-11,
19
+ reference_kinetic_energy=182.4994890018054e9, # eV
20
+ emittance_norm=(0.000521429683675842, 1.0357164949725628e-06),
21
+ relative_energy_cut=0.001,
22
+ seed=1993,
23
+ batchMode=True)
24
+
25
+ coll1 = g4man.make_xtg4_collimator("TCP.A.B1") # Use new convenience method
26
+ coll2 = g4man.make_xtg4_collimator("TCP.B.B1")
27
+
28
+ ## Generate a simple sequence
29
+ # The 1 m drift are split in 2 so the global aperture check at 1 m
30
+ # can remove low-energy particles with large angles
31
+ line = xt.Line(
32
+ elements=[xt.Drift(length=0.5),
33
+ xt.Drift(length=0.5),
34
+ coll1,
35
+ xt.Multipole(knl=[0, 1.], ksl=[0,0]),
36
+ xt.Drift(length=0.5),
37
+ xt.Drift(length=0.5),
38
+ coll2,
39
+ xt.Multipole(knl=[0, -1.], ksl=[0,0])
40
+ ])
41
+
42
+
43
+ ## Chose a context
44
+ context = xo.ContextCpu() # For CPU
45
+ # context = xo.ContectCupy() # For CUDA GPUs
46
+ # context = xo.ContectPyopencl() # For OpenCL GPUs
47
+
48
+ ## Transfer lattice on context and compile tracking code
49
+ line.config.global_xy_limit = 0.1
50
+ line.config.XTRACK_USE_EXACT_DRIFTS = True
51
+ line.build_tracker(_context=context)
52
+
53
+ ## Build particle object on context
54
+ n_part = 100
55
+ N_max_expected_products = 5000
56
+ n_turns = 3
57
+
58
+ tot_num_part = n_part + N_max_expected_products
59
+
60
+ particles = xp.Particles(
61
+ _capacity=tot_num_part,
62
+ p0c = 185.e9,
63
+ mass0 = xp.constants.ELECTRON_MASS_EV,
64
+ x=np.random.uniform(-1e-2, 1e-2, n_part),
65
+ px=np.random.uniform(-1e-5, 1e-5, n_part),
66
+ y=np.random.uniform(-2e-3, 2e-3, n_part),
67
+ py=np.random.uniform(-3e-5, 3e-5, n_part),
68
+ zeta=np.random.uniform(-1e-2, 1e-2, n_part),
69
+ delta=np.random.uniform(-1e-4, 1e-4, n_part),
70
+ )
71
+
72
+ ## Track (saving turn-by-turn data)
73
+ print(f"{particles._num_active_particles=}")
74
+ print(f"{particles._num_lost_particles=}")
75
+ print("turn=0")
76
+
77
+ for turn in range(n_turns):
78
+ line.track(particles, num_turns=1)
79
+
80
+ print(f"{particles._num_active_particles=}")
81
+ print(f"{particles._num_lost_particles=}")
82
+ print(f"{turn=}")
83
+
84
+ if particles._num_active_particles==0:
85
+ break
86
+
87
+ total_particles = particles._num_active_particles + particles._num_lost_particles
88
+ print(f"Surviving particles: {particles._num_active_particles} / {total_particles}")
89
+
90
+ # Allow 2 particle tolerance for rounding errors on different installation
91
+ assert np.isclose(sum(particles.state==1), 8, atol=2) # Active particles
92
+
93
+ def main():
94
+ test_fodo()
95
+
96
+ if __name__ == '__main__':
97
+ main()
98
+
99
+ # The BDSIM link instances are no re-entry safe so can only run 1 test per file
100
+ # If multiple instances are required, multiprocessing can offer a solution,
101
+ # as spawned processes correctly handle the memory
102
+ # Comment out the code below to try this functionality
103
+ #
104
+ # def test_object():
105
+ # N_part = 10
106
+ # N_max_expected_products = 500
107
+ # tot_num_part = N_part + N_max_expected_products
108
+ # particles = xp.Particles(
109
+ # _capacity=tot_num_part,
110
+ # p0c = 185.e9,
111
+ # x = np.zeros(N_part),
112
+ # y = np.zeros(N_part),
113
+ # zeta = np.zeros(N_part),
114
+ # px = np.zeros(N_part),
115
+ # py = np.zeros(N_part),
116
+ # delta = np.zeros(N_part))
117
+ #
118
+ # particles.x[1] = 0.3
119
+ # particles.x[4] = 0.3
120
+ #
121
+ # print(particles.x)
122
+ #
123
+ # g4man = cs.Geant4CollimationManager(collimator_file="resources/CollDB_old_example.dat",
124
+ # bdsim_config_file="resources/settings.gmad",
125
+ # tfs_file="resources/collonly_twiss_file_example.tfs",
126
+ # reference_pdg_id=-11,
127
+ # reference_kinetic_energy=182.4994890018054e9, # eV
128
+ # emittance_norm=(0.000521429683675842, 1.0357164949725628e-06),
129
+ # relative_energy_cut=0.001,
130
+ # seed=1993,
131
+ # batchMode=True)
132
+ #
133
+ # coll1 = xt.BeamInteraction(interaction_process=cs.Geant4Collimator(name="tcp.a.b1",
134
+ # g4manager=g4man))
135
+ # coll2 = xt.BeamInteraction(interaction_process=cs.Geant4Collimator(name="tcp.a.b1",
136
+ # g4manager=g4man))
137
+ #
138
+ # coll1.track(particles)
139
+ # coll2.track(particles)
140
+ #
141
+ # print(f"Surviving after the second collimator: {sum(particles.state == 1)} / {particles.state}")
142
+ # assert sum(particles.state == 1) == 44 # Active particles
143
+ #
144
+ #
145
+ # def main():
146
+ # # Initialising and de-allocating the collimasim extensions
147
+ # # may not clear up the memory properly. This seems to be a Python
148
+ # # limitation. Multiprocessing processes seem to solve this issue
149
+ # p1 = multiprocessing.Process(target=test_object)
150
+ # p2 = multiprocessing.Process(target=test_fodo)
151
+ #
152
+ # p1.start()
153
+ # p1.join()
154
+ #
155
+ # p2.start()
156
+ # p2.join()
157
+ #
158
+ # if __name__ == '__main__':
159
+ # main()
@@ -0,0 +1,99 @@
1
+ import numpy as np
2
+ import xobjects as xo
3
+ import xtrack as xt
4
+ import xpart as xp
5
+
6
+ import collimasim as cs
7
+
8
+ import multiprocessing
9
+
10
+ def test_fodo():
11
+ np.random.seed(seed=1994)
12
+
13
+ # Random parameters to get some scattering in the collimators
14
+ g4man = cs.Geant4CollimationManager(collimator_file="resources/CollDB_forions.dat",
15
+ bdsim_config_file="resources/settings_ions.gmad",
16
+ tfs_file="resources/collonly_twiss_file_example.tfs",
17
+ reference_pdg_id=xp.pdg.get_pdg_id_from_name('Pb208'),
18
+ reference_kinetic_energy=36706.8206525e9,
19
+ emittance_norm=(5e-5, 5e-5),
20
+ relative_energy_cut=0.001,
21
+ seed=1993,
22
+ batchMode=True)
23
+
24
+ ref_mass = g4man.g4link.getReferenceMass() * 1e9 # convert to eV
25
+
26
+ coll1 = g4man.make_xtg4_collimator("TCP.A.B1") # Use new convenience method
27
+ coll2 = g4man.make_xtg4_collimator("TCP.B.B1")
28
+
29
+ ## Generate a simple sequence
30
+ # The 1 m drift are split in 2 so the global aperture check at 1 m
31
+ # can remove low-energy particles with large angles
32
+ line = xt.Line(
33
+ elements=[xt.Drift(length=0.5),
34
+ xt.Drift(length=0.5),
35
+ coll1,
36
+ xt.Multipole(knl=[0, 1.], ksl=[0,0]),
37
+ xt.Drift(length=0.5),
38
+ xt.Drift(length=0.5),
39
+ coll2,
40
+ xt.Multipole(knl=[0, -1.], ksl=[0,0])
41
+ ])
42
+
43
+
44
+ ## Chose a context
45
+ context = xo.ContextCpu() # For CPU
46
+ # context = xo.ContectCupy() # For CUDA GPUs
47
+ # context = xo.ContectPyopencl() # For OpenCL GPUs
48
+
49
+ ## Transfer lattice on context and compile tracking code
50
+ line.config.global_xy_limit = 0.1
51
+ line.config.XTRACK_USE_EXACT_DRIFTS = True
52
+ line.build_tracker(_context=context)
53
+
54
+ ## Build particle object on context
55
+ n_part = 100
56
+ N_max_expected_products = 50000
57
+ n_turns = 3
58
+
59
+ tot_num_part = n_part + N_max_expected_products
60
+
61
+ particles = xp.Particles(
62
+ _capacity=tot_num_part,
63
+ p0c = 36900e9,
64
+ mass0 = ref_mass,
65
+ x=np.random.uniform(-1e-2, 1e-2, n_part),
66
+ px=np.random.uniform(-1e-5, 1e-5, n_part),
67
+ y=np.random.uniform(-2e-3, 2e-3, n_part),
68
+ py=np.random.uniform(-3e-5, 3e-5, n_part),
69
+ zeta=np.random.uniform(-1e-2, 1e-2, n_part),
70
+ delta=np.random.uniform(-1e-4, 1e-4, n_part),
71
+ pdg_id=np.full(n_part, xp.pdg.get_pdg_id_from_name('Pb208'))
72
+ )
73
+
74
+ ## Track (saving turn-by-turn data)
75
+ print(f"{particles._num_active_particles=}")
76
+ print(f"{particles._num_lost_particles=}")
77
+ print("turn=0")
78
+
79
+ for turn in range(n_turns):
80
+ line.track(particles, num_turns=1)
81
+
82
+ print(f"{particles._num_active_particles=}")
83
+ print(f"{particles._num_lost_particles=}")
84
+ print(f"{turn=}")
85
+
86
+ if particles._num_active_particles==0:
87
+ break
88
+
89
+ total_particles = particles._num_active_particles + particles._num_lost_particles
90
+ print(f"Surviving particles: {particles._num_active_particles} / {total_particles}")
91
+
92
+ # Allow 1 particle tolerance for rounding errors on different installation
93
+ assert np.isclose(sum(particles.state==1), 1143, atol=1) # Active particles
94
+
95
+ def main():
96
+ test_fodo()
97
+
98
+ if __name__ == '__main__':
99
+ main()
@@ -0,0 +1,78 @@
1
+ import numpy as np
2
+ import xtrack as xt
3
+ import xpart as xp
4
+
5
+ import collimasim as cs
6
+
7
+
8
+ def test_object_creation():
9
+ N_part = 10
10
+ N_max_expected_products = 10
11
+
12
+ tot_num_part = N_part
13
+
14
+ particles = xp.Particles(
15
+ p0c = 36900e9,
16
+ x = np.zeros(tot_num_part),
17
+ y = np.zeros(tot_num_part),
18
+ zeta = np.zeros(tot_num_part),
19
+ px = np.zeros(tot_num_part),
20
+ py = np.zeros(tot_num_part),
21
+ delta = np.zeros(tot_num_part))
22
+
23
+ particles.num_particles = N_part
24
+
25
+ particles.x[1] = 0.3
26
+ particles.y[2] = 0.3
27
+
28
+ # Random parameters to get some scattering in the collimators
29
+ g4man = cs.Geant4CollimationManager(collimator_file="resources/CollDB_forions.dat",
30
+ bdsim_config_file="resources/settings_ions.gmad",
31
+ tfs_file="resources/collonly_twiss_file_example.tfs",
32
+ reference_pdg_id=xp.pdg.get_pdg_id_from_name('Pb208'),
33
+ reference_kinetic_energy=36706.8206525e9,
34
+ emittance_norm=(0.000521429683675842, 0.000521429683675842),
35
+ relative_energy_cut=0.001,
36
+ seed=1993,
37
+ batchMode=True)
38
+
39
+ coll1 = cs.Geant4Collimator(name="tcp.a.b1", g4manager=g4man)
40
+ coll2 = cs.Geant4Collimator(name="tcp.b.b1", g4manager=g4man)
41
+
42
+
43
+ print("Particle coordinates (x) before first collimator")
44
+ print (particles.delta)
45
+
46
+ prods = coll1.interact(particles)
47
+
48
+ print("Particle coordinates (x) after first collimator")
49
+ print (particles.x)
50
+ print (particles.y)
51
+
52
+ print("="*30)
53
+ print("Products:")
54
+ for crd in prods:
55
+ print(crd, ":", prods[crd])
56
+ print("="*30)
57
+
58
+ prods = coll2.interact(particles)
59
+
60
+ print("Particle coordinates (x) after second collimator")
61
+ print (particles.x)
62
+ print (particles.y)
63
+
64
+ print("="*30)
65
+ print("Products:")
66
+ for crd in prods:
67
+ print(crd, ":", prods[crd])
68
+ print("="*30)
69
+
70
+ assert len(prods['x']) == 59
71
+
72
+
73
+ def main():
74
+ test_object_creation()
75
+
76
+
77
+ if __name__ == '__main__':
78
+ main()
@@ -0,0 +1,88 @@
1
+ import numpy as np
2
+ import xtrack as xt
3
+ import xpart as xp
4
+
5
+ import collimasim as cs
6
+ import pandas as pd
7
+
8
+ def test_energy_diffrential():
9
+ N_part = 10
10
+ N_max_expected_products = 10
11
+
12
+ particles = xp.Particles(
13
+ _capaccity = N_part,
14
+ p0c = 36900e9,
15
+ x = np.zeros(N_part),
16
+ y = np.zeros(N_part),
17
+ zeta = np.zeros(N_part),
18
+ px = np.zeros(N_part),
19
+ py = np.zeros(N_part),
20
+ delta = np.zeros(N_part),
21
+ pdg_id = xp.pdg.get_pdg_id_from_name('Pb208'),
22
+ mass0=193687676197.13638,
23
+ )
24
+
25
+ particles.x[1] = 0.04226982005192951 + 10e-6
26
+ particles.px[1] = 1e-7
27
+ particles.x[2] = -0.04226982005192951 - 10e-6
28
+ particles.px[2] = -1e-7
29
+ particles.x[3] = 0.04226982005192951 + 10e-6
30
+ particles.y[4] = 0.05
31
+
32
+ part_orig = particles.copy()
33
+
34
+ # Random parameters to get some scattering in the collimators
35
+ g4man = cs.Geant4CollimationManager(collimator_file="resources/CollDB_forions.dat",
36
+ bdsim_config_file="resources/settings_ions.gmad",
37
+ tfs_file="resources/collonly_twiss_file_example.tfs",
38
+ reference_pdg_id=xp.pdg.get_pdg_id_from_name('Pb208'),
39
+ reference_kinetic_energy=36706.8206525e9,
40
+ emittance_norm=(0.000521429683675842, 0.000521429683675842),
41
+ relative_energy_cut=0.0001,
42
+ seed=1993,
43
+ batchMode=True)
44
+
45
+ coll1 = cs.Geant4Collimator(name="tcp.a.b1", g4manager=g4man)
46
+
47
+
48
+ prods = coll1.interact(particles)
49
+
50
+ part_df = particles.to_pandas(compact=True)
51
+ part_orig_df = part_orig.to_pandas(compact=True)
52
+
53
+ part_mass_ratio = part_df.charge_ratio / part_df.chi
54
+ part_mom = (part_df.delta + 1) * part_df.p0c * part_mass_ratio
55
+ part_mass = part_mass_ratio * part_df.mass0
56
+ part_tot_energy = np.sqrt(part_mom**2 + part_mass**2)
57
+ part_df['energy'] = part_tot_energy
58
+
59
+ part_orig_mass_ratio = part_orig_df.charge_ratio / part_orig_df.chi
60
+ part_orig_mom = (part_orig_df.delta + 1) * part_orig_df.p0c * part_orig_mass_ratio
61
+ part_orig_mass = part_orig_mass_ratio * part_orig_df.mass0
62
+ part_orig_tot_energy = np.sqrt(part_orig_mom**2 + part_orig_mass**2)
63
+ part_orig_df['energy'] = part_tot_energy
64
+
65
+ prod_df = pd.DataFrame(prods)
66
+
67
+ prod_mass_ratio = prod_df.mass_ratio
68
+ prod_mom = (prod_df.delta + 1) * part_df.p0c[0] * prod_mass_ratio
69
+ prod_mass = prod_mass_ratio * part_df.mass0[0]
70
+ prod_tot_energy = np.sqrt(prod_mom**2 + prod_mass**2)
71
+ prod_df['energy'] = prod_tot_energy
72
+
73
+ for part_id in [1, 2, 3]:
74
+ pp = part_df[part_df['particle_id'] == part_id]
75
+ pp_orig = part_df[part_orig_df['particle_id'] == part_id]
76
+ prods_pp = prod_df[prod_df['parent_particle_id'] == part_id]
77
+
78
+ combined_energy = float(pp['energy']) + float(sum(prods_pp['energy']))
79
+ energy_diff = combined_energy - float(pp_orig['energy'])
80
+
81
+
82
+
83
+ def main():
84
+ test_energy_diffrential()
85
+
86
+
87
+ if __name__ == '__main__':
88
+ main()
@@ -0,0 +1,80 @@
1
+ import numpy as np
2
+ import xobjects as xo
3
+ import xtrack as xt
4
+ import xpart as xp
5
+
6
+ import collimasim as cs
7
+ from matplotlib import pyplot as plt
8
+
9
+ import multiprocessing
10
+
11
+ def make_particles():
12
+ np.random.seed(seed=1994)
13
+ n_part = 100
14
+ particles = xp.Particles(
15
+ _capacity=n_part,
16
+ p0c = 1.e3, # 1 KeV dummy particles
17
+ mass0 = xp.ELECTRON_MASS_EV,
18
+ x=np.linspace(0.1, 0.3, n_part), # Offsets are x=0.2, y=0.3
19
+ #x=np.random.uniform(0.1, 0.3, n_part), # Offsets are x=0.2, y=0.3
20
+ px=np.zeros(n_part),
21
+ y=np.linspace(0.2, 0.4, n_part),
22
+ #y=np.random.uniform(0.2, 0.4, n_part),
23
+ #y=np.zeros(n_part) + 0.3,
24
+ py=np.zeros(n_part),
25
+ zeta=np.zeros(n_part),
26
+ delta=np.zeros(n_part),
27
+ )
28
+
29
+ return particles
30
+
31
+
32
+ def test_xtrack_tilt():
33
+ np.random.seed(seed=1994)
34
+ particles = make_particles()
35
+
36
+ g4man = cs.Geant4CollimationManager(collimator_file="resources/CollDB_testing.dat",
37
+ bdsim_config_file="resources/settings_black_absorber.gmad",
38
+ tfs_file="resources/twiss_file_testing.tfs",
39
+ reference_pdg_id=-11,
40
+ reference_kinetic_energy=0.510998946e6 * 10000,
41
+ emittance_norm=(1.e-6, 1.e-6),
42
+ relative_energy_cut=0.001,
43
+ seed=1993,
44
+ # batchMode=False
45
+ batchMode=True
46
+ )
47
+
48
+ coll1 = g4man.make_xtg4_collimator("coll_skew_tilted") # Use new convenience method
49
+
50
+ # Generate a simple sequence
51
+ line = xt.Line(
52
+ elements=[coll1,
53
+ ])
54
+
55
+ context = xo.ContextCpu()
56
+ line.build_tracker(_context=context)
57
+
58
+ part_copy = particles.copy()
59
+ line.track(part_copy, num_turns=1)
60
+
61
+ print(f"Lost particles: {sum(part_copy.state==-333)} / {len(part_copy.state)}")
62
+ assert sum(part_copy.state==-333) == 89
63
+
64
+ return part_copy
65
+
66
+
67
+ def main():
68
+ part_g4 = test_xtrack_tilt()
69
+
70
+ # plt.scatter(part_g4.x, part_g4.y, c=part_g4.state)
71
+ # ax = plt.gca()
72
+ # ax.axvline(0.15, c='r')
73
+ # ax.axvline(0.25, c='r')
74
+ # plt.show()
75
+
76
+ print('Done!')
77
+
78
+
79
+ if __name__ == '__main__':
80
+ main()