xtrack 0.88.5__tar.gz → 0.88.7__tar.gz

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.
Files changed (322) hide show
  1. {xtrack-0.88.5/xtrack.egg-info → xtrack-0.88.7}/PKG-INFO +1 -1
  2. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_elements_thick.py +158 -1
  3. xtrack-0.88.7/xtrack/_version.py +1 -0
  4. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/base_element.py +19 -14
  5. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements.py +8 -0
  6. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/bend.h +2 -0
  7. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/magnet.h +2 -0
  8. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/magnet_edge.h +2 -0
  9. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/multipole.h +2 -0
  10. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/octupole.h +2 -0
  11. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/quadrupole.h +2 -0
  12. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/rbend.h +2 -0
  13. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/sextupole.h +2 -0
  14. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/slnd.h +2 -0
  15. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thick_slice_bend.h +2 -0
  16. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +2 -0
  17. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +2 -0
  18. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thick_slice_rbend.h +2 -0
  19. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +2 -0
  20. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thick_slice_uniform_solenoid.h +2 -0
  21. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_bend.h +2 -0
  22. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +2 -0
  23. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +2 -0
  24. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +2 -0
  25. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_octupole_entry.h +2 -0
  26. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_octupole_exit.h +2 -0
  27. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +2 -0
  28. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_entry.h +2 -0
  29. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_exit.h +2 -0
  30. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_rbend.h +2 -0
  31. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_rbend_entry.h +2 -0
  32. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_rbend_exit.h +2 -0
  33. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +2 -0
  34. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_sextupole_entry.h +2 -0
  35. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_sextupole_exit.h +2 -0
  36. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_entry.h +2 -0
  37. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_exit.h +2 -0
  38. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_magnet.h +13 -1
  39. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_magnet_drift.h +10 -6
  40. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_magnet_edge.h +4 -2
  41. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_magnet_kick.h +4 -2
  42. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/variable_solenoid.h +8 -4
  43. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/internal_record.py +1 -0
  44. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/twiss.py +4 -0
  45. {xtrack-0.88.5 → xtrack-0.88.7/xtrack.egg-info}/PKG-INFO +1 -1
  46. xtrack-0.88.5/xtrack/_version.py +0 -1
  47. {xtrack-0.88.5 → xtrack-0.88.7}/LICENSE +0 -0
  48. {xtrack-0.88.5 → xtrack-0.88.7}/MANIFEST.in +0 -0
  49. {xtrack-0.88.5 → xtrack-0.88.7}/README.md +0 -0
  50. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/__init__.py +0 -0
  51. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/base_classes.py +0 -0
  52. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/be_beamfields/BB6D.py +0 -0
  53. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
  54. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/be_beamfields/__init__.py +0 -0
  55. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/be_beamfields/beambeam.py +0 -0
  56. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/be_beamfields/boost.py +0 -0
  57. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
  58. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
  59. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/be_beamfields/qgauss.py +0 -0
  60. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/be_beamfields/slicing.py +0 -0
  61. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/be_beamfields/spacecharge.py +0 -0
  62. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/elements.py +0 -0
  63. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/line.py +0 -0
  64. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/mathlibs.py +0 -0
  65. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/particles.py +0 -0
  66. {xtrack-0.88.5 → xtrack-0.88.7}/ducktrack/temp_pyparticles.py +0 -0
  67. {xtrack-0.88.5 → xtrack-0.88.7}/pyproject.toml +0 -0
  68. {xtrack-0.88.5 → xtrack-0.88.7}/setup.cfg +0 -0
  69. {xtrack-0.88.5 → xtrack-0.88.7}/setup.py +0 -0
  70. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_acceleration.py +0 -0
  71. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_amplitude_detuning.py +0 -0
  72. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_aperture_table.py +0 -0
  73. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
  74. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_apertures.py +0 -0
  75. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_attr_replicas_and_slices.py +0 -0
  76. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_bucket_with_ref_energy_change.py +0 -0
  77. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_cavity_absolute_time.py +0 -0
  78. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_chromatic_functions_vs_madx.py +0 -0
  79. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_coasting.py +0 -0
  80. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_collective_tracker.py +0 -0
  81. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_collimation.py +0 -0
  82. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_electron_cooler.py +0 -0
  83. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_element_characterization_functions.py +0 -0
  84. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_element_internal_record.py +0 -0
  85. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_elements.py +0 -0
  86. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_elements_classflags.py +0 -0
  87. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_environment.py +0 -0
  88. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_fcc_ee_solenoid_correction.py +0 -0
  89. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +0 -0
  90. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_footprint.py +0 -0
  91. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_freeze_longitudinal.py +0 -0
  92. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_full_rings.py +0 -0
  93. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_h6_sps_beamline.py +0 -0
  94. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_hvkick.py +0 -0
  95. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_ions.py +0 -0
  96. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_legacy_multiline_to_env.py +0 -0
  97. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_lhc_env.py +0 -0
  98. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_lhc_match_phase_15.py +0 -0
  99. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_line.py +0 -0
  100. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_load.py +0 -0
  101. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_load_vars.py +0 -0
  102. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_lumi.py +0 -0
  103. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_mad_writer.py +0 -0
  104. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_madloader.py +0 -0
  105. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_madnginterface.py +0 -0
  106. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_magnet.py +0 -0
  107. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_match_and_track_from_element.py +0 -0
  108. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_match_coupling_knob.py +0 -0
  109. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_match_nested.py +0 -0
  110. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_match_optics_and_ip_knob.py +0 -0
  111. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
  112. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_match_orbit_bump.py +0 -0
  113. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_match_tune_chroma_cminus.py +0 -0
  114. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_monitor.py +0 -0
  115. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_multi_bunch_gauss.py +0 -0
  116. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_multiline.py +0 -0
  117. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_multisetter.py +0 -0
  118. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_multispecies.py +0 -0
  119. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_native_madloader.py +0 -0
  120. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_optimize_for_tracking.py +0 -0
  121. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_particles.py +0 -0
  122. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_particles_basics.py +0 -0
  123. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_particles_pdg.py +0 -0
  124. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_periodic_symmetric_twiss_and_match.py +0 -0
  125. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_pipeline.py +0 -0
  126. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_prebuild_kernels.py +0 -0
  127. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_ps_against_ptc.py +0 -0
  128. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_ps_multiturn_twiss.py +0 -0
  129. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_psb_chicane.py +0 -0
  130. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_pyht_interface.py +0 -0
  131. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_quadrupole_fringe_ptc.py +0 -0
  132. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_quadrupole_wedge.py +0 -0
  133. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_radial_steering.py +0 -0
  134. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_radiation.py +0 -0
  135. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_radiation_equilibrium_emittances.py +0 -0
  136. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_radiation_equilibrium_emittances_thick.py +0 -0
  137. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_radiation_integrals.py +0 -0
  138. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_random_gen.py +0 -0
  139. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_random_gen_exp.py +0 -0
  140. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_random_gen_gauss.py +0 -0
  141. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_random_gen_ruth.py +0 -0
  142. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_rbend_rbarc.py +0 -0
  143. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_rbend_straight_body.py +0 -0
  144. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_rf_track.py +0 -0
  145. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_rotation_signs.py +0 -0
  146. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_second_order_taylor_map.py +0 -0
  147. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_seeds.py +0 -0
  148. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_slice_and_insert_with_replicas.py +0 -0
  149. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_slice_elements.py +0 -0
  150. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_slicing.py +0 -0
  151. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_solenoid_bz_map_vs_boris.py +0 -0
  152. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_solenoid_bz_map_vs_boris_legacy.py +0 -0
  153. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_spacecharge_in_ring.py +0 -0
  154. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_spin.py +0 -0
  155. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_sps_thick.py +0 -0
  156. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_survey.py +0 -0
  157. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_tapering.py +0 -0
  158. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_thick_lhc.py +0 -0
  159. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_tilt_shifts.py +0 -0
  160. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_tracker.py +0 -0
  161. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_trajectory_correcton.py +0 -0
  162. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_twiss.py +0 -0
  163. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_twiss_vs_madx_psb.py +0 -0
  164. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_vs_madx.py +0 -0
  165. {xtrack-0.88.5 → xtrack-0.88.7}/tests/test_xmask_orbit_correction.py +0 -0
  166. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/__init__.py +0 -0
  167. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/_temp/__init__.py +0 -0
  168. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
  169. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
  170. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
  171. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/_temp/lhc_match/__init__.py +0 -0
  172. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
  173. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
  174. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/_temp/lhc_match/var_limits.py +0 -0
  175. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/aperture_meas.py +0 -0
  176. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/__init__.py +0 -0
  177. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/apertures.py +0 -0
  178. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
  179. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/apertures_src/limitpolygon.h +0 -0
  180. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
  181. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
  182. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
  183. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
  184. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/beam_interaction.py +0 -0
  185. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/cavity.h +0 -0
  186. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/default_magnet_config.h +0 -0
  187. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
  188. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
  189. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/drift.h +0 -0
  190. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
  191. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
  192. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
  193. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
  194. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/drift_slice_rbend.h +0 -0
  195. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
  196. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/drift_slice_uniform_solenoid.h +0 -0
  197. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/electroncooler.h +0 -0
  198. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/elens.h +0 -0
  199. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/exciter.h +0 -0
  200. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
  201. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/legacy_solenoid.h +0 -0
  202. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
  203. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/magnet_drift.h +0 -0
  204. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/magnet_kick.h +0 -0
  205. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/marker.h +0 -0
  206. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/multipoleedge.h +0 -0
  207. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
  208. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
  209. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/rfmultipole.h +0 -0
  210. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
  211. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
  212. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
  213. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/srotation.h +0 -0
  214. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_cavity.h +0 -0
  215. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
  216. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
  217. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
  218. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_drift.h +0 -0
  219. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_legacy_solenoid.h +0 -0
  220. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_legacy_solenoid_multipolar_components.h +0 -0
  221. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_legacy_solenoid_radiation.h +0 -0
  222. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_magnet_radiation.h +0 -0
  223. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_mult_fringe.h +0 -0
  224. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
  225. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
  226. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
  227. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_wedge.h +0 -0
  228. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
  229. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
  230. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/wedge.h +0 -0
  231. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/wire.h +0 -0
  232. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
  233. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
  234. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
  235. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
  236. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/exciter.py +0 -0
  237. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/magnets.py +0 -0
  238. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/rft_element.py +0 -0
  239. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/slice_base.py +0 -0
  240. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/slice_elements_drift.py +0 -0
  241. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/slice_elements_edge.py +0 -0
  242. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/slice_elements_thick.py +0 -0
  243. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/beam_elements/slice_elements_thin.py +0 -0
  244. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/environment.py +0 -0
  245. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/footprint.py +0 -0
  246. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/general.py +0 -0
  247. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/headers/atomicadd.h +0 -0
  248. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/headers/checks.h +0 -0
  249. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/headers/constants.h +0 -0
  250. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/headers/particle_states.h +0 -0
  251. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/headers/synrad_spectrum.h +0 -0
  252. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/headers/track.h +0 -0
  253. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/json.py +0 -0
  254. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/line.py +0 -0
  255. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/linear_normal_form.py +0 -0
  256. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/load.py +0 -0
  257. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/loss_location_refinement/__init__.py +0 -0
  258. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/loss_location_refinement/loss_location_refinement.py +0 -0
  259. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/lumi.py +0 -0
  260. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/mad_loader.py +0 -0
  261. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/mad_parser/__init__.py +0 -0
  262. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/mad_parser/loader.py +0 -0
  263. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/mad_parser/madx.lark +0 -0
  264. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/mad_parser/parse.py +0 -0
  265. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/mad_writer.py +0 -0
  266. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/madng_interface.py +0 -0
  267. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/match.py +0 -0
  268. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/monitors/__init__.py +0 -0
  269. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/monitors/beam_position_monitor.h +0 -0
  270. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/monitors/beam_position_monitor.py +0 -0
  271. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/monitors/beam_profile_monitor.h +0 -0
  272. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/monitors/beam_profile_monitor.py +0 -0
  273. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/monitors/beam_size_monitor.h +0 -0
  274. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/monitors/beam_size_monitor.py +0 -0
  275. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/monitors/last_turns_monitor.h +0 -0
  276. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/monitors/last_turns_monitor.py +0 -0
  277. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/monitors/particles_monitor.h +0 -0
  278. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/monitors/particles_monitor.py +0 -0
  279. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/multiline.py +0 -0
  280. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/multiline_legacy/__init__.py +0 -0
  281. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/multiline_legacy/multiline_legacy.py +0 -0
  282. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/multiline_legacy/shared_knobs.py +0 -0
  283. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/multisetter/__init__.py +0 -0
  284. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/multisetter/multisetter.py +0 -0
  285. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/particles/__init__.py +0 -0
  286. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/particles/constants.py +0 -0
  287. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/particles/masses.py +0 -0
  288. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/particles/particles.py +0 -0
  289. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/particles/pdg.py +0 -0
  290. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/particles/rng_src/base_rng.h +0 -0
  291. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/particles/rng_src/particles_rng.h +0 -0
  292. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/pipeline/__init__.py +0 -0
  293. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/pipeline/core.py +0 -0
  294. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/pipeline/manager.py +0 -0
  295. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/pipeline/multitracker.py +0 -0
  296. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/progress_indicator.py +0 -0
  297. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/random/__init__.py +0 -0
  298. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/random/random_generators.py +0 -0
  299. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/random/random_src/exponential.h +0 -0
  300. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
  301. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/random/random_src/normal.h +0 -0
  302. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/random/random_src/rutherford.h +0 -0
  303. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/random/random_src/uniform.h +0 -0
  304. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/random/random_src/uniform_accurate.h +0 -0
  305. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/slicing.py +0 -0
  306. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/survey.py +0 -0
  307. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/svgutils/__init__.py +0 -0
  308. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/svgutils/parser.py +0 -0
  309. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/svgutils/path.py +0 -0
  310. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/svgutils/svgutils.py +0 -0
  311. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/synctime.py +0 -0
  312. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/tapering.py +0 -0
  313. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/targets.py +0 -0
  314. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/tracker.py +0 -0
  315. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/tracker_data.py +0 -0
  316. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/tracker_src/tracker.h +0 -0
  317. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/trajectory_correction.py +0 -0
  318. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack/twissplot.py +0 -0
  319. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack.egg-info/SOURCES.txt +0 -0
  320. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack.egg-info/dependency_links.txt +0 -0
  321. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack.egg-info/requires.txt +0 -0
  322. {xtrack-0.88.5 → xtrack-0.88.7}/xtrack.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xtrack
3
- Version: 0.88.5
3
+ Version: 0.88.7
4
4
  Summary: Tracking library for particle accelerators
5
5
  Home-page: https://xsuite.readthedocs.io/
6
6
  Download-URL: https://pypi.python.org/pypi/xtrack
@@ -2361,4 +2361,161 @@ def test_uniform_solenoid_with_slices(test_context, reference):
2361
2361
  xo.assert_allclose(tw_back.rows[:'e0..0'].ax, tw['ax', 'e0..0'],
2362
2362
  rtol=0, atol=1e-10)
2363
2363
  xo.assert_allclose(tw_back.rows[:'e0..0'].ay, tw['ay', 'e0..0'],
2364
- rtol=0, atol=1e-10)
2364
+ rtol=0, atol=1e-10)
2365
+
2366
+ @for_all_test_contexts
2367
+ def test_uniform_solenoid_x0y0(test_context):
2368
+
2369
+ env = xt.Environment()
2370
+ env.particle_ref = xt.Particles(mass0=xt.ELECTRON_MASS_EV, p0c=20e9)
2371
+
2372
+ line_ref = env.new_line(components=[
2373
+ env.new('sol_ref',xt.UniformSolenoid, length=3, ks=0.2),
2374
+ env.new('end', xt.Marker)
2375
+ ])
2376
+ line_ref_thick = line_ref.copy(shallow=True)
2377
+ line_ref.cut_at_s(np.linspace(0, 3, 5))
2378
+ tw_ref = line_ref.twiss(x=0.1, y=0.2, betx=1, bety=1)
2379
+ tw_ref_thick = line_ref_thick.twiss(x=0.1, y=0.2, betx=1, bety=1)
2380
+
2381
+ x0 = 0.05
2382
+ y0 = 0.15
2383
+ line_test = env.new_line(components=[
2384
+ env.new('solt_test', xt.UniformSolenoid, length=3, ks=0.2, x0=x0, y0=y0),
2385
+ env.place('end')
2386
+ ])
2387
+ line_test_thick = line_test.copy(shallow=True)
2388
+ line_test.build_tracker(test_context)
2389
+ line_test.cut_at_s(np.linspace(0, 3, 5))
2390
+ line_test_thick.build_tracker(test_context)
2391
+ tw_test = line_test.twiss(x=x0 + 0.1, y=y0 + 0.2, betx=1, bety=1)
2392
+ tw_test_thick = line_test_thick.twiss(x=x0 + 0.1, y=y0 + 0.2, betx=1, bety=1)
2393
+
2394
+ xo.assert_allclose(tw_test.x, tw_ref.x + x0, rtol=0, atol=1e-14)
2395
+ xo.assert_allclose(tw_test.y, tw_ref.y + y0, rtol=0, atol=1e-14)
2396
+ xo.assert_allclose(tw_test.px, tw_ref.px, rtol=0, atol=1e-14)
2397
+ xo.assert_allclose(tw_test.py, tw_ref.py, rtol=0, atol=1e-14)
2398
+ xo.assert_allclose(tw_test.kin_px, tw_ref.kin_px, rtol=0, atol=1e-14)
2399
+ xo.assert_allclose(tw_test.kin_py, tw_ref.kin_py, rtol=0, atol=1e-14)
2400
+
2401
+ xo.assert_allclose(tw_ref_thick.x[-1], tw_ref.x[-1], rtol=0, atol=1e-14)
2402
+ xo.assert_allclose(tw_ref_thick.y[-1], tw_ref.y[-1], rtol=0, atol=1e-14)
2403
+ xo.assert_allclose(tw_ref_thick.px[-1], tw_ref.px[-1], rtol=0, atol=1e-14)
2404
+ xo.assert_allclose(tw_ref_thick.py[-1], tw_ref.py[-1], rtol=0, atol=1e-14)
2405
+ xo.assert_allclose(tw_ref_thick.kin_px[-1], tw_ref.kin_px[-1], rtol=0, atol=1e-14)
2406
+ xo.assert_allclose(tw_ref_thick.kin_py[-1], tw_ref.kin_py[-1], rtol=0, atol=1e-14)
2407
+
2408
+ xo.assert_allclose(tw_test_thick.x[-1], tw_test.x[-1], rtol=0, atol=1e-14)
2409
+ xo.assert_allclose(tw_test_thick.y[-1], tw_test.y[-1], rtol=0, atol=1e-14)
2410
+ xo.assert_allclose(tw_test_thick.px[-1], tw_test.px[-1], rtol=0, atol=1e-14)
2411
+ xo.assert_allclose(tw_test_thick.py[-1], tw_test.py[-1], rtol=0, atol=1e-14)
2412
+ xo.assert_allclose(tw_test_thick.kin_px[-1], tw_test.kin_px[-1], rtol=0, atol=1e-14)
2413
+ xo.assert_allclose(tw_test_thick.kin_py[-1], tw_test.kin_py[-1], rtol=0, atol=1e-14)
2414
+
2415
+ tw_ref_back = line_ref.twiss(init=tw_ref, init_at='end')
2416
+ tw_test_back = line_test.twiss(init=tw_test, init_at='end')
2417
+ tw_ref_thick_back = line_ref_thick.twiss(init=tw_ref_thick, init_at='end')
2418
+ tw_test_thick_back = line_test_thick.twiss(init=tw_test_thick, init_at='end')
2419
+
2420
+ for ttest, tref in zip([tw_ref_back, tw_test_back, tw_ref_thick_back, tw_test_thick_back],
2421
+ [tw_ref, tw_test, tw_ref_thick, tw_test_thick]):
2422
+ xo.assert_allclose(ttest.x, tref.x, rtol=0, atol=1e-14)
2423
+ xo.assert_allclose(ttest.y, tref.y, rtol=0, atol=1e-14)
2424
+ xo.assert_allclose(ttest.px, tref.px, rtol=0, atol=1e-14)
2425
+ xo.assert_allclose(ttest.py, tref.py, rtol=0, atol=1e-14)
2426
+ xo.assert_allclose(ttest.kin_px, tref.kin_px, rtol=0, atol=1e-14)
2427
+ xo.assert_allclose(ttest.kin_py, tref.kin_py, rtol=0, atol=1e-14)
2428
+
2429
+ line_test.discard_tracker()
2430
+ line_test_thick.discard_tracker()
2431
+ line_test.build_tracker(xo.context_default)
2432
+ line_test_thick.build_tracker(xo.context_default)
2433
+
2434
+ line_ref.configure_radiation(model='mean')
2435
+ line_test.configure_radiation(model='mean')
2436
+ line_ref_thick.configure_radiation(model='mean')
2437
+ line_test_thick.configure_radiation(model='mean')
2438
+
2439
+ tw_ref_rad = line_ref.twiss(x=0.1, y=0.2, betx=1, bety=1)
2440
+ tw_test_rad = line_test.twiss(x=x0 + 0.1, y=y0 + 0.2, betx=1, bety=1)
2441
+ tw_ref_thick_rad = line_ref_thick.twiss(x=0.1, y=0.2, betx=1, bety=1)
2442
+ tw_test_thick_rad = line_test_thick.twiss(x=x0 + 0.1, y=y0 + 0.2, betx=1, bety=1)
2443
+
2444
+ assert tw_test_rad.delta[-1] < -5e-6
2445
+ xo.assert_allclose(tw_test_rad.x, tw_ref_rad.x + x0, rtol=0, atol=1e-14)
2446
+ xo.assert_allclose(tw_test_rad.y, tw_ref_rad.y + y0, rtol=0, atol=1e-14)
2447
+ xo.assert_allclose(tw_test_rad.px, tw_ref_rad.px, rtol=0, atol=1e-14)
2448
+ xo.assert_allclose(tw_test_rad.py, tw_ref_rad.py, rtol=0, atol=1e-14)
2449
+ xo.assert_allclose(tw_test_rad.kin_px, tw_ref_rad.kin_px, rtol=0, atol=1e-14)
2450
+ xo.assert_allclose(tw_test_rad.kin_py, tw_ref_rad.kin_py, rtol=0, atol=1e-14)
2451
+ xo.assert_allclose(tw_test_rad.delta, tw_ref_rad.delta, rtol=0, atol=1e-14)
2452
+
2453
+ xo.assert_allclose(tw_test_thick_rad.x, tw_ref_thick_rad.x + x0, rtol=0, atol=1e-14)
2454
+ xo.assert_allclose(tw_test_thick_rad.y, tw_ref_thick_rad.y + y0, rtol=0, atol=1e-14)
2455
+ xo.assert_allclose(tw_test_thick_rad.px, tw_ref_thick_rad.px, rtol=0, atol=1e-14)
2456
+ xo.assert_allclose(tw_test_thick_rad.py, tw_ref_thick_rad.py, rtol=0, atol=1e-14)
2457
+ xo.assert_allclose(tw_test_thick_rad.kin_px, tw_ref_thick_rad.kin_px, rtol=0, atol=1e-14)
2458
+ xo.assert_allclose(tw_test_thick_rad.kin_py, tw_ref_thick_rad.kin_py, rtol=0, atol=1e-14)
2459
+ xo.assert_allclose(tw_test_thick_rad.delta, tw_ref_thick_rad.delta, rtol=0, atol=1e-14)
2460
+
2461
+ @for_all_test_contexts
2462
+ def test_variable_solenoid_x0y0(test_context):
2463
+
2464
+ env = xt.Environment()
2465
+ env.particle_ref = xt.Particles(mass0=xt.ELECTRON_MASS_EV, p0c=20e9)
2466
+
2467
+ line_ref = env.new_line(components=[
2468
+ env.new('sol_ref0', xt.VariableSolenoid, length=3, ks_profile=[0., 0.1]),
2469
+ env.new('sol_ref1', xt.VariableSolenoid, length=3, ks_profile=[0.1, 0.3]),
2470
+ env.new('sol_ref2', xt.VariableSolenoid, length=3, ks_profile=[0.3, 0.]),
2471
+ env.new('end', xt.Marker)
2472
+ ])
2473
+ tw_ref = line_ref.twiss(x=0.1, y=0.2, betx=1, bety=1)
2474
+
2475
+ x0 = 0.05
2476
+ y0 = 0.15
2477
+ line_test = env.new_line(components=[
2478
+ env.new('solt_test0', xt.VariableSolenoid, length=3, ks_profile=[0., 0.1], x0=x0, y0=y0),
2479
+ env.new('solt_test1', xt.VariableSolenoid, length=3, ks_profile=[0.1, 0.3], x0=x0, y0=y0),
2480
+ env.new('solt_test2', xt.VariableSolenoid, length=3, ks_profile=[0.3, 0.], x0=x0, y0=y0),
2481
+ env.place('end')
2482
+ ])
2483
+ line_test.build_tracker(test_context)
2484
+ tw_test = line_test.twiss(x=x0 + 0.1, y=y0 + 0.2, betx=1, bety=1)
2485
+
2486
+ xo.assert_allclose(tw_test.x, tw_ref.x + x0, rtol=0, atol=1e-14)
2487
+ xo.assert_allclose(tw_test.y, tw_ref.y + y0, rtol=0, atol=1e-14)
2488
+ xo.assert_allclose(tw_test.px, tw_ref.px, rtol=0, atol=1e-14)
2489
+ xo.assert_allclose(tw_test.py, tw_ref.py, rtol=0, atol=1e-14)
2490
+ xo.assert_allclose(tw_test.kin_px, tw_ref.kin_px, rtol=0, atol=1e-14)
2491
+ xo.assert_allclose(tw_test.kin_py, tw_ref.kin_py, rtol=0, atol=1e-14)
2492
+
2493
+ tw_ref_back = line_ref.twiss(init=tw_ref, init_at='end')
2494
+ tw_test_back = line_test.twiss(init=tw_test, init_at='end')
2495
+
2496
+ for ttest, tref in zip([tw_ref_back, tw_test_back],
2497
+ [tw_ref, tw_test]):
2498
+ xo.assert_allclose(ttest.x, tref.x, rtol=0, atol=1e-14)
2499
+ xo.assert_allclose(ttest.y, tref.y, rtol=0, atol=1e-14)
2500
+ xo.assert_allclose(ttest.px, tref.px, rtol=0, atol=1e-14)
2501
+ xo.assert_allclose(ttest.py, tref.py, rtol=0, atol=1e-14)
2502
+ xo.assert_allclose(ttest.kin_px, tref.kin_px, rtol=0, atol=1e-14)
2503
+ xo.assert_allclose(ttest.kin_py, tref.kin_py, rtol=0, atol=1e-14)
2504
+
2505
+ line_ref.configure_radiation(model='mean')
2506
+ line_test.configure_radiation(model='mean')
2507
+
2508
+ line_test.discard_tracker()
2509
+ line_test.build_tracker(xo.context_default)
2510
+
2511
+ tw_ref_rad = line_ref.twiss(x=0.1, y=0.2, betx=1, bety=1)
2512
+ tw_test_rad = line_test.twiss(x=x0 + 0.1, y=y0 + 0.2, betx=1, bety=1)
2513
+
2514
+ assert tw_test_rad.delta[-1] < -5e-5
2515
+ xo.assert_allclose(tw_test_rad.x, tw_ref_rad.x + x0, rtol=0, atol=1e-14)
2516
+ xo.assert_allclose(tw_test_rad.y, tw_ref_rad.y + y0, rtol=0, atol=1e-14)
2517
+ xo.assert_allclose(tw_test_rad.px, tw_ref_rad.px, rtol=0, atol=1e-14)
2518
+ xo.assert_allclose(tw_test_rad.py, tw_ref_rad.py, rtol=0, atol=1e-14)
2519
+ xo.assert_allclose(tw_test_rad.kin_px, tw_ref_rad.kin_px, rtol=0, atol=1e-14)
2520
+ xo.assert_allclose(tw_test_rad.kin_py, tw_ref_rad.kin_py, rtol=0, atol=1e-14)
2521
+ xo.assert_allclose(tw_test_rad.delta, tw_ref_rad.delta, rtol=0, atol=1e-14)
@@ -0,0 +1 @@
1
+ __version__ = '0.88.7'
@@ -341,21 +341,26 @@ class MetaBeamElement(xo.MetaHybridClass):
341
341
 
342
342
  data_in = data.copy()
343
343
  data = {}
344
- is_old_thing = False
345
- for bb in bases: # Patch to support old-style "beam element" inheritance used in xcoll
346
- if bb.__name__ != 'BeamElement' and'BeamElement' in set(cc.__name__ for cc in bb.__mro__):
347
- is_old_thing = True
348
- break
349
- if not is_old_thing: # Presently we assume that none of the parents is inheriting from BeamElement
350
- for bb in bases:
351
- if bb.__name__ == 'HybridClass':
344
+ for bb in bases:
345
+ if bb.__name__ == 'HybridClass':
346
+ continue
347
+ if bb.__name__ == 'BeamElement':
348
+ continue
349
+ for kk, vv in bb.__dict__.items():
350
+ if kk.startswith('__') or kk in data_in.keys():
352
351
  continue
353
- if bb.__name__ == 'BeamElement':
354
- continue
355
- for kk, vv in bb.__dict__.items():
356
- if kk.startswith('__') or kk in data_in.keys():
357
- continue
358
- data[kk] = vv
352
+ data[kk] = vv
353
+
354
+ # If inheriting _extra_c_sources, remove get_record function
355
+ if '_extra_c_sources' in data:
356
+ ii_remove = None
357
+ for ii, ss in enumerate(data['_extra_c_sources']):
358
+ if isinstance(ss, str) and '/*---GENERATED GET RECORD FUNCTION---*/' in ss:
359
+ ii_remove = ii
360
+ break
361
+ if ii_remove is not None:
362
+ data['_extra_c_sources'].pop(ii_remove)
363
+
359
364
  data.update(data_in)
360
365
 
361
366
  # Take xofields from data['_xofields'] or from bases
@@ -1939,6 +1939,10 @@ class UniformSolenoid(BeamElement):
1939
1939
  Strength of the solenoid component.
1940
1940
  length : float
1941
1941
  Length of the element in meters along the reference trajectory.
1942
+ x0 : float, optional
1943
+ Horizontal offset of the solenoid center in meters. Defaults to 0.
1944
+ y0 : float, optional
1945
+ Vertical offset of the solenoid center in meters. Defaults to 0.
1942
1946
  order : int, optional
1943
1947
  Maximum order of multipole expansion for this magnet. Defaults to 5.
1944
1948
  knl : list of floats, optional
@@ -1967,6 +1971,8 @@ class UniformSolenoid(BeamElement):
1967
1971
  _xofields={
1968
1972
  'ks': xo.Float64,
1969
1973
  'length': xo.Float64,
1974
+ 'x0': xo.Float64,
1975
+ 'y0': xo.Float64,
1970
1976
  'order': xo.Int64,
1971
1977
  'inv_factorial_order': xo.Float64,
1972
1978
  'knl': xo.Float64[:],
@@ -2093,6 +2099,8 @@ class VariableSolenoid(BeamElement):
2093
2099
  _xofields={
2094
2100
  'ks_profile': xo.Float64[2],
2095
2101
  'length': xo.Float64,
2102
+ 'x0': xo.Float64,
2103
+ 'y0': xo.Float64,
2096
2104
  'order': xo.Int64,
2097
2105
  'inv_factorial_order': xo.Float64,
2098
2106
  'knl': xo.Float64[:],
@@ -45,6 +45,8 @@ void Bend_track_local_particle(
45
45
  /*k3s*/ 0.,
46
46
  /*ks*/ 0.,
47
47
  /*dks_ds*/ 0.,
48
+ /*x0_solenoid*/ 0.,
49
+ /*y0_solenoid*/ 0.,
48
50
  /*rbend_model*/ -1, // not rbend
49
51
  /*rbend_shift*/ 0.,
50
52
  /*body_active*/ 1,
@@ -46,6 +46,8 @@ void Magnet_track_local_particle(
46
46
  /*k3s*/ MagnetData_get_k3s(el),
47
47
  /*ks*/ 0.,
48
48
  /*dks_ds*/ 0.,
49
+ /*x0_solenoid*/ 0.,
50
+ /*y0_solenoid*/ 0.,
49
51
  /*rbend_model*/ -1, // not rbend
50
52
  /*rbend_shift*/ 0.,
51
53
  /*body_active*/ 1,
@@ -46,6 +46,8 @@ void MagnetEdge_track_local_particle(MagnetEdgeData el, LocalParticle* part0)
46
46
  /* factor_knl_ksl */ 1,
47
47
  kl_order,
48
48
  ks,
49
+ 0., // x0_solenoid
50
+ 0., // y0_solenoid
49
51
  length,
50
52
  face_angle,
51
53
  face_angle_feed_down,
@@ -48,6 +48,8 @@ void Multipole_track_local_particle(MultipoleData el, LocalParticle* part0){
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 1,
@@ -45,6 +45,8 @@ void Octupole_track_local_particle(
45
45
  /*k3s*/ OctupoleData_get_k3s(el),
46
46
  /*ks*/ 0.,
47
47
  /*dks_ds*/ 0.,
48
+ /*x0_solenoid*/ 0.,
49
+ /*y0_solenoid*/ 0.,
48
50
  /*rbend_model*/ -1, // not rbend
49
51
  /*rbend_shift*/ 0.,
50
52
  /*body_active*/ 1,
@@ -45,6 +45,8 @@ void Quadrupole_track_local_particle(
45
45
  /*k3s*/ 0.,
46
46
  /*ks*/ 0.,
47
47
  /*dks_ds*/ 0.,
48
+ /*x0_solenoid*/ 0.,
49
+ /*y0_solenoid*/ 0.,
48
50
  /*rbend_model*/ -1, // not rbend
49
51
  /*rbend_shift*/ 0.,
50
52
  /*body_active*/ 1,
@@ -45,6 +45,8 @@ void RBend_track_local_particle(
45
45
  /*k3s*/ 0.,
46
46
  /*ks*/ 0.,
47
47
  /*dks_ds*/ 0.,
48
+ /*x0_solenoid*/ 0.,
49
+ /*y0_solenoid*/ 0.,
48
50
  /*rbend_model*/ RBendData_get_rbend_model(el),
49
51
  /*rbend_shift*/ RBendData_get_rbend_shift(el),
50
52
  /*body_active*/ 1,
@@ -45,6 +45,8 @@ void Sextupole_track_local_particle(
45
45
  /*k3s*/ 0.,
46
46
  /*ks*/ 0.,
47
47
  /*dks_ds*/ 0.,
48
+ /*x0_solenoid*/ 0.,
49
+ /*y0_solenoid*/ 0.,
48
50
  /*rbend_model*/ -1, // not rbend
49
51
  /*rbend_shift*/ 0.,
50
52
  /*body_active*/ 1,
@@ -45,6 +45,8 @@ void UniformSolenoid_track_local_particle(
45
45
  /*k3s*/ 0.,
46
46
  /*ks*/ UniformSolenoidData_get_ks(el),
47
47
  /*dks_ds*/ 0.,
48
+ /*x0_solenoid*/ UniformSolenoidData_get_x0(el),
49
+ /*y0_solenoid*/ UniformSolenoidData_get_y0(el),
48
50
  /*rbend_model*/ -1, // not rbend
49
51
  /*rbend_shift*/ 0.,
50
52
  /*body_active*/ 1,
@@ -48,6 +48,8 @@ void ThickSliceBend_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 1,
@@ -48,6 +48,8 @@ void ThickSliceOctupole_track_local_particle(
48
48
  /*k3s*/ ThickSliceOctupoleData_get__parent_k3s(el),
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 1,
@@ -48,6 +48,8 @@ void ThickSliceQuadrupole_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 1,
@@ -48,6 +48,8 @@ void ThickSliceRBend_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ ThickSliceRBendData_get__parent_rbend_model(el),
52
54
  /*rbend_shift*/ ThickSliceRBendData_get__parent_rbend_shift(el),
53
55
  /*body_active*/ 1,
@@ -48,6 +48,8 @@ void ThickSliceSextupole_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 1,
@@ -48,6 +48,8 @@ void ThickSliceUniformSolenoid_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ ThickSliceUniformSolenoidData_get__parent_ks(el),
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ ThickSliceUniformSolenoidData_get__parent_x0(el),
52
+ /*y0_solenoid*/ ThickSliceUniformSolenoidData_get__parent_y0(el),
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 1,
@@ -48,6 +48,8 @@ void ThinSliceBend_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 1,
@@ -48,6 +48,8 @@ void ThinSliceBendEntry_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 0, // disabled
@@ -48,6 +48,8 @@ void ThinSliceBendExit_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 0, // disabled
@@ -48,6 +48,8 @@ void ThinSliceOctupole_track_local_particle(
48
48
  /*k3s*/ ThinSliceOctupoleData_get__parent_k3s(el),
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 1,
@@ -48,6 +48,8 @@ void ThinSliceOctupoleEntry_track_local_particle(
48
48
  /*k3s*/ ThinSliceOctupoleEntryData_get__parent_k3s(el),
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 0, // disabled
@@ -48,6 +48,8 @@ void ThinSliceOctupoleExit_track_local_particle(
48
48
  /*k3s*/ ThinSliceOctupoleExitData_get__parent_k3s(el),
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 0, // disabled
@@ -48,6 +48,8 @@ void ThinSliceQuadrupole_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 1,
@@ -48,6 +48,8 @@ void ThinSliceQuadrupoleEntry_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 0, // disabled
@@ -48,6 +48,8 @@ void ThinSliceQuadrupoleExit_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 0, // disabled
@@ -48,6 +48,8 @@ void ThinSliceRBend_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ ThinSliceRBendData_get__parent_rbend_model(el),
52
54
  /*rbend_shift*/ ThinSliceRBendData_get__parent_rbend_shift(el),
53
55
  /*body_active*/ 1,
@@ -48,6 +48,8 @@ void ThinSliceRBendEntry_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ ThinSliceRBendEntryData_get__parent_rbend_model(el),
52
54
  /*rbend_shift*/ ThinSliceRBendEntryData_get__parent_rbend_shift(el),
53
55
  /*body_active*/ 0, // disabled
@@ -48,6 +48,8 @@ void ThinSliceRBendExit_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ ThinSliceRBendExitData_get__parent_rbend_model(el),
52
54
  /*rbend_shift*/ ThinSliceRBendExitData_get__parent_rbend_shift(el),
53
55
  /*body_active*/ 0, // disabled
@@ -48,6 +48,8 @@ void ThinSliceSextupole_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 1,
@@ -48,6 +48,8 @@ void ThinSliceSextupoleEntry_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 0, // disabled
@@ -48,6 +48,8 @@ void ThinSliceSextupoleExit_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ 0.,
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ 0.,
52
+ /*y0_solenoid*/ 0.,
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 0, // disabled
@@ -48,6 +48,8 @@ void ThinSliceUniformSolenoidEntry_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ ThinSliceUniformSolenoidEntryData_get__parent_ks(el),
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ ThinSliceUniformSolenoidEntryData_get__parent_x0(el),
52
+ /*y0_solenoid*/ ThinSliceUniformSolenoidEntryData_get__parent_y0(el),
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 0, // disabled
@@ -48,6 +48,8 @@ void ThinSliceUniformSolenoidExit_track_local_particle(
48
48
  /*k3s*/ 0.,
49
49
  /*ks*/ ThinSliceUniformSolenoidExitData_get__parent_ks(el),
50
50
  /*dks_ds*/ 0.,
51
+ /*x0_solenoid*/ ThinSliceUniformSolenoidExitData_get__parent_x0(el),
52
+ /*y0_solenoid*/ ThinSliceUniformSolenoidExitData_get__parent_y0(el),
51
53
  /*rbend_model*/ -1, // not rbend
52
54
  /*rbend_shift*/ 0.,
53
55
  /*body_active*/ 0, // disabled
@@ -201,6 +201,8 @@ void track_magnet_body_single_particle(
201
201
  const double k2s,
202
202
  const double k3s,
203
203
  const double dks_ds,
204
+ const double x0_solenoid,
205
+ const double y0_solenoid,
204
206
  const int64_t radiation_flag,
205
207
  const int64_t spin_flag,
206
208
  SynchrotronRadiationRecordData radiation_record,
@@ -219,7 +221,8 @@ void track_magnet_body_single_particle(
219
221
 
220
222
  #define MAGNET_DRIFT(part, dlength) \
221
223
  track_magnet_drift_single_particle(\
222
- part, (dlength), k0_drift, k1_drift, ks_drift, h_drift, drift_model\
224
+ part, (dlength), k0_drift, k1_drift, ks_drift, h_drift,\
225
+ x0_solenoid, y0_solenoid, drift_model\
223
226
  )
224
227
 
225
228
  #ifdef XTRACK_MULTIPOLE_NO_SYNRAD
@@ -271,6 +274,8 @@ void track_magnet_body_single_particle(
271
274
  k3s, \
272
275
  ks_drift, \
273
276
  dks_ds, \
277
+ x0_solenoid, \
278
+ y0_solenoid, \
274
279
  &Bx_T, \
275
280
  &By_T, \
276
281
  &Bz_T \
@@ -436,6 +441,8 @@ void track_magnet_particles(
436
441
  double k3s,
437
442
  double ks,
438
443
  double dks_ds,
444
+ double x0_solenoid,
445
+ double y0_solenoid,
439
446
  int64_t rbend_model, // -1: not used, 0: auto, 1: curved body, 2: straight body
440
447
  double rbend_shift,
441
448
  int64_t body_active,
@@ -582,6 +589,8 @@ void track_magnet_particles(
582
589
  factor_knl_ksl_edge,
583
590
  order,
584
591
  ks,
592
+ x0_solenoid,
593
+ y0_solenoid,
585
594
  length,
586
595
  edge_entry_angle,
587
596
  edge_entry_angle_fdown,
@@ -659,6 +668,7 @@ void track_magnet_particles(
659
668
  k0_h_correction, k1_h_correction,
660
669
  k2, k3, k0s, k1s, k2s, k3s,
661
670
  dks_ds,
671
+ x0_solenoid, y0_solenoid,
662
672
  radiation_flag,
663
673
  1, // spin_flag
664
674
  radiation_record,
@@ -693,6 +703,8 @@ void track_magnet_particles(
693
703
  factor_knl_ksl_edge,
694
704
  order,
695
705
  ks,
706
+ x0_solenoid,
707
+ y0_solenoid,
696
708
  length,
697
709
  edge_exit_angle,
698
710
  edge_exit_angle_fdown,