xtrack 0.84.7__tar.gz → 0.85.0__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.84.7/xtrack.egg-info → xtrack-0.85.0}/PKG-INFO +1 -1
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_elements_classflags.py +5 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_elements_thick.py +186 -21
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_fcc_ee_solenoid_correction.py +7 -5
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +8 -5
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_line.py +26 -11
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_mad_writer.py +2 -1
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_magnet.py +1 -1
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_native_madloader.py +5 -5
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_radiation_equilibrium_emittances_thick.py +2 -2
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_slice_elements.py +3 -3
- xtrack-0.85.0/tests/test_solenoid_bz_map_vs_boris.py +272 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_spin.py +63 -19
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_thick_lhc.py +1 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_trajectory_correcton.py +49 -0
- xtrack-0.85.0/xtrack/_version.py +1 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/__init__.py +5 -2
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements.py +240 -5
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/bend.h +2 -0
- xtrack-0.84.7/xtrack/beam_elements/elements_src/solenoid.h → xtrack-0.85.0/xtrack/beam_elements/elements_src/legacy_solenoid.h +4 -4
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/magnet.h +2 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/magnet_edge.h +6 -4
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/multipole.h +2 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/octupole.h +2 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/quadrupole.h +2 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/rbend.h +2 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/sextupole.h +2 -0
- xtrack-0.85.0/xtrack/beam_elements/elements_src/slnd.h +68 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thick_slice_bend.h +2 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +2 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +2 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thick_slice_rbend.h +2 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +2 -0
- xtrack-0.85.0/xtrack/beam_elements/elements_src/thick_slice_uniform_solenoid.h +83 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thin_slice_bend.h +2 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +2 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +2 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thin_slice_rbend.h +2 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +2 -0
- xtrack-0.85.0/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_entry.h +51 -0
- xtrack-0.85.0/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_exit.h +51 -0
- xtrack-0.84.7/xtrack/beam_elements/elements_src/track_solenoid.h → xtrack-0.85.0/xtrack/beam_elements/elements_src/track_legacy_solenoid.h +2 -1
- xtrack-0.84.7/xtrack/beam_elements/elements_src/track_magnet_radiation.h → xtrack-0.85.0/xtrack/beam_elements/elements_src/track_legacy_solenoid_radiation.h +3 -3
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_magnet.h +122 -31
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_magnet_drift.h +75 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_magnet_edge.h +25 -7
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_magnet_kick.h +130 -9
- xtrack-0.85.0/xtrack/beam_elements/elements_src/track_magnet_radiation.h +336 -0
- xtrack-0.85.0/xtrack/beam_elements/elements_src/variable_solenoid.h +102 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/slice_elements.py +68 -1
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/slice_elements_thick.py +33 -1
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/environment.py +8 -3
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/line.py +4 -15
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/mad_loader.py +1 -2
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/mad_parser/loader.py +1 -1
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/mad_writer.py +1 -2
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/madng_interface.py +28 -23
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/trajectory_correction.py +5 -5
- {xtrack-0.84.7 → xtrack-0.85.0/xtrack.egg-info}/PKG-INFO +1 -1
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack.egg-info/SOURCES.txt +10 -4
- xtrack-0.84.7/xtrack/_version.py +0 -1
- xtrack-0.84.7/xtrack/beam_elements/elements_src/thick_slice_solenoid.h +0 -39
- {xtrack-0.84.7 → xtrack-0.85.0}/LICENSE +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/MANIFEST.in +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/README.md +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/__init__.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/base_classes.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/be_beamfields/BB6D.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/be_beamfields/__init__.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/be_beamfields/beambeam.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/be_beamfields/boost.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/be_beamfields/qgauss.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/be_beamfields/slicing.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/be_beamfields/spacecharge.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/elements.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/line.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/mathlibs.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/particles.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/ducktrack/temp_pyparticles.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/pyproject.toml +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/setup.cfg +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/setup.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_acceleration.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_amplitude_detuning.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_aperture_table.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_apertures.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_attr_replicas_and_slices.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_bucket_with_ref_energy_change.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_cavity_absolute_time.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_chromatic_functions_vs_madx.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_coasting.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_collective_tracker.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_collimation.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_electron_cooler.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_element_characterization_functions.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_element_internal_record.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_elements.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_environment.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_footprint.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_freeze_longitudinal.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_full_rings.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_h6_sps_beamline.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_hvkick.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_ions.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_legacy_multiline_to_env.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_lhc_env.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_lhc_match_phase_15.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_lumi.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_madloader.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_madnginterface.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_match_and_track_from_element.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_match_coupling_knob.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_match_nested.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_match_optics_and_ip_knob.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_match_orbit_bump.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_match_tune_chroma_cminus.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_monitor.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_multi_bunch_gauss.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_multiline.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_multisetter.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_multispecies.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_optimize_for_tracking.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_particles.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_particles_basics.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_particles_pdg.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_periodic_symmetric_twiss_and_match.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_pipeline.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_prebuild_kernels.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_ps_against_ptc.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_ps_multiturn_twiss.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_psb_chicane.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_pyht_interface.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_radial_steering.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_radiation.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_radiation_equilibrium_emittances.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_radiation_integrals.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_random_gen.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_random_gen_exp.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_random_gen_gauss.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_random_gen_ruth.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_rbend_rbarc.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_rf_track.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_rotation_signs.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_second_order_taylor_map.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_seeds.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_slice_and_insert_with_replicas.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_slicing.py +0 -0
- /xtrack-0.84.7/tests/test_solenoid_bz_map_vs_boris.py → /xtrack-0.85.0/tests/test_solenoid_bz_map_vs_boris_legacy.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_spacecharge_in_ring.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_sps_thick.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_survey.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_tapering.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_tilt_shifts.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_tracker.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_twiss.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_twiss_vs_madx_psb.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_vs_madx.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/tests/test_xmask_orbit_correction.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/__init__.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/_temp/__init__.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/_temp/lhc_match/__init__.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/_temp/lhc_match/var_limits.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/aperture_meas.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/base_element.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/apertures.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/apertures_src/limitpolygon.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/beam_interaction.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/cavity.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/drift.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/drift_slice_rbend.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/electroncooler.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/elens.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/exciter.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/magnet_drift.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/magnet_kick.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/marker.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/multipoleedge.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/rfmultipole.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/srotation.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thick_slice_drift.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thin_slice_octupole_entry.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thin_slice_octupole_exit.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_entry.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_exit.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thin_slice_rbend_entry.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thin_slice_rbend_exit.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thin_slice_sextupole_entry.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/thin_slice_sextupole_exit.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_bend.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_cavity.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_drift.h +0 -0
- /xtrack-0.84.7/xtrack/beam_elements/elements_src/track_multipolar_components.h → /xtrack-0.85.0/xtrack/beam_elements/elements_src/track_legacy_solenoid_multipolar_components.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_mult_fringe.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_multipole.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_quadrupole.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_wedge.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/wedge.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/wire.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/exciter.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/magnets.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/beam_elements/rft_element.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/footprint.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/general.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/headers/atomicadd.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/headers/checks.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/headers/constants.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/headers/particle_states.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/headers/synrad_spectrum.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/headers/track.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/internal_record.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/json.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/linear_normal_form.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/loss_location_refinement/__init__.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/loss_location_refinement/loss_location_refinement.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/lumi.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/mad_parser/__init__.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/mad_parser/madx.lark +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/mad_parser/parse.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/match.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/monitors/__init__.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/monitors/beam_position_monitor.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/monitors/beam_position_monitor.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/monitors/beam_profile_monitor.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/monitors/beam_profile_monitor.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/monitors/beam_size_monitor.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/monitors/beam_size_monitor.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/monitors/last_turns_monitor.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/monitors/last_turns_monitor.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/monitors/particles_monitor.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/monitors/particles_monitor.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/multiline.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/multiline_legacy/__init__.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/multiline_legacy/multiline_legacy.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/multiline_legacy/shared_knobs.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/multisetter/__init__.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/multisetter/multisetter.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/particles/__init__.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/particles/constants.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/particles/masses.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/particles/particles.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/particles/pdg.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/particles/rng_src/base_rng.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/particles/rng_src/particles_rng.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/pipeline/__init__.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/pipeline/core.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/pipeline/manager.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/pipeline/multitracker.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/progress_indicator.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/random/__init__.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/random/random_generators.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/random/random_src/exponential.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/random/random_src/normal.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/random/random_src/rutherford.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/random/random_src/uniform.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/random/random_src/uniform_accurate.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/slicing.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/survey.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/svgutils/__init__.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/svgutils/parser.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/svgutils/path.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/svgutils/svgutils.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/synctime.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/tapering.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/targets.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/tracker.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/tracker_data.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/tracker_src/tracker.h +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/twiss.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack/twissplot.py +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack.egg-info/dependency_links.txt +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack.egg-info/requires.txt +0 -0
- {xtrack-0.84.7 → xtrack-0.85.0}/xtrack.egg-info/top_level.txt +0 -0
@@ -13,6 +13,8 @@ checks = [
|
|
13
13
|
(xt.SRotation, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=None , _inherit_strengths=None)),
|
14
14
|
(xt.YRotation, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=None , _inherit_strengths=None)),
|
15
15
|
(xt.Solenoid, dict(isthick=True , allow_rot_and_shift=True , rot_and_shift_from_parent=None , _inherit_strengths=None)),
|
16
|
+
(xt.UniformSolenoid, dict(isthick=True , allow_rot_and_shift=True , rot_and_shift_from_parent=None , _inherit_strengths=None)),
|
17
|
+
(xt.VariableSolenoid, dict(isthick=True , allow_rot_and_shift=True , rot_and_shift_from_parent=None , _inherit_strengths=None)),
|
16
18
|
(xt.RFMultipole, dict(isthick=False, allow_rot_and_shift=True , rot_and_shift_from_parent=None , _inherit_strengths=None)),
|
17
19
|
(xt.DipoleEdge, dict(isthick=False, allow_rot_and_shift=True , rot_and_shift_from_parent=None , _inherit_strengths=None)),
|
18
20
|
(xt.SimpleThinBend, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=None , _inherit_strengths=None)),
|
@@ -31,6 +33,7 @@ checks = [
|
|
31
33
|
(xt.DriftSliceSextupole, dict(isthick=True, allow_rot_and_shift=False, rot_and_shift_from_parent=False, _inherit_strengths=False)),
|
32
34
|
(xt.ThickSliceBend, dict(isthick=True, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
|
33
35
|
(xt.ThickSliceOctupole, dict(isthick=True, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
|
36
|
+
(xt.ThickSliceUniformSolenoid,dict(isthick=True, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
|
34
37
|
(xt.ThickSliceQuadrupole, dict(isthick=True, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
|
35
38
|
(xt.ThickSliceSextupole, dict(isthick=True, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
|
36
39
|
(xt.ThinSliceBend, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
|
@@ -39,6 +42,8 @@ checks = [
|
|
39
42
|
(xt.ThinSliceOctupole, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
|
40
43
|
(xt.ThinSliceQuadrupole, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
|
41
44
|
(xt.ThinSliceSextupole, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
|
45
|
+
(xt.ThinSliceUniformSolenoidEntry, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=False)),
|
46
|
+
(xt.ThinSliceUniformSolenoidExit, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=False)),
|
42
47
|
]
|
43
48
|
|
44
49
|
def test_elements_classflags():
|
@@ -1318,7 +1318,7 @@ def test_solenoid_against_madx(test_context, ks, ksi, length):
|
|
1318
1318
|
|
1319
1319
|
@for_all_test_contexts
|
1320
1320
|
def test_solenoid_thick_drift_like(test_context):
|
1321
|
-
solenoid = xt.
|
1321
|
+
solenoid = xt.UniformSolenoid(ks=1.001e-9, length=1, _context=test_context)
|
1322
1322
|
l_drift = xt.Line(elements=[xt.Drift(length=1)])
|
1323
1323
|
l_drift.config.XTRACK_USE_EXACT_DRIFTS = True
|
1324
1324
|
l_drift.build_tracker(_context=test_context)
|
@@ -1353,7 +1353,7 @@ def test_solenoid_thick_drift_like(test_context):
|
|
1353
1353
|
],
|
1354
1354
|
)
|
1355
1355
|
def test_solenoid_thick_analytic(test_context, length, expected):
|
1356
|
-
solenoid = xt.
|
1356
|
+
solenoid = xt.UniformSolenoid(
|
1357
1357
|
ks=1,
|
1358
1358
|
length=length,
|
1359
1359
|
_context=test_context,
|
@@ -1392,8 +1392,9 @@ def test_solenoid_with_mult_kicks(test_context, backtrack):
|
|
1392
1392
|
knl = np.array([0.1, 0.4, 0.5])
|
1393
1393
|
ksl = np.array([0.2, 0.3, 0.6])
|
1394
1394
|
|
1395
|
-
solenoid_with_kicks = xt.
|
1395
|
+
solenoid_with_kicks = xt.UniformSolenoid(
|
1396
1396
|
length=length,
|
1397
|
+
integrator='uniform',
|
1397
1398
|
ks=ks,
|
1398
1399
|
num_multipole_kicks=num_kicks,
|
1399
1400
|
knl=knl,
|
@@ -1402,11 +1403,11 @@ def test_solenoid_with_mult_kicks(test_context, backtrack):
|
|
1402
1403
|
|
1403
1404
|
line_ref = xt.Line(
|
1404
1405
|
elements=[
|
1405
|
-
xt.
|
1406
|
+
xt.UniformSolenoid(length=length / (num_kicks)/2, ks=ks),
|
1406
1407
|
xt.Multipole(knl=knl / num_kicks, ksl=ksl / num_kicks),
|
1407
|
-
xt.
|
1408
|
+
xt.UniformSolenoid(length=length / (num_kicks), ks=ks),
|
1408
1409
|
xt.Multipole(knl=knl / num_kicks, ksl=ksl / num_kicks),
|
1409
|
-
xt.
|
1410
|
+
xt.UniformSolenoid(length=length / (num_kicks) /2, ks=ks),
|
1410
1411
|
],
|
1411
1412
|
element_names=[
|
1412
1413
|
'sol_0', 'kick_0', 'sol_1', 'kick_1', 'sol_2',
|
@@ -1457,7 +1458,7 @@ def test_solenoid_shifted_and_rotated_multipolar_kick(test_context):
|
|
1457
1458
|
mult_rot_y_rad = 0.2
|
1458
1459
|
mult_shift_x = 0.3
|
1459
1460
|
|
1460
|
-
solenoid = xt.Solenoid(
|
1461
|
+
solenoid = xt.Solenoid( # Need to use legacy one
|
1461
1462
|
ks=ks,
|
1462
1463
|
length=length,
|
1463
1464
|
knl=knl,
|
@@ -1467,7 +1468,7 @@ def test_solenoid_shifted_and_rotated_multipolar_kick(test_context):
|
|
1467
1468
|
mult_shift_x=mult_shift_x,
|
1468
1469
|
)
|
1469
1470
|
|
1470
|
-
solenoid_no_kick = xt.
|
1471
|
+
solenoid_no_kick = xt.UniformSolenoid(ks=0.9, length=0.25)
|
1471
1472
|
kick = xt.Multipole(knl=np.array(knl) / 3, ksl=np.array(ksl) / 3)
|
1472
1473
|
|
1473
1474
|
line_test = xt.Line(elements=[solenoid])
|
@@ -1527,11 +1528,11 @@ def test_solenoid_multipole_shifts(shift_x, shift_y, test_element_name):
|
|
1527
1528
|
quad = xt.Quadrupole(length=1, k1=K1)
|
1528
1529
|
sext = xt.Sextupole(length=1, k2=K2)
|
1529
1530
|
|
1530
|
-
bend_sol = xt.Solenoid(length=1 / N_SLICES, ks=KS,
|
1531
|
+
bend_sol = xt.Solenoid(length=1 / N_SLICES, ks=KS, # need legacy
|
1531
1532
|
knl=[K0 * (1 / N_SLICES), 0, 0], num_multipole_kicks=1)
|
1532
|
-
quad_sol = xt.Solenoid(length=1 / N_SLICES, ks=KS,
|
1533
|
+
quad_sol = xt.Solenoid(length=1 / N_SLICES, ks=KS, # need legacy
|
1533
1534
|
knl=[0, K1 * (1 / N_SLICES), 0], num_multipole_kicks=1)
|
1534
|
-
sext_sol = xt.Solenoid(length=1 / N_SLICES, ks=KS,
|
1535
|
+
sext_sol = xt.Solenoid(length=1 / N_SLICES, ks=KS, # need legacy
|
1535
1536
|
knl=[0, 0, K2 * (1 / N_SLICES)], num_multipole_kicks=1)
|
1536
1537
|
|
1537
1538
|
################################################################################
|
@@ -1588,8 +1589,8 @@ def test_solenoid_multipole_shifts(shift_x, shift_y, test_element_name):
|
|
1588
1589
|
########################################
|
1589
1590
|
# Assertions
|
1590
1591
|
########################################
|
1591
|
-
|
1592
|
-
|
1592
|
+
xo.assert_allclose(tw.x[-1], tw_sol.x[-1], rtol=2E-6)
|
1593
|
+
xo.assert_allclose(tw.y[-1], tw_sol.y[-1], rtol=2E-6)
|
1593
1594
|
|
1594
1595
|
|
1595
1596
|
def test_solenoid_multipole_rotations():
|
@@ -1613,7 +1614,7 @@ def test_solenoid_multipole_rotations():
|
|
1613
1614
|
bl_components_out = [env.new('bl_drift1', xt.Drift, length=1)]
|
1614
1615
|
|
1615
1616
|
bl_components_sol = [
|
1616
|
-
env.new(f'bl_sol.{i}', xt.
|
1617
|
+
env.new(f'bl_sol.{i}', xt.UniformSolenoid,
|
1617
1618
|
length=(L_SOL / N_SLICES),
|
1618
1619
|
ks=0,
|
1619
1620
|
knl=[K0 * (L_SOL / N_SLICES), 0, 0],
|
@@ -1637,7 +1638,7 @@ def test_solenoid_multipole_rotations():
|
|
1637
1638
|
env.new('hrot_drift1', xt.Drift, length=1)]
|
1638
1639
|
|
1639
1640
|
hrot_components_sol = [
|
1640
|
-
env.new(f'hrot_sol.{i}', xt.Solenoid,
|
1641
|
+
env.new(f'hrot_sol.{i}', xt.Solenoid, # need legacy
|
1641
1642
|
length=(L_SOL / N_SLICES) * np.cos(XING_RAD),
|
1642
1643
|
ks=0,
|
1643
1644
|
knl=[K0 * (L_SOL / N_SLICES), 0, 0],
|
@@ -1663,7 +1664,7 @@ def test_solenoid_multipole_rotations():
|
|
1663
1664
|
env.new('vrot_drift1', xt.Drift, length=1)]
|
1664
1665
|
|
1665
1666
|
vrot_components_sol = [
|
1666
|
-
env.new(f'vrot_sol.{i}', xt.Solenoid,
|
1667
|
+
env.new(f'vrot_sol.{i}', xt.Solenoid, # need legacy
|
1667
1668
|
length=(L_SOL / N_SLICES) * np.cos(XING_RAD),
|
1668
1669
|
ks=0,
|
1669
1670
|
knl=[K0 * (L_SOL / N_SLICES), 0, 0],
|
@@ -1753,7 +1754,7 @@ def test_drift_like_solenoid_with_kicks_radiation(radiation_mode, config):
|
|
1753
1754
|
])
|
1754
1755
|
|
1755
1756
|
line_ref = xt.Line(elements=[
|
1756
|
-
xt.
|
1757
|
+
xt.UniformSolenoid(ks=0, length=1, knl=knl, ksl=ksl, num_multipole_kicks=1)
|
1757
1758
|
])
|
1758
1759
|
|
1759
1760
|
coords = np.linspace(-0.05, 0.05, 10)
|
@@ -1809,9 +1810,9 @@ def test_solenoid_with_kicks_radiation(radiation_mode, config):
|
|
1809
1810
|
knl = [0.1, 0.4, 0.5]
|
1810
1811
|
ksl = [0.2, 0.3, 0.6]
|
1811
1812
|
|
1812
|
-
sol_ref = xt.
|
1813
|
-
sol_1 = xt.
|
1814
|
-
sol_3 = xt.
|
1813
|
+
sol_ref = xt.UniformSolenoid(ks=ks, length=l)
|
1814
|
+
sol_1 = xt.UniformSolenoid(ks=ks, length=l, knl=knl, ksl=ksl, num_multipole_kicks=1)
|
1815
|
+
sol_3 = xt.UniformSolenoid(ks=ks, length=l, knl=knl, ksl=ksl, num_multipole_kicks=3)
|
1815
1816
|
|
1816
1817
|
line_ref = xt.Line(elements=[sol_ref])
|
1817
1818
|
line_1 = xt.Line(elements=[sol_1])
|
@@ -1852,7 +1853,7 @@ def test_solenoid_with_kicks_radiation(radiation_mode, config):
|
|
1852
1853
|
d_delta_3 = p_3.delta - p0.delta
|
1853
1854
|
|
1854
1855
|
xo.assert_allclose(
|
1855
|
-
d_delta_1 - d_delta_ref, d_delta_3 - d_delta_ref, rtol=0.01, atol=
|
1856
|
+
d_delta_1 - d_delta_ref, d_delta_3 - d_delta_ref, rtol=0.01, atol=2e-15
|
1856
1857
|
)
|
1857
1858
|
|
1858
1859
|
|
@@ -2197,3 +2198,167 @@ def test_configure_model():
|
|
2197
2198
|
assert line['o1'].edge_exit_active == False
|
2198
2199
|
assert line['o1'].integrator == 'uniform'
|
2199
2200
|
assert line['o1'].num_multipole_kicks == 7
|
2201
|
+
|
2202
|
+
@for_all_test_contexts
|
2203
|
+
@pytest.mark.parametrize('reference', ['legacy', 'variable'])
|
2204
|
+
def test_uniform_solenoid_with_slices(test_context, reference):
|
2205
|
+
|
2206
|
+
length = 3.
|
2207
|
+
ks = 2.
|
2208
|
+
|
2209
|
+
sol = xt.UniformSolenoid(length=length, ks=ks, _context=test_context)
|
2210
|
+
|
2211
|
+
if reference == 'legacy':
|
2212
|
+
# Check against legacy solenoid
|
2213
|
+
ref_sol = xt.Solenoid(length=length, ks=ks) # Old solenoid
|
2214
|
+
elif reference == 'variable':
|
2215
|
+
# Check against variable solenoid
|
2216
|
+
ref_sol = xt.VariableSolenoid(length=length, ks_profile=[ks, ks])
|
2217
|
+
else:
|
2218
|
+
raise ValueError("Reference must be 'legacy' or 'variable'")
|
2219
|
+
|
2220
|
+
p0 = xt.Particles(p0c=1e9, x=1e-3, y=2e-3)
|
2221
|
+
|
2222
|
+
p = p0.copy(_context=test_context)
|
2223
|
+
p_ref = p0.copy()
|
2224
|
+
|
2225
|
+
sol.track(p)
|
2226
|
+
ref_sol.track(p_ref)
|
2227
|
+
|
2228
|
+
xo.assert_allclose(p.x, p_ref.x, rtol=0, atol=1e-10)
|
2229
|
+
xo.assert_allclose(p.y, p_ref.y, rtol=0, atol=1e-10)
|
2230
|
+
xo.assert_allclose(p.px, p_ref.px, rtol=0, atol=1e-10)
|
2231
|
+
xo.assert_allclose(p.py, p_ref.py, rtol=0, atol=1e-10)
|
2232
|
+
xo.assert_allclose(p.delta, p_ref.delta, rtol=0, atol=1e-10)
|
2233
|
+
xo.assert_allclose(p.ax, 0., rtol=0, atol=1e-10)
|
2234
|
+
xo.assert_allclose(p.ay, 0., rtol=0, atol=1e-10)
|
2235
|
+
xo.assert_allclose(p.kin_px, p_ref.px, rtol=0, atol=1e-10)
|
2236
|
+
xo.assert_allclose(p.kin_py, p_ref.py, rtol=0, atol=1e-10)
|
2237
|
+
|
2238
|
+
sol.edge_exit_active = False
|
2239
|
+
p = p0.copy(_context=test_context)
|
2240
|
+
sol.track(p)
|
2241
|
+
|
2242
|
+
xo.assert_allclose(p.x, p_ref.x, rtol=0, atol=1e-10)
|
2243
|
+
xo.assert_allclose(p.y, p_ref.y, rtol=0, atol=1e-10)
|
2244
|
+
xo.assert_allclose(p.px, p_ref.px, rtol=0, atol=1e-10)
|
2245
|
+
xo.assert_allclose(p.py, p_ref.py, rtol=0, atol=1e-10)
|
2246
|
+
xo.assert_allclose(p.delta, p_ref.delta, rtol=0, atol=1e-10)
|
2247
|
+
xo.assert_allclose(p.ax, p_ref.ax, rtol=0, atol=1e-10)
|
2248
|
+
xo.assert_allclose(p.ay, p_ref.ay, rtol=0, atol=1e-10)
|
2249
|
+
xo.assert_allclose(p.kin_px, p_ref.kin_px, rtol=0, atol=1e-10)
|
2250
|
+
xo.assert_allclose(p.kin_py, p_ref.kin_py, rtol=0, atol=1e-10)
|
2251
|
+
|
2252
|
+
p0_for_backtrack = p.copy()
|
2253
|
+
p_for_backtrack = p0_for_backtrack.copy(_context=test_context)
|
2254
|
+
lsol = xt.Line([sol])
|
2255
|
+
lsol.build_tracker(_context=test_context)
|
2256
|
+
|
2257
|
+
sol.edge_entry_active = True
|
2258
|
+
sol.edge_exit_active = True
|
2259
|
+
|
2260
|
+
lsol.track(p_for_backtrack, backtrack=True)
|
2261
|
+
xo.assert_allclose(p_for_backtrack.x, p0.x, rtol=0, atol=1e-10)
|
2262
|
+
xo.assert_allclose(p_for_backtrack.y, p0.y, rtol=0, atol=1e-10)
|
2263
|
+
xo.assert_allclose(p_for_backtrack.px, p0.px, rtol=0, atol=1e-10)
|
2264
|
+
xo.assert_allclose(p_for_backtrack.py, p0.py, rtol=0, atol=1e-10)
|
2265
|
+
xo.assert_allclose(p_for_backtrack.delta, p0.delta, rtol=0, atol=1e-10)
|
2266
|
+
xo.assert_allclose(p_for_backtrack.ax, 0., rtol=0, atol=1e-10)
|
2267
|
+
xo.assert_allclose(p_for_backtrack.ay, 0., rtol=0, atol=1e-10)
|
2268
|
+
xo.assert_allclose(p_for_backtrack.kin_px, p0.px, rtol=0, atol=1e-10)
|
2269
|
+
xo.assert_allclose(p_for_backtrack.kin_py, p0.py, rtol=0, atol=1e-10)
|
2270
|
+
|
2271
|
+
sol.edge_entry_active = False
|
2272
|
+
p_for_backtrack = p0_for_backtrack.copy(_context=test_context)
|
2273
|
+
lsol.track(p_for_backtrack, backtrack=True)
|
2274
|
+
xo.assert_allclose(p_for_backtrack.x, p0.x, rtol=0, atol=1e-10)
|
2275
|
+
xo.assert_allclose(p_for_backtrack.y, p0.y, rtol=0, atol=1e-10)
|
2276
|
+
xo.assert_allclose(p_for_backtrack.px, p0.px, rtol=0, atol=1e-10)
|
2277
|
+
xo.assert_allclose(p_for_backtrack.py, p0.py, rtol=0, atol=1e-10)
|
2278
|
+
xo.assert_allclose(p_for_backtrack.delta, p0.delta, rtol=0, atol=1e-10)
|
2279
|
+
xo.assert_allclose(p_for_backtrack.ax, -ks /2 *p0.y, rtol=0, atol=1e-10)
|
2280
|
+
xo.assert_allclose(p_for_backtrack.ay, ks /2 *p0.x, rtol=0, atol=1e-10)
|
2281
|
+
xo.assert_allclose(p_for_backtrack.kin_px, p0.px + ks /2 *p0.y, rtol=0, atol=1e-10)
|
2282
|
+
xo.assert_allclose(p_for_backtrack.kin_py, p0.py - ks /2 *p0.x, rtol=0, atol=1e-10)
|
2283
|
+
|
2284
|
+
|
2285
|
+
sol.edge_entry_active = True
|
2286
|
+
sol.edge_exit_active = True
|
2287
|
+
|
2288
|
+
lsol_sliced = lsol.copy(shallow=True)
|
2289
|
+
lsol_sliced.cut_at_s([length / 3, 2 * length / 3])
|
2290
|
+
lsol_sliced.build_tracker(_context=test_context)
|
2291
|
+
tt_sliced = lsol_sliced.get_table(attr=True)
|
2292
|
+
|
2293
|
+
assert np.all(tt_sliced.name == np.array(
|
2294
|
+
['e0_entry', 'e0..entry_map', 'e0..0', 'e0..1', 'e0..2',
|
2295
|
+
'e0..exit_map', 'e0_exit', '_end_point']))
|
2296
|
+
|
2297
|
+
xo.assert_allclose(tt_sliced.s, np.array([0., 0., 0., 1., 2., 3., 3., 3.]),
|
2298
|
+
rtol=0, atol=1e-10)
|
2299
|
+
|
2300
|
+
assert np.all(tt_sliced.element_type == np.array(
|
2301
|
+
['Marker', 'ThinSliceUniformSolenoidEntry',
|
2302
|
+
'ThickSliceUniformSolenoid', 'ThickSliceUniformSolenoid',
|
2303
|
+
'ThickSliceUniformSolenoid', 'ThinSliceUniformSolenoidExit',
|
2304
|
+
'Marker', '']))
|
2305
|
+
|
2306
|
+
lsol_sliced.particle_ref = xt.Particles(p0c=100e9)
|
2307
|
+
tw = lsol_sliced.twiss(x=p0.x, px=p0.px, y=p0.y, py=p0.py, betx=1, bety=1)
|
2308
|
+
p_ref = p0.copy()
|
2309
|
+
ref_sol.track(p_ref)
|
2310
|
+
|
2311
|
+
xo.assert_allclose(tw.x[-1], p_ref.x, rtol=0, atol=1e-10)
|
2312
|
+
xo.assert_allclose(tw.px[-1], p_ref.px, rtol=0, atol=1e-10)
|
2313
|
+
xo.assert_allclose(tw.y[-1], p_ref.y, rtol=0, atol=1e-10)
|
2314
|
+
xo.assert_allclose(tw.py[-1], p_ref.py, rtol=0, atol=1e-10)
|
2315
|
+
xo.assert_allclose(tw.delta[-1], p_ref.delta, rtol=0, atol=1e-10)
|
2316
|
+
|
2317
|
+
tw['ax'] = tw.px - tw.kin_px
|
2318
|
+
tw['ay'] = tw.py - tw.kin_py
|
2319
|
+
|
2320
|
+
# tw.cols['ax ay'] should look as follows:
|
2321
|
+
# TwissTable: 8 rows, 3 cols
|
2322
|
+
# name ax ay
|
2323
|
+
# e0_entry 0 0
|
2324
|
+
# e0..entry_map 0 0
|
2325
|
+
# e0..0 -0.002 0.001
|
2326
|
+
# e0..1 -0.000129201 0.00120122
|
2327
|
+
# e0..2 -0.000724768 -0.000583627
|
2328
|
+
# e0..exit_map -0.00209988 0.000700686
|
2329
|
+
# e0_exit 0 0
|
2330
|
+
# _end_point 0 0
|
2331
|
+
|
2332
|
+
tw_before = tw.rows[:'e0..entry_map']
|
2333
|
+
tw_inside = tw.rows['e0..0':'e0..exit_map']
|
2334
|
+
tw_after = tw.rows['e0_exit':]
|
2335
|
+
|
2336
|
+
xo.assert_allclose(tw_before.ax, 0, rtol=0, atol=1e-20)
|
2337
|
+
xo.assert_allclose(tw_before.ay, 0, rtol=0, atol=1e-20)
|
2338
|
+
xo.assert_allclose(tw_inside.ax, -0.5 * ks * tw_inside.y, rtol=0, atol=1e-15)
|
2339
|
+
xo.assert_allclose(tw_inside.ay, 0.5 * ks * tw_inside.x, rtol=0, atol=1e-15)
|
2340
|
+
xo.assert_allclose(tw_after.ax, 0, rtol=0, atol=1e-20)
|
2341
|
+
xo.assert_allclose(tw_after.ay, 0, rtol=0, atol=1e-20)
|
2342
|
+
|
2343
|
+
# Twiss backwards
|
2344
|
+
tw_back = lsol_sliced.twiss(init=tw.get_twiss_init('e0_exit'))
|
2345
|
+
tw_back['ax'] = tw_back.px - tw_back.kin_px
|
2346
|
+
tw_back['ay'] = tw_back.py - tw_back.kin_py
|
2347
|
+
|
2348
|
+
xo.assert_allclose(tw_back.x, tw.x, rtol=0, atol=1e-10)
|
2349
|
+
xo.assert_allclose(tw_back.px, tw.px, rtol=0, atol=1e-10)
|
2350
|
+
xo.assert_allclose(tw_back.y, tw.y, rtol=0, atol=1e-10)
|
2351
|
+
xo.assert_allclose(tw_back.py, tw.py, rtol=0, atol=1e-10)
|
2352
|
+
xo.assert_allclose(tw_back.delta, tw.delta, rtol=0, atol=1e-10)
|
2353
|
+
xo.assert_allclose(tw_back.ax, tw.ax, rtol=0, atol=1e-10)
|
2354
|
+
xo.assert_allclose(tw_back.ay, tw.ay, rtol=0, atol=1e-10)
|
2355
|
+
|
2356
|
+
sol.edge_entry_active = False
|
2357
|
+
tw_back = lsol_sliced.twiss(init=tw.get_twiss_init('e0_exit'))
|
2358
|
+
tw_back['ax'] = tw_back.px - tw_back.kin_px
|
2359
|
+
tw_back['ay'] = tw_back.py - tw_back.kin_py
|
2360
|
+
|
2361
|
+
xo.assert_allclose(tw_back.rows[:'e0..0'].ax, tw['ax', 'e0..0'],
|
2362
|
+
rtol=0, atol=1e-10)
|
2363
|
+
xo.assert_allclose(tw_back.rows[:'e0..0'].ay, tw['ay', 'e0..0'],
|
2364
|
+
rtol=0, atol=1e-10)
|
@@ -60,13 +60,14 @@ def test_fcc_ee_solenoid_correction():
|
|
60
60
|
|
61
61
|
P0_J = line.particle_ref.p0c[0] * qe / clight
|
62
62
|
brho = P0_J / qe / line.particle_ref.q0
|
63
|
-
|
63
|
+
ks_entry = bz_sol_slices[:-1] / brho
|
64
|
+
ks_exit = bz_sol_slices[1:] / brho
|
64
65
|
l_sol_slices = np.diff(s_sol_slices)
|
65
66
|
s_sol_slices_entry = s_sol_slices[:-1]
|
66
67
|
|
67
68
|
sol_slices = []
|
68
69
|
for ii in range(len(s_sol_slices_entry)):
|
69
|
-
sol_slices.append(xt.
|
70
|
+
sol_slices.append(xt.VariableSolenoid(length=l_sol_slices[ii], ks_profile=[0, 0])) # Off for now
|
70
71
|
|
71
72
|
s_ip = tt['s', ip_sol]
|
72
73
|
|
@@ -86,8 +87,8 @@ def test_fcc_ee_solenoid_correction():
|
|
86
87
|
line.element_dict['sol_start_shift_'+ip_sol] = sol_start_shift
|
87
88
|
line.element_dict['sol_end_shift_'+ip_sol] = sol_end_shift
|
88
89
|
|
89
|
-
line.element_dict['sol_entry_'+ip_sol] = xt.
|
90
|
-
line.element_dict['sol_exit_'+ip_sol] = xt.
|
90
|
+
line.element_dict['sol_entry_'+ip_sol] = xt.Marker()
|
91
|
+
line.element_dict['sol_exit_'+ip_sol] = xt.Marker()
|
91
92
|
|
92
93
|
sol_slice_names = []
|
93
94
|
sol_slice_names.append('sol_entry_'+ip_sol)
|
@@ -123,7 +124,8 @@ def test_fcc_ee_solenoid_correction():
|
|
123
124
|
line.vars['on_sol_'+ip_sol] = 0
|
124
125
|
for ii in range(len(s_sol_slices_entry)):
|
125
126
|
nn = f'sol_slice_{ii}_{ip_sol}'
|
126
|
-
line.element_refs[nn].
|
127
|
+
line.element_refs[nn].ks_profile[0] = ks_entry[ii] * line.vars['on_sol_'+ip_sol]
|
128
|
+
line.element_refs[nn].ks_profile[1] = ks_exit[ii] * line.vars['on_sol_'+ip_sol]
|
127
129
|
|
128
130
|
tt = line.get_table()
|
129
131
|
|
@@ -60,13 +60,14 @@ def test_fcc_ee_solenoid_correction_new_optimizer_api():
|
|
60
60
|
|
61
61
|
P0_J = line.particle_ref.p0c[0] * qe / clight
|
62
62
|
brho = P0_J / qe / line.particle_ref.q0
|
63
|
-
|
63
|
+
ks_entry = bz_sol_slices[:-1] / brho
|
64
|
+
ks_exit = bz_sol_slices[1:] / brho
|
64
65
|
l_sol_slices = np.diff(s_sol_slices)
|
65
66
|
s_sol_slices_entry = s_sol_slices[:-1]
|
66
67
|
|
67
68
|
sol_slices = []
|
68
69
|
for ii in range(len(s_sol_slices_entry)):
|
69
|
-
sol_slices.append(xt.
|
70
|
+
sol_slices.append(xt.VariableSolenoid(length=l_sol_slices[ii], ks_profile=[0, 0])) # Off for now
|
70
71
|
|
71
72
|
s_ip = tt['s', ip_sol]
|
72
73
|
|
@@ -86,8 +87,8 @@ def test_fcc_ee_solenoid_correction_new_optimizer_api():
|
|
86
87
|
line.element_dict['sol_start_shift_'+ip_sol] = sol_start_shift
|
87
88
|
line.element_dict['sol_end_shift_'+ip_sol] = sol_end_shift
|
88
89
|
|
89
|
-
line.element_dict['sol_entry_'+ip_sol] = xt.
|
90
|
-
line.element_dict['sol_exit_'+ip_sol] = xt.
|
90
|
+
line.element_dict['sol_entry_'+ip_sol] = xt.Marker()
|
91
|
+
line.element_dict['sol_exit_'+ip_sol] = xt.Marker()
|
91
92
|
|
92
93
|
sol_slice_names = []
|
93
94
|
sol_slice_names.append('sol_entry_'+ip_sol)
|
@@ -123,7 +124,9 @@ def test_fcc_ee_solenoid_correction_new_optimizer_api():
|
|
123
124
|
line.vars['on_sol_'+ip_sol] = 0
|
124
125
|
for ii in range(len(s_sol_slices_entry)):
|
125
126
|
nn = f'sol_slice_{ii}_{ip_sol}'
|
126
|
-
line.element_refs[nn].
|
127
|
+
line.element_refs[nn].ks_profile[0] = ks_entry[ii] * line.vars['on_sol_'+ip_sol]
|
128
|
+
line.element_refs[nn].ks_profile[1] = ks_exit[ii] * line.vars['on_sol_'+ip_sol]
|
129
|
+
|
127
130
|
|
128
131
|
tt = line.get_table()
|
129
132
|
|
@@ -880,6 +880,7 @@ def test_insert_thin_elements_at_s_lhc(test_context):
|
|
880
880
|
Teapot = xt.Teapot
|
881
881
|
slicing_strategies = [
|
882
882
|
Strategy(slicing=Teapot(1)), # Default catch-all as in MAD-X
|
883
|
+
Strategy(slicing=None, element_type=xt.UniformSolenoid),
|
883
884
|
Strategy(slicing=Teapot(4), element_type=xt.Bend),
|
884
885
|
Strategy(slicing=Teapot(20), element_type=xt.Quadrupole),
|
885
886
|
Strategy(slicing=Teapot(2), name=r'^mb\..*'),
|
@@ -1143,8 +1144,8 @@ def test_line_table_unique_names():
|
|
1143
1144
|
|
1144
1145
|
def test_extend_knl_ksl():
|
1145
1146
|
|
1146
|
-
classes_to_check = ['Bend', 'Quadrupole', 'Sextupole', 'Octupole', '
|
1147
|
-
'Multipole']
|
1147
|
+
classes_to_check = ['Bend', 'Quadrupole', 'Sextupole', 'Octupole', 'UniformSolenoid',
|
1148
|
+
'VariableSolenoid', 'Multipole']
|
1148
1149
|
|
1149
1150
|
for cc in classes_to_check:
|
1150
1151
|
|
@@ -1188,7 +1189,9 @@ def test_extend_knl_ksl():
|
|
1188
1189
|
'a', 'b', 'c'], ksl=['d', 'e', 'f']),
|
1189
1190
|
env.new('o1', xt.Octupole, length=1, knl=[
|
1190
1191
|
'a', 'b', 'c'], ksl=['d', 'e', 'f']),
|
1191
|
-
env.new('
|
1192
|
+
env.new('u1', xt.UniformSolenoid, length=1, knl=[
|
1193
|
+
'a', 'b', 'c'], ksl=['d', 'e', 'f']),
|
1194
|
+
env.new('v1', xt.VariableSolenoid, length=1, knl=[
|
1192
1195
|
'a', 'b', 'c'], ksl=['d', 'e', 'f']),
|
1193
1196
|
env.new('m1', xt.Multipole, length=1, knl=[
|
1194
1197
|
'a', 'b', 'c'], ksl=['d', 'e', 'f']),
|
@@ -1210,7 +1213,7 @@ def test_extend_knl_ksl():
|
|
1210
1213
|
assert line['q1'].order == order
|
1211
1214
|
assert line['s1'].order == 5
|
1212
1215
|
assert line['o1'].order == 5
|
1213
|
-
assert line['
|
1216
|
+
assert line['u1'].order == 5
|
1214
1217
|
assert line['m1'].order == 2
|
1215
1218
|
|
1216
1219
|
xo.assert_allclose(line['b1'].inv_factorial_order,
|
@@ -1221,7 +1224,9 @@ def test_extend_knl_ksl():
|
|
1221
1224
|
1/math.factorial(5), rtol=0, atol=1e-15)
|
1222
1225
|
xo.assert_allclose(line['o1'].inv_factorial_order,
|
1223
1226
|
1/math.factorial(5), rtol=0, atol=1e-15)
|
1224
|
-
xo.assert_allclose(line['
|
1227
|
+
xo.assert_allclose(line['u1'].inv_factorial_order,
|
1228
|
+
1/math.factorial(5), rtol=0, atol=1e-15)
|
1229
|
+
xo.assert_allclose(line['v1'].inv_factorial_order,
|
1225
1230
|
1/math.factorial(5), rtol=0, atol=1e-15)
|
1226
1231
|
xo.assert_allclose(line['m1'].inv_factorial_order,
|
1227
1232
|
1/math.factorial(2), rtol=0, atol=1e-15)
|
@@ -1242,9 +1247,13 @@ def test_extend_knl_ksl():
|
|
1242
1247
|
0., 0., 0.], rtol=0, atol=1e-15)
|
1243
1248
|
xo.assert_allclose(line['o1'].ksl, [4., 5., 6.,
|
1244
1249
|
0., 0., 0.], rtol=0, atol=1e-15)
|
1245
|
-
xo.assert_allclose(line['
|
1250
|
+
xo.assert_allclose(line['u1'].knl, [3., 2., 1.,
|
1251
|
+
0., 0., 0.], rtol=0, atol=1e-15)
|
1252
|
+
xo.assert_allclose(line['u1'].ksl, [4., 5., 6.,
|
1246
1253
|
0., 0., 0.], rtol=0, atol=1e-15)
|
1247
|
-
xo.assert_allclose(line['
|
1254
|
+
xo.assert_allclose(line['v1'].knl, [3., 2., 1.,
|
1255
|
+
0., 0., 0.], rtol=0, atol=1e-15)
|
1256
|
+
xo.assert_allclose(line['v1'].ksl, [4., 5., 6.,
|
1248
1257
|
0., 0., 0.], rtol=0, atol=1e-15)
|
1249
1258
|
xo.assert_allclose(line['m1'].knl, [3., 2., 1.], rtol=0, atol=1e-15)
|
1250
1259
|
xo.assert_allclose(line['m1'].ksl, [4., 5., 6.], rtol=0, atol=1e-15)
|
@@ -1255,13 +1264,15 @@ def test_extend_knl_ksl():
|
|
1255
1264
|
assert line['q1'].order == 11
|
1256
1265
|
assert line['s1'].order == 11
|
1257
1266
|
assert line['o1'].order == 11
|
1258
|
-
assert line['
|
1267
|
+
assert line['u1'].order == 11
|
1268
|
+
assert line['v1'].order == 11
|
1259
1269
|
assert line['m1'].order == 11
|
1260
1270
|
assert line['b1'].inv_factorial_order == 1/math.factorial(11)
|
1261
1271
|
assert line['q1'].inv_factorial_order == 1/math.factorial(11)
|
1262
1272
|
assert line['s1'].inv_factorial_order == 1/math.factorial(11)
|
1263
1273
|
assert line['o1'].inv_factorial_order == 1/math.factorial(11)
|
1264
|
-
assert line['
|
1274
|
+
assert line['u1'].inv_factorial_order == 1/math.factorial(11)
|
1275
|
+
assert line['v1'].inv_factorial_order == 1/math.factorial(11)
|
1265
1276
|
assert line['m1'].inv_factorial_order == 1/math.factorial(11)
|
1266
1277
|
xo.assert_allclose(line['b1'].knl, [3., 2., 1., 0.,
|
1267
1278
|
0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)
|
@@ -1279,9 +1290,13 @@ def test_extend_knl_ksl():
|
|
1279
1290
|
0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)
|
1280
1291
|
xo.assert_allclose(line['o1'].ksl, [4., 5., 6., 0.,
|
1281
1292
|
0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)
|
1282
|
-
xo.assert_allclose(line['
|
1293
|
+
xo.assert_allclose(line['u1'].knl, [3., 2., 1., 0.,
|
1294
|
+
0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)
|
1295
|
+
xo.assert_allclose(line['v1'].ksl, [4., 5., 6., 0.,
|
1296
|
+
0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)
|
1297
|
+
xo.assert_allclose(line['v1'].knl, [3., 2., 1., 0.,
|
1283
1298
|
0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)
|
1284
|
-
xo.assert_allclose(line['
|
1299
|
+
xo.assert_allclose(line['u1'].ksl, [4., 5., 6., 0.,
|
1285
1300
|
0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)
|
1286
1301
|
xo.assert_allclose(line['m1'].knl, [3., 2., 1., 0.,
|
1287
1302
|
0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)
|
@@ -29,6 +29,7 @@ def test_mad_writer(case):
|
|
29
29
|
mad_seq = line.to_madx_sequence(sequence_name='myseq')
|
30
30
|
|
31
31
|
mad = Madx(stdout=True)
|
32
|
+
mad.options.rbarc = False
|
32
33
|
mad.input(mad_seq)
|
33
34
|
mad.beam(particle='proton', energy=7000e9)
|
34
35
|
mad.use('myseq')
|
@@ -54,7 +55,7 @@ def test_mad_writer(case):
|
|
54
55
|
|
55
56
|
assert np.all(tw2.rows['ip.*'].name == tw.rows['ip.*'].name)
|
56
57
|
|
57
|
-
xo.assert_allclose(tw2.rows['ip.*'].s, tw.rows['ip.*'].s, rtol=0, atol=2e-
|
58
|
+
xo.assert_allclose(tw2.rows['ip.*'].s, tw.rows['ip.*'].s, rtol=0, atol=2e-5)
|
58
59
|
xo.assert_allclose(tw2.rows['ip.*'].x, tw.rows['ip.*'].x, rtol=0, atol=1e-9)
|
59
60
|
xo.assert_allclose(tw2.rows['ip.*'].y, tw.rows['ip.*'].y, rtol=0, atol=1e-9)
|
60
61
|
xo.assert_allclose(tw2.rows['ip.*'].px, tw.rows['ip.*'].px, rtol=0, atol=1e-9)
|
@@ -73,7 +73,7 @@ def test_magnet_exact_drift(test_context):
|
|
73
73
|
assert magnet.model == 'drift-kick-drift-exact'
|
74
74
|
assert magnet.integrator == 'teapot'
|
75
75
|
|
76
|
-
exact_drift = xt.
|
76
|
+
exact_drift = xt.UniformSolenoid(length=2.0, _context=test_context) # Solenoid is exact drift when off
|
77
77
|
|
78
78
|
p0 = make_particles(test_context)
|
79
79
|
p_test = p0.copy()
|
@@ -19,7 +19,7 @@ test_data_folder = (Path(__file__).parent / '../test_data').absolute()
|
|
19
19
|
def test_simple_parser():
|
20
20
|
sequence = """
|
21
21
|
if (version>=50401){option,-rbarc;}; ! to be ignored
|
22
|
-
|
22
|
+
|
23
23
|
third = 1 / 3;
|
24
24
|
power = 3^4;
|
25
25
|
hello := third * twopi;
|
@@ -30,7 +30,7 @@ def test_simple_parser():
|
|
30
30
|
mb: sbend, l := mb.l, angle := hello;
|
31
31
|
qf: quadrupole, l := 1, k1 := 1;
|
32
32
|
qd: quadrupole, l := 1, k1 := -1;
|
33
|
-
|
33
|
+
|
34
34
|
line: sequence, l = 12;
|
35
35
|
ip1: marker, at = 0;
|
36
36
|
qf1: qf, at := 1 + offset, from = ip1, slot_id = 1;
|
@@ -41,7 +41,7 @@ def test_simple_parser():
|
|
41
41
|
mb1, k0 := hello, polarity = +1;
|
42
42
|
qf1, knl := {0, 0, 0, 0.01, 0};
|
43
43
|
qd1, knl := {0, 0, 0, -0.01, 0};
|
44
|
-
|
44
|
+
|
45
45
|
return; ! should also be ignored
|
46
46
|
"""
|
47
47
|
|
@@ -480,7 +480,7 @@ def test_solenoid(example_sequence):
|
|
480
480
|
# so: solenoid, l=2, ks=3; ! ignore ksi
|
481
481
|
so1 = env['so1/line']
|
482
482
|
xo.assert_allclose(positions['so1/line'], 31)
|
483
|
-
assert isinstance(so1, xt.
|
483
|
+
assert isinstance(so1, xt.UniformSolenoid)
|
484
484
|
assert so1.length == 2
|
485
485
|
assert so1.ks == 3
|
486
486
|
|
@@ -683,7 +683,7 @@ def test_reversed_solenoid(example_sequence):
|
|
683
683
|
# so: solenoid, l=2, ks=3; ! ignore ksi
|
684
684
|
so1 = env['so1/line_reversed']
|
685
685
|
xo.assert_allclose(positions_reversed['so1/line_reversed'], 36 - 31)
|
686
|
-
assert isinstance(so1, xt.
|
686
|
+
assert isinstance(so1, xt.UniformSolenoid)
|
687
687
|
assert so1.length == 2
|
688
688
|
assert so1.ks == -3
|
689
689
|
|
@@ -151,12 +151,12 @@ def test_eq_emitt(conf):
|
|
151
151
|
elif not tilt_machine_by_90_degrees and vertical_orbit_distortion and not wiggler_on:
|
152
152
|
xo.assert_allclose(ex, 7.0910e-10, atol=0, rtol=1e-4)
|
153
153
|
xo.assert_allclose(ey, 2.2195e-12, atol=0, rtol=7e-3)
|
154
|
-
xo.assert_allclose(ez, 3.5607e-6, atol=0, rtol=
|
154
|
+
xo.assert_allclose(ez, 3.5607e-6, atol=0, rtol=2e-4)
|
155
155
|
checked = True
|
156
156
|
elif tilt_machine_by_90_degrees and vertical_orbit_distortion and not wiggler_on:
|
157
157
|
xo.assert_allclose(ex, 2.2154e-12, atol=0, rtol=7e-3)
|
158
158
|
xo.assert_allclose(ey, 7.0911e-10, atol=0, rtol=1e-4)
|
159
|
-
xo.assert_allclose(ez, 3.5607e-6, atol=0, rtol=
|
159
|
+
xo.assert_allclose(ez, 3.5607e-6, atol=0, rtol=2e-4)
|
160
160
|
checked = True
|
161
161
|
else:
|
162
162
|
raise ValueError('Unknown configuration')
|
@@ -661,7 +661,7 @@ def test_thick_slice_octupole(test_context):
|
|
661
661
|
@for_all_test_contexts
|
662
662
|
def test_thick_slice_solenoid(test_context):
|
663
663
|
|
664
|
-
sol = xt.
|
664
|
+
sol = xt.UniformSolenoid(ks=0.1, length=1)
|
665
665
|
|
666
666
|
line = xt.Line(elements=[sol])
|
667
667
|
|
@@ -688,12 +688,12 @@ def test_thick_slice_solenoid(test_context):
|
|
688
688
|
|
689
689
|
line.to_json('ttt_thick_solenoid.json')
|
690
690
|
line2 = xt.Line.from_json('ttt_thick_solenoid.json')
|
691
|
-
assert isinstance(line2['e0..0'], xt.
|
691
|
+
assert isinstance(line2['e0..0'], xt.ThickSliceUniformSolenoid)
|
692
692
|
assert line2['e0..0'].parent_name == 'e0'
|
693
693
|
assert line2['e0..0']._parent is None
|
694
694
|
|
695
695
|
line2.build_tracker(_context=test_context)
|
696
|
-
assert isinstance(line2['e0..0'], xt.
|
696
|
+
assert isinstance(line2['e0..0'], xt.ThickSliceUniformSolenoid)
|
697
697
|
assert line2['e0..0'].parent_name == 'e0'
|
698
698
|
assert line2['e0..0']._parent is line2.element_dict['e0']
|
699
699
|
|