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,198 @@
1
+ # copyright ############################### #
2
+ # This file is part of the Xcoll Package. #
3
+ # Copyright (c) CERN, 2024. #
4
+ # ######################################### #
5
+
6
+ import numpy as np
7
+
8
+ import xobjects as xo
9
+ import xtrack as xt
10
+
11
+ from ..general import _pkg_root
12
+ from .base import InvalidXcoll
13
+
14
+
15
+ class BlowUp(InvalidXcoll):
16
+ _xofields = {
17
+ '_plane': xo.Int8,
18
+ 'start_at_turn': xo.Int64,
19
+ 'stop_at_turn': xo.Int64,
20
+ 'use_individual_kicks': xo.Int8,
21
+ '_max_kick': xo.Float64,
22
+ '_rans': xo.Float64[:],
23
+ '_calibration': xo.Float64,
24
+ '_active': xo.Int8,
25
+ }
26
+
27
+ isthick = False
28
+ behaves_like_drift = False
29
+ allow_track = True
30
+ needs_rng = True
31
+ skip_in_loss_location_refinement = True
32
+ allow_loss_refinement = False
33
+
34
+ _skip_in_to_dict = ['_max_kick', '_plane', '_calibration', '_active']
35
+ _store_in_to_dict = ['amplitude', 'plane', 'calibration']
36
+
37
+ _depends_on = [InvalidXcoll, xt.RandomUniform]
38
+
39
+ _extra_c_sources = [
40
+ _pkg_root.joinpath('beam_elements','elements_src','blowup.h')
41
+ ]
42
+
43
+ def __init__(self, **kwargs):
44
+ to_assign = {}
45
+ if '_xobject' not in kwargs:
46
+ start_at_turn = int(kwargs.get('start_at_turn', 0))
47
+ stop_at_turn = int(kwargs.get('stop_at_turn', start_at_turn+1))
48
+ kwargs['start_at_turn'] = start_at_turn
49
+ kwargs['stop_at_turn'] = stop_at_turn
50
+ kwargs['_rans'] = 2*np.random.uniform(size=stop_at_turn-start_at_turn) - 1
51
+ if 'plane' in kwargs:
52
+ to_assign['plane'] = kwargs.pop('plane')
53
+ to_assign['calibration'] = kwargs.pop('calibration', 1.)
54
+ to_assign['amplitude'] = kwargs.pop('amplitude', 1)
55
+ kwargs['_calibration'] = 1.
56
+ super().__init__(**kwargs)
57
+ for key, val in to_assign.items():
58
+ setattr(self, key, val)
59
+
60
+
61
+ @classmethod
62
+ def install(cls, line, name, *, at_s=None, at=None, need_apertures=True, aperture=None, s_tol=1.e-6, **kwargs):
63
+ self = cls(**kwargs)
64
+ line.insert_element(element=self, name=name, at_s=at_s, at=at, s_tol=s_tol)
65
+ self._name = name
66
+ self._line = line
67
+ if need_apertures:
68
+ if aperture is not None:
69
+ aper_upstream = aperture.copy()
70
+ aper_downstream = aperture.copy()
71
+ else:
72
+ idx = line.element_names.index(name)
73
+ while True:
74
+ if xt.line._is_aperture(line.elements[idx], line):
75
+ aper_upstream = line.elements[idx].copy()
76
+ break
77
+ idx -= 1
78
+ idx = line.element_names.index(name)
79
+ while True:
80
+ if xt.line._is_aperture(line.elements[idx], line):
81
+ aper_downstream = line.elements[idx].copy()
82
+ break
83
+ idx += 1
84
+ line.insert_element(element=aper_upstream, name=f'{name}_aper_upstream', at=name, s_tol=s_tol)
85
+ idx = line.element_names.index(name) + 1
86
+ line.insert_element(element=aper_downstream, name=f'{name}_aper_downstream', at=idx, s_tol=s_tol)
87
+ return self
88
+
89
+ def get_backtrack_element(self, _context=None, _buffer=None, _offset=None):
90
+ return xt.Marker(_context=_context, _buffer=_buffer, _offset=_offset)
91
+
92
+
93
+ @property
94
+ def plane(self):
95
+ if self._plane == 1:
96
+ return 'H'
97
+ elif self._plane == -1:
98
+ return 'V'
99
+ else:
100
+ raise ValueError("The plane of the BlowUp is not recognized.")
101
+
102
+ @plane.setter
103
+ def plane(self, val):
104
+ if val.lower() == 'h':
105
+ self._plane = 1
106
+ elif val.lower() == 'v':
107
+ self._plane = -1
108
+ else:
109
+ raise ValueError("The plane of the BlowUp must be either 'H' or 'V'.")
110
+
111
+ @property
112
+ def amplitude(self):
113
+ return (self._max_kick / self.calibration)**2
114
+
115
+ @amplitude.setter
116
+ def amplitude(self, val):
117
+ if val< 0:
118
+ raise ValueError("The amplitude cannot be negative!")
119
+ self._max_kick = np.sqrt(val) * self.calibration
120
+
121
+ @property
122
+ def calibration(self):
123
+ return self._calibration
124
+
125
+ @calibration.setter
126
+ def calibration(self, val):
127
+ if val< 0:
128
+ raise ValueError("The calibration cannot be negative!")
129
+ previous_amplitude = self.amplitude
130
+ self._calibration = val
131
+ self.amplitude = previous_amplitude
132
+
133
+ @property
134
+ def name(self):
135
+ if not hasattr(self, '_name'):
136
+ raise ValueError("Name not set! Install the blow-up using xc.BlowUp.install() "
137
+ "or manually set the name after installation.")
138
+ return self._name
139
+
140
+ @name.setter
141
+ def name(self, val):
142
+ self._name = val
143
+
144
+ @property
145
+ def line(self):
146
+ if not hasattr(self, '_line'):
147
+ raise ValueError("Line not set! Install the blow-up using xc.BlowUp.install() "
148
+ "or manually set the line after installation.")
149
+ return self._line
150
+
151
+ @line.setter
152
+ def line(self, val):
153
+ self._line = val
154
+
155
+
156
+ def calibrate_by_emittance(self, nemitt, *, twiss=None, beta_gamma_rel=None):
157
+ # The emittance gained per turn of blow up can be calculated as follows:
158
+ # <px^2> = gamma * eps
159
+ # gamma * eps = <px^2> = <(px0 + dpx)^2>
160
+ # where px0 is the initial momentum and dpx is the kick, and eps0 and eps
161
+ # are the geometric emittance before resp. after the kick, and gamma is the
162
+ # Courant-Snyder parameter.
163
+ # If each particle gets another random kick, we can write:
164
+ # <(px0 + dpx)^2> = <px0^2> + 2<px0 dpx> + <dpx^2>
165
+ # = gamma * eps0 + 2<px0 dpx> + 1/3 dpx_max^2 (variance of uniform distribution is 1/12(b-a)^2)
166
+ # The covariance can be estimated with an upper bound:
167
+ # 0 <= 2<px0 dpx> <= 2*sqrt(<px0^2> <dpx^2>)
168
+ # = 2/sqrt(3) * sqrt(gamma * eps0) * dpx_max
169
+ # So that we finally get for the emittance growth after one turn of blow-up:
170
+ # deps = (eps-eps0)/eps0 = [dPM^2, dPM^2 + 2dPM] (dPM = dpx_max/sqrt(3 * gamma * eps0))
171
+ # Or, to get an emittance growth of deps, we need:
172
+ # dpx_max = [sqrt(3* gamma * eps0 * deps), sqrt(3 * gamma * eps0)*(sqrt(1+deps) -1)]
173
+ # If all particles get the same kick, we can write:
174
+ # <(px0 + dpx)^2> = <px0^2> + 2<px0> dpx
175
+ # However, now things get a bit more complicated. At the start <px0> is the closed orbit,
176
+ # but when the bunch has had a kick in the previous turn, the bunch is no longer centred
177
+ # around the closed orbit. We can write:
178
+ # deps = (eps-eps0)/eps0 = 2<px0> dpx/gamma/eps0
179
+ name = self.name
180
+ line = self.line
181
+ if beta_gamma_rel is None:
182
+ if not hasattr(line, 'particle_ref'):
183
+ raise ValueError("The provided line has no reference particle. Use the argument `beta_gamma_rel`")
184
+ beta_gamma_rel = line.particle_ref.gamma0[0]*line.particle_ref.beta0[0]
185
+ if twiss is None:
186
+ twiss = line.twiss()
187
+ gamma = twiss.rows[name][f"gam{'x' if self.plane == 'H' else 'y'}"][0]
188
+ # Asumming a Gaussian beam, we will have shifted all beam beyond 5 sigma with an emittance growth
189
+ # of around a factor 60. In practive, a ~50x increase is enough due to the covariance terms.
190
+ # We want to do this slowly, over 1000 turns.
191
+ deps = 50/1000
192
+ self.calibration = np.sqrt(3*gamma*nemitt/beta_gamma_rel*deps)
193
+
194
+ def activate(self):
195
+ self._active = True
196
+
197
+ def deactivate(self):
198
+ self._active = False
@@ -0,0 +1,136 @@
1
+ // copyright ############################### #
2
+ // This file is part of the Xcoll Package. #
3
+ // Copyright (c) CERN, 2024. #
4
+ // ######################################### #
5
+
6
+ #ifndef XCOLL_ABSORBER_H
7
+ #define XCOLL_ABSORBER_H
8
+
9
+
10
+ /*gpufun*/
11
+ int8_t BlackAbsorberData_get_record_impacts(BlackAbsorberData el){
12
+ return BlackAbsorberData_get__record_interactions(el) % 2;
13
+ }
14
+
15
+ /*gpufun*/
16
+ int8_t BlackAbsorberData_get_record_exits(BlackAbsorberData el){
17
+ return (BlackAbsorberData_get__record_interactions(el) >> 1) % 2;
18
+ }
19
+
20
+ /*gpufun*/
21
+ int8_t BlackAbsorberData_get_record_scatterings(BlackAbsorberData el){
22
+ return (BlackAbsorberData_get__record_interactions(el) >> 2) % 2;
23
+ }
24
+
25
+
26
+ /*gpufun*/
27
+ CollimatorGeometry BlackAbsorber_init_geometry(BlackAbsorberData el, LocalParticle* part0, int8_t active){
28
+ CollimatorGeometry cg = (CollimatorGeometry) malloc(sizeof(CollimatorGeometry_));
29
+ if (active){ // This is needed in order to avoid that the initialisation is called during a twiss!
30
+ // Jaw corners (with tilts)
31
+ cg->jaw_LU = BlackAbsorberData_get__jaw_LU(el);
32
+ cg->jaw_RU = BlackAbsorberData_get__jaw_RU(el);
33
+ // Get angles of jaws
34
+ cg->sin_zL = BlackAbsorberData_get__sin_zL(el);
35
+ cg->cos_zL = BlackAbsorberData_get__cos_zL(el);
36
+ cg->sin_zR = BlackAbsorberData_get__sin_zR(el);
37
+ cg->cos_zR = BlackAbsorberData_get__cos_zR(el);
38
+ cg->sin_zDiff = BlackAbsorberData_get__sin_zDiff(el);
39
+ cg->cos_zDiff = BlackAbsorberData_get__cos_zDiff(el);
40
+ cg->jaws_parallel = BlackAbsorberData_get__jaws_parallel(el);
41
+ // Tilts
42
+ cg->sin_yL = BlackAbsorberData_get__sin_yL(el);
43
+ cg->cos_yL = BlackAbsorberData_get__cos_yL(el);
44
+ cg->sin_yR = BlackAbsorberData_get__sin_yR(el);
45
+ cg->cos_yR = BlackAbsorberData_get__cos_yR(el);
46
+ // Length and segments
47
+ cg->length = BlackAbsorberData_get_length(el);
48
+ cg->side = BlackAbsorberData_get__side(el);
49
+ double s_U, s_D, x_D;
50
+ if (cg->side != -1){
51
+ s_U = cg->length/2 * (1-cg->cos_yL);
52
+ s_D = cg->length/2 * (1+cg->cos_yL);
53
+ x_D = BlackAbsorberData_get__jaw_LD(el);
54
+ cg->segments_L = create_jaw(s_U, cg->jaw_LU, s_D, x_D, cg->sin_yL/cg->cos_yL, 1);
55
+ }
56
+ if (cg->side != 1){
57
+ s_U = cg->length/2 * (1-cg->cos_yR);
58
+ s_D = cg->length/2 * (1+cg->cos_yR);
59
+ x_D = BlackAbsorberData_get__jaw_RD(el);
60
+ cg->segments_R = create_jaw(s_U, cg->jaw_RU, s_D, x_D, cg->sin_yR/cg->cos_yR, -1);
61
+ }
62
+ // Impact table
63
+ cg->record = BlackAbsorberData_getp_internal_record(el, part0);
64
+ cg->record_index = NULL;
65
+ cg->record_impacts = 0;
66
+ cg->record_exits = 0;
67
+ if (cg->record){
68
+ cg->record_index = InteractionRecordData_getp__index(cg->record);
69
+ cg->record_impacts = BlackAbsorberData_get_record_impacts(el);
70
+ cg->record_exits = BlackAbsorberData_get_record_exits(el);
71
+ }
72
+ }
73
+
74
+ return cg;
75
+ }
76
+
77
+ /*gpufun*/
78
+ void BlackAbsorber_free(CollimatorGeometry restrict cg, int8_t active){
79
+ if (active){
80
+ if (cg->side != -1){
81
+ destroy_jaw(cg->segments_L);
82
+ }
83
+ if (cg->side != 1){
84
+ destroy_jaw(cg->segments_R);
85
+ }
86
+ }
87
+ free(cg);
88
+ }
89
+
90
+
91
+ /*gpufun*/
92
+ void BlackAbsorber_track_local_particle(BlackAbsorberData el, LocalParticle* part0){
93
+
94
+ // Collimator active and length
95
+ int8_t active = BlackAbsorberData_get_active(el);
96
+ active *= BlackAbsorberData_get__tracking(el);
97
+ double const length = BlackAbsorberData_get_length(el);
98
+
99
+ // Get geometry
100
+ CollimatorGeometry cg = BlackAbsorber_init_geometry(el, part0, active);
101
+ int8_t record_scatterings = BlackAbsorberData_get_record_scatterings(el);
102
+
103
+ //start_per_particle_block (part0->part)
104
+ if (!active){
105
+ // Drift full length
106
+ Drift_single_particle(part, length);
107
+
108
+ } else {
109
+ // Check collimator initialisation
110
+ int8_t is_tracking = assert_tracking(part, XC_ERR_INVALID_TRACK);
111
+
112
+ if (is_tracking) {
113
+ // Store s-location of start of collimator
114
+ double s_coll = LocalParticle_get_s(part);
115
+ LocalParticle_set_s(part, 0);
116
+
117
+ // Check if hit on jaws
118
+ int8_t is_hit = hit_jaws_check_and_transform(part, cg);
119
+
120
+ if (is_hit != 0){
121
+ LocalParticle_set_state(part, XC_LOST_ON_ABSORBER);
122
+ if (record_scatterings) {
123
+ InteractionRecordData_log(cg->record, cg->record_index, part, XC_ABSORBED); // In coll jaw reference frame
124
+ }
125
+ }
126
+
127
+ // Transform back to the lab frame
128
+ hit_jaws_transform_back(is_hit, part, cg);
129
+ LocalParticle_add_to_s(part, s_coll);
130
+ }
131
+ }
132
+ //end_per_particle_block
133
+ BlackAbsorber_free(cg, active);
134
+ }
135
+
136
+ #endif /* XCOLL_ABSORBER_H */
@@ -0,0 +1,129 @@
1
+ // copyright ############################### #
2
+ // This file is part of the Xcoll Package. #
3
+ // Copyright (c) CERN, 2024. #
4
+ // ######################################### #
5
+
6
+ #ifndef XCOLL_ABSORBER_CRY_H
7
+ #define XCOLL_ABSORBER_CRY_H
8
+
9
+
10
+ /*gpufun*/
11
+ int8_t BlackCrystalData_get_record_impacts(BlackCrystalData el){
12
+ return BlackCrystalData_get__record_interactions(el) % 2;
13
+ }
14
+
15
+ /*gpufun*/
16
+ int8_t BlackCrystalData_get_record_exits(BlackCrystalData el){
17
+ return (BlackCrystalData_get__record_interactions(el) >> 1) % 2;
18
+ }
19
+
20
+ /*gpufun*/
21
+ int8_t BlackCrystalData_get_record_scatterings(BlackCrystalData el){
22
+ return (BlackCrystalData_get__record_interactions(el) >> 2) % 2;
23
+ }
24
+
25
+
26
+ /*gpufun*/
27
+ CrystalGeometry BlackCrystal_init_geometry(BlackCrystalData el, LocalParticle* part0, int8_t active){
28
+ CrystalGeometry cg = (CrystalGeometry) malloc(sizeof(CrystalGeometry_));
29
+ if (active){ // This is needed in order to avoid that the initialisation is called during a twiss!
30
+ cg->length = BlackCrystalData_get_length(el);
31
+ cg->side = BlackCrystalData_get__side(el);
32
+ cg->bending_radius = BlackCrystalData_get__bending_radius(el);
33
+ cg->bending_angle = BlackCrystalData_get__bending_angle(el);
34
+ cg->width = BlackCrystalData_get_width(el);
35
+ cg->height = BlackCrystalData_get_height(el);
36
+ cg->jaw_U = BlackCrystalData_get__jaw_U(el);
37
+ cg->sin_z = BlackCrystalData_get__sin_z(el);
38
+ cg->cos_z = BlackCrystalData_get__cos_z(el);
39
+ cg->sin_y = BlackCrystalData_get__sin_y(el);
40
+ cg->cos_y = BlackCrystalData_get__cos_y(el);
41
+ double jaw;
42
+ if (cg->side == 1){
43
+ jaw = cg->jaw_U;
44
+ } else if (cg->side == -1){
45
+ jaw = cg->jaw_U - cg->width; // To ensure that jaw_U is the inner corner
46
+ } else {
47
+ kill_all_particles(part0, XC_ERR_INVALID_XOFIELD);
48
+ return cg;
49
+ }
50
+ cg->segments = create_crystal(cg->bending_radius, cg->width, cg->length, jaw, cg->sin_y, cg->cos_y);
51
+ // Impact table
52
+ cg->record = BlackCrystalData_getp_internal_record(el, part0);
53
+ cg->record_index = NULL;
54
+ cg->record_impacts = 0;
55
+ cg->record_exits = 0;
56
+ if (cg->record){
57
+ cg->record_index = InteractionRecordData_getp__index(cg->record);
58
+ cg->record_impacts = BlackCrystalData_get_record_impacts(el);
59
+ cg->record_exits = BlackCrystalData_get_record_exits(el);
60
+ }
61
+ // Not needed, set to zero
62
+ cg->miscut_angle = 0;
63
+ cg->s_P = 0;
64
+ cg->x_P = 0;
65
+ cg->t_VImax = 0;
66
+ }
67
+
68
+ return cg;
69
+ }
70
+
71
+ /*gpufun*/
72
+ void BlackCrystal_free(CrystalGeometry restrict cg, int8_t active){
73
+ if (active){
74
+ destroy_crystal(cg->segments);
75
+ }
76
+ free(cg);
77
+ }
78
+
79
+
80
+ /*gpufun*/
81
+ void BlackCrystal_track_local_particle(BlackCrystalData el, LocalParticle* part0){
82
+
83
+ // Collimator active and length
84
+ int8_t active = BlackCrystalData_get_active(el);
85
+ active *= BlackCrystalData_get__tracking(el);
86
+ double const length = BlackCrystalData_get_length(el);
87
+
88
+ // Get geometry
89
+ CrystalGeometry cg = BlackCrystal_init_geometry(el, part0, active);
90
+ int8_t record_scatterings = BlackCrystalData_get_record_scatterings(el);
91
+
92
+ if (cg->width==0 || cg->height==0 || cg->bending_radius==0){
93
+ kill_all_particles(part0, XC_ERR_INVALID_XOFIELD);
94
+ }
95
+
96
+ //start_per_particle_block (part0->part)
97
+ if (!active){
98
+ // Drift full length
99
+ Drift_single_particle(part, length);
100
+
101
+ } else {
102
+ // Check collimator initialisation
103
+ int8_t is_tracking = assert_tracking(part, XC_ERR_INVALID_TRACK);
104
+
105
+ if (is_tracking) {
106
+ // Store s-location of start of collimator
107
+ double s_coll = LocalParticle_get_s(part);
108
+ LocalParticle_set_s(part, 0);
109
+
110
+ // Check if hit on jaws
111
+ int8_t is_hit = hit_crystal_check_and_transform(part, cg);
112
+
113
+ if (is_hit != 0){
114
+ LocalParticle_set_state(part, XC_LOST_ON_ABSORBER);
115
+ if (record_scatterings) {
116
+ InteractionRecordData_log(cg->record, cg->record_index, part, XC_ABSORBED); // In coll jaw reference frame
117
+ }
118
+ }
119
+
120
+ // Transform back to the lab frame
121
+ hit_crystal_transform_back(is_hit, part, cg);
122
+ LocalParticle_add_to_s(part, s_coll);
123
+ }
124
+ }
125
+ //end_per_particle_block
126
+ BlackCrystal_free(cg, active);
127
+ }
128
+
129
+ #endif /* XCOLL_ABSORBER_CRY_H */
@@ -0,0 +1,42 @@
1
+ // copyright ############################### #
2
+ // This file is part of the Xcoll Package. #
3
+ // Copyright (c) CERN, 2024. #
4
+ // ######################################### #
5
+
6
+ #ifndef XCOLL_BLOWUP_H
7
+ #define XCOLL_BLOWUP_H
8
+
9
+ /*gpufun*/
10
+ void BlowUp_track_local_particle(BlowUpData el, LocalParticle* part0){
11
+
12
+ int8_t plane = BlowUpData_get__plane(el);
13
+ double max_kick = BlowUpData_get__max_kick(el);
14
+ int8_t active = BlowUpData_get__active(el);
15
+ int8_t individual = BlowUpData_get_use_individual_kicks(el);
16
+ int64_t start_at_turn = BlowUpData_get_start_at_turn(el);
17
+ int64_t stop_at_turn = BlowUpData_get_stop_at_turn(el);
18
+
19
+ //start_per_particle_block (part0->part)
20
+ if (active){
21
+ int64_t at_turn = LocalParticle_get_at_turn(part);
22
+ if (at_turn >= start_at_turn && at_turn < stop_at_turn){
23
+ double ran;
24
+ if (individual){
25
+ ran = (2*RandomUniform_generate(part) - 1);
26
+ } else {
27
+ ran = BlowUpData_get__rans(el, at_turn - start_at_turn);
28
+ }
29
+ double kick = max_kick * ran;
30
+ if (plane == 1){
31
+ LocalParticle_add_to_px(part, kick);
32
+ } else if (plane == -1){
33
+ LocalParticle_add_to_py(part, kick);
34
+ } else {
35
+ LocalParticle_kill_particle(part, XC_ERR_INVALID_XOFIELD);
36
+ }
37
+ }
38
+ }
39
+ //end_per_particle_block
40
+ }
41
+
42
+ #endif /* XCOLL_BLOWUP_H */
@@ -0,0 +1,109 @@
1
+ // copyright ############################### #
2
+ // This file is part of the Xcoll Package. #
3
+ // Copyright (c) CERN, 2024. #
4
+ // ######################################### #
5
+
6
+ #ifndef XCOLL_EMITTANCE_MONITOR_H
7
+ #define XCOLL_EMITTANCE_MONITOR_H
8
+
9
+ #ifndef C_LIGHT
10
+ #define C_LIGHT 299792458.0
11
+ #endif
12
+
13
+ /*gpufun*/
14
+ void EmittanceMonitor_track_local_particle(EmittanceMonitorData el, LocalParticle* part0){
15
+ EmittanceMonitorData_set__cached(el, 0);
16
+ int64_t const start_at_turn = EmittanceMonitorData_get_start_at_turn(el);
17
+ int64_t const part_id_start = EmittanceMonitorData_get_part_id_start(el);
18
+ int64_t const part_id_end = EmittanceMonitorData_get_part_id_end(el);
19
+ double const frev = EmittanceMonitorData_get_frev(el);
20
+ double const sampling_frequency = EmittanceMonitorData_get_sampling_frequency(el);
21
+
22
+ EmittanceMonitorRecord record = EmittanceMonitorData_getp_data(el);
23
+
24
+ int64_t max_slot = EmittanceMonitorRecord_len_count(record);
25
+
26
+ int const plane_selector = EmittanceMonitorData_get__plane_selector(el);
27
+ int const monitor_horizontal = plane_selector % 2;
28
+ int const monitor_vertical = (plane_selector >> 1) % 2;
29
+ int const monitor_longitudinal = (plane_selector >> 2) % 2;
30
+
31
+ //start_per_particle_block(part0->part)
32
+ int64_t particle_id = LocalParticle_get_particle_id(part);
33
+ if (part_id_end < 0 || (part_id_start <= particle_id && particle_id < part_id_end)){
34
+
35
+ // zeta is the absolute path length deviation from the reference particle: zeta = (s - beta0*c*t)
36
+ // but without limits, i.e. it can exceed the circumference (for coasting beams)
37
+ // as the particle falls behind or overtakes the reference particle
38
+ double const zeta = LocalParticle_get_zeta(part);
39
+ double const beta0 = LocalParticle_get_beta0(part);
40
+ double const at_turn = LocalParticle_get_at_turn(part);
41
+
42
+ double x =0;
43
+ double px = 0;
44
+ double y = 0;
45
+ double py = 0;
46
+ double pzeta = 0;
47
+
48
+ // compute sample index
49
+ int64_t slot = round(sampling_frequency * ( (at_turn-start_at_turn)/frev - zeta/beta0/C_LIGHT ));
50
+
51
+ if (slot >= 0 && slot < max_slot){
52
+ /*gpuglmem*/ double *count = EmittanceMonitorRecord_getp1_count(record, slot); atomicAdd(count, 1);
53
+
54
+ if (monitor_horizontal){
55
+ x = LocalParticle_get_x(part);
56
+ px = LocalParticle_get_px(part);
57
+ /*gpuglmem*/ double *x_sum1 = EmittanceMonitorRecord_getp1_x_sum1(record, slot); atomicAdd(x_sum1, x);
58
+ /*gpuglmem*/ double *px_sum1 = EmittanceMonitorRecord_getp1_px_sum1(record, slot); atomicAdd(px_sum1, px);
59
+ /*gpuglmem*/ double *x_x_sum2 = EmittanceMonitorRecord_getp1_x_x_sum2(record, slot); atomicAdd(x_x_sum2, x*x);
60
+ /*gpuglmem*/ double *x_px_sum2 = EmittanceMonitorRecord_getp1_x_px_sum2(record, slot); atomicAdd(x_px_sum2, x*px);
61
+ /*gpuglmem*/ double *px_px_sum2 = EmittanceMonitorRecord_getp1_px_px_sum2(record, slot); atomicAdd(px_px_sum2, px*px);
62
+ }
63
+
64
+ if (monitor_vertical){
65
+ y = LocalParticle_get_y(part);
66
+ py = LocalParticle_get_py(part);
67
+ /*gpuglmem*/ double *y_sum1 = EmittanceMonitorRecord_getp1_y_sum1(record, slot); atomicAdd(y_sum1, y);
68
+ /*gpuglmem*/ double *py_sum1 = EmittanceMonitorRecord_getp1_py_sum1(record, slot); atomicAdd(py_sum1, py);
69
+ /*gpuglmem*/ double *y_y_sum2 = EmittanceMonitorRecord_getp1_y_y_sum2(record, slot); atomicAdd(y_y_sum2, y*y);
70
+ /*gpuglmem*/ double *y_py_sum2 = EmittanceMonitorRecord_getp1_y_py_sum2(record, slot); atomicAdd(y_py_sum2, y*py);
71
+ /*gpuglmem*/ double *py_py_sum2 = EmittanceMonitorRecord_getp1_py_py_sum2(record, slot); atomicAdd(py_py_sum2, py*py);
72
+ }
73
+
74
+ if (monitor_longitudinal){
75
+ double const ptau = LocalParticle_get_ptau(part);
76
+ pzeta = ptau/beta0;
77
+ /*gpuglmem*/ double *zeta_sum1 = EmittanceMonitorRecord_getp1_zeta_sum1(record, slot); atomicAdd(zeta_sum1, zeta);
78
+ /*gpuglmem*/ double *pzeta_sum1 = EmittanceMonitorRecord_getp1_pzeta_sum1(record, slot); atomicAdd(pzeta_sum1, pzeta);
79
+ /*gpuglmem*/ double *zeta_zeta_sum2 = EmittanceMonitorRecord_getp1_zeta_zeta_sum2(record, slot); atomicAdd(zeta_zeta_sum2, zeta*zeta);
80
+ /*gpuglmem*/ double *zeta_pzeta_sum2 = EmittanceMonitorRecord_getp1_zeta_pzeta_sum2(record, slot); atomicAdd(zeta_pzeta_sum2, zeta*pzeta);
81
+ /*gpuglmem*/ double *pzeta_pzeta_sum2 = EmittanceMonitorRecord_getp1_pzeta_pzeta_sum2(record, slot); atomicAdd(pzeta_pzeta_sum2, pzeta*pzeta);
82
+ }
83
+
84
+ if (monitor_horizontal && monitor_vertical){
85
+ /*gpuglmem*/ double *x_y_sum2 = EmittanceMonitorRecord_getp1_x_y_sum2(record, slot); atomicAdd(x_y_sum2, x*y);
86
+ /*gpuglmem*/ double *x_py_sum2 = EmittanceMonitorRecord_getp1_x_py_sum2(record, slot); atomicAdd(x_py_sum2, x*py);
87
+ /*gpuglmem*/ double *px_y_sum2 = EmittanceMonitorRecord_getp1_px_y_sum2(record, slot); atomicAdd(px_y_sum2, px*y);
88
+ /*gpuglmem*/ double *px_py_sum2 = EmittanceMonitorRecord_getp1_px_py_sum2(record, slot); atomicAdd(px_py_sum2, px*py);
89
+ }
90
+
91
+ if (monitor_horizontal && monitor_longitudinal){
92
+ /*gpuglmem*/ double *x_zeta_sum2 = EmittanceMonitorRecord_getp1_x_zeta_sum2(record, slot); atomicAdd(x_zeta_sum2, x*zeta);
93
+ /*gpuglmem*/ double *x_pzeta_sum2 = EmittanceMonitorRecord_getp1_x_pzeta_sum2(record, slot); atomicAdd(x_pzeta_sum2, x*pzeta);
94
+ /*gpuglmem*/ double *px_zeta_sum2 = EmittanceMonitorRecord_getp1_px_zeta_sum2(record, slot); atomicAdd(px_zeta_sum2, px*zeta);
95
+ /*gpuglmem*/ double *px_pzeta_sum2 = EmittanceMonitorRecord_getp1_px_pzeta_sum2(record, slot); atomicAdd(px_pzeta_sum2, px*pzeta);
96
+ }
97
+
98
+ if (monitor_vertical && monitor_longitudinal){
99
+ /*gpuglmem*/ double *y_zeta_sum2 = EmittanceMonitorRecord_getp1_y_zeta_sum2(record, slot); atomicAdd(y_zeta_sum2, y*zeta);
100
+ /*gpuglmem*/ double *y_pzeta_sum2 = EmittanceMonitorRecord_getp1_y_pzeta_sum2(record, slot); atomicAdd(y_pzeta_sum2, y*pzeta);
101
+ /*gpuglmem*/ double *py_zeta_sum2 = EmittanceMonitorRecord_getp1_py_zeta_sum2(record, slot); atomicAdd(py_zeta_sum2, py*zeta);
102
+ /*gpuglmem*/ double *py_pzeta_sum2 = EmittanceMonitorRecord_getp1_py_pzeta_sum2(record, slot); atomicAdd(py_pzeta_sum2, py*pzeta);
103
+ }
104
+ }
105
+ }
106
+ //end_per_particle_block
107
+ }
108
+
109
+ #endif /* XCOLL_EMITTANCE_MONITOR_H */