xtrack 0.88.0__tar.gz → 0.88.2__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 (320) hide show
  1. {xtrack-0.88.0/xtrack.egg-info → xtrack-0.88.2}/PKG-INFO +1 -1
  2. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_magnet.py +2 -2
  3. xtrack-0.88.2/tests/test_quadrupole_fringe_ptc.py +66 -0
  4. xtrack-0.88.2/tests/test_quadrupole_wedge.py +94 -0
  5. xtrack-0.88.2/xtrack/_version.py +1 -0
  6. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements.py +2 -0
  7. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_magnet_edge.h +12 -2
  8. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_mult_fringe.h +9 -10
  9. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_wedge.h +27 -1
  10. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/wedge.h +12 -1
  11. {xtrack-0.88.0 → xtrack-0.88.2/xtrack.egg-info}/PKG-INFO +1 -1
  12. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack.egg-info/SOURCES.txt +2 -0
  13. xtrack-0.88.0/xtrack/_version.py +0 -1
  14. {xtrack-0.88.0 → xtrack-0.88.2}/LICENSE +0 -0
  15. {xtrack-0.88.0 → xtrack-0.88.2}/MANIFEST.in +0 -0
  16. {xtrack-0.88.0 → xtrack-0.88.2}/README.md +0 -0
  17. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/__init__.py +0 -0
  18. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/base_classes.py +0 -0
  19. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/BB6D.py +0 -0
  20. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
  21. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/__init__.py +0 -0
  22. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/beambeam.py +0 -0
  23. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/boost.py +0 -0
  24. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
  25. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
  26. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/qgauss.py +0 -0
  27. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/slicing.py +0 -0
  28. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/spacecharge.py +0 -0
  29. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/elements.py +0 -0
  30. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/line.py +0 -0
  31. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/mathlibs.py +0 -0
  32. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/particles.py +0 -0
  33. {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/temp_pyparticles.py +0 -0
  34. {xtrack-0.88.0 → xtrack-0.88.2}/pyproject.toml +0 -0
  35. {xtrack-0.88.0 → xtrack-0.88.2}/setup.cfg +0 -0
  36. {xtrack-0.88.0 → xtrack-0.88.2}/setup.py +0 -0
  37. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_acceleration.py +0 -0
  38. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_amplitude_detuning.py +0 -0
  39. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_aperture_table.py +0 -0
  40. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
  41. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_apertures.py +0 -0
  42. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_attr_replicas_and_slices.py +0 -0
  43. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_bucket_with_ref_energy_change.py +0 -0
  44. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_cavity_absolute_time.py +0 -0
  45. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_chromatic_functions_vs_madx.py +0 -0
  46. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_coasting.py +0 -0
  47. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_collective_tracker.py +0 -0
  48. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_collimation.py +0 -0
  49. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_electron_cooler.py +0 -0
  50. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_element_characterization_functions.py +0 -0
  51. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_element_internal_record.py +0 -0
  52. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_elements.py +0 -0
  53. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_elements_classflags.py +0 -0
  54. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_elements_thick.py +0 -0
  55. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_environment.py +0 -0
  56. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_fcc_ee_solenoid_correction.py +0 -0
  57. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +0 -0
  58. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_footprint.py +0 -0
  59. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_freeze_longitudinal.py +0 -0
  60. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_full_rings.py +0 -0
  61. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_h6_sps_beamline.py +0 -0
  62. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_hvkick.py +0 -0
  63. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_ions.py +0 -0
  64. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_legacy_multiline_to_env.py +0 -0
  65. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_lhc_env.py +0 -0
  66. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_lhc_match_phase_15.py +0 -0
  67. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_line.py +0 -0
  68. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_load.py +0 -0
  69. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_load_vars.py +0 -0
  70. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_lumi.py +0 -0
  71. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_mad_writer.py +0 -0
  72. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_madloader.py +0 -0
  73. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_madnginterface.py +0 -0
  74. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_match_and_track_from_element.py +0 -0
  75. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_match_coupling_knob.py +0 -0
  76. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_match_nested.py +0 -0
  77. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_match_optics_and_ip_knob.py +0 -0
  78. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
  79. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_match_orbit_bump.py +0 -0
  80. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_match_tune_chroma_cminus.py +0 -0
  81. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_monitor.py +0 -0
  82. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_multi_bunch_gauss.py +0 -0
  83. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_multiline.py +0 -0
  84. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_multisetter.py +0 -0
  85. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_multispecies.py +0 -0
  86. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_native_madloader.py +0 -0
  87. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_optimize_for_tracking.py +0 -0
  88. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_particles.py +0 -0
  89. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_particles_basics.py +0 -0
  90. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_particles_pdg.py +0 -0
  91. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_periodic_symmetric_twiss_and_match.py +0 -0
  92. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_pipeline.py +0 -0
  93. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_prebuild_kernels.py +0 -0
  94. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_ps_against_ptc.py +0 -0
  95. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_ps_multiturn_twiss.py +0 -0
  96. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_psb_chicane.py +0 -0
  97. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_pyht_interface.py +0 -0
  98. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_radial_steering.py +0 -0
  99. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_radiation.py +0 -0
  100. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_radiation_equilibrium_emittances.py +0 -0
  101. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_radiation_equilibrium_emittances_thick.py +0 -0
  102. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_radiation_integrals.py +0 -0
  103. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_random_gen.py +0 -0
  104. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_random_gen_exp.py +0 -0
  105. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_random_gen_gauss.py +0 -0
  106. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_random_gen_ruth.py +0 -0
  107. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_rbend_rbarc.py +0 -0
  108. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_rbend_straight_body.py +0 -0
  109. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_rf_track.py +0 -0
  110. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_rotation_signs.py +0 -0
  111. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_second_order_taylor_map.py +0 -0
  112. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_seeds.py +0 -0
  113. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_slice_and_insert_with_replicas.py +0 -0
  114. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_slice_elements.py +0 -0
  115. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_slicing.py +0 -0
  116. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_solenoid_bz_map_vs_boris.py +0 -0
  117. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_solenoid_bz_map_vs_boris_legacy.py +0 -0
  118. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_spacecharge_in_ring.py +0 -0
  119. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_spin.py +0 -0
  120. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_sps_thick.py +0 -0
  121. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_survey.py +0 -0
  122. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_tapering.py +0 -0
  123. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_thick_lhc.py +0 -0
  124. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_tilt_shifts.py +0 -0
  125. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_tracker.py +0 -0
  126. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_trajectory_correcton.py +0 -0
  127. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_twiss.py +0 -0
  128. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_twiss_vs_madx_psb.py +0 -0
  129. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_vs_madx.py +0 -0
  130. {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_xmask_orbit_correction.py +0 -0
  131. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/__init__.py +0 -0
  132. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/__init__.py +0 -0
  133. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
  134. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
  135. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
  136. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/lhc_match/__init__.py +0 -0
  137. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
  138. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
  139. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/lhc_match/var_limits.py +0 -0
  140. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/aperture_meas.py +0 -0
  141. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/base_element.py +0 -0
  142. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/__init__.py +0 -0
  143. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/apertures.py +0 -0
  144. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
  145. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/apertures_src/limitpolygon.h +0 -0
  146. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
  147. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
  148. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
  149. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
  150. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/beam_interaction.py +0 -0
  151. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/bend.h +0 -0
  152. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/cavity.h +0 -0
  153. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/default_magnet_config.h +0 -0
  154. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
  155. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
  156. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift.h +0 -0
  157. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
  158. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
  159. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
  160. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
  161. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift_slice_rbend.h +0 -0
  162. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
  163. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift_slice_uniform_solenoid.h +0 -0
  164. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/electroncooler.h +0 -0
  165. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/elens.h +0 -0
  166. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/exciter.h +0 -0
  167. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
  168. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/legacy_solenoid.h +0 -0
  169. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
  170. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/magnet.h +0 -0
  171. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/magnet_drift.h +0 -0
  172. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/magnet_edge.h +0 -0
  173. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/magnet_kick.h +0 -0
  174. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/marker.h +0 -0
  175. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/multipole.h +0 -0
  176. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/multipoleedge.h +0 -0
  177. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
  178. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/octupole.h +0 -0
  179. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/quadrupole.h +0 -0
  180. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/rbend.h +0 -0
  181. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
  182. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/rfmultipole.h +0 -0
  183. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
  184. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/sextupole.h +0 -0
  185. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
  186. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
  187. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/slnd.h +0 -0
  188. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/srotation.h +0 -0
  189. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thick_slice_bend.h +0 -0
  190. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +0 -0
  191. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +0 -0
  192. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thick_slice_rbend.h +0 -0
  193. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +0 -0
  194. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thick_slice_uniform_solenoid.h +0 -0
  195. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_bend.h +0 -0
  196. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
  197. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
  198. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +0 -0
  199. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_octupole_entry.h +0 -0
  200. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_octupole_exit.h +0 -0
  201. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +0 -0
  202. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_entry.h +0 -0
  203. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_exit.h +0 -0
  204. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_rbend.h +0 -0
  205. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_rbend_entry.h +0 -0
  206. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_rbend_exit.h +0 -0
  207. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +0 -0
  208. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_sextupole_entry.h +0 -0
  209. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_sextupole_exit.h +0 -0
  210. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_entry.h +0 -0
  211. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_exit.h +0 -0
  212. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_cavity.h +0 -0
  213. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
  214. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
  215. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
  216. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_drift.h +0 -0
  217. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_legacy_solenoid.h +0 -0
  218. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_legacy_solenoid_multipolar_components.h +0 -0
  219. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_legacy_solenoid_radiation.h +0 -0
  220. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_magnet.h +0 -0
  221. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_magnet_drift.h +0 -0
  222. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_magnet_kick.h +0 -0
  223. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_magnet_radiation.h +0 -0
  224. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
  225. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
  226. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
  227. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
  228. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
  229. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/variable_solenoid.h +0 -0
  230. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/wire.h +0 -0
  231. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
  232. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
  233. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
  234. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
  235. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/exciter.py +0 -0
  236. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/magnets.py +0 -0
  237. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/rft_element.py +0 -0
  238. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/slice_elements_edge.py +0 -0
  239. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/slice_elements_thick.py +0 -0
  240. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/slice_elements_thin.py +0 -0
  241. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/environment.py +0 -0
  242. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/footprint.py +0 -0
  243. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/general.py +0 -0
  244. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/headers/atomicadd.h +0 -0
  245. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/headers/checks.h +0 -0
  246. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/headers/constants.h +0 -0
  247. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/headers/particle_states.h +0 -0
  248. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/headers/synrad_spectrum.h +0 -0
  249. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/headers/track.h +0 -0
  250. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/internal_record.py +0 -0
  251. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/json.py +0 -0
  252. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/line.py +0 -0
  253. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/linear_normal_form.py +0 -0
  254. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/load.py +0 -0
  255. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/loss_location_refinement/__init__.py +0 -0
  256. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/loss_location_refinement/loss_location_refinement.py +0 -0
  257. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/lumi.py +0 -0
  258. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/mad_loader.py +0 -0
  259. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/mad_parser/__init__.py +0 -0
  260. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/mad_parser/loader.py +0 -0
  261. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/mad_parser/madx.lark +0 -0
  262. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/mad_parser/parse.py +0 -0
  263. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/mad_writer.py +0 -0
  264. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/madng_interface.py +0 -0
  265. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/match.py +0 -0
  266. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/__init__.py +0 -0
  267. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/beam_position_monitor.h +0 -0
  268. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/beam_position_monitor.py +0 -0
  269. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/beam_profile_monitor.h +0 -0
  270. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/beam_profile_monitor.py +0 -0
  271. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/beam_size_monitor.h +0 -0
  272. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/beam_size_monitor.py +0 -0
  273. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/last_turns_monitor.h +0 -0
  274. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/last_turns_monitor.py +0 -0
  275. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/particles_monitor.h +0 -0
  276. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/particles_monitor.py +0 -0
  277. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/multiline.py +0 -0
  278. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/multiline_legacy/__init__.py +0 -0
  279. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/multiline_legacy/multiline_legacy.py +0 -0
  280. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/multiline_legacy/shared_knobs.py +0 -0
  281. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/multisetter/__init__.py +0 -0
  282. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/multisetter/multisetter.py +0 -0
  283. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/particles/__init__.py +0 -0
  284. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/particles/constants.py +0 -0
  285. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/particles/masses.py +0 -0
  286. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/particles/particles.py +0 -0
  287. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/particles/pdg.py +0 -0
  288. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/particles/rng_src/base_rng.h +0 -0
  289. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/particles/rng_src/particles_rng.h +0 -0
  290. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/pipeline/__init__.py +0 -0
  291. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/pipeline/core.py +0 -0
  292. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/pipeline/manager.py +0 -0
  293. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/pipeline/multitracker.py +0 -0
  294. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/progress_indicator.py +0 -0
  295. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/__init__.py +0 -0
  296. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/random_generators.py +0 -0
  297. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/random_src/exponential.h +0 -0
  298. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
  299. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/random_src/normal.h +0 -0
  300. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/random_src/rutherford.h +0 -0
  301. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/random_src/uniform.h +0 -0
  302. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/random_src/uniform_accurate.h +0 -0
  303. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/slicing.py +0 -0
  304. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/survey.py +0 -0
  305. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/svgutils/__init__.py +0 -0
  306. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/svgutils/parser.py +0 -0
  307. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/svgutils/path.py +0 -0
  308. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/svgutils/svgutils.py +0 -0
  309. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/synctime.py +0 -0
  310. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/tapering.py +0 -0
  311. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/targets.py +0 -0
  312. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/tracker.py +0 -0
  313. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/tracker_data.py +0 -0
  314. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/tracker_src/tracker.h +0 -0
  315. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/trajectory_correction.py +0 -0
  316. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/twiss.py +0 -0
  317. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/twissplot.py +0 -0
  318. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack.egg-info/dependency_links.txt +0 -0
  319. {xtrack-0.88.0 → xtrack-0.88.2}/xtrack.egg-info/requires.txt +0 -0
  320. {xtrack-0.88.0 → xtrack-0.88.2}/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.0
3
+ Version: 0.88.2
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
@@ -992,7 +992,7 @@ def test_edge_full_model_with_dipole_component_and_angle(test_context):
992
992
  # The rotation is also the other way than in the underlying map :'(
993
993
  xt.DipoleEdge(model='full', k=3, fint=0.3, hgap=0.4),
994
994
  xt.MultipoleEdge(kn=[0, 4, 5], order=2),
995
- xt.Wedge(angle=-0.2, k=3),
995
+ xt.Wedge(angle=-0.2, k=3, k1=4, quad_wedge_then_dip_wedge=1),
996
996
  ]
997
997
 
998
998
  p0 = xt.Particles(
@@ -1030,7 +1030,7 @@ def test_edge_full_model_with_dipole_component_and_angle_exit(test_context):
1030
1030
  fringe_integral=0.3, half_gap=0.4, k_order=2, _context=test_context
1031
1031
  )
1032
1032
  e_ref = [
1033
- xt.Wedge(angle=-0.2, k=3),
1033
+ xt.Wedge(angle=-0.2, k=3, k1=4),
1034
1034
  xt.MultipoleEdge(kn=[0, 4, 5], is_exit=True, order=2),
1035
1035
  xt.DipoleEdge(model='full', k=-3, fint=0.3, hgap=0.4),
1036
1036
  xt.YRotation(angle=np.rad2deg(-0.2)),
@@ -0,0 +1,66 @@
1
+ # Checks entrance fringe for very strong quadrupole against values of PTC
2
+
3
+ import xtrack as xt
4
+ import numpy as np
5
+ from cpymad.madx import Madx
6
+
7
+ def test_quadrupole_fringe_ptc():
8
+ b2 = 100
9
+ b1 = 0
10
+ length=1e-20
11
+
12
+ # Initial conditions
13
+ x0 = 0.07
14
+ px0 = 0.03
15
+ y0 = 0.08
16
+ py0 = 0.06
17
+ zeta0 = 0.04
18
+ delta0=0.1
19
+ beta0=0.1
20
+
21
+ p0 = xt.Particles(x=x0,px=px0,y=y0,py=py0,delta=delta0,zeta=zeta0,beta0=beta0)
22
+
23
+ ptau0 = float(p0.ptau)
24
+ tau0 = zeta0/beta0
25
+
26
+ # XSuite
27
+ quadrupole = xt.Bend(length=length, k0=b1, k1=b2,
28
+ edge_entry_model='full', edge_exit_model='full')
29
+ line = xt.Line(elements=[ quadrupole])
30
+ line.discard_tracker()
31
+ line.build_tracker()
32
+ line.track(p0)
33
+
34
+ mat = line.compute_one_turn_matrix_finite_differences(p0)['R_matrix']
35
+ det = np.linalg.det(mat)
36
+
37
+ assert np.isclose(det, 1.0)
38
+
39
+ # PTC
40
+ madx_sequence = line.to_madx_sequence('quadrupole_fringes')
41
+
42
+ madx = Madx()
43
+ madx.beam(particle='proton', beta=beta0)
44
+ madx.input(madx_sequence)
45
+ madx.use('quadrupole_fringes')
46
+
47
+ madx.input(f"""
48
+ ptc_create_universe;
49
+ ptc_create_layout, exact=true;
50
+ ptc_setswitch, fringe=true;
51
+ ptc_start, x={x0}, px={px0}, y={y0}, py={py0}, t={tau0}, pt={ptau0};
52
+ ptc_track, icase=6, TURNS=1;
53
+ ptc_track_end;
54
+ ptc_end;
55
+ stop;
56
+ """
57
+ )
58
+
59
+ df = madx.table.tracksumm.dframe()
60
+
61
+ assert np.isclose(p0.x, df.x[-1])
62
+ assert np.isclose(p0.px, df.px[-1])
63
+ assert np.isclose(p0.y, df.y[-1])
64
+ assert np.isclose(p0.py, df.py[-1])
65
+ assert np.isclose(p0.ptau, df.pt[-1])
66
+ assert np.isclose(p0.zeta/p0.beta0, df.t[-1])
@@ -0,0 +1,94 @@
1
+ import xtrack as xt
2
+ import numpy as np
3
+ from cpymad.madx import Madx
4
+
5
+
6
+ def test_quadrupole_wedge():
7
+ """
8
+ Hardcoded test for quadrupole wedge with hard edge fringe.
9
+ """
10
+
11
+ angle = 0.1
12
+ b2 = 5
13
+ b1 = 0
14
+
15
+ quadrupole = xt.Bend(length=0, k0=b1, k1=b2, edge_entry_angle=angle,
16
+ edge_entry_model='full')
17
+ line= xt.Line(elements=[quadrupole])
18
+
19
+ x=np.linspace(-1e-2, 1e-2, 5)
20
+ px=np.linspace(-5e-2, 5e-2, 5)
21
+ y=np.linspace(-2e-2, 2e-2, 5)
22
+ py=np.linspace(-3e-2, 3e-2, 5)
23
+
24
+ p0 = xt.Particles(x=x,px=px,y=y,py=py)
25
+
26
+ line.discard_tracker()
27
+ line.build_tracker()
28
+ line.track(p0)
29
+
30
+ x_expval = np.array([-0.0100055, -0.00500069, 0., 0.00500069, 0.01000557])
31
+ px_expval = np.array([-5.00952476e-02, -2.50259834e-02, 1.38777878e-17, 2.49697042e-02, 4.98702638e-02])
32
+ y_expval = np.array([-0.01999435, -0.00999929, 0., 0.00999928, 0.01999424])
33
+ py_expval = np.array([-0.0301435, -0.01503677, 0., 0.01496143, 0.02984211])
34
+
35
+ assert np.allclose(p0.x, x_expval)
36
+ assert np.allclose(p0.px, px_expval)
37
+ assert np.allclose(p0.y, y_expval)
38
+ assert np.allclose(p0.py, py_expval)
39
+
40
+
41
+ def test_quadrupole_wedge_ptc():
42
+ """
43
+ Test against PTC with MAD8_WEDGE=False.
44
+ Hardcoded values since the option is not available without recompiling PTC.
45
+ """
46
+
47
+ angle_in = 0.1
48
+ angle_out = 0.13
49
+ b2 = 100
50
+ b1 = 0
51
+ length=1e-20
52
+
53
+ x0 = 0.07
54
+ px0 = 0.03
55
+ y0 = 0.08
56
+ py0 = 0.06
57
+ zeta0 = 0.04
58
+ delta0=0.1
59
+ beta0=0.1
60
+
61
+ p0 = xt.Particles(x=x0,px=px0,y=y0,py=py0,delta=delta0,zeta=zeta0,beta0=beta0)
62
+
63
+ ptau0 = float(p0.ptau)
64
+ tau0 = zeta0/beta0
65
+
66
+ # XSuite
67
+ quadrupole = xt.Bend(length=length, k0=b1, k1=b2,
68
+ edge_entry_angle=angle_in, edge_exit_angle=angle_out,
69
+ edge_entry_model='full', edge_exit_model='full')
70
+ line = xt.Line(elements=[quadrupole])
71
+
72
+ line.discard_tracker()
73
+ line.build_tracker()
74
+ line.track(p0)
75
+
76
+ mat = line.compute_one_turn_matrix_finite_differences(p0)['R_matrix']
77
+ det = np.linalg.det(mat)
78
+
79
+ assert np.isclose(det, 1.0)
80
+
81
+ # # PTC values obtained with recompiled version of PTC, setting MAD8_WEDGE=False
82
+ x_ptc = 0.07043818253
83
+ px_ptc = 0.1313937438
84
+ y_ptc = 0.07993855538
85
+ py_ptc = -0.07321782159
86
+ tau_ptc = 0.4245507041
87
+ ptau_ptc = 0.01049449328
88
+
89
+ assert np.isclose(p0.x, x_ptc)
90
+ assert np.isclose(p0.px, px_ptc)
91
+ assert np.isclose(p0.y, y_ptc)
92
+ assert np.isclose(p0.py, py_ptc)
93
+ assert np.isclose(p0.zeta/p0.beta0, tau_ptc)
94
+ assert np.isclose(p0.ptau, ptau_ptc)
@@ -0,0 +1 @@
1
+ __version__ = '0.88.2'
@@ -2314,6 +2314,8 @@ class Wedge(BeamElement):
2314
2314
  _xofields = {
2315
2315
  'angle': xo.Float64,
2316
2316
  'k': xo.Float64,
2317
+ 'k1': xo.Float64,
2318
+ 'quad_wedge_then_dip_wedge': xo.Int64,
2317
2319
  }
2318
2320
 
2319
2321
  _extra_c_sources = [
@@ -111,7 +111,10 @@ void track_magnet_edge_particles(
111
111
  // model changes!
112
112
 
113
113
  #define MAGNET_WEDGE(PART) \
114
- if (should_rotate) Wedge_single_particle((PART), -face_angle, knorm[0])
114
+ if (should_rotate & (k_order >= 0)) Wedge_single_particle((PART), -face_angle, knorm[0])
115
+
116
+ #define MAGNET_QUAD_WEDGE(PART) \
117
+ if (should_rotate & (k_order >= 1)) Quad_wedge_single_particle((PART), -face_angle, knorm[1])
115
118
 
116
119
  if (is_exit == 0){ // entry
117
120
  START_PER_PARTICLE_BLOCK(part0, part);
@@ -120,12 +123,18 @@ void track_magnet_edge_particles(
120
123
  if (model == 1){
121
124
  MAGNET_MULTIPOLE_FRINGE(part);
122
125
  }
126
+ if (model == 1){
127
+ MAGNET_QUAD_WEDGE(part);
128
+ }
123
129
  MAGNET_WEDGE(part);
124
130
  END_PER_PARTICLE_BLOCK;
125
131
  }
126
132
  else { // exit
127
133
  START_PER_PARTICLE_BLOCK(part0, part);
128
134
  MAGNET_WEDGE(part);
135
+ if (model == 1){
136
+ MAGNET_QUAD_WEDGE(part);
137
+ }
129
138
  if (model == 1){
130
139
  MAGNET_MULTIPOLE_FRINGE(part);
131
140
  }
@@ -138,6 +147,7 @@ void track_magnet_edge_particles(
138
147
  #undef MAGNET_DIPOLE_FRINGE
139
148
  #undef MAGNET_MULTIPOLE_FRINGE
140
149
  #undef MAGNET_WEDGE
150
+ #undef MAGNET_QUAD_WEDGE
141
151
  }
142
152
  else if (model == 3) { // only ax ay cancellation (already done above)
143
153
  // do nothing
@@ -145,4 +155,4 @@ void track_magnet_edge_particles(
145
155
  // If model is not 0 or 1, do nothing
146
156
  }
147
157
 
148
- #endif // XTRACK_TRACK_MAGNET_EDGE_H
158
+ #endif // XTRACK_TRACK_MAGNET_EDGE_H
@@ -41,8 +41,7 @@ void MultFringe_track_single_particle(
41
41
  const double t = LocalParticle_get_zeta(part) / beta0;
42
42
  const double pt = LocalParticle_get_ptau(part);
43
43
 
44
- const double one_plus_delta = LocalParticle_get_delta(part) + 1.0;
45
- const double pz = sqrt(POW2(one_plus_delta) - POW2(px) - POW2(py));
44
+ const double rpp = LocalParticle_get_rpp(part);
46
45
 
47
46
  double rx = 1;
48
47
  double ix = 0;
@@ -112,18 +111,18 @@ void MultFringe_track_single_particle(
112
111
 
113
112
  }
114
113
 
115
- double a = 1 - fxx / pz;
116
- double b = -fyx / pz;
117
- double c = -fxy / pz;
118
- double d = 1 - fyy / pz;
119
- double det = 1 / (a * d - b * c);
114
+ double a = 1 - fxx * rpp;
115
+ double b = -fyx * rpp;
116
+ double c = -fxy * rpp;
117
+ double d = 1 - fyy * rpp;
118
+ double det = (a * d - b * c);
120
119
 
121
120
  double new_px = (d * px - b * py) / det;
122
121
  double new_py = (a * py - c * px) / det;
123
- double delta_t = (1 / beta0 + pt) * (new_px * fx + new_py * fy) / POW3(pz);
122
+ double delta_t = (1 / beta0 + pt) * (new_px * fx + new_py * fy) * POW3(rpp);
124
123
 
125
- LocalParticle_add_to_x(part, -fx / pz);
126
- LocalParticle_add_to_y(part, -fy / pz);
124
+ LocalParticle_add_to_x(part, -fx * rpp);
125
+ LocalParticle_add_to_y(part, -fy * rpp);
127
126
  LocalParticle_set_px(part, new_px);
128
127
  LocalParticle_set_py(part, new_py);
129
128
  LocalParticle_set_zeta(part, (t + delta_t) * beta0);
@@ -57,4 +57,30 @@ void Wedge_single_particle(
57
57
  LocalParticle_add_to_zeta(part, -delta_ell / rvv);
58
58
  }
59
59
 
60
- #endif // XTRACK_TRACK_WEDGE_H
60
+ GPUFUN
61
+ void Quad_wedge_single_particle(
62
+ LocalParticle* part, // LocalParticle to track
63
+ const double theta, // Angle of the wedge
64
+ const double k1 // Quadrupole strength
65
+ ) {
66
+ // Params
67
+ const double b2 = k1 * LocalParticle_get_chi(part);
68
+
69
+ // Particle coordinates
70
+ const double x = LocalParticle_get_x(part);
71
+ const double y = LocalParticle_get_y(part);
72
+ const double px = LocalParticle_get_px(part);
73
+ const double py = LocalParticle_get_py(part);
74
+
75
+ // Map
76
+ const double new_px = px - b2 * x*x * theta + b2 * y*y/2 * theta;
77
+ const double new_py = py + b2 * x*y * theta;
78
+
79
+ // Update particle coordinates
80
+ LocalParticle_set_px(part, new_px);
81
+ LocalParticle_set_py(part, new_py);
82
+ }
83
+
84
+
85
+ #endif // XTRACK_TRACK_WEDGE_H
86
+
@@ -17,9 +17,20 @@ void Wedge_track_local_particle(
17
17
  // Parameters
18
18
  const double angle = WedgeData_get_angle(el);
19
19
  const double k = WedgeData_get_k(el);
20
+ const double k1 = WedgeData_get_k1(el);
21
+ const int64_t quad_wedge_then_dip_wedge = WedgeData_get_quad_wedge_then_dip_wedge(el);
20
22
 
21
23
  START_PER_PARTICLE_BLOCK(part0, part);
22
- Wedge_single_particle(part, angle, k);
24
+ if (quad_wedge_then_dip_wedge == 0) {
25
+ // Wedge then quadrupole wedge
26
+ Wedge_single_particle(part, angle, k);
27
+ Quad_wedge_single_particle(part, angle, k1);
28
+ }
29
+ else if (quad_wedge_then_dip_wedge == 1) {
30
+ // Quadrupole wedge then dipole wedge
31
+ Quad_wedge_single_particle(part, angle, k1);
32
+ Wedge_single_particle(part, angle, k);
33
+ }
23
34
  END_PER_PARTICLE_BLOCK;
24
35
  }
25
36
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xtrack
3
- Version: 0.88.0
3
+ Version: 0.88.2
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
@@ -82,6 +82,8 @@ tests/test_ps_against_ptc.py
82
82
  tests/test_ps_multiturn_twiss.py
83
83
  tests/test_psb_chicane.py
84
84
  tests/test_pyht_interface.py
85
+ tests/test_quadrupole_fringe_ptc.py
86
+ tests/test_quadrupole_wedge.py
85
87
  tests/test_radial_steering.py
86
88
  tests/test_radiation.py
87
89
  tests/test_radiation_equilibrium_emittances.py
@@ -1 +0,0 @@
1
- __version__ = '0.88.0'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes