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.
- {xtrack-0.88.0/xtrack.egg-info → xtrack-0.88.2}/PKG-INFO +1 -1
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_magnet.py +2 -2
- xtrack-0.88.2/tests/test_quadrupole_fringe_ptc.py +66 -0
- xtrack-0.88.2/tests/test_quadrupole_wedge.py +94 -0
- xtrack-0.88.2/xtrack/_version.py +1 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements.py +2 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_magnet_edge.h +12 -2
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_mult_fringe.h +9 -10
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_wedge.h +27 -1
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/wedge.h +12 -1
- {xtrack-0.88.0 → xtrack-0.88.2/xtrack.egg-info}/PKG-INFO +1 -1
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack.egg-info/SOURCES.txt +2 -0
- xtrack-0.88.0/xtrack/_version.py +0 -1
- {xtrack-0.88.0 → xtrack-0.88.2}/LICENSE +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/MANIFEST.in +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/README.md +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/base_classes.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/BB6D.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/beambeam.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/boost.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/qgauss.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/slicing.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/be_beamfields/spacecharge.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/elements.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/line.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/mathlibs.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/particles.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/ducktrack/temp_pyparticles.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/pyproject.toml +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/setup.cfg +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/setup.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_acceleration.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_amplitude_detuning.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_aperture_table.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_apertures.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_attr_replicas_and_slices.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_bucket_with_ref_energy_change.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_cavity_absolute_time.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_chromatic_functions_vs_madx.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_coasting.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_collective_tracker.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_collimation.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_electron_cooler.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_element_characterization_functions.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_element_internal_record.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_elements.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_elements_classflags.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_elements_thick.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_environment.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_fcc_ee_solenoid_correction.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_footprint.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_freeze_longitudinal.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_full_rings.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_h6_sps_beamline.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_hvkick.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_ions.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_legacy_multiline_to_env.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_lhc_env.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_lhc_match_phase_15.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_line.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_load.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_load_vars.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_lumi.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_mad_writer.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_madloader.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_madnginterface.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_match_and_track_from_element.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_match_coupling_knob.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_match_nested.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_match_optics_and_ip_knob.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_match_orbit_bump.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_match_tune_chroma_cminus.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_monitor.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_multi_bunch_gauss.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_multiline.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_multisetter.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_multispecies.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_native_madloader.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_optimize_for_tracking.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_particles.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_particles_basics.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_particles_pdg.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_periodic_symmetric_twiss_and_match.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_pipeline.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_prebuild_kernels.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_ps_against_ptc.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_ps_multiturn_twiss.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_psb_chicane.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_pyht_interface.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_radial_steering.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_radiation.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_radiation_equilibrium_emittances.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_radiation_equilibrium_emittances_thick.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_radiation_integrals.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_random_gen.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_random_gen_exp.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_random_gen_gauss.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_random_gen_ruth.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_rbend_rbarc.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_rbend_straight_body.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_rf_track.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_rotation_signs.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_second_order_taylor_map.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_seeds.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_slice_and_insert_with_replicas.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_slice_elements.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_slicing.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_solenoid_bz_map_vs_boris.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_solenoid_bz_map_vs_boris_legacy.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_spacecharge_in_ring.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_spin.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_sps_thick.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_survey.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_tapering.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_thick_lhc.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_tilt_shifts.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_tracker.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_trajectory_correcton.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_twiss.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_twiss_vs_madx_psb.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_vs_madx.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/tests/test_xmask_orbit_correction.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/lhc_match/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/_temp/lhc_match/var_limits.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/aperture_meas.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/base_element.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/apertures.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/apertures_src/limitpolygon.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/beam_interaction.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/bend.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/cavity.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/default_magnet_config.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift_slice_rbend.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/drift_slice_uniform_solenoid.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/electroncooler.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/elens.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/exciter.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/legacy_solenoid.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/magnet.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/magnet_drift.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/magnet_edge.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/magnet_kick.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/marker.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/multipole.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/multipoleedge.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/octupole.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/quadrupole.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/rbend.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/rfmultipole.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/sextupole.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/slnd.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/srotation.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thick_slice_bend.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thick_slice_rbend.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thick_slice_uniform_solenoid.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_bend.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_octupole_entry.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_octupole_exit.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_entry.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_exit.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_rbend.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_rbend_entry.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_rbend_exit.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_sextupole_entry.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_sextupole_exit.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_entry.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_exit.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_cavity.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_drift.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_legacy_solenoid.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_legacy_solenoid_multipolar_components.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_legacy_solenoid_radiation.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_magnet.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_magnet_drift.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_magnet_kick.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_magnet_radiation.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/variable_solenoid.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/wire.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/exciter.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/magnets.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/rft_element.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/slice_elements_edge.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/slice_elements_thick.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/beam_elements/slice_elements_thin.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/environment.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/footprint.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/general.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/headers/atomicadd.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/headers/checks.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/headers/constants.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/headers/particle_states.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/headers/synrad_spectrum.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/headers/track.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/internal_record.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/json.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/line.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/linear_normal_form.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/load.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/loss_location_refinement/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/loss_location_refinement/loss_location_refinement.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/lumi.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/mad_loader.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/mad_parser/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/mad_parser/loader.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/mad_parser/madx.lark +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/mad_parser/parse.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/mad_writer.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/madng_interface.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/match.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/beam_position_monitor.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/beam_position_monitor.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/beam_profile_monitor.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/beam_profile_monitor.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/beam_size_monitor.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/beam_size_monitor.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/last_turns_monitor.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/last_turns_monitor.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/particles_monitor.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/monitors/particles_monitor.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/multiline.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/multiline_legacy/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/multiline_legacy/multiline_legacy.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/multiline_legacy/shared_knobs.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/multisetter/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/multisetter/multisetter.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/particles/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/particles/constants.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/particles/masses.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/particles/particles.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/particles/pdg.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/particles/rng_src/base_rng.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/particles/rng_src/particles_rng.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/pipeline/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/pipeline/core.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/pipeline/manager.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/pipeline/multitracker.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/progress_indicator.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/random_generators.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/random_src/exponential.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/random_src/normal.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/random_src/rutherford.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/random_src/uniform.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/random/random_src/uniform_accurate.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/slicing.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/survey.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/svgutils/__init__.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/svgutils/parser.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/svgutils/path.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/svgutils/svgutils.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/synctime.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/tapering.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/targets.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/tracker.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/tracker_data.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/tracker_src/tracker.h +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/trajectory_correction.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/twiss.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack/twissplot.py +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack.egg-info/dependency_links.txt +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack.egg-info/requires.txt +0 -0
- {xtrack-0.88.0 → xtrack-0.88.2}/xtrack.egg-info/top_level.txt +0 -0
|
@@ -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'
|
|
@@ -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
|
|
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
|
|
116
|
-
double b = -fyx
|
|
117
|
-
double c = -fxy
|
|
118
|
-
double d = 1 - fyy
|
|
119
|
-
double det =
|
|
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)
|
|
122
|
+
double delta_t = (1 / beta0 + pt) * (new_px * fx + new_py * fy) * POW3(rpp);
|
|
124
123
|
|
|
125
|
-
LocalParticle_add_to_x(part, -fx
|
|
126
|
-
LocalParticle_add_to_y(part, -fy
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
|
@@ -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
|
xtrack-0.88.0/xtrack/_version.py
DELETED
|
@@ -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
|
|
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
|
|
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
|
|
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
|