xtrack 0.89.0__tar.gz → 0.89.1__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 (345) hide show
  1. {xtrack-0.89.0/xtrack.egg-info → xtrack-0.89.1}/PKG-INFO +1 -1
  2. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_madnginterface.py +38 -1
  3. xtrack-0.89.1/xtrack/_version.py +1 -0
  4. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/linesegmentmap.h +9 -2
  5. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_magnet.template.h +2 -2
  6. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_rf.h +17 -9
  7. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_rf.template.h +17 -9
  8. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/line.py +9 -0
  9. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/mad_writer.py +30 -1
  10. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/particles/particles.py +9 -0
  11. xtrack-0.89.1/xtrack/track_flags.py +68 -0
  12. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/tracker.py +16 -4
  13. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/twiss.py +92 -52
  14. {xtrack-0.89.0 → xtrack-0.89.1/xtrack.egg-info}/PKG-INFO +1 -1
  15. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack.egg-info/SOURCES.txt +1 -0
  16. xtrack-0.89.0/xtrack/_version.py +0 -1
  17. {xtrack-0.89.0 → xtrack-0.89.1}/LICENSE +0 -0
  18. {xtrack-0.89.0 → xtrack-0.89.1}/MANIFEST.in +0 -0
  19. {xtrack-0.89.0 → xtrack-0.89.1}/README.md +0 -0
  20. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/__init__.py +0 -0
  21. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/base_classes.py +0 -0
  22. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/be_beamfields/BB6D.py +0 -0
  23. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
  24. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/be_beamfields/__init__.py +0 -0
  25. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/be_beamfields/beambeam.py +0 -0
  26. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/be_beamfields/boost.py +0 -0
  27. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
  28. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
  29. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/be_beamfields/qgauss.py +0 -0
  30. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/be_beamfields/slicing.py +0 -0
  31. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/be_beamfields/spacecharge.py +0 -0
  32. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/elements.py +0 -0
  33. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/line.py +0 -0
  34. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/mathlibs.py +0 -0
  35. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/particles.py +0 -0
  36. {xtrack-0.89.0 → xtrack-0.89.1}/ducktrack/temp_pyparticles.py +0 -0
  37. {xtrack-0.89.0 → xtrack-0.89.1}/pyproject.toml +0 -0
  38. {xtrack-0.89.0 → xtrack-0.89.1}/setup.cfg +0 -0
  39. {xtrack-0.89.0 → xtrack-0.89.1}/setup.py +0 -0
  40. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_acceleration.py +0 -0
  41. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_amplitude_detuning.py +0 -0
  42. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_aperture_table.py +0 -0
  43. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
  44. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_apertures.py +0 -0
  45. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_attr_replicas_and_slices.py +0 -0
  46. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_bucket_with_ref_energy_change.py +0 -0
  47. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_cavity_absolute_time.py +0 -0
  48. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_chromatic_functions_vs_madx.py +0 -0
  49. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_coasting.py +0 -0
  50. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_collective_tracker.py +0 -0
  51. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_collimation.py +0 -0
  52. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_coupling_edwards_teng.py +0 -0
  53. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_electron_cooler.py +0 -0
  54. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_element_characterization_functions.py +0 -0
  55. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_element_internal_record.py +0 -0
  56. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_elements.py +0 -0
  57. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_elements_classflags.py +0 -0
  58. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_elements_thick.py +0 -0
  59. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_environment.py +0 -0
  60. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_fcc_ee_solenoid_correction.py +0 -0
  61. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +0 -0
  62. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_footprint.py +0 -0
  63. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_freeze_longitudinal.py +0 -0
  64. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_full_rings.py +0 -0
  65. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_h6_sps_beamline.py +0 -0
  66. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_hvkick.py +0 -0
  67. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_ions.py +0 -0
  68. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_legacy_multiline_to_env.py +0 -0
  69. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_lhc_env.py +0 -0
  70. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_lhc_match_phase_15.py +0 -0
  71. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_line.py +0 -0
  72. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_load.py +0 -0
  73. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_load_vars.py +0 -0
  74. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_lumi.py +0 -0
  75. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_mad_writer.py +0 -0
  76. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_madloader.py +0 -0
  77. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_magnet.py +0 -0
  78. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_match_and_track_from_element.py +0 -0
  79. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_match_coupling_knob.py +0 -0
  80. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_match_nested.py +0 -0
  81. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_match_optics_and_ip_knob.py +0 -0
  82. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
  83. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_match_orbit_bump.py +0 -0
  84. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_match_tune_chroma_cminus.py +0 -0
  85. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_misalign.py +0 -0
  86. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_monitor.py +0 -0
  87. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_multi_bunch_gauss.py +0 -0
  88. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_multiline.py +0 -0
  89. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_multisetter.py +0 -0
  90. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_multispecies.py +0 -0
  91. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_native_madloader.py +0 -0
  92. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_optimize_for_tracking.py +0 -0
  93. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_particles.py +0 -0
  94. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_particles_basics.py +0 -0
  95. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_particles_pdg.py +0 -0
  96. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_periodic_symmetric_twiss_and_match.py +0 -0
  97. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_pipeline.py +0 -0
  98. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_prebuild_kernels.py +0 -0
  99. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_ps_against_ptc.py +0 -0
  100. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_ps_multiturn_twiss.py +0 -0
  101. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_psb_chicane.py +0 -0
  102. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_pyht_interface.py +0 -0
  103. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_quadrupole_fringe_ptc.py +0 -0
  104. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_quadrupole_wedge.py +0 -0
  105. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_radial_steering.py +0 -0
  106. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_radiation.py +0 -0
  107. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_radiation_equilibrium_emittances.py +0 -0
  108. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_radiation_equilibrium_emittances_thick.py +0 -0
  109. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_radiation_integrals.py +0 -0
  110. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_random_gen.py +0 -0
  111. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_random_gen_exp.py +0 -0
  112. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_random_gen_gauss.py +0 -0
  113. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_random_gen_ruth.py +0 -0
  114. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_rbend_rbarc.py +0 -0
  115. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_rbend_straight_body.py +0 -0
  116. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_rf_track.py +0 -0
  117. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_rotation_signs.py +0 -0
  118. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_second_order_taylor_map.py +0 -0
  119. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_seeds.py +0 -0
  120. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_slice_and_insert_with_replicas.py +0 -0
  121. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_slice_elements.py +0 -0
  122. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_slicing.py +0 -0
  123. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_solenoid_bz_map_vs_boris.py +0 -0
  124. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_solenoid_bz_map_vs_boris_legacy.py +0 -0
  125. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_spacecharge_in_ring.py +0 -0
  126. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_spin.py +0 -0
  127. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_sps_thick.py +0 -0
  128. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_survey.py +0 -0
  129. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_tapering.py +0 -0
  130. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_thick_kickers_rf_crab.py +0 -0
  131. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_thick_lhc.py +0 -0
  132. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_tilt_shifts.py +0 -0
  133. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_tracker.py +0 -0
  134. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_trajectory_correcton.py +0 -0
  135. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_twiss.py +0 -0
  136. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_twiss_vs_madx_psb.py +0 -0
  137. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_vs_madx.py +0 -0
  138. {xtrack-0.89.0 → xtrack-0.89.1}/tests/test_xmask_orbit_correction.py +0 -0
  139. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/__init__.py +0 -0
  140. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/_temp/__init__.py +0 -0
  141. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
  142. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
  143. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
  144. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/_temp/lhc_match/__init__.py +0 -0
  145. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
  146. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
  147. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/_temp/lhc_match/var_limits.py +0 -0
  148. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/aperture_meas.py +0 -0
  149. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/base_element.py +0 -0
  150. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/__init__.py +0 -0
  151. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/apertures.py +0 -0
  152. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
  153. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/apertures_src/limitpolygon.h +0 -0
  154. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
  155. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
  156. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
  157. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
  158. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/beam_interaction.py +0 -0
  159. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements.py +0 -0
  160. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/bend.h +0 -0
  161. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/cavity.h +0 -0
  162. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/crab_cavity.h +0 -0
  163. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/default_magnet_config.h +0 -0
  164. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
  165. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
  166. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/drift.h +0 -0
  167. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/drift_exact.h +0 -0
  168. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/drift_exact_slice.h +0 -0
  169. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
  170. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
  171. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/drift_slice_cavity.h +0 -0
  172. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/drift_slice_crab_cavity.h +0 -0
  173. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/drift_slice_multipole.h +0 -0
  174. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
  175. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
  176. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/drift_slice_rbend.h +0 -0
  177. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
  178. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/drift_slice_uniform_solenoid.h +0 -0
  179. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/electroncooler.h +0 -0
  180. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/elens.h +0 -0
  181. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/exciter.h +0 -0
  182. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
  183. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/legacy_solenoid.h +0 -0
  184. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/magnet.h +0 -0
  185. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/magnet_drift.h +0 -0
  186. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/magnet_edge.h +0 -0
  187. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/magnet_kick.h +0 -0
  188. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/marker.h +0 -0
  189. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/misalignment.h +0 -0
  190. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/multipole.h +0 -0
  191. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/multipoleedge.h +0 -0
  192. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
  193. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/octupole.h +0 -0
  194. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/quadrupole.h +0 -0
  195. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/rbend.h +0 -0
  196. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
  197. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/rfmultipole.h +0 -0
  198. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
  199. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/sextupole.h +0 -0
  200. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
  201. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
  202. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/slnd.h +0 -0
  203. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/srotation.h +0 -0
  204. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/temprf.h +0 -0
  205. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thick_slice_bend.h +0 -0
  206. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thick_slice_cavity.h +0 -0
  207. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thick_slice_crab_cavity.h +0 -0
  208. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thick_slice_multipole.h +0 -0
  209. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +0 -0
  210. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +0 -0
  211. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thick_slice_rbend.h +0 -0
  212. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +0 -0
  213. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thick_slice_uniform_solenoid.h +0 -0
  214. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_bend.h +0 -0
  215. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
  216. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
  217. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_cavity.h +0 -0
  218. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_crab_cavity.h +0 -0
  219. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_multipole.h +0 -0
  220. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +0 -0
  221. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_octupole_entry.h +0 -0
  222. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_octupole_exit.h +0 -0
  223. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +0 -0
  224. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_entry.h +0 -0
  225. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_exit.h +0 -0
  226. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_rbend.h +0 -0
  227. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_rbend_entry.h +0 -0
  228. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_rbend_exit.h +0 -0
  229. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +0 -0
  230. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_sextupole_entry.h +0 -0
  231. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_sextupole_exit.h +0 -0
  232. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_entry.h +0 -0
  233. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_exit.h +0 -0
  234. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_cavity.h +0 -0
  235. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
  236. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
  237. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
  238. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_drift.h +0 -0
  239. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_legacy_solenoid.h +0 -0
  240. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_legacy_solenoid_multipolar_components.h +0 -0
  241. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_legacy_solenoid_radiation.h +0 -0
  242. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_magnet.h +0 -0
  243. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_magnet_configure.h +0 -0
  244. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_magnet_drift.h +0 -0
  245. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_magnet_edge.h +0 -0
  246. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_magnet_kick.h +0 -0
  247. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_magnet_radiation.h +0 -0
  248. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_misalignments.h +0 -0
  249. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_mult_fringe.h +0 -0
  250. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
  251. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
  252. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
  253. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_wedge.h +0 -0
  254. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
  255. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_xyshift.h +0 -0
  256. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
  257. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/variable_solenoid.h +0 -0
  258. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/wedge.h +0 -0
  259. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/wire.h +0 -0
  260. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
  261. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
  262. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
  263. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
  264. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/exciter.py +0 -0
  265. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/rft_element.py +0 -0
  266. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/slice_base.py +0 -0
  267. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/slice_elements_drift.py +0 -0
  268. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/slice_elements_edge.py +0 -0
  269. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/slice_elements_thick.py +0 -0
  270. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/beam_elements/slice_elements_thin.py +0 -0
  271. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/environment.py +0 -0
  272. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/footprint.py +0 -0
  273. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/general.py +0 -0
  274. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/headers/atomicadd.h +0 -0
  275. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/headers/checks.h +0 -0
  276. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/headers/constants.h +0 -0
  277. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/headers/particle_states.h +0 -0
  278. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/headers/synrad_spectrum.h +0 -0
  279. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/headers/track.h +0 -0
  280. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/internal_record.py +0 -0
  281. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/json.py +0 -0
  282. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/linear_normal_form.py +0 -0
  283. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/load.py +0 -0
  284. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/loss_location_refinement/__init__.py +0 -0
  285. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/loss_location_refinement/loss_location_refinement.py +0 -0
  286. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/lumi.py +0 -0
  287. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/mad_loader.py +0 -0
  288. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/mad_parser/__init__.py +0 -0
  289. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/mad_parser/loader.py +0 -0
  290. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/mad_parser/madx.lark +0 -0
  291. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/mad_parser/parse.py +0 -0
  292. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/madng_interface.py +0 -0
  293. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/match.py +0 -0
  294. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/monitors/__init__.py +0 -0
  295. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/monitors/beam_position_monitor.h +0 -0
  296. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/monitors/beam_position_monitor.py +0 -0
  297. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/monitors/beam_profile_monitor.h +0 -0
  298. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/monitors/beam_profile_monitor.py +0 -0
  299. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/monitors/beam_size_monitor.h +0 -0
  300. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/monitors/beam_size_monitor.py +0 -0
  301. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/monitors/last_turns_monitor.h +0 -0
  302. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/monitors/last_turns_monitor.py +0 -0
  303. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/monitors/particles_monitor.h +0 -0
  304. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/monitors/particles_monitor.py +0 -0
  305. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/multiline.py +0 -0
  306. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/multiline_legacy/__init__.py +0 -0
  307. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/multiline_legacy/multiline_legacy.py +0 -0
  308. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/multiline_legacy/shared_knobs.py +0 -0
  309. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/multisetter/__init__.py +0 -0
  310. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/multisetter/multisetter.py +0 -0
  311. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/particles/__init__.py +0 -0
  312. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/particles/constants.py +0 -0
  313. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/particles/masses.py +0 -0
  314. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/particles/pdg.py +0 -0
  315. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/particles/rng_src/base_rng.h +0 -0
  316. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/particles/rng_src/particles_rng.h +0 -0
  317. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/pipeline/__init__.py +0 -0
  318. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/pipeline/core.py +0 -0
  319. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/pipeline/manager.py +0 -0
  320. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/pipeline/multitracker.py +0 -0
  321. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/progress_indicator.py +0 -0
  322. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/random/__init__.py +0 -0
  323. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/random/random_generators.py +0 -0
  324. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/random/random_src/exponential.h +0 -0
  325. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
  326. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/random/random_src/normal.h +0 -0
  327. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/random/random_src/rutherford.h +0 -0
  328. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/random/random_src/uniform.h +0 -0
  329. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/random/random_src/uniform_accurate.h +0 -0
  330. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/slicing.py +0 -0
  331. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/survey.py +0 -0
  332. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/svgutils/__init__.py +0 -0
  333. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/svgutils/parser.py +0 -0
  334. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/svgutils/path.py +0 -0
  335. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/svgutils/svgutils.py +0 -0
  336. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/synctime.py +0 -0
  337. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/tapering.py +0 -0
  338. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/targets.py +0 -0
  339. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/tracker_data.py +0 -0
  340. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/tracker_src/tracker.h +0 -0
  341. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/trajectory_correction.py +0 -0
  342. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack/twissplot.py +0 -0
  343. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack.egg-info/dependency_links.txt +0 -0
  344. {xtrack-0.89.0 → xtrack-0.89.1}/xtrack.egg-info/requires.txt +0 -0
  345. {xtrack-0.89.0 → xtrack-0.89.1}/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.89.0
3
+ Version: 0.89.1
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
@@ -126,4 +126,41 @@ def test_madng_survey():
126
126
  xo.assert_allclose(survey.angle, xsurvey.angle, atol=1e-5, rtol=0)
127
127
  xo.assert_allclose(survey.tilt, xsurvey.rot_s_rad, atol=1e-5, rtol=0)
128
128
  # Length doesn't work because of multipoles.
129
- #xo.assert_allclose(survey.length, xsurvey.length, atol=1e-5, rtol=0)
129
+ #xo.assert_allclose(survey.length, xsurvey.length, atol=1e-5, rtol=0)
130
+
131
+ def test_madng_conversion_drift_slice():
132
+
133
+ env = xt.Environment()
134
+ env.particle_ref = xt.Particles(p0c=1e9)
135
+
136
+ line = env.new_line(length=10, components=[
137
+ env.new('q1', xt.Quadrupole, length=1, k1=0.3, at=4),
138
+ env.new('q2', xt.Quadrupole, length=1, k1=-0.3, at=6)
139
+ ])
140
+
141
+ line.insert('m', xt.Marker(), at=2)
142
+
143
+ tt = line.get_table()
144
+ # is:
145
+ # Table: 8 rows, 11 cols
146
+ # name s element_type isthick isreplica parent_name ...
147
+ # drift_1..0 0 DriftSlice True False drift_1
148
+ # m 2 Marker False False None
149
+ # drift_1..1 2 DriftSlice True False drift_1
150
+ # q1 3.5 Quadrupole True False None
151
+ # drift_2 4.5 Drift True False None
152
+ # q2 5.5 Quadrupole True False None
153
+ # drift_3 6.5 Drift True False None
154
+ # _end_point 10 False False None
155
+
156
+ assert np.all(tt.name == [
157
+ 'drift_1..0', 'm', 'drift_1..1', 'q1', 'drift_2', 'q2', 'drift_3', '_end_point'])
158
+ xo.assert_allclose(tt.s, [0, 2, 2, 3.5, 4.5, 5.5, 6.5, 10], atol=1e-10)
159
+ assert np.all(tt.element_type == [
160
+ 'DriftSlice', 'Marker', 'DriftSlice', 'Quadrupole', 'Drift', 'Quadrupole', 'Drift', ''])
161
+
162
+ tw = line.twiss4d()
163
+ tw_ng = line.madng_twiss(normal_form=False)
164
+
165
+ xo.assert_allclose(tw_ng.beta11_ng, tw.betx, rtol=1e-8)
166
+ xo.assert_allclose(tw_ng.beta22_ng, tw.bety, rtol=1e-8)
@@ -0,0 +1 @@
1
+ __version__ = '0.89.1'
@@ -204,6 +204,8 @@ void longitudinal_motion(LocalParticle *part0,
204
204
  double const bucket_length = LineSegmentMapData_get_bucket_length(el)*LocalParticle_get_beta0(part0)*C_LIGHT;
205
205
  double const sin_s = sin(2 * PI * qs);
206
206
  double const cos_s = cos(2 * PI * qs);
207
+ uint8_t kill_energy_kick = LocalParticle_check_track_flag(
208
+ part0, XS_FLAG_KILL_CAVITY_KICK);
207
209
  START_PER_PARTICLE_BLOCK(part0, part);
208
210
  // We set cos_s = 999 if long map is to be skipped
209
211
  double shift = 0.0;
@@ -215,7 +217,9 @@ void longitudinal_motion(LocalParticle *part0,
215
217
  double const new_pzeta = sin_s * LocalParticle_get_zeta(part) / bets + cos_s * LocalParticle_get_pzeta(part);
216
218
 
217
219
  LocalParticle_set_zeta(part, new_zeta+shift);
218
- LocalParticle_update_pzeta(part, new_pzeta);
220
+ if (!kill_energy_kick){
221
+ LocalParticle_update_pzeta(part, new_pzeta);
222
+ }
219
223
  END_PER_PARTICLE_BLOCK;
220
224
  }
221
225
  else if (mode_flag==2){ // non-linear motion
@@ -325,6 +329,8 @@ GPUFUN
325
329
  void correlated_radiation_damping(LocalParticle *part0,
326
330
  LineSegmentMapData el){
327
331
 
332
+ uint8_t kill_energy_kick = LocalParticle_check_track_flag(
333
+ part0, XS_FLAG_KILL_CAVITY_KICK);
328
334
  START_PER_PARTICLE_BLOCK(part0, part);
329
335
  double in[6];
330
336
  in[0] = LocalParticle_get_x(part);
@@ -345,7 +351,8 @@ void correlated_radiation_damping(LocalParticle *part0,
345
351
  LocalParticle_set_y(part, out[2]);
346
352
  LocalParticle_set_py(part, out[3]);
347
353
  LocalParticle_set_zeta(part, out[4]);
348
- LocalParticle_update_pzeta(part,out[5]);
354
+ if (!kill_energy_kick){
355
+ LocalParticle_update_pzeta(part,out[5]);}
349
356
  END_PER_PARTICLE_BLOCK;
350
357
  }
351
358
 
@@ -348,7 +348,7 @@ void track_magnet_particles(
348
348
  if (rbend_model == 2){
349
349
  // straight body --> curvature in the edges
350
350
  START_PER_PARTICLE_BLOCK(part0, part);
351
- YRotation_single_particle(part, sin_rbha, cos_rbha, sin_rbha/cos_rbha);
351
+ YRotation_single_particle(part, -sin_rbha, cos_rbha, -sin_rbha/cos_rbha);
352
352
  LocalParticle_add_to_x(part, -dx_rb);
353
353
  END_PER_PARTICLE_BLOCK;
354
354
  }
@@ -500,7 +500,7 @@ void track_magnet_particles(
500
500
  // straight body --> curvature in the edges
501
501
  START_PER_PARTICLE_BLOCK(part0, part);
502
502
  LocalParticle_add_to_x(part, dx_rb); // shift by half sagitta
503
- YRotation_single_particle(part, sin_rbha, cos_rbha, sin_rbha/cos_rbha);
503
+ YRotation_single_particle(part, -sin_rbha, cos_rbha, -sin_rbha/cos_rbha);
504
504
  END_PER_PARTICLE_BLOCK;
505
505
  }
506
506
  }
@@ -28,7 +28,8 @@ void track_rf_kick_single_particle(
28
28
  GPUGLMEM const double* knl,
29
29
  GPUGLMEM const double* ksl,
30
30
  GPUGLMEM const double* pn,
31
- GPUGLMEM const double* ps
31
+ GPUGLMEM const double* ps,
32
+ const uint8_t kill_energy_kick
32
33
  ){
33
34
 
34
35
  double phase0 = 0;
@@ -140,11 +141,13 @@ void track_rf_kick_single_particle(
140
141
  }
141
142
 
142
143
 
143
- #ifdef XTRACK_CAVITY_PRESERVE_ANGLE
144
- LocalParticle_add_to_energy(part, energy_kick + rfmultipole_energy_kick, 0);
145
- #else
146
- LocalParticle_add_to_energy(part, energy_kick + rfmultipole_energy_kick, 1);
147
- #endif
144
+ if (!kill_energy_kick) {
145
+ #ifdef XTRACK_CAVITY_PRESERVE_ANGLE
146
+ LocalParticle_add_to_energy(part, energy_kick + rfmultipole_energy_kick, 0);
147
+ #else
148
+ LocalParticle_add_to_energy(part, energy_kick + rfmultipole_energy_kick, 1);
149
+ #endif
150
+ }
148
151
 
149
152
  }
150
153
 
@@ -167,7 +170,8 @@ void track_rf_body_single_particle(
167
170
  GPUGLMEM const double* ps,
168
171
  const int64_t num_kicks,
169
172
  const int8_t drift_model,
170
- const int8_t integrator
173
+ const int8_t integrator,
174
+ const uint8_t kill_energy_kick
171
175
  ) {
172
176
 
173
177
  #define RF_KICK(part, kick_weight) \
@@ -175,7 +179,8 @@ void track_rf_body_single_particle(
175
179
  part, voltage * (kick_weight), frequency, lag,\
176
180
  transverse_voltage * (kick_weight), transverse_lag,\
177
181
  absolute_time, order, \
178
- factor_knl_ksl * (kick_weight), knl, ksl, pn, ps\
182
+ factor_knl_ksl * (kick_weight), knl, ksl, pn, ps,\
183
+ kill_energy_kick\
179
184
  )
180
185
 
181
186
  #define RF_DRIFT(part, dlength) \
@@ -318,6 +323,8 @@ void track_rf_particles(
318
323
  ) {
319
324
 
320
325
  double factor_knl_ksl = 1.0;
326
+ uint8_t kill_energy_kick = LocalParticle_check_track_flag(
327
+ part0, XS_FLAG_KILL_CAVITY_KICK);
321
328
 
322
329
  // Backtracking
323
330
  #ifdef XSUITE_BACKTRACK
@@ -397,7 +404,8 @@ void track_rf_particles(
397
404
  ps,
398
405
  num_kicks,
399
406
  drift_model,
400
- integrator
407
+ integrator,
408
+ kill_energy_kick
401
409
  );
402
410
  END_PER_PARTICLE_BLOCK;
403
411
 
@@ -28,7 +28,8 @@ void track_rf_kick_single_particle(
28
28
  GPUGLMEM const double* knl,
29
29
  GPUGLMEM const double* ksl,
30
30
  GPUGLMEM const double* pn,
31
- GPUGLMEM const double* ps
31
+ GPUGLMEM const double* ps,
32
+ const uint8_t kill_energy_kick
32
33
  ){
33
34
 
34
35
  double phase0 = 0;
@@ -140,11 +141,13 @@ void track_rf_kick_single_particle(
140
141
  }
141
142
 
142
143
 
143
- #ifdef XTRACK_CAVITY_PRESERVE_ANGLE
144
- LocalParticle_add_to_energy(part, energy_kick + rfmultipole_energy_kick, 0);
145
- #else
146
- LocalParticle_add_to_energy(part, energy_kick + rfmultipole_energy_kick, 1);
147
- #endif
144
+ if (!kill_energy_kick) {
145
+ #ifdef XTRACK_CAVITY_PRESERVE_ANGLE
146
+ LocalParticle_add_to_energy(part, energy_kick + rfmultipole_energy_kick, 0);
147
+ #else
148
+ LocalParticle_add_to_energy(part, energy_kick + rfmultipole_energy_kick, 1);
149
+ #endif
150
+ }
148
151
 
149
152
  }
150
153
 
@@ -167,7 +170,8 @@ void track_rf_body_single_particle(
167
170
  GPUGLMEM const double* ps,
168
171
  const int64_t num_kicks,
169
172
  const int8_t drift_model,
170
- const int8_t integrator
173
+ const int8_t integrator,
174
+ const uint8_t kill_energy_kick
171
175
  ) {
172
176
 
173
177
  #define RF_KICK(part, kick_weight) \
@@ -175,7 +179,8 @@ void track_rf_body_single_particle(
175
179
  part, voltage * (kick_weight), frequency, lag,\
176
180
  transverse_voltage * (kick_weight), transverse_lag,\
177
181
  absolute_time, order, \
178
- factor_knl_ksl * (kick_weight), knl, ksl, pn, ps\
182
+ factor_knl_ksl * (kick_weight), knl, ksl, pn, ps,\
183
+ kill_energy_kick\
179
184
  )
180
185
 
181
186
  #define RF_DRIFT(part, dlength) \
@@ -237,6 +242,8 @@ void track_rf_particles(
237
242
  ) {
238
243
 
239
244
  double factor_knl_ksl = 1.0;
245
+ uint8_t kill_energy_kick = LocalParticle_check_track_flag(
246
+ part0, XS_FLAG_KILL_CAVITY_KICK);
240
247
 
241
248
  // Backtracking
242
249
  #ifdef XSUITE_BACKTRACK
@@ -316,7 +323,8 @@ void track_rf_particles(
316
323
  ps,
317
324
  num_kicks,
318
325
  drift_model,
319
- integrator
326
+ integrator,
327
+ kill_energy_kick
320
328
  );
321
329
  END_PER_PARTICLE_BLOCK;
322
330
 
@@ -5513,6 +5513,15 @@ def _preserve_config(ln_or_trk):
5513
5513
  ln_or_trk.config.clear()
5514
5514
  ln_or_trk.config.update(config)
5515
5515
 
5516
+ @contextmanager
5517
+ def _preserve_track_flags(line):
5518
+ old_flags = line.tracker.track_flags.flags.copy()
5519
+ try:
5520
+ yield
5521
+ finally:
5522
+ line.tracker.track_flags.flags.clear()
5523
+ line.tracker.track_flags.flags.update(old_flags)
5524
+
5516
5525
 
5517
5526
  @contextmanager
5518
5527
  def freeze_longitudinal(ln_or_trk):
@@ -232,6 +232,34 @@ def drift_to_mad_str(name, line, mad_type=MadType.MADX, substituted_vars=None):
232
232
  tokens = _handle_tokens_madng(tokens, substituted_vars)
233
233
  return ', '.join(tokens)
234
234
 
235
+ def drift_slice_to_mad_str(name, line, mad_type=MadType.MADX, substituted_vars=None):
236
+ """
237
+ Convert a drift element to a MADX/MAD-NG string representation.
238
+
239
+ Parameters:
240
+ - name: Name of the drift element.
241
+ - line: The line containing the element.
242
+ - mad_type: Type of MAD (MADX or MADNG).
243
+ - substituted_vars: List of substituted variables for MADNG.
244
+
245
+ Returns:
246
+ - A string representation of the drift in MADX/MAD-NG format.
247
+ """
248
+
249
+ drift_slice = _get_eref(line, name)
250
+ tokens = []
251
+ tokens.append('drift')
252
+ if mad_type == MadType.MADNG:
253
+ tokens.append(f"'{name.replace(':', '__')}'") # replace ':' with '__' for MADNG
254
+
255
+ tokens.append(mad_assignment('l', (float(drift_slice._parent.length._value)
256
+ * float(drift_slice.weight._value)),
257
+ mad_type, substituted_vars=substituted_vars))
258
+
259
+ if mad_type == MadType.MADNG:
260
+ tokens = _handle_tokens_madng(tokens, substituted_vars)
261
+ return ', '.join(tokens)
262
+
235
263
  def multipole_to_mad_str(name, line, mad_type=MadType.MADX, substituted_vars=None):
236
264
  """ Convert a multipole element to a MADX/MAD-NG string representation.
237
265
 
@@ -562,7 +590,8 @@ xsuite_to_mad_converters = {
562
590
  xt.UniformSolenoid: solenoid_to_mad_str,
563
591
  xt.SRotation: srotation_to_mad_str,
564
592
  xt.RFMultipole: rfmultipole_to_mad_str,
565
- xt.CrabCavity: crabcavity_to_mad_str
593
+ xt.CrabCavity: crabcavity_to_mad_str,
594
+ xt.DriftSlice: drift_slice_to_mad_str
566
595
  }
567
596
 
568
597
  def to_madx_sequence(line, name='seq', mode='sequence'):
@@ -1429,6 +1429,7 @@ class Particles(xo.HybridClass):
1429
1429
 
1430
1430
  src_lines.append(' int64_t ipart;')
1431
1431
  src_lines.append(' int64_t endpart;')
1432
+ src_lines.append(' uint64_t track_flags;')
1432
1433
  src_lines.append(' /*gpuglmem*/ int8_t* io_buffer;')
1433
1434
  src_lines.append('} LocalParticle;')
1434
1435
  src_typedef = '\n'.join(src_lines)
@@ -1443,6 +1444,14 @@ class Particles(xo.HybridClass):
1443
1444
 
1444
1445
  ''')
1445
1446
 
1447
+ # Get track flag
1448
+ src_lines.append('''
1449
+ /*gpufun*/
1450
+ uint64_t LocalParticle_check_track_flag(LocalParticle* part, uint8_t index){
1451
+ return (part->track_flags >> index) & 1;
1452
+ }
1453
+ ''')
1454
+
1446
1455
  # Particles_to_LocalParticle
1447
1456
  src_lines.append('''
1448
1457
  /*gpufun*/
@@ -0,0 +1,68 @@
1
+ import numpy as np
2
+
3
+ flag_mapping = {
4
+ 'XS_FLAG_BACKTRACK': 0,
5
+ 'XS_FLAG_TAPER': 1,
6
+ 'XS_FLAG_KILL_CAVITY_KICK': 2,
7
+ 'XS_FLAG_IGNORE_GLOBAL_APERTURE': 3,
8
+ 'XS_FLAG_IGNORE_LOCAL_APERTURE': 4
9
+ }
10
+
11
+ flag_defaults = {
12
+ 'XS_FLAG_BACKTRACK': False,
13
+ 'XS_FLAG_TAPER': False,
14
+ 'XS_FLAG_KILL_CAVITY_KICK': False,
15
+ 'XS_FLAG_IGNORE_GLOBAL_APERTURE': False,
16
+ 'XS_FLAG_IGNORE_LOCAL_APERTURE': False
17
+ }
18
+
19
+ c_header_flag_mapping = """
20
+ #ifndef XSTUITE_TRACK_FLAGS_H
21
+ #define XSTUITE_TRACK_FLAGS_H
22
+ """
23
+ for flag_name, bit_pos in flag_mapping.items():
24
+ c_header_flag_mapping += f"#define {flag_name} ({bit_pos})\n"
25
+ c_header_flag_mapping += """
26
+ #endif // XSTUITE_TRACK_FLAGS_H
27
+ """
28
+
29
+ class TrackFlags:
30
+
31
+ c_header_flag_mapping = c_header_flag_mapping
32
+
33
+ def __init__(self, **kwargs):
34
+ object.__setattr__(self, 'flags', flag_defaults.copy())
35
+ for key, value in kwargs.items():
36
+ setattr(self, key, value)
37
+
38
+ def get_flags_register(self):
39
+
40
+ reg = 0
41
+ for flag_name, bit_pos in flag_mapping.items():
42
+ assert bit_pos >= 0
43
+ assert bit_pos < 64
44
+ if self.flags.get(flag_name, False):
45
+ reg |= (1 << bit_pos)
46
+ return np.uint64(reg)
47
+
48
+ def __getattr__(self, name):
49
+ if name == 'flags':
50
+ return object.__getattribute__(self, 'flags')
51
+ if name in self.flags:
52
+ return self.flags[name]
53
+ raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")
54
+
55
+ def __setattr__(self, name, value):
56
+ if name == 'flags': # for unpickling
57
+ object.__setattr__(self, 'flags', value)
58
+ return
59
+ if name not in self.flags:
60
+ raise KeyError(f"Unknown flag '{name}'")
61
+ self.flags[name] = value
62
+
63
+ def __repr__(self):
64
+ return f"TrackFlags({self.flags})"
65
+
66
+ def print_flag_register(self):
67
+ reg = self.get_flags_register()
68
+ print(f"Flag register (binary): {bin(reg)[2:].zfill(64)}")
@@ -23,6 +23,7 @@ from .line import freeze_longitudinal as _freeze_longitudinal
23
23
  from .pipeline import PipelineStatus
24
24
  from .progress_indicator import progress
25
25
  from .tracker_data import TrackerData
26
+ from .track_flags import TrackFlags
26
27
 
27
28
  logger = logging.getLogger(__name__)
28
29
 
@@ -73,6 +74,7 @@ class Tracker:
73
74
  self.local_particle_src = local_particle_src
74
75
  self._enable_pipeline_hold = enable_pipeline_hold
75
76
  self.use_prebuilt_kernels = use_prebuilt_kernels
77
+ self.track_flags = TrackFlags()
76
78
 
77
79
  # Some data for collective mode prepared also for non-collective lines
78
80
  # to allow collective actions by the tracker (e.g. time-functions on knobs)
@@ -464,6 +466,7 @@ class Tracker:
464
466
 
465
467
  headers.extend(self.extra_headers)
466
468
  headers.append(_pkg_root.joinpath("headers/constants.h"))
469
+ headers.append(self.track_flags.c_header_flag_mapping)
467
470
 
468
471
  src_lines = []
469
472
  src_lines.append(
@@ -483,7 +486,9 @@ class Tracker:
483
486
  double line_length,
484
487
  /*gpuglmem*/ int8_t* buffer_tbt_monitor,
485
488
  int64_t offset_tbt_monitor,
486
- /*gpuglmem*/ int8_t* io_buffer){
489
+ /*gpuglmem*/ int8_t* io_buffer,
490
+ uint64_t track_flags
491
+ ){
487
492
 
488
493
  #define CONTEXT_OPENMP //only_for_context cpu_openmp
489
494
  #ifdef CONTEXT_OPENMP
@@ -492,7 +497,7 @@ class Tracker:
492
497
 
493
498
  #ifndef XT_OMP_SKIP_REORGANIZE
494
499
  const int64_t num_particles_to_track = ParticlesData_get__num_active_particles(particles);
495
-
500
+
496
501
  {
497
502
  LocalParticle lpart;
498
503
  lpart.io_buffer = io_buffer;
@@ -504,10 +509,10 @@ class Tracker:
504
509
  #else // When we skip reorganize, we cannot just batch active particles
505
510
  const int64_t num_particles_to_track = capacity;
506
511
  #endif
507
-
512
+
508
513
  const int64_t chunk_size = (num_particles_to_track + num_threads - 1)/num_threads; // ceil division
509
514
  #endif // CONTEXT_OPENMP
510
-
515
+
511
516
  #pragma omp parallel for //only_for_context cpu_openmp
512
517
  for (int chunk = 0; chunk < num_threads; chunk++) { //only_for_context cpu_openmp
513
518
  int64_t part_id = chunk * chunk_size; //only_for_context cpu_openmp
@@ -521,6 +526,7 @@ class Tracker:
521
526
 
522
527
  LocalParticle lpart;
523
528
  lpart.io_buffer = io_buffer;
529
+ lpart.track_flags = track_flags;
524
530
 
525
531
  /*gpuglmem*/ int8_t* tbt_mon_pointer =
526
532
  buffer_tbt_monitor + offset_tbt_monitor;
@@ -706,6 +712,7 @@ class Tracker:
706
712
  xo.Arg(xo.Int8, pointer=True, name="buffer_tbt_monitor"),
707
713
  xo.Arg(xo.Int64, name="offset_tbt_monitor"),
708
714
  xo.Arg(xo.Int8, pointer=True, name="io_buffer"),
715
+ xo.Arg(xo.UInt64, name="track_flags"),
709
716
  ],
710
717
  )
711
718
  }
@@ -1148,6 +1155,8 @@ class Tracker:
1148
1155
  assert ele_start >= 0
1149
1156
  assert ele_start <= self.num_elements
1150
1157
 
1158
+ track_flags = self.track_flags.get_flags_register()
1159
+
1151
1160
  # Logic to split the tracking turns:
1152
1161
  # Case 1: 0 <= start < stop <= L
1153
1162
  # Track first turn from start until stop (with num_elements_first_turn=stop-start)
@@ -1255,6 +1264,7 @@ class Tracker:
1255
1264
  buffer_tbt_monitor=buffer_monitor,
1256
1265
  offset_tbt_monitor=offset_monitor,
1257
1266
  io_buffer=self.io_buffer.buffer,
1267
+ track_flags=track_flags
1258
1268
  )
1259
1269
 
1260
1270
  # Middle turns
@@ -1275,6 +1285,7 @@ class Tracker:
1275
1285
  buffer_tbt_monitor=buffer_monitor,
1276
1286
  offset_tbt_monitor=offset_monitor,
1277
1287
  io_buffer=self.io_buffer.buffer,
1288
+ track_flags=track_flags
1278
1289
  )
1279
1290
 
1280
1291
  # Last turn, only if incomplete
@@ -1295,6 +1306,7 @@ class Tracker:
1295
1306
  buffer_tbt_monitor=buffer_monitor,
1296
1307
  offset_tbt_monitor=offset_monitor,
1297
1308
  io_buffer=self.io_buffer.buffer,
1309
+ track_flags=track_flags
1298
1310
  )
1299
1311
 
1300
1312
  self.record_last_track = monitor