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
@@ -1,34 +1,19 @@
1
1
  // copyright ############################### #
2
2
  // This file is part of the Xcoll Package. #
3
- // Copyright (c) CERN, 2023. #
3
+ // Copyright (c) CERN, 2024. #
4
4
  // ######################################### #
5
5
 
6
6
  #ifndef XCOLL_EVEREST_ENGINE_H
7
7
  #define XCOLL_EVEREST_ENGINE_H
8
8
 
9
+ #define XCOLL_TRANSITION
9
10
 
10
11
  typedef struct EverestCollData_ {
11
12
  // Collimator properties
12
- double aperture; // TODO: This should go out, as it's geometry and that should not be used in Everest scattering
13
- double offset; // TODO: This should go out, as it's geometry and that should not be used in Everest scattering
14
- double tilt_L; // TODO: This should go out, as it's geometry and that should not be used in Everest scattering
15
- double tilt_R; // TODO: This should go out, as it's geometry and that should not be used in Everest scattering
16
- double side; // TODO: This should go out, as it's geometry and that should not be used in Everest scattering
17
13
  RandomRutherfordData restrict rng;
18
- CollimatorImpactsData record;
14
+ InteractionRecordData record;
19
15
  RecordIndex record_index;
20
- // Crystal properties
21
- double bend_r;
22
- double bend_ang;
23
- double tilt;
24
- double amorphous_layer;
25
- double xdim;
26
- double ydim;
27
- int8_t orient;
28
- double miscut;
29
- double s_P;
30
- double x_P;
31
- double t_VImax;
16
+ int8_t record_scatterings;
32
17
  // Material properties
33
18
  // TODO: can we use pointers for the MaterialData? It then gets a bit difficult to read them, ie *coll->exenergy
34
19
  double exenergy;
@@ -43,6 +28,8 @@ typedef struct EverestCollData_ {
43
28
  double ai;
44
29
  double eum;
45
30
  double collnt;
31
+ double eta;
32
+ int8_t orient;
46
33
  int8_t only_mcs;
47
34
  } EverestCollData_;
48
35
  typedef EverestCollData_ *EverestCollData;
@@ -62,6 +49,7 @@ typedef struct EverestData_ {
62
49
  double prob_tail_c4;
63
50
  double energy_loss;
64
51
  double energy_loss_tail;
52
+ // Crystal data
65
53
  double rescale_scattering;
66
54
  double t_c;
67
55
  double t_c0;
@@ -90,19 +78,12 @@ void Drift_single_particle_4d(LocalParticle* part, double length){
90
78
  LocalParticle_set_zeta(part, zeta);
91
79
  }
92
80
 
93
- /*gpufun*/
94
- double YRotation_single_particle_rotate_only(LocalParticle* part, double s, double angle){
95
- double x = LocalParticle_get_x(part);
96
- double rpp = LocalParticle_get_rpp(part);
97
- double sin_y = sin(angle);
98
- double cos_y = cos(angle);
99
- LocalParticle_set_x(part, x*cos_y - s*sin_y);
100
- LocalParticle_add_to_px(part,-angle/rpp);
101
- return x*sin_y + s*cos_y; // new s
102
- }
103
-
104
81
  /*gpukern*/
105
82
  void RandomRutherford_set_by_xcoll_material(RandomRutherfordData ran, GeneralMaterialData material){
83
+ if (GeneralMaterialData_get__only_mcs(material)){
84
+ RandomRutherford_set(ran, 1, 1, 0.0001, 0.01);
85
+ return;
86
+ }
106
87
  double const zatom = GeneralMaterialData_get_Z(material);
107
88
  double const emr = GeneralMaterialData_get_nuclear_radius(material);
108
89
  double const hcut = GeneralMaterialData_get_hcut(material);
@@ -1,30 +1,33 @@
1
1
  # copyright ############################### #
2
2
  # This file is part of the Xcoll Package. #
3
- # Copyright (c) CERN, 2023. #
3
+ # Copyright (c) CERN, 2024. #
4
4
  # ######################################### #
5
5
 
6
- import xobjects as xo
7
6
  import xtrack as xt
8
7
 
9
8
  from .materials import Material, CrystalMaterial
10
- from ...impacts import CollimatorImpacts
9
+ from ..geometry import XcollGeometry
10
+ from ...interaction_record import InteractionRecord
11
11
  from ...general import _pkg_root
12
12
 
13
13
 
14
- class EverestEngine(xo.HybridClass):
14
+ class EverestEngine(xt.BeamElement):
15
15
  _xofields = {}
16
16
 
17
- _depends_on = [Material, CrystalMaterial, CollimatorImpacts, xt.RandomUniform, xt.RandomExponential,
18
- xt.RandomNormal, xt.RandomRutherford, xt.Drift]
17
+ allow_track = False
18
+
19
+ _depends_on = [Material, CrystalMaterial, InteractionRecord, xt.RandomUniform, xt.RandomExponential,
20
+ xt.RandomNormal, xt.RandomRutherford, xt.Drift, XcollGeometry]
19
21
 
20
22
  _extra_c_sources = [
23
+ _pkg_root.joinpath('scattering_routines','geometry','rotation.h'),
21
24
  _pkg_root.joinpath('scattering_routines','everest','constants.h'),
22
25
  _pkg_root.joinpath('scattering_routines','everest','everest.h'),
23
26
  _pkg_root.joinpath('scattering_routines','everest','properties.h'),
24
- # _pkg_root.joinpath('scattering_routines','everest','scatter_init.h'),
25
27
  _pkg_root.joinpath('scattering_routines','everest','multiple_coulomb_scattering.h'),
28
+ _pkg_root.joinpath('scattering_routines','everest','nuclear_interaction.h'),
29
+ _pkg_root.joinpath('scattering_routines','everest','crystal_parameters.h'),
30
+ _pkg_root.joinpath('scattering_routines','everest','amorphous.h'),
26
31
  _pkg_root.joinpath('scattering_routines','everest','jaw.h'),
27
- _pkg_root.joinpath('scattering_routines','everest','scatter.h'),
28
- _pkg_root.joinpath('scattering_routines','everest','crystal.h'),
29
- _pkg_root.joinpath('scattering_routines','everest','scatter_crystal.h')
32
+ _pkg_root.joinpath('scattering_routines','everest','channeling.h')
30
33
  ]
@@ -1,6 +1,6 @@
1
1
  // copyright ############################### #
2
2
  // This file is part of the Xcoll Package. #
3
- // Copyright (c) CERN, 2023. #
3
+ // Copyright (c) CERN, 2024. #
4
4
  // ######################################### #
5
5
 
6
6
  #ifndef XCOLL_EVEREST_JAW_H
@@ -9,227 +9,58 @@
9
9
  #include <stdio.h>
10
10
 
11
11
 
12
-
13
12
  /*gpufun*/
14
- double* tetat(LocalParticle* part, double t, double p) {
15
- double teta = sqrt(t)/p;
16
- double va = 0;
17
- double vb = 0;
18
- double va2 = 0;
19
- double vb2 = 0;
20
- double r2 = 0;
21
- double* result = (double*)malloc(2 * sizeof(double));
22
-
23
- while (1) {
24
- va = 2*RandomUniform_generate(part) - 1;
25
- vb = RandomUniform_generate(part);
26
- va2 = pow(va,2);
27
- vb2 = pow(vb,2);
28
- r2 = va2 + vb2;
29
- if(r2 < 1) {
30
- break;
31
- }
13
+ double jaw(EverestData restrict everest, LocalParticle* part, double p, double length, int edge_check) {
14
+ if (LocalParticle_get_state(part) < 1){
15
+ // Do nothing if already absorbed
16
+ return p;
32
17
  }
33
-
34
- result[0] = (teta*((2*va)*vb))/r2;
35
- result[1] = (teta*(va2 - vb2))/r2;
36
- return result;
37
- }
38
-
39
-
40
- /*gpufun*/
41
- double* gettran(EverestData restrict everest, LocalParticle* part, double inter, double p) {
42
-
43
- double* res = (double*)malloc(2 * sizeof(double));
44
-
45
- // Neither if-statements below have an else, so defaulting function return to zero.
46
- double result = 0;
47
-
48
- if (inter==2) { // Nuclear Elastic
49
- result = RandomExponential_generate(part)/everest->bn;
50
-
51
- } else if (inter==3) { // pp Elastic
52
- result = RandomExponential_generate(part)/everest->bpp;
53
-
54
- } else if (inter==4) { // Single Diffractive
55
- double xm2 = exp(RandomUniform_generate(part) * everest->xln15s);
56
- double bsd = 0;
57
- p = p * (1 - xm2/everest->ecmsq);
58
-
59
- if (xm2 < 2) {
60
- bsd = 2 * everest->bpp;
61
- } else if ((xm2 >= 2) & (xm2 <= 5)) {
62
- bsd = ((106.0 - 17.0*xm2)*everest->bpp)/36.0;
63
- } else {
64
- bsd = (7*everest->bpp)/12.0;
65
- }
66
- result = RandomExponential_generate(part)/bsd;
67
-
68
- } else if (inter==5) { // Coulomb
69
- result = RandomRutherford_generate(everest->coll->rng, part);
70
- }
71
-
72
- res[0] = result;
73
- res[1] = p;
74
- return res;
75
- }
76
-
77
-
78
- /*gpufun*/
79
- int ichoix(EverestData restrict everest, LocalParticle* part) {
80
-
81
- double aran = RandomUniform_generate(part);
82
- int i;
83
- for (i = 0; i < 5; ++i) {
84
- if (aran < everest->cprob[i]) {
85
- break;
86
- }
87
- }
88
- return i;
89
- }
90
18
 
91
-
92
- /*gpufun*/
93
- double* jaw(EverestData restrict everest, LocalParticle* part, double p, double zlm, int edge_check) {
94
-
95
- double* result = (double*)malloc(3 * sizeof(double));
96
-
97
- double s;
98
- double nabs = 0;
99
- double rlen = zlm;
100
- double m_dpodx = 0.;
101
- double t;
102
- double tx;
103
- double tz;
104
-
105
- double rpp_in = LocalParticle_get_rpp(part);
106
- double x = LocalParticle_get_x(part);
107
- double xp = LocalParticle_get_px(part)*rpp_in;
108
- double z = LocalParticle_get_y(part);
109
- double zp = LocalParticle_get_py(part)*rpp_in;
19
+ double rlen = length;
20
+ double s0 = LocalParticle_get_s(part);
21
+ p /= 1e9; // Energy (not momentum) in GeV
110
22
 
111
23
  if (everest->coll->only_mcs) {
112
- double* res = mcs(everest, part, zlm, p, x, xp, z, zp, edge_check);
113
- s = res[0];
114
- x = res[1];
115
- xp = res[2];
116
- z = res[3];
117
- zp = res[4];
118
- free(res);
24
+ mcs(everest, part, rlen, p, edge_check);
119
25
 
120
26
  } else {
121
27
  // Do a step for a point-like interaction.
122
28
  // Get monte-carlo interaction length.
123
29
  while (1) {
124
-
125
30
  calculate_ionisation_properties(everest, p);
126
- double zlm1 = everest->xintl*RandomExponential_generate(part);
31
+ double length_step = everest->xintl*RandomExponential_generate(part);
127
32
 
128
- // If the monte-carlo interaction length is longer than the
129
- // remaining collimator length, then put it to the remaining
130
- // length, do multiple coulomb scattering and return.
131
- // LAST STEP IN ITERATION LOOP
132
- if (zlm1 > rlen) {
133
- zlm1 = rlen;
134
- double* res = mcs(everest, part, zlm1, p, x, xp, z, zp, edge_check);
135
- s = res[0];
136
- x = res[1];
137
- xp = res[2];
138
- z = res[3];
139
- zp = res[4];
140
- free(res);
141
-
142
- s = zlm - rlen + s;
143
- m_dpodx = calcionloss(everest, part, rlen); // DM routine to include tail // TODO: should not be rlen but s after updating
144
- p = p-m_dpodx*s; // This is correct: ionisation loss is only calculated and applied at end of while (break)
33
+ // If the monte-carlo interaction length is longer than the remaining
34
+ // length, then put it to the remaining length, do mcs and return.
35
+ if (length_step > rlen) {
36
+ mcs(everest, part, rlen, p, edge_check);
145
37
  break;
146
38
  }
147
- // Otherwise do multi-coulomb scattering.
148
- // REGULAR STEP IN ITERATION LOOP
149
- double* res1 = mcs(everest, part, zlm1, p, x, xp, z, zp, edge_check);
150
- s = res1[0];
151
- x = res1[1];
152
- xp = res1[2];
153
- z = res1[3];
154
- zp = res1[4];
155
- free(res1);
156
39
 
157
- // Check if particle is outside of collimator (X.LT.0) after
158
- // MCS. If yes, calculate output longitudinal position (s),
159
- // reduce momentum (output as dpop) and return.
160
- // PARTICLE LEFT COLLIMATOR BEFORE ITS END.
40
+ // Otherwise do multi-coulomb scattering.
41
+ mcs(everest, part, length_step, p, edge_check);
161
42
 
162
- if(x <= 0) {
163
- s = zlm - rlen + s;
164
- m_dpodx = calcionloss(everest, part, rlen); // TODO: should not be rlen but s after updating
165
- p = p-m_dpodx*s; // correct
43
+ if(LocalParticle_get_x(part) <= 0) {
44
+ // PARTICLE LEFT COLLIMATOR BEFORE ITS END.
166
45
  break;
167
46
  }
168
47
 
169
- // Check whether particle is absorbed. If yes, calculate output
170
- // longitudinal position (s), reduce momentum (output as dpop)
171
- // and return.
172
- // PARTICLE WAS ABSORBED INSIDE COLLIMATOR DURING MCS.
173
-
174
- int inter = ichoix(everest, part);
175
- nabs = inter;
176
- if (inter == 1) {
177
- s = zlm - rlen + zlm1;
178
- m_dpodx = calcionloss(everest, part, rlen);
179
- p = p-m_dpodx*s;
48
+ p = nuclear_interaction(everest, part, p);
49
+ if (LocalParticle_get_state(part) < 1){
50
+ // PARTICLE WAS ABSORBED INSIDE COLLIMATOR DURING MCS.
180
51
  break;
181
52
  }
182
53
 
183
-
184
- // Now treat the other types of interaction, as determined by ICHOIX:
185
-
186
- // Nuclear-Elastic: inter = 2
187
- // pp Elastic: inter = 3
188
- // Single-Diffractive: inter = 4 (changes momentum p)
189
- // Coulomb: inter = 5
190
-
191
- // Gettran returns some monte carlo number, that, as I believe, gives the rms transverse momentum transfer.
192
-
193
- double* res2 = gettran(everest, part, inter, p);
194
- t = res2[0];
195
- p = res2[1];
196
- free(res2);
197
-
198
- // Tetat calculates from the rms transverse momentum transfer in
199
- // monte-carlo fashion the angle changes for x and z planes. The
200
- // angle change is proportional to SQRT(t) and 1/p, as expected.
201
-
202
- double* res3 = tetat(part, t, p);
203
- tx = res3[0];
204
- tz = res3[1];
205
- free(res3);
206
-
207
- // Apply angle changes
208
- xp = xp + tx;
209
- zp = zp + tz;
210
-
211
- // Treat single-diffractive scattering. TODO: this does nothing??
212
- if(inter == 4) {
213
- // added update for s
214
- s = zlm - rlen + zlm1;
215
- }
216
-
217
54
  // Calculate the remaining interaction length and close the iteration loop.
218
- rlen = rlen - zlm1;
55
+ rlen = rlen - length_step;
219
56
  }
57
+ // TODO: ionisation loss should also be calculated when only_mcs
58
+ double m_dpodx = calcionloss(everest, part, rlen); // DM routine to include tail // TODO: should not be rlen but s after updating
59
+ double s = LocalParticle_get_s(part) - s0;
60
+ p = p-m_dpodx*s; // TODO: This is correct: ionisation loss is only calculated and applied at end of while (break)
220
61
  }
221
62
 
222
- LocalParticle_set_x(part, x);
223
- LocalParticle_set_px(part, xp/rpp_in);
224
- LocalParticle_set_y(part, z);
225
- LocalParticle_set_py(part, zp/rpp_in);
226
- LocalParticle_add_to_s(part, s); // TODO: is this correct with tilt etc?
227
-
228
- result[0] = p;
229
- result[1] = nabs;
230
- result[2] = s;
231
- return result;
232
- }
233
-
63
+ return p*1e9; // Back to eV
64
+ }
234
65
 
235
66
  #endif /* XCOLL_EVEREST_JAW_H */
@@ -18,6 +18,8 @@ import xobjects as xo
18
18
  # as xobjects enforces a strict order: static fields first, and then dynamic fields.
19
19
  # See struct.py, in __new__ of MetaStruct
20
20
 
21
+ # A HybridClass needs something to depend on, otherwise the class is added twice in the cdefs during compilation
22
+
21
23
  class GeneralMaterial(xo.HybridClass):
22
24
  _xofields = {
23
25
  'Z': xo.Float64, # zatom
@@ -325,19 +327,39 @@ Inermet = Material(
325
327
  _context=_materials_context,
326
328
  )
327
329
 
328
- SixTrack_to_xcoll = {
329
- "be": [Beryllium],
330
- "al": [Aluminium],
331
- "cu": [Copper],
332
- "w": [Tungsten, TungstenCrystal],
333
- "pb": [Lead],
334
- "c": [Carbon, CarbonCrystal],
335
- "c2": [Carbon2],
336
- "si": [Silicon, SiliconCrystal],
337
- "ge": [Germanium, GermaniumCrystal],
338
- "mogr": [MolybdenumGraphite],
339
- "cucd": [CopperDiamond],
340
- "mo": [Molybdenum],
341
- "glid": [Glidcop],
342
- "iner": [Inermet]
330
+
331
+ _SixTrack_to_xcoll = {
332
+ "BE": [Beryllium],
333
+ "AL": [Aluminium],
334
+ "CU": [Copper],
335
+ "W": [Tungsten, TungstenCrystal],
336
+ "PB": [Lead],
337
+ "C": [Carbon, CarbonCrystal],
338
+ "C2": [Carbon2],
339
+ "Si": [Silicon, SiliconCrystal],
340
+ "Ge": [Germanium, GermaniumCrystal],
341
+ "MoGR": [MolybdenumGraphite],
342
+ "CuCD": [CopperDiamond],
343
+ "Mo": [Molybdenum],
344
+ "Glid": [Glidcop],
345
+ "Iner": [Inermet]
343
346
  }
347
+
348
+ def SixTrack_to_xcoll(mat):
349
+ materials = {kk.lower(): vv for kk, vv in _SixTrack_to_xcoll.items()}
350
+ return materials[mat.lower()]
351
+
352
+ def SixTrack_from_xcoll(material):
353
+ results = [kk for kk, vv in _SixTrack_to_xcoll.items()
354
+ if material.name == vv[0].name]
355
+ if len(results) == 0:
356
+ raise ValueError(f"Material {material.name} not found in SixTrack library!")
357
+ return results[0]
358
+
359
+ def SixTrack_from_xcoll_crystal(material):
360
+ results = [kk for kk, vv in _SixTrack_to_xcoll.items()
361
+ if len(vv) > 1 and material.name == vv[1].name]
362
+ if len(results) == 0:
363
+ raise ValueError(f"Material {material.name} not found in SixTrack library!")
364
+ return results[0]
365
+
@@ -80,7 +80,7 @@ double soln3(double a, double b, double dh, double smax) {
80
80
  /*gpufun*/
81
81
  double* scamcs(LocalParticle* part, double x0, double xp0, double s) {
82
82
  double* result = (double*)malloc(2 * sizeof(double));
83
-
83
+
84
84
  // Generate two Gaussian random numbers z1 and z2
85
85
  double r2 = 0;
86
86
  double v1 = 0;
@@ -107,7 +107,14 @@ double* scamcs(LocalParticle* part, double x0, double xp0, double s) {
107
107
 
108
108
 
109
109
  /*gpufun*/
110
- double* mcs(EverestData restrict everest, LocalParticle* part, double zlm1, double p, double x, double xp, double z, double zp, int edge_check) {
110
+ void mcs(EverestData restrict everest, LocalParticle* part, double length, double p, int edge_check){
111
+ InteractionRecordData record = everest->coll->record;
112
+ RecordIndex record_index = everest->coll->record_index;
113
+ int8_t sc = everest->coll->record_scatterings;
114
+
115
+ // First log particle at start of multiple coulomb scattering
116
+ int64_t i_slot = -1;
117
+ if (sc) i_slot = InteractionRecordData_log(record, record_index, part, XC_MULTIPLE_COULOMB_SCATTERING);
111
118
 
112
119
  double const radl = everest->coll->radl;
113
120
  double s;
@@ -115,9 +122,18 @@ double* mcs(EverestData restrict everest, LocalParticle* part, double zlm1, doub
115
122
  double h = 0.001;
116
123
  double dh = 0.0001;
117
124
  double bn0 = 0.4330127019;
118
- double rlen0 = zlm1/radl;
125
+ double rlen0 = length/radl;
119
126
  double rlen = rlen0;
120
- double* result = (double*)malloc(5 * sizeof(double));
127
+
128
+ double x = LocalParticle_get_x(part);
129
+ double z = LocalParticle_get_y(part);
130
+ #ifdef XCOLL_USE_EXACT
131
+ double xp = LocalParticle_get_exact_xp(part); // This is tangent
132
+ double zp = LocalParticle_get_exact_yp(part); // This is tangent
133
+ #else
134
+ double xp = LocalParticle_get_xp(part);
135
+ double zp = LocalParticle_get_yp(part);
136
+ #endif
121
137
 
122
138
  x = (x/theta)/radl;
123
139
  xp = xp/theta;
@@ -169,12 +185,17 @@ double* mcs(EverestData restrict everest, LocalParticle* part, double zlm1, doub
169
185
  zp = res[1];
170
186
  free(res);
171
187
 
172
- result[0] = s*radl;
173
- result[1] = (x*theta)*radl;
174
- result[2] = xp*theta;
175
- result[3] = (z*theta)*radl;
176
- result[4] = zp*theta;
177
- return result;
188
+ LocalParticle_set_x(part, x*theta*radl);
189
+ LocalParticle_set_y(part, z*theta*radl);
190
+ #ifdef XCOLL_USE_EXACT
191
+ LocalParticle_set_exact_xp_yp(part, xp*theta, zp*theta);
192
+ #else
193
+ LocalParticle_set_xp_yp(part, xp*theta, zp*theta);
194
+ #endif
195
+ LocalParticle_add_to_s(part, s*radl);
196
+
197
+ // Finally log particle at end of multiple coulomb scattering
198
+ if (sc) InteractionRecordData_log_child(record, i_slot, part);
178
199
  }
179
200
 
180
201
  #endif /* XCOLL_EVEREST_MCS_H */
@@ -0,0 +1,86 @@
1
+ // copyright ############################### #
2
+ // This file is part of the Xcoll Package. #
3
+ // Copyright (c) CERN, 2024. #
4
+ // ######################################### #
5
+
6
+ #ifndef XCOLL_EVEREST_NUCL_H
7
+ #define XCOLL_EVEREST_NUCL_H
8
+ #include <math.h>
9
+ #include <stdio.h>
10
+
11
+
12
+ /*gpufun*/
13
+ double nuclear_interaction(EverestData restrict everest, LocalParticle* part, double pc) {
14
+ InteractionRecordData record = everest->coll->record;
15
+ RecordIndex record_index = everest->coll->record_index;
16
+ int8_t sc = everest->coll->record_scatterings;
17
+
18
+ #ifdef XCOLL_REFINE_ENERGY
19
+ calculate_scattering(everest, pc);
20
+ #endif
21
+
22
+ //Choose nuclear interaction
23
+ double aran = RandomUniform_generate(part);
24
+ int ichoix = 1;
25
+
26
+ while (aran > everest->cprob[ichoix]) {
27
+ ichoix += 1;
28
+ }
29
+
30
+ //Do the interaction
31
+ int64_t i_slot = -1;
32
+ if (ichoix==1) {
33
+ if (sc) i_slot = InteractionRecordData_log(record, record_index, part, XC_ABSORBED);
34
+ LocalParticle_set_state(part, XC_LOST_ON_EVEREST_COLL);
35
+
36
+ } else {
37
+ double teta;
38
+ if (ichoix==2) { // p-n elastic
39
+ if (sc) i_slot = InteractionRecordData_log(record, record_index, part, XC_PN_ELASTIC);
40
+ teta = sqrt(RandomExponential_generate(part)/everest->bn)/pc;
41
+
42
+ } else if (ichoix==3) { // p-p elastic
43
+ if (sc) i_slot = InteractionRecordData_log(record, record_index, part, XC_PP_ELASTIC);
44
+ teta = sqrt(RandomExponential_generate(part)/everest->bpp)/pc;
45
+
46
+ } else if (ichoix==4) { // Single diffractive
47
+ if (sc) i_slot = InteractionRecordData_log(record, record_index, part, XC_SINGLE_DIFFRACTIVE);
48
+ double xm2 = exp(RandomUniform_generate(part)*everest->xln15s);
49
+ double bsd;
50
+ if (xm2 < 2.) {
51
+ bsd = 2*everest->bpp;
52
+ } else if (xm2 >= 2. && xm2 <= 5.) {
53
+ bsd = ((106.0 - 17.0*xm2)*everest->bpp)/36.0;
54
+ } else {
55
+ bsd = (7*everest->bpp)/12.0;
56
+ }
57
+ double pc_in = pc;
58
+ pc = pc*(1 - xm2/everest->ecmsq);
59
+ // Corrected 1/p into 1/sqrt(pp')
60
+ teta = sqrt(RandomExponential_generate(part)/bsd)/sqrt(pc_in*pc);
61
+
62
+ } else { // Coulomb
63
+ if (sc) i_slot = InteractionRecordData_log(record, record_index, part, XC_COULOMB);
64
+ teta = sqrt(RandomRutherford_generate(everest->coll->rng, part))/pc;
65
+ }
66
+
67
+ // TODO: I am not convinced that we can just sample two independent random numbers
68
+ // I believe it should be tan(tx) = cos(phi) * tan(teta) and tan(ty) = sin(phi) * tan(teta)
69
+ // with phi uniformly sampled between 0 and 2 pi
70
+ double tx = teta*RandomNormal_generate(part);
71
+ double tz = teta*RandomNormal_generate(part);
72
+
73
+ //Change the angles
74
+ #ifdef XCOLL_USE_EXACT
75
+ LocalParticle_add_to_exact_xp_yp(part, tx, tz);
76
+ #else
77
+ LocalParticle_add_to_xp_yp(part, tx, tz);
78
+ #endif
79
+
80
+ if (sc) InteractionRecordData_log_child(record, i_slot, part);
81
+ }
82
+
83
+ return pc;
84
+ }
85
+
86
+ #endif /* XCOLL_EVEREST_NUCL_H */
@@ -12,7 +12,9 @@
12
12
 
13
13
  /*gpufun*/
14
14
  void calculate_scattering(EverestData restrict everest, double p) {
15
-
15
+ if (everest->coll->only_mcs){ // TODO: this should be done smarter
16
+ return;
17
+ }
16
18
  // Material properties
17
19
  double const anuc = everest->coll->anuc;
18
20
  double const rho = everest->coll->rho;
@@ -92,6 +94,9 @@ void calculate_scattering(EverestData restrict everest, double p) {
92
94
 
93
95
  /*gpufun*/
94
96
  void calculate_ionisation_properties(EverestData restrict everest, double pc) {
97
+ if (everest->coll->only_mcs){ // TODO: this should be done smarter
98
+ return;
99
+ }
95
100
 
96
101
  // Material properties
97
102
  double const exenergy = everest->coll->exenergy;
@@ -0,0 +1 @@
1
+ gitdir: ../../../../.git/modules/xcoll/scattering_routines/geant4/collimasim
@@ -0,0 +1,12 @@
1
+ *.pyc
2
+ *.egg-info/
3
+ *.so
4
+ *.o
5
+ *~
6
+ #*#
7
+ .#*
8
+ .DS_Store
9
+ .idea
10
+ .vscode
11
+ build
12
+ cmake-build*
@@ -0,0 +1,3 @@
1
+ [submodule "pybind11"]
2
+ path = lib/pybind11
3
+ url = https://github.com/pybind/pybind11.git