xtrack 0.92.0__tar.gz → 0.93.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.92.0/xtrack.egg-info → xtrack-0.93.0}/PKG-INFO +1 -1
- xtrack-0.93.0/tests/test_boris_spatial.py +117 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/__init__.py +1 -0
- xtrack-0.93.0/xtrack/_version.py +1 -0
- xtrack-0.93.0/xtrack/boris.py +161 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/line.py +3 -1
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/twiss.py +94 -91
- {xtrack-0.92.0 → xtrack-0.93.0/xtrack.egg-info}/PKG-INFO +1 -1
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack.egg-info/SOURCES.txt +2 -0
- xtrack-0.92.0/xtrack/_version.py +0 -1
- {xtrack-0.92.0 → xtrack-0.93.0}/LICENSE +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/MANIFEST.in +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/README.md +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/base_classes.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/be_beamfields/BB6D.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/be_beamfields/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/be_beamfields/beambeam.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/be_beamfields/boost.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/be_beamfields/qgauss.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/be_beamfields/slicing.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/be_beamfields/spacecharge.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/elements.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/line.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/mathlibs.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/particles.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/ducktrack/temp_pyparticles.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/pyproject.toml +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/setup.cfg +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/setup.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_acceleration.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_amplitude_detuning.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_aperture_table.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_apertures.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_attr_replicas_and_slices.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_bucket_with_ref_energy_change.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_cavity_absolute_time.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_chromatic_functions_vs_madx.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_coasting.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_collective_tracker.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_collimation.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_coupling_edwards_teng.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_electron_cooler.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_element_characterization_functions.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_element_internal_record.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_elements.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_elements_classflags.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_elements_thick.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_environment.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_fcc_ee_solenoid_correction.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_footprint.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_freeze_longitudinal.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_full_rings.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_h6_sps_beamline.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_hvkick.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_ions.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_json.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_legacy_multiline_to_env.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_lhc_env.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_lhc_match_phase_15.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_line.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_load.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_load_vars.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_lumi.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_mad_writer.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_madloader.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_madnginterface.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_magnet.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_match_and_track_from_element.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_match_coupling_knob.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_match_nested.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_match_optics_and_ip_knob.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_match_orbit_bump.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_match_tune_chroma_cminus.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_misalign.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_monitor.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_multi_bunch_gauss.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_multiline.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_multisetter.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_multispecies.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_native_madloader.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_optimize_for_tracking.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_particles.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_particles_basics.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_particles_pdg.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_pipeline.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_prebuild_kernels.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_ps_against_ptc.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_ps_multiturn_twiss.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_psb_chicane.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_pyht_interface.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_quadrupole_fringe_ptc.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_quadrupole_wedge.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_radial_steering.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_radiation.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_radiation_equilibrium_emittances.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_radiation_equilibrium_emittances_thick.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_radiation_integrals.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_random_gen.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_random_gen_exp.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_random_gen_gauss.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_random_gen_ruth.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_rbend_rbarc.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_rbend_straight_body.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_rf_track.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_rotation_signs.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_second_order_taylor_map.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_seeds.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_slice_and_insert_with_replicas.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_slice_elements.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_slicing.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_solenoid_bz_map_vs_boris.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_solenoid_bz_map_vs_boris_legacy.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_spacecharge_in_ring.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_spin.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_sps_thick.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_survey.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_tapering.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_thick_kickers_rf_crab.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_thick_lhc.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_tilt_shifts.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_tracker.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_trajectory_correcton.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_twiss.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_twiss_to_file.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_twiss_vs_madx_psb.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_vs_madx.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/tests/test_xmask_orbit_correction.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/_temp/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/_temp/lhc_match/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/_temp/lhc_match/var_limits.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/aperture_meas.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/base_element.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/apertures.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/apertures_src/limitpolygon.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/beam_interaction.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/bend.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/cavity.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/crab_cavity.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/default_magnet_config.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/drift.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/drift_exact.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/drift_exact_slice.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/drift_slice_cavity.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/drift_slice_crab_cavity.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/drift_slice_multipole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/drift_slice_rbend.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/drift_slice_uniform_solenoid.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/electroncooler.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/elens.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/exciter.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/legacy_solenoid.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/magnet.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/magnet_drift.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/magnet_edge.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/magnet_kick.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/marker.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/misalignment.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/multipole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/multipoleedge.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/octupole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/quadrupole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/rbend.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/rfmultipole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/sextupole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/slnd.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/srotation.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/temprf.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thick_slice_bend.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thick_slice_cavity.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thick_slice_crab_cavity.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thick_slice_multipole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thick_slice_rbend.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thick_slice_uniform_solenoid.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_bend.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_cavity.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_crab_cavity.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_multipole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_octupole_entry.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_octupole_exit.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_entry.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_exit.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_rbend.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_rbend_entry.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_rbend_exit.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_sextupole_entry.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_sextupole_exit.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_entry.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_exit.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_drift.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_legacy_solenoid.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_legacy_solenoid_multipolar_components.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_legacy_solenoid_radiation.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_magnet.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_magnet.template.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_magnet_configure.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_magnet_drift.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_magnet_edge.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_magnet_kick.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_magnet_radiation.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_misalignments.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_mult_fringe.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_rf.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_rf.template.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_wedge.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_xyshift.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/variable_solenoid.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/wedge.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/wire.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/exciter.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/rft_element.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/slice_base.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/slice_elements_drift.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/slice_elements_edge.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/slice_elements_thick.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/beam_elements/slice_elements_thin.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/environment.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/footprint.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/functions.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/general.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/headers/atomicadd.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/headers/checks.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/headers/constants.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/headers/particle_states.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/headers/synrad_spectrum.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/headers/track.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/internal_record.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/json.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/linear_normal_form.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/load.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/loss_location_refinement/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/loss_location_refinement/loss_location_refinement.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/lumi.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/mad_loader.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/mad_parser/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/mad_parser/loader.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/mad_parser/madx.lark +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/mad_parser/parse.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/mad_writer.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/madng_interface.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/match.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/monitors/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/monitors/beam_position_monitor.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/monitors/beam_position_monitor.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/monitors/beam_profile_monitor.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/monitors/beam_profile_monitor.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/monitors/beam_size_monitor.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/monitors/beam_size_monitor.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/monitors/last_turns_monitor.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/monitors/last_turns_monitor.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/monitors/particles_monitor.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/monitors/particles_monitor.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/multiline.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/multiline_legacy/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/multiline_legacy/multiline_legacy.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/multiline_legacy/shared_knobs.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/multisetter/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/multisetter/multisetter.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/particles/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/particles/constants.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/particles/masses.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/particles/particles.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/particles/pdg.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/particles/rng_src/base_rng.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/particles/rng_src/particles_rng.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/pipeline/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/pipeline/core.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/pipeline/manager.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/pipeline/multitracker.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/prebuilt_kernel_definitions/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/prebuilt_kernel_definitions/element_inits.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/prebuilt_kernel_definitions/element_types.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/progress_indicator.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/random/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/random/random_generators.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/random/random_src/exponential.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/random/random_src/normal.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/random/random_src/rutherford.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/random/random_src/uniform.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/random/random_src/uniform_accurate.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/slicing.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/survey.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/svgutils/__init__.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/svgutils/parser.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/svgutils/path.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/svgutils/svgutils.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/synctime.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/table.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/tapering.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/targets.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/track_flags.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/tracker.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/tracker_data.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/tracker_src/tracker.h +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/trajectory_correction.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack/twissplot.py +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack.egg-info/dependency_links.txt +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack.egg-info/requires.txt +0 -0
- {xtrack-0.92.0 → xtrack-0.93.0}/xtrack.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
from scipy.constants import c as clight
|
|
3
|
+
from scipy.constants import e as qe
|
|
4
|
+
|
|
5
|
+
import xobjects as xo
|
|
6
|
+
import xtrack as xt
|
|
7
|
+
from xtrack._temp.boris_and_solenoid_map.solenoid_field import SolenoidField
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def test_boris_spatial():
|
|
11
|
+
delta=np.array([0, 4])
|
|
12
|
+
p0 = xt.Particles(mass0=xt.ELECTRON_MASS_EV, q0=1,
|
|
13
|
+
energy0=45.6e9/1000,
|
|
14
|
+
x=[-1e-3, -1e-3],
|
|
15
|
+
px=-1e-3*(1+delta),
|
|
16
|
+
y=1e-3,
|
|
17
|
+
delta=delta)
|
|
18
|
+
|
|
19
|
+
p = p0.copy()
|
|
20
|
+
|
|
21
|
+
sf = SolenoidField(L=4, a=0.3, B0=1.5, z0=20)
|
|
22
|
+
|
|
23
|
+
integrator = xt.BorisSpatialIntegrator(fieldmap_callable=sf.get_field,
|
|
24
|
+
s_start=0,
|
|
25
|
+
s_end=30,
|
|
26
|
+
n_steps=15000)
|
|
27
|
+
p_boris = p.copy()
|
|
28
|
+
integrator.track(p_boris)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
x_log = np.array(integrator.x_log)
|
|
32
|
+
y_log = np.array(integrator.y_log)
|
|
33
|
+
z_log = np.array(integrator.z_log)
|
|
34
|
+
|
|
35
|
+
b_seen = sf.get_field(x_log, y_log, z_log)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
z_axis = np.linspace(0, 30, 1001)
|
|
39
|
+
Bz_axis = sf.get_field(0 * z_axis, 0 * z_axis, z_axis)[2]
|
|
40
|
+
|
|
41
|
+
P0_J = p.p0c[0] * qe / clight
|
|
42
|
+
brho = P0_J / qe / p.q0
|
|
43
|
+
|
|
44
|
+
# ks = 0.5 * (Bz_axis[:-1] + Bz_axis[1:]) / brho
|
|
45
|
+
ks = Bz_axis / brho
|
|
46
|
+
ks_entry = ks[:-1]
|
|
47
|
+
ks_exit = ks_entry*0
|
|
48
|
+
ks_exit = ks[1:]
|
|
49
|
+
|
|
50
|
+
dz = z_axis[1]-z_axis[0]
|
|
51
|
+
|
|
52
|
+
line = xt.Line(elements=[xt.VariableSolenoid(length=dz,
|
|
53
|
+
ks_profile=[ks_entry[ii], ks_exit[ii]])
|
|
54
|
+
for ii in range(len(z_axis)-1)])
|
|
55
|
+
line.build_tracker()
|
|
56
|
+
|
|
57
|
+
p_xt = p0.copy()
|
|
58
|
+
line.track(p_xt, turn_by_turn_monitor='ONE_TURN_EBE')
|
|
59
|
+
mon = line.record_last_track
|
|
60
|
+
|
|
61
|
+
p_xt = p0.copy()
|
|
62
|
+
line.configure_radiation(model=None)
|
|
63
|
+
line.track(p_xt, turn_by_turn_monitor='ONE_TURN_EBE')
|
|
64
|
+
mon_no_rad = line.record_last_track
|
|
65
|
+
|
|
66
|
+
Bz_mid = 0.5 * (Bz_axis[:-1] + Bz_axis[1:])
|
|
67
|
+
Bz_mon = 0 * Bz_axis
|
|
68
|
+
Bz_mon[1:] = Bz_mid
|
|
69
|
+
|
|
70
|
+
# Wolsky Eq. 3.114
|
|
71
|
+
Ax = -0.5 * Bz_mon * mon.y
|
|
72
|
+
Ay = 0.5 * Bz_mon * mon.x
|
|
73
|
+
|
|
74
|
+
# Wolsky Eq. 2.74
|
|
75
|
+
ax_ref = Ax * p0.q0 * qe / P0_J
|
|
76
|
+
ay_ref = Ay * p0.q0 * qe / P0_J
|
|
77
|
+
|
|
78
|
+
px_mech = mon.px - ax_ref
|
|
79
|
+
py_mech = mon.py - ay_ref
|
|
80
|
+
pz_mech = np.sqrt((1 + mon.delta)**2 - px_mech**2 - py_mech**2)
|
|
81
|
+
|
|
82
|
+
xp = px_mech / pz_mech
|
|
83
|
+
yp = py_mech / pz_mech
|
|
84
|
+
|
|
85
|
+
dx_ds = np.diff(mon.x, axis=1) / np.diff(mon.s, axis=1)
|
|
86
|
+
dy_ds = np.diff(mon.y, axis=1) / np.diff(mon.s, axis=1)
|
|
87
|
+
|
|
88
|
+
z_check = sf.z0 + sf.L * np.linspace(-2, 2, 1001)
|
|
89
|
+
|
|
90
|
+
for i_part in range(z_log.shape[1]):
|
|
91
|
+
|
|
92
|
+
this_s_boris = 0.5 * (z_log[:-1, i_part] + z_log[1:, i_part])
|
|
93
|
+
dx_ds_boris = np.diff(x_log[:, i_part]) / np.diff(z_log[:, i_part])
|
|
94
|
+
dy_ds_boris = np.diff(y_log[:, i_part]) / np.diff(z_log[:, i_part])
|
|
95
|
+
|
|
96
|
+
s_xsuite = 0.5 * (mon.s[i_part, :-1] + mon.s[i_part, 1:])
|
|
97
|
+
dx_ds_xsuite = np.diff(mon.x[i_part, :]) / np.diff(mon.s[i_part, :])
|
|
98
|
+
dy_ds_xsuite = np.diff(mon.y[i_part, :]) / np.diff(mon.s[i_part, :])
|
|
99
|
+
|
|
100
|
+
dx_ds_xsuite_check = np.interp(z_check, s_xsuite, dx_ds_xsuite)
|
|
101
|
+
dy_ds_xsuite_check = np.interp(z_check, s_xsuite, dy_ds_xsuite)
|
|
102
|
+
|
|
103
|
+
dx_ds_boris_check = np.interp(z_check, this_s_boris, dx_ds_boris)
|
|
104
|
+
dy_ds_boris_check = np.interp(z_check, this_s_boris, dy_ds_boris)
|
|
105
|
+
|
|
106
|
+
this_dx_ds = dx_ds[i_part, :]
|
|
107
|
+
this_dy_ds = dy_ds[i_part, :]
|
|
108
|
+
|
|
109
|
+
xo.assert_allclose(dx_ds_xsuite_check, dx_ds_boris_check, rtol=0,
|
|
110
|
+
atol=2.8e-2 * (np.max(dx_ds_boris_check) - np.min(dx_ds_boris_check)))
|
|
111
|
+
xo.assert_allclose(dy_ds_xsuite_check, dy_ds_boris_check, rtol=0,
|
|
112
|
+
atol=2.8e-2 * (np.max(dy_ds_boris_check) - np.min(dy_ds_boris_check)))
|
|
113
|
+
|
|
114
|
+
xo.assert_allclose(ax_ref[i_part, :], mon.ax[i_part, :],
|
|
115
|
+
rtol=0, atol=np.max(np.abs(ax_ref)*3e-2))
|
|
116
|
+
xo.assert_allclose(ay_ref[i_part, :], mon.ay[i_part, :],
|
|
117
|
+
rtol=0, atol=np.max(np.abs(ay_ref)*3e-2))
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '0.93.0'
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
|
|
3
|
+
from scipy.constants import c as clight
|
|
4
|
+
from scipy.constants import e as qe
|
|
5
|
+
|
|
6
|
+
class BorisSpatialIntegrator:
|
|
7
|
+
|
|
8
|
+
isthick = True
|
|
9
|
+
|
|
10
|
+
def __init__(self, fieldmap_callable, s_start, s_end, n_steps, verbose=False):
|
|
11
|
+
self.fieldmap_callable = fieldmap_callable
|
|
12
|
+
self.s_start = s_start
|
|
13
|
+
self.s_end = s_end
|
|
14
|
+
self.ds = (s_end - s_start) / n_steps
|
|
15
|
+
self.n_steps = n_steps
|
|
16
|
+
self.verbose = verbose
|
|
17
|
+
self.length = s_end - s_start
|
|
18
|
+
|
|
19
|
+
def track(self, p):
|
|
20
|
+
|
|
21
|
+
x_log = []
|
|
22
|
+
y_log = []
|
|
23
|
+
z_log = []
|
|
24
|
+
s_in = p.s.copy()
|
|
25
|
+
p.s=self.s_start
|
|
26
|
+
|
|
27
|
+
for ii in range(self.n_steps):
|
|
28
|
+
|
|
29
|
+
if self.verbose:
|
|
30
|
+
print(f's_in = {s_in[0]:.3f} s_in_map = {p.s[0]:.3f}', end='\r', flush=True)
|
|
31
|
+
|
|
32
|
+
q0 = p.q0
|
|
33
|
+
x = p.x.copy()
|
|
34
|
+
y = p.y.copy()
|
|
35
|
+
z = p.s.copy()
|
|
36
|
+
px = p.px.copy()
|
|
37
|
+
py = p.py.copy()
|
|
38
|
+
delta = p.delta.copy()
|
|
39
|
+
p0c = p.p0c
|
|
40
|
+
|
|
41
|
+
charge0_coulomb = q0 * qe
|
|
42
|
+
|
|
43
|
+
P0 = p0c * qe / clight # in kg m/s
|
|
44
|
+
P = P0 * (1 + delta)
|
|
45
|
+
|
|
46
|
+
Px = px * P0
|
|
47
|
+
Py = py * P0
|
|
48
|
+
|
|
49
|
+
w = np.zeros((Px.shape[0], 3), dtype=Px.dtype)
|
|
50
|
+
w[:, 0] = Px
|
|
51
|
+
w[:, 1] = Py
|
|
52
|
+
w[:, 2] = P
|
|
53
|
+
|
|
54
|
+
x_new, y_new, z_new, w_new = step_spatial_boris_B(x, y, z, w,
|
|
55
|
+
charge0_coulomb, self.ds,
|
|
56
|
+
field_fn=self.fieldmap_callable)
|
|
57
|
+
p.x = x_new.copy()
|
|
58
|
+
p.y = y_new.copy()
|
|
59
|
+
p.s = z_new.copy()
|
|
60
|
+
p.px = w_new[:, 0] / P0
|
|
61
|
+
p.py = w_new[:, 1] / P0
|
|
62
|
+
|
|
63
|
+
x_log.append(p.x.copy())
|
|
64
|
+
y_log.append(p.y.copy())
|
|
65
|
+
z_log.append(p.s.copy())
|
|
66
|
+
p.s = s_in + self.length
|
|
67
|
+
self.x_log = np.array(x_log)
|
|
68
|
+
self.y_log = np.array(y_log)
|
|
69
|
+
self.z_log = np.array(z_log)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
import numpy as np
|
|
73
|
+
c = 299_792_458.0 # m/s
|
|
74
|
+
|
|
75
|
+
def step_spatial_boris_B(x, y, z, w, q, dz, field_fn):
|
|
76
|
+
"""
|
|
77
|
+
Spatial Boris step for magnetic fields only (E = 0),
|
|
78
|
+
using constant total momentum magnitude P = w[:,2].
|
|
79
|
+
|
|
80
|
+
Parameters
|
|
81
|
+
----------
|
|
82
|
+
x, y, z : (N,) arrays
|
|
83
|
+
Particle positions [m].
|
|
84
|
+
w : (N, 3) array
|
|
85
|
+
Momentum-like state: (px, py, P), where
|
|
86
|
+
P = |p| = sqrt(px^2 + py^2 + pz^2) is constant.
|
|
87
|
+
q : float
|
|
88
|
+
Particle charge [C].
|
|
89
|
+
dz : float
|
|
90
|
+
Spatial step along z [m].
|
|
91
|
+
field_fn : callable(x, y, z) -> (Bx, By, Bz)
|
|
92
|
+
Function returning magnetic-field components [T].
|
|
93
|
+
|
|
94
|
+
Returns
|
|
95
|
+
-------
|
|
96
|
+
x1, y1, z1 : (N,) arrays
|
|
97
|
+
Updated positions [m].
|
|
98
|
+
w1 : (N, 3) array
|
|
99
|
+
Updated momentum state (px, py, P).
|
|
100
|
+
"""
|
|
101
|
+
|
|
102
|
+
# --- Unpack and ensure arrays
|
|
103
|
+
x = np.asarray(x)
|
|
104
|
+
y = np.asarray(y)
|
|
105
|
+
z = np.asarray(z)
|
|
106
|
+
w = np.asarray(w)
|
|
107
|
+
px, py, P = w[:, 0], w[:, 1], w[:, 2]
|
|
108
|
+
|
|
109
|
+
# --- Compute longitudinal momentum from constant magnitude
|
|
110
|
+
pz = np.sqrt(np.maximum(P**2 - px**2 - py**2, 0.0))
|
|
111
|
+
|
|
112
|
+
# --- Half drift in (x, y)
|
|
113
|
+
xh = x + (px / pz) * (dz * 0.5)
|
|
114
|
+
yh = y + (py / pz) * (dz * 0.5)
|
|
115
|
+
zh = z + dz * 0.5
|
|
116
|
+
|
|
117
|
+
# --- Evaluate magnetic field at mid-step
|
|
118
|
+
Bx, By, Bz = field_fn(xh, yh, zh)
|
|
119
|
+
|
|
120
|
+
# ============================================
|
|
121
|
+
# (1) FIRST HALF-KICK from (Bx, By)
|
|
122
|
+
# ============================================
|
|
123
|
+
pxm = px - 0.5 * q * dz * By
|
|
124
|
+
pym = py + 0.5 * q * dz * Bx
|
|
125
|
+
|
|
126
|
+
# --- Recompute pz to maintain |p| = P
|
|
127
|
+
pz = np.sqrt(np.maximum(P**2 - pxm**2 - pym**2, 0.0))
|
|
128
|
+
|
|
129
|
+
# ============================================
|
|
130
|
+
# (2) ROTATION due to Bz
|
|
131
|
+
# ============================================
|
|
132
|
+
t = 0.5 * q * Bz * dz / pz
|
|
133
|
+
t2 = t * t
|
|
134
|
+
s = 2.0 * t / (1.0 + t2)
|
|
135
|
+
c0 = (1.0 - t2) / (1.0 + t2)
|
|
136
|
+
|
|
137
|
+
# pxp = c0 * pxm - s * pym
|
|
138
|
+
# pyp = s * pxm + c0 * pym
|
|
139
|
+
pxp = c0 * pxm + s * pym
|
|
140
|
+
pyp = -s * pxm + c0 * pym
|
|
141
|
+
|
|
142
|
+
# ============================================
|
|
143
|
+
# (3) SECOND HALF-KICK from (Bx, By)
|
|
144
|
+
# ============================================
|
|
145
|
+
px1 = pxp - 0.5 * q * dz * By
|
|
146
|
+
py1 = pyp + 0.5 * q * dz * Bx
|
|
147
|
+
|
|
148
|
+
# --- Recompute pz after full step
|
|
149
|
+
pz1 = np.sqrt(np.maximum(P**2 - px1**2 - py1**2, 0.0))
|
|
150
|
+
|
|
151
|
+
# ============================================
|
|
152
|
+
# (4) SECOND HALF-DRIFT (x, y)
|
|
153
|
+
# ============================================
|
|
154
|
+
x1 = xh + (px1 / pz1) * (dz * 0.5)
|
|
155
|
+
y1 = yh + (py1 / pz1) * (dz * 0.5)
|
|
156
|
+
z1 = z + dz
|
|
157
|
+
|
|
158
|
+
# --- Pack updated (px, py, P)
|
|
159
|
+
w1 = np.stack([px1, py1, P], axis=1)
|
|
160
|
+
|
|
161
|
+
return x1, y1, z1, w1
|
|
@@ -1044,6 +1044,8 @@ class Line:
|
|
|
1044
1044
|
|
|
1045
1045
|
@particle_ref.setter
|
|
1046
1046
|
def particle_ref(self, particle_ref):
|
|
1047
|
+
if isinstance(particle_ref, LineParticleRef):
|
|
1048
|
+
particle_ref = particle_ref.line._particle_ref
|
|
1047
1049
|
self._particle_ref = particle_ref
|
|
1048
1050
|
# This looks a bit dangerous, when working with coasting beams in environments.
|
|
1049
1051
|
# If the particle is shared with other lines, t_sim might be wrong.
|
|
@@ -2514,7 +2516,7 @@ class Line:
|
|
|
2514
2516
|
s_cuts = list(tab_insertions['s_start']) + list(tab_insertions['s_end'])
|
|
2515
2517
|
s_cuts = list(set(s_cuts))
|
|
2516
2518
|
|
|
2517
|
-
self.cut_at_s(s_cuts, s_tol=
|
|
2519
|
+
self.cut_at_s(s_cuts, s_tol=s_tol, return_slices=True)
|
|
2518
2520
|
|
|
2519
2521
|
tt_after_cut = self.get_table()
|
|
2520
2522
|
tt_after_cut['length'] = np.diff(tt_after_cut.s, append=tt_after_cut.s[-1])
|
|
@@ -1595,105 +1595,108 @@ def _compute_chromatic_functions(line, init, delta_chrom, steps_r_matrix,
|
|
|
1595
1595
|
only_markers=False,
|
|
1596
1596
|
periodic=False,
|
|
1597
1597
|
periodic_mode=None,
|
|
1598
|
-
include_collective=False
|
|
1598
|
+
include_collective=False,
|
|
1599
|
+
tw_chrom_res=None
|
|
1600
|
+
):
|
|
1599
1601
|
|
|
1600
1602
|
if only_markers:
|
|
1601
1603
|
raise NotImplementedError('only_markers not supported anymore')
|
|
1602
1604
|
|
|
1603
|
-
tw_chrom_res
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
symmetrize=False,
|
|
1621
|
-
include_collective=include_collective,
|
|
1622
|
-
)
|
|
1623
|
-
tw_init_chrom.particle_on_co = part_chrom
|
|
1624
|
-
RR_chrom = line.compute_one_turn_matrix_finite_differences(
|
|
1625
|
-
particle_on_co=tw_init_chrom.particle_on_co.copy(),
|
|
1605
|
+
if tw_chrom_res is None:
|
|
1606
|
+
tw_chrom_res = []
|
|
1607
|
+
for dd in [-delta_chrom, delta_chrom]:
|
|
1608
|
+
tw_init_chrom = init.copy()
|
|
1609
|
+
|
|
1610
|
+
if periodic:
|
|
1611
|
+
import xpart
|
|
1612
|
+
part_guess = xpart.build_particles(
|
|
1613
|
+
_context=line._context,
|
|
1614
|
+
x_norm=0,
|
|
1615
|
+
zeta=tw_init_chrom.zeta,
|
|
1616
|
+
delta=tw_init_chrom.delta+ dd,
|
|
1617
|
+
particle_on_co=on_momentum_twiss_res.particle_on_co.copy(),
|
|
1618
|
+
nemitt_x=nemitt_x, nemitt_y=nemitt_y,
|
|
1619
|
+
W_matrix=tw_init_chrom.W_matrix,
|
|
1620
|
+
include_collective=include_collective)
|
|
1621
|
+
part_chrom = line.find_closed_orbit(delta0=dd, co_guess=part_guess,
|
|
1626
1622
|
start=start, end=end, num_turns=num_turns,
|
|
1627
|
-
steps_r_matrix=steps_r_matrix,
|
|
1628
1623
|
symmetrize=False,
|
|
1629
1624
|
include_collective=include_collective,
|
|
1630
|
-
)
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1625
|
+
)
|
|
1626
|
+
tw_init_chrom.particle_on_co = part_chrom
|
|
1627
|
+
RR_chrom = line.compute_one_turn_matrix_finite_differences(
|
|
1628
|
+
particle_on_co=tw_init_chrom.particle_on_co.copy(),
|
|
1629
|
+
start=start, end=end, num_turns=num_turns,
|
|
1630
|
+
steps_r_matrix=steps_r_matrix,
|
|
1631
|
+
symmetrize=False,
|
|
1632
|
+
include_collective=include_collective,
|
|
1633
|
+
)['R_matrix']
|
|
1634
|
+
(WW_chrom, _, _, _) = lnf.compute_linear_normal_form(RR_chrom,
|
|
1635
|
+
only_4d_block=True,
|
|
1636
|
+
responsiveness_tol=matrix_responsiveness_tol,
|
|
1637
|
+
stability_tol=matrix_stability_tol,
|
|
1638
|
+
symplectify=symplectify)
|
|
1639
|
+
tw_init_chrom.W_matrix = WW_chrom
|
|
1640
|
+
else:
|
|
1641
|
+
alfx = init.alfx
|
|
1642
|
+
betx = init.betx
|
|
1643
|
+
alfy = init.alfy
|
|
1644
|
+
bety = init.bety
|
|
1645
|
+
dx = init.dx
|
|
1646
|
+
dy = init.dy
|
|
1647
|
+
dpx = init.dpx
|
|
1648
|
+
dpy = init.dpy
|
|
1649
|
+
ddx = init.ddx
|
|
1650
|
+
ddpx = init.ddpx
|
|
1651
|
+
ddy = init.ddy
|
|
1652
|
+
ddpy = init.ddpy
|
|
1653
|
+
ax_chrom = init.ax_chrom
|
|
1654
|
+
bx_chrom = init.bx_chrom
|
|
1655
|
+
ay_chrom = init.ay_chrom
|
|
1656
|
+
by_chrom = init.by_chrom
|
|
1657
|
+
|
|
1658
|
+
dbetx_dpzeta = bx_chrom * betx
|
|
1659
|
+
dbety_dpzeta = by_chrom * bety
|
|
1660
|
+
dalfx_dpzeta = ax_chrom + bx_chrom * alfx
|
|
1661
|
+
dalfy_dpzeta = ay_chrom + by_chrom * alfy
|
|
1662
|
+
|
|
1663
|
+
tw_init_chrom.particle_on_co.x += dx * dd + 1/2 * ddx * dd**2
|
|
1664
|
+
tw_init_chrom.particle_on_co.px += dpx * dd + 1/2 * ddpx * dd**2
|
|
1665
|
+
tw_init_chrom.particle_on_co.y += dy * dd + 1/2 * ddy * dd**2
|
|
1666
|
+
tw_init_chrom.particle_on_co.py += dpy * dd + 1/2 * ddpy * dd**2
|
|
1667
|
+
tw_init_chrom.particle_on_co.delta += dd
|
|
1668
|
+
|
|
1669
|
+
twinit_aux = TwissInit(
|
|
1670
|
+
alfx=alfx + dalfx_dpzeta * dd,
|
|
1671
|
+
betx=betx + dbetx_dpzeta * dd,
|
|
1672
|
+
alfy=alfy + dalfy_dpzeta * dd,
|
|
1673
|
+
bety=bety + dbety_dpzeta * dd,
|
|
1674
|
+
dx=dx + ddx * dd,
|
|
1675
|
+
dpx=dpx + ddpx * dd,
|
|
1676
|
+
dy=dy + ddy * dd,
|
|
1677
|
+
dpy=dpy + ddpy * dd)
|
|
1678
|
+
twinit_aux._complete(line, element_name=init.element_name)
|
|
1679
|
+
tw_init_chrom.W_matrix = twinit_aux.W_matrix
|
|
1680
|
+
|
|
1681
|
+
tw_chrom_res.append(
|
|
1682
|
+
_twiss_open(
|
|
1683
|
+
line=line,
|
|
1684
|
+
init=tw_init_chrom,
|
|
1685
|
+
start=start, end=end,
|
|
1686
|
+
nemitt_x=nemitt_x,
|
|
1687
|
+
nemitt_y=nemitt_y,
|
|
1688
|
+
r_sigma=r_sigma,
|
|
1689
|
+
delta_disp=delta_disp,
|
|
1690
|
+
use_full_inverse=use_full_inverse,
|
|
1691
|
+
hide_thin_groups=hide_thin_groups,
|
|
1692
|
+
only_markers=only_markers,
|
|
1693
|
+
_continue_if_lost=False,
|
|
1694
|
+
_keep_tracking_data=False,
|
|
1695
|
+
_keep_initial_particles=False,
|
|
1696
|
+
_initial_particles=None,
|
|
1697
|
+
_ebe_monitor=None,
|
|
1698
|
+
)
|
|
1695
1699
|
)
|
|
1696
|
-
)
|
|
1697
1700
|
|
|
1698
1701
|
dmux = (tw_chrom_res[1].mux - tw_chrom_res[0].mux)/(2*delta_chrom)
|
|
1699
1702
|
dmuy = (tw_chrom_res[1].muy - tw_chrom_res[0].muy)/(2*delta_chrom)
|
|
@@ -26,6 +26,7 @@ tests/test_aperture_table.py
|
|
|
26
26
|
tests/test_aperture_turn_ele_and_monitor.py
|
|
27
27
|
tests/test_apertures.py
|
|
28
28
|
tests/test_attr_replicas_and_slices.py
|
|
29
|
+
tests/test_boris_spatial.py
|
|
29
30
|
tests/test_bucket_with_ref_energy_change.py
|
|
30
31
|
tests/test_cavity_absolute_time.py
|
|
31
32
|
tests/test_chromatic_functions_vs_madx.py
|
|
@@ -125,6 +126,7 @@ xtrack/__init__.py
|
|
|
125
126
|
xtrack/_version.py
|
|
126
127
|
xtrack/aperture_meas.py
|
|
127
128
|
xtrack/base_element.py
|
|
129
|
+
xtrack/boris.py
|
|
128
130
|
xtrack/environment.py
|
|
129
131
|
xtrack/footprint.py
|
|
130
132
|
xtrack/functions.py
|
xtrack-0.92.0/xtrack/_version.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '0.92.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
|