xtrack 0.84.2__tar.gz → 0.84.3__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.2/xtrack.egg-info → xtrack-0.84.3}/PKG-INFO +1 -1
- xtrack-0.84.3/tests/test_radiation_integrals.py +399 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_rf_track.py +28 -25
- xtrack-0.84.3/xtrack/_version.py +1 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/rft_element.py +6 -2
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/headers/track.h +4 -3
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/line.py +4 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/tracker.py +5 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/twiss.py +9 -6
- {xtrack-0.84.2 → xtrack-0.84.3/xtrack.egg-info}/PKG-INFO +1 -1
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack.egg-info/SOURCES.txt +1 -0
- xtrack-0.84.2/xtrack/_version.py +0 -1
- {xtrack-0.84.2 → xtrack-0.84.3}/LICENSE +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/MANIFEST.in +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/README.md +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/base_classes.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/be_beamfields/BB6D.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/be_beamfields/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/be_beamfields/beambeam.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/be_beamfields/boost.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/be_beamfields/qgauss.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/be_beamfields/slicing.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/be_beamfields/spacecharge.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/elements.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/line.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/mathlibs.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/particles.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/ducktrack/temp_pyparticles.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/pyproject.toml +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/setup.cfg +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/setup.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_acceleration.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_amplitude_detuning.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_aperture_table.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_apertures.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_attr_replicas_and_slices.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_bucket_with_ref_energy_change.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_cavity_absolute_time.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_chromatic_functions_vs_madx.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_coasting.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_collective_tracker.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_collimation.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_electron_cooler.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_element_characterization_functions.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_element_internal_record.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_elements.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_elements_classflags.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_elements_thick.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_environment.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_fcc_ee_solenoid_correction.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_footprint.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_freeze_longitudinal.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_full_rings.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_h6_sps_beamline.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_hvkick.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_ions.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_legacy_multiline_to_env.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_lhc_env.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_lhc_match_phase_15.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_line.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_lumi.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_mad_writer.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_madloader.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_madnginterface.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_magnet.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_match_and_track_from_element.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_match_coupling_knob.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_match_nested.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_match_optics_and_ip_knob.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_match_orbit_bump.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_match_tune_chroma_cminus.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_monitor.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_multi_bunch_gauss.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_multiline.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_multisetter.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_multispecies.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_native_madloader.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_optimize_for_tracking.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_particles.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_particles_basics.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_particles_pdg.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_periodic_symmetric_twiss_and_match.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_pipeline.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_prebuild_kernels.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_ps_against_ptc.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_ps_multiturn_twiss.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_psb_chicane.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_pyht_interface.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_radial_steering.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_radiation.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_radiation_equilibrium_emittances.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_radiation_equilibrium_emittances_thick.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_random_gen.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_random_gen_exp.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_random_gen_gauss.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_random_gen_ruth.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_rbend_rbarc.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_rotation_signs.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_second_order_taylor_map.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_seeds.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_slice_and_insert_with_replicas.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_slice_elements.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_slicing.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_solenoid_bz_map_vs_boris.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_spacecharge_in_ring.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_spin.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_sps_thick.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_survey.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_tapering.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_thick_lhc.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_tilt_shifts.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_tracker.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_trajectory_correcton.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_twiss.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_twiss_vs_madx_psb.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_vs_madx.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/tests/test_xmask_orbit_correction.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/_temp/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/_temp/lhc_match/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/_temp/lhc_match/var_limits.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/aperture_meas.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/base_element.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/apertures.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/apertures_src/limitpolygon.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/beam_interaction.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/bend.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/cavity.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/drift.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/drift_slice_rbend.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/electroncooler.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/elens.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/exciter.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/magnet.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/magnet_drift.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/magnet_edge.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/magnet_kick.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/marker.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/multipole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/multipoleedge.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/octupole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/quadrupole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/rbend.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/rfmultipole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/sextupole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/solenoid.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/srotation.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thick_slice_bend.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thick_slice_drift.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thick_slice_rbend.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thick_slice_solenoid.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_bend.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_octupole_entry.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_octupole_exit.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_entry.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_exit.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_rbend.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_rbend_entry.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_rbend_exit.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_sextupole_entry.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_sextupole_exit.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_bend.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_cavity.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_drift.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_magnet.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_magnet_drift.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_magnet_edge.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_magnet_kick.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_magnet_radiation.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_mult_fringe.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_multipolar_components.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_multipole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_quadrupole.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_solenoid.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_wedge.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/wedge.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/wire.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/exciter.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/magnets.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/slice_elements.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/beam_elements/slice_elements_thick.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/environment.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/footprint.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/general.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/headers/atomicadd.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/headers/checks.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/headers/constants.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/headers/particle_states.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/headers/synrad_spectrum.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/internal_record.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/json.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/linear_normal_form.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/loss_location_refinement/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/loss_location_refinement/loss_location_refinement.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/lumi.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/mad_loader.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/mad_parser/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/mad_parser/loader.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/mad_parser/madx.lark +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/mad_parser/parse.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/mad_writer.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/madng_interface.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/match.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/monitors/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/monitors/beam_position_monitor.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/monitors/beam_position_monitor.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/monitors/beam_profile_monitor.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/monitors/beam_profile_monitor.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/monitors/beam_size_monitor.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/monitors/beam_size_monitor.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/monitors/last_turns_monitor.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/monitors/last_turns_monitor.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/monitors/particles_monitor.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/monitors/particles_monitor.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/multiline.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/multiline_legacy/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/multiline_legacy/multiline_legacy.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/multiline_legacy/shared_knobs.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/multisetter/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/multisetter/multisetter.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/particles/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/particles/constants.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/particles/masses.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/particles/particles.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/particles/pdg.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/particles/rng_src/base_rng.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/particles/rng_src/particles_rng.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/pipeline/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/pipeline/core.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/pipeline/manager.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/pipeline/multitracker.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/progress_indicator.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/random/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/random/random_generators.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/random/random_src/exponential.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/random/random_src/normal.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/random/random_src/rutherford.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/random/random_src/uniform.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/random/random_src/uniform_accurate.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/slicing.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/survey.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/svgutils/__init__.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/svgutils/parser.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/svgutils/path.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/svgutils/svgutils.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/synctime.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/tapering.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/targets.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/tracker_data.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/tracker_src/tracker.h +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/trajectory_correction.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack/twissplot.py +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack.egg-info/dependency_links.txt +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack.egg-info/requires.txt +0 -0
- {xtrack-0.84.2 → xtrack-0.84.3}/xtrack.egg-info/top_level.txt +0 -0
@@ -0,0 +1,399 @@
|
|
1
|
+
import xtrack as xt
|
2
|
+
import xobjects as xo
|
3
|
+
|
4
|
+
import numpy as np
|
5
|
+
import pathlib
|
6
|
+
import pytest
|
7
|
+
|
8
|
+
test_data_folder = pathlib.Path(
|
9
|
+
__file__).parent.joinpath('../test_data').absolute()
|
10
|
+
|
11
|
+
def test_radiation_wiggler():
|
12
|
+
env = xt.load_madx_lattice(test_data_folder / 'sps_thick/sps.seq')
|
13
|
+
env.vars.load_madx(test_data_folder / 'sps_thick/lhc_q20.str')
|
14
|
+
line = env.sps
|
15
|
+
|
16
|
+
line['actcse.31632'].voltage = 4.2e+08
|
17
|
+
line['actcse.31632'].frequency = 3e6
|
18
|
+
line['actcse.31632'].lag = 180.
|
19
|
+
|
20
|
+
line.particle_ref = xt.Particles(energy0=20e9, mass0=xt.ELECTRON_MASS_EV)
|
21
|
+
env.particle_ref = line.particle_ref
|
22
|
+
|
23
|
+
# Wiggler parameters
|
24
|
+
k0_wig = 5e-3
|
25
|
+
tilt_rad = np.pi/2
|
26
|
+
|
27
|
+
lenwig = 25
|
28
|
+
numperiods = 20
|
29
|
+
lambdawig = lenwig / numperiods
|
30
|
+
|
31
|
+
wig = Wiggler(period=lambdawig, amplitude=k0_wig, num_periods=numperiods,
|
32
|
+
angle_rad=tilt_rad, scheme='121a')
|
33
|
+
|
34
|
+
tt = line.get_table()
|
35
|
+
wig_elems = []
|
36
|
+
for name, element in wig.wiggler_dict.items():
|
37
|
+
env.elements[name] = element['element']
|
38
|
+
wig_elems.append(name)
|
39
|
+
|
40
|
+
wig_line = env.new_line(components=[
|
41
|
+
env.new('s.wig', 'Marker'),
|
42
|
+
wig_elems,
|
43
|
+
env.new('e.wig', 'Marker'),
|
44
|
+
])
|
45
|
+
|
46
|
+
line.insert(wig_line, anchor='start', at=1, from_='qd.31710@end')
|
47
|
+
|
48
|
+
env['sps_thick'] = env.sps.copy(shallow=True)
|
49
|
+
|
50
|
+
line.discard_tracker()
|
51
|
+
slicing_strategies = [
|
52
|
+
xt.Strategy(slicing=xt.Teapot(1)), # Default
|
53
|
+
xt.Strategy(slicing=xt.Teapot(2), element_type=xt.Bend),
|
54
|
+
xt.Strategy(slicing=xt.Teapot(2), element_type=xt.RBend),
|
55
|
+
xt.Strategy(slicing=xt.Teapot(8), element_type=xt.Quadrupole),
|
56
|
+
xt.Strategy(slicing=xt.Teapot(20), name='mwp.*'),
|
57
|
+
]
|
58
|
+
line.slice_thick_elements(slicing_strategies)
|
59
|
+
|
60
|
+
tw4d = line.twiss4d(radiation_integrals=True)
|
61
|
+
tw6d = line.twiss()
|
62
|
+
|
63
|
+
line.configure_radiation(model='mean')
|
64
|
+
|
65
|
+
tw_rad = line.twiss(eneloss_and_damping=True, strengths=True)
|
66
|
+
|
67
|
+
print('ex rad int:', tw4d.rad_int_eq_gemitt_x)
|
68
|
+
print('ex Chao: ', tw_rad.eq_gemitt_x)
|
69
|
+
print('ey rad int:', tw4d.rad_int_eq_gemitt_y)
|
70
|
+
print('ey Chao: ', tw_rad.eq_gemitt_y)
|
71
|
+
|
72
|
+
print('damping rate x [s^-1] rad int: ', tw4d.rad_int_damping_constant_x_s)
|
73
|
+
print('damping rate x [s^-1] eigenval: ', tw_rad.damping_constants_s[0])
|
74
|
+
print('damping rate y [s^-1] rad int: ', tw4d.rad_int_damping_constant_y_s)
|
75
|
+
print('damping rate y [s^-1] eigenval: ', tw_rad.damping_constants_s[1])
|
76
|
+
print('damping rate z [s^-1] rad int: ', tw4d.rad_int_damping_constant_zeta_s)
|
77
|
+
print('damping rate z [s^-1] eigenval: ', tw_rad.damping_constants_s[2])
|
78
|
+
|
79
|
+
xo.assert_allclose(
|
80
|
+
tw4d.rad_int_eq_gemitt_x, tw_rad.eq_gemitt_x, rtol=1e-3, atol=0)
|
81
|
+
xo.assert_allclose(
|
82
|
+
tw4d.rad_int_eq_gemitt_y, tw_rad.eq_gemitt_y, rtol=5e-3, atol=0)
|
83
|
+
xo.assert_allclose(
|
84
|
+
tw4d.rad_int_damping_constant_x_s, tw_rad.damping_constants_s[0],
|
85
|
+
rtol=1e-3, atol=0)
|
86
|
+
xo.assert_allclose(
|
87
|
+
tw4d.rad_int_damping_constant_y_s, tw_rad.damping_constants_s[1],
|
88
|
+
rtol=5e-3, atol=0)
|
89
|
+
xo.assert_allclose(
|
90
|
+
tw4d.rad_int_damping_constant_zeta_s, tw_rad.damping_constants_s[2],
|
91
|
+
rtol=1e-3, atol=0)
|
92
|
+
|
93
|
+
def test_radiation_integrals_sls_combined_function_magnets():
|
94
|
+
|
95
|
+
env = xt.load_madx_lattice(test_data_folder / 'sls_2.0/b075_2024.09.25.madx')
|
96
|
+
line = env.ring
|
97
|
+
line.particle_ref = xt.Particles(energy0=2.7e9, mass0=xt.ELECTRON_MASS_EV)
|
98
|
+
line.configure_bend_model(num_multipole_kicks=20)
|
99
|
+
|
100
|
+
line['vrf'] = 1.8e6
|
101
|
+
line['frf'] = 499.6e6
|
102
|
+
line['lagrf'] = 180.
|
103
|
+
|
104
|
+
line.insert(
|
105
|
+
env.new('cav', 'Cavity', voltage='vrf', frequency='frf', lag='lagrf', at=0))
|
106
|
+
|
107
|
+
tt = line.get_table()
|
108
|
+
tw4d_thick = line.twiss4d()
|
109
|
+
tw6d_thick = line.twiss()
|
110
|
+
|
111
|
+
env['ring_thick'] = env.ring.copy(shallow=True)
|
112
|
+
|
113
|
+
line.discard_tracker()
|
114
|
+
slicing_strategies = [
|
115
|
+
xt.Strategy(slicing=None), # Default
|
116
|
+
xt.Strategy(slicing=xt.Teapot(20), element_type=xt.Bend),
|
117
|
+
xt.Strategy(slicing=xt.Teapot(8), element_type=xt.Quadrupole),
|
118
|
+
]
|
119
|
+
line.slice_thick_elements(slicing_strategies)
|
120
|
+
|
121
|
+
tw4d = line.twiss4d()
|
122
|
+
tw6d = line.twiss()
|
123
|
+
|
124
|
+
line.configure_radiation(model='mean')
|
125
|
+
|
126
|
+
tw_rad = line.twiss(eneloss_and_damping=True, strengths=True)
|
127
|
+
|
128
|
+
tw_integrals = line.twiss(radiation_integrals=True)
|
129
|
+
|
130
|
+
print('ex rad int:', tw_integrals.rad_int_eq_gemitt_x)
|
131
|
+
print('ex Chao: ', tw_rad.eq_gemitt_x)
|
132
|
+
print('ey rad int:', tw_integrals.rad_int_eq_gemitt_y)
|
133
|
+
print('ey Chao: ', tw_rad.eq_gemitt_y)
|
134
|
+
|
135
|
+
print('damping rate x [s^-1] rad int: ', tw_integrals.rad_int_damping_constant_x_s)
|
136
|
+
print('damping rate x [s^-1] eigenval: ', tw_rad.damping_constants_s[0])
|
137
|
+
print('damping rate y [s^-1] rad int: ', tw_integrals.rad_int_damping_constant_y_s)
|
138
|
+
print('damping rate y [s^-1] eigenval: ', tw_rad.damping_constants_s[1])
|
139
|
+
print('damping rate z [s^-1] rad int: ', tw_integrals.rad_int_damping_constant_zeta_s)
|
140
|
+
print('damping rate z [s^-1] eigenval: ', tw_rad.damping_constants_s[2])
|
141
|
+
|
142
|
+
xo.assert_allclose(
|
143
|
+
tw_integrals.rad_int_eq_gemitt_x, tw_rad.eq_gemitt_x, rtol=1e-3, atol=0)
|
144
|
+
xo.assert_allclose(
|
145
|
+
tw_integrals.rad_int_eq_gemitt_y, tw_rad.eq_gemitt_y, rtol=5e-3, atol=1e-20)
|
146
|
+
xo.assert_allclose(
|
147
|
+
tw_integrals.rad_int_damping_constant_x_s, tw_rad.damping_constants_s[0],
|
148
|
+
rtol=1e-3, atol=0)
|
149
|
+
xo.assert_allclose(
|
150
|
+
tw_integrals.rad_int_damping_constant_y_s, tw_rad.damping_constants_s[1],
|
151
|
+
rtol=5e-3, atol=0)
|
152
|
+
xo.assert_allclose(
|
153
|
+
tw_integrals.rad_int_damping_constant_zeta_s, tw_rad.damping_constants_s[2],
|
154
|
+
rtol=1e-3, atol=0)
|
155
|
+
|
156
|
+
@pytest.mark.parametrize('tilt', [True, False], ids=['tilt', 'no_tilt'])
|
157
|
+
def test_radiation_integrals_sps_vs_df(tilt):
|
158
|
+
env = xt.load_madx_lattice(test_data_folder / 'sps_thick/sps.seq')
|
159
|
+
env.vars.load_madx(test_data_folder / 'sps_thick/lhc_q20.str')
|
160
|
+
line = env.sps
|
161
|
+
|
162
|
+
line.particle_ref = xt.Particles(mass0=xt.ELECTRON_MASS_EV, energy0=10e9)
|
163
|
+
|
164
|
+
line.insert('zeta_shift', obj=xt.ZetaShift(), at=0)
|
165
|
+
|
166
|
+
# RF set tp stay in the linear region
|
167
|
+
env['actcse.31632'].voltage = 2500e6
|
168
|
+
env['actcse.31632'].frequency = 3e6
|
169
|
+
env['actcse.31632'].lag = 180.
|
170
|
+
|
171
|
+
if tilt:
|
172
|
+
|
173
|
+
tt = line.get_table()
|
174
|
+
tt_mb = tt.rows['mb.*']
|
175
|
+
tt_lsf = tt.rows['lsf.*']
|
176
|
+
tt_lsd = tt.rows['lsd.*']
|
177
|
+
|
178
|
+
for nn in tt_mb.name:
|
179
|
+
line[nn].rot_s_rad = np.deg2rad(90)
|
180
|
+
|
181
|
+
# I need skew sextupoles to correct the chromaticity when the dispersion is vertical
|
182
|
+
for nn in list(tt_lsf.name) + list(tt_lsd.name):
|
183
|
+
line[nn].rot_s_rad = np.deg2rad(-30)
|
184
|
+
|
185
|
+
opt_q = line.match(
|
186
|
+
solve=False,
|
187
|
+
vary=xt.VaryList(['kqf', 'kqd'], step=1e-4),
|
188
|
+
targets=xt.TargetSet(qx=20.18, qy=20.13, tol=1e-4))
|
189
|
+
opt_q.solve()
|
190
|
+
|
191
|
+
opt_chrom = line.match(
|
192
|
+
solve=False,
|
193
|
+
vary=xt.VaryList(['klsfb', 'klsfa', 'klsdb', 'klsda'], step=1e-4),
|
194
|
+
targets=xt.TargetSet(dqx=1., dqy=1, tol=1e-4))
|
195
|
+
opt_chrom.solve()
|
196
|
+
|
197
|
+
|
198
|
+
tw4d = line.twiss4d()
|
199
|
+
tw6d = line.twiss()
|
200
|
+
|
201
|
+
line.configure_radiation(model='mean')
|
202
|
+
line.compensate_radiation_energy_loss()
|
203
|
+
|
204
|
+
tw_rad = line.twiss(eneloss_and_damping=True)
|
205
|
+
|
206
|
+
# Prepare trim
|
207
|
+
env['frev0'] = 1. / tw4d.T_rev0
|
208
|
+
env['circum'] = tw4d.circumference
|
209
|
+
env['frev_trim'] = 0.
|
210
|
+
|
211
|
+
env['zeta_shift'].dzeta = 'circum * frev_trim / frev0'
|
212
|
+
|
213
|
+
dfrev = np.linspace(-0.7, 0.7, 21)
|
214
|
+
part_x = []
|
215
|
+
part_y = []
|
216
|
+
part_zeta = []
|
217
|
+
damp_cons_x_s = []
|
218
|
+
demp_const_y_s = []
|
219
|
+
damp_const_zeta_s = []
|
220
|
+
eq_gemitt_x = []
|
221
|
+
eq_gemitt_y = []
|
222
|
+
eq_gemitt_zeta = []
|
223
|
+
rad_int_dconst_x_s =[]
|
224
|
+
rad_int_dconst_y_s = []
|
225
|
+
rad_int_dconst_zeta_s = []
|
226
|
+
rad_int_ex = []
|
227
|
+
rad_int_ey = []
|
228
|
+
delta_ave = []
|
229
|
+
for dff in dfrev:
|
230
|
+
print(f'dfrev: {dff}')
|
231
|
+
env['frev_trim'] = dff
|
232
|
+
tw = line.twiss(eneloss_and_damping=True,
|
233
|
+
radiation_integrals=True)
|
234
|
+
part_x.append(tw.partition_numbers[0])
|
235
|
+
part_y.append(tw.partition_numbers[1])
|
236
|
+
part_zeta.append(tw.partition_numbers[2])
|
237
|
+
eq_gemitt_x.append(tw.eq_gemitt_x)
|
238
|
+
eq_gemitt_y.append(tw.eq_gemitt_y)
|
239
|
+
eq_gemitt_zeta.append(tw.eq_gemitt_zeta)
|
240
|
+
delta_ave.append(tw.delta.mean())
|
241
|
+
|
242
|
+
damp_cons_x_s.append(tw.damping_constants_s[0])
|
243
|
+
damp_const_zeta_s.append(tw.damping_constants_s[2])
|
244
|
+
demp_const_y_s.append(tw.damping_constants_s[1])
|
245
|
+
|
246
|
+
rad_int_dconst_x_s.append(tw.rad_int_damping_constant_x_s)
|
247
|
+
rad_int_dconst_y_s.append(tw.rad_int_damping_constant_y_s)
|
248
|
+
rad_int_dconst_zeta_s.append(tw.rad_int_damping_constant_zeta_s)
|
249
|
+
|
250
|
+
rad_int_ex.append(tw.rad_int_eq_gemitt_x)
|
251
|
+
rad_int_ey.append(tw.rad_int_eq_gemitt_y)
|
252
|
+
|
253
|
+
# Cast to numpy arrays
|
254
|
+
part_x = np.array(part_x)
|
255
|
+
part_y = np.array(part_y)
|
256
|
+
part_zeta = np.array(part_zeta)
|
257
|
+
eq_gemitt_x = np.array(eq_gemitt_x)
|
258
|
+
eq_gemitt_y = np.array(eq_gemitt_y)
|
259
|
+
eq_gemitt_zeta = np.array(eq_gemitt_zeta)
|
260
|
+
delta_ave = np.array(delta_ave)
|
261
|
+
damp_cons_x_s = np.array(damp_cons_x_s)
|
262
|
+
demp_const_y_s = np.array(demp_const_y_s)
|
263
|
+
damp_const_zeta_s = np.array(damp_const_zeta_s)
|
264
|
+
rad_int_dconst_x_s = np.array(rad_int_dconst_x_s)
|
265
|
+
rad_int_dconst_y_s = np.array(rad_int_dconst_y_s)
|
266
|
+
rad_int_dconst_zeta_s = np.array(rad_int_dconst_zeta_s)
|
267
|
+
rad_int_ex = np.array(rad_int_ex)
|
268
|
+
rad_int_ey = np.array(rad_int_ey)
|
269
|
+
|
270
|
+
xo.assert_allclose(
|
271
|
+
rad_int_dconst_x_s, damp_cons_x_s, rtol=0.03, atol=0.05)
|
272
|
+
xo.assert_allclose(
|
273
|
+
rad_int_dconst_y_s, demp_const_y_s, rtol=0.03, atol=0.05)
|
274
|
+
xo.assert_allclose(
|
275
|
+
rad_int_dconst_zeta_s, damp_const_zeta_s, rtol=0.03, atol=0.05)
|
276
|
+
|
277
|
+
mask = np.abs(rad_int_dconst_x_s) > 0.25
|
278
|
+
xo.assert_allclose(
|
279
|
+
rad_int_ex[mask], eq_gemitt_x[mask], rtol=0.065, atol=1e-14)
|
280
|
+
mask = np.abs(rad_int_dconst_y_s) > 0.25
|
281
|
+
xo.assert_allclose(
|
282
|
+
rad_int_ey[mask], eq_gemitt_y[mask], rtol=0.065, atol=1e-14)
|
283
|
+
|
284
|
+
if tilt:
|
285
|
+
xo.assert_allclose(
|
286
|
+
rad_int_ex, 0, rtol=0, atol=1e-14)
|
287
|
+
else:
|
288
|
+
xo.assert_allclose(
|
289
|
+
rad_int_ey, 0, rtol=1e-14, atol=1e-14)
|
290
|
+
|
291
|
+
class Wiggler:
|
292
|
+
def __init__(self, period, amplitude, num_periods, angle_rad=0,
|
293
|
+
scheme='121s'):
|
294
|
+
# The scheme_library is a list of all the possible schemes that can be
|
295
|
+
# used. The scheme determines the order of the dipoles in the wiggler.
|
296
|
+
# The 's' and 'a' stand for a symmetric/antisymmetric configuration
|
297
|
+
# respectively.
|
298
|
+
self.scheme_library = ['121s', '121a']
|
299
|
+
|
300
|
+
self.wiggler_period = period
|
301
|
+
self.wiggler_amplitude = amplitude
|
302
|
+
self.wiggler_num_periods = num_periods
|
303
|
+
self.angle_rad = angle_rad
|
304
|
+
self.scheme = scheme
|
305
|
+
self.spacing = 0
|
306
|
+
self.wiggler = self._build_wiggler_()
|
307
|
+
self.wiggler_dict = self._build_dict_()
|
308
|
+
|
309
|
+
def _build_wiggler_(self):
|
310
|
+
wiggler = []
|
311
|
+
|
312
|
+
if self.scheme == '121s':
|
313
|
+
for i in range(self.wiggler_num_periods + 1):
|
314
|
+
if i != 0 and i != self.wiggler_num_periods:
|
315
|
+
wiggler += [
|
316
|
+
xt.Bend(length=self.wiggler_period / 4,
|
317
|
+
k0=-self.wiggler_amplitude, h=0,
|
318
|
+
rot_s_rad=self.angle_rad),
|
319
|
+
xt.Bend(length=self.wiggler_period / 4,
|
320
|
+
k0=-self.wiggler_amplitude, h=0,
|
321
|
+
rot_s_rad=self.angle_rad),
|
322
|
+
xt.Bend(length=self.wiggler_period / 4,
|
323
|
+
k0=self.wiggler_amplitude, h=0,
|
324
|
+
rot_s_rad=self.angle_rad),
|
325
|
+
xt.Bend(length=self.wiggler_period / 4,
|
326
|
+
k0=self.wiggler_amplitude, h=0,
|
327
|
+
rot_s_rad=self.angle_rad)
|
328
|
+
]
|
329
|
+
|
330
|
+
elif i == 0:
|
331
|
+
wiggler += [
|
332
|
+
xt.Bend(length=self.wiggler_period / 4,
|
333
|
+
k0=self.wiggler_amplitude, h=0,
|
334
|
+
rot_s_rad=self.angle_rad)
|
335
|
+
]
|
336
|
+
|
337
|
+
else:
|
338
|
+
wiggler += [
|
339
|
+
xt.Bend(length=self.wiggler_period / 4,
|
340
|
+
k0=-self.wiggler_amplitude, h=0,
|
341
|
+
rot_s_rad=self.angle_rad),
|
342
|
+
xt.Bend(length=self.wiggler_period / 4,
|
343
|
+
k0=-self.wiggler_amplitude, h=0,
|
344
|
+
rot_s_rad=self.angle_rad),
|
345
|
+
xt.Bend(length=self.wiggler_period / 4,
|
346
|
+
k0=self.wiggler_amplitude, h=0,
|
347
|
+
rot_s_rad=self.angle_rad)
|
348
|
+
]
|
349
|
+
|
350
|
+
if self.scheme == '121a':
|
351
|
+
for i in range(self.wiggler_num_periods):
|
352
|
+
sign = 1 if i % 2 == 0 else -1
|
353
|
+
wiggler += [
|
354
|
+
xt.Bend(length=self.wiggler_period / 4,
|
355
|
+
k0=-sign * self.wiggler_amplitude, h=0,
|
356
|
+
rot_s_rad=self.angle_rad),
|
357
|
+
xt.Bend(length=self.wiggler_period / 4,
|
358
|
+
k0=sign * self.wiggler_amplitude, h=0,
|
359
|
+
rot_s_rad=self.angle_rad),
|
360
|
+
xt.Bend(length=self.wiggler_period / 4,
|
361
|
+
k0=sign * self.wiggler_amplitude, h=0,
|
362
|
+
rot_s_rad=self.angle_rad),
|
363
|
+
xt.Bend(length=self.wiggler_period / 4,
|
364
|
+
k0=-sign * self.wiggler_amplitude, h=0,
|
365
|
+
rot_s_rad=self.angle_rad)
|
366
|
+
]
|
367
|
+
|
368
|
+
print(f'wiggler.shape = {len(wiggler)}')
|
369
|
+
|
370
|
+
return wiggler
|
371
|
+
|
372
|
+
def _get_wiggler_names_(self, wiggler, wiggler_number='1'):
|
373
|
+
wiggler_names = []
|
374
|
+
for i in range(len(wiggler)):
|
375
|
+
wiggler_names += ['mwp' + str(i + 1) + '.' + wiggler_number]
|
376
|
+
|
377
|
+
print(f'wiggler_names.shape = {len(wiggler_names)}')
|
378
|
+
|
379
|
+
return wiggler_names
|
380
|
+
|
381
|
+
def _get_element_positions_(self, wiggler):
|
382
|
+
ele_pos = np.zeros(len(wiggler))
|
383
|
+
for i in range(1, len(wiggler)):
|
384
|
+
ele_pos[i] = ele_pos[i - 1] + wiggler[i - 1].length + self.spacing
|
385
|
+
|
386
|
+
print(f'ele_pos.shape = {ele_pos.shape}')
|
387
|
+
|
388
|
+
return ele_pos
|
389
|
+
|
390
|
+
def _build_dict_(self):
|
391
|
+
wiggler = self._build_wiggler_()
|
392
|
+
wiggler_names = self._get_wiggler_names_(wiggler)
|
393
|
+
ele_pos = self._get_element_positions_(wiggler)
|
394
|
+
wiggler_dict = {
|
395
|
+
name: {'element': obj, 'position': pos}
|
396
|
+
for name, obj, pos in zip(wiggler_names, wiggler, ele_pos)
|
397
|
+
}
|
398
|
+
|
399
|
+
return wiggler_dict
|
@@ -26,7 +26,8 @@ def test_rf_track_lattice():
|
|
26
26
|
|
27
27
|
# Define the RF-Track element
|
28
28
|
vol = RFT.Volume()
|
29
|
-
vol.dt_mm =
|
29
|
+
vol.dt_mm = 1
|
30
|
+
vol.odeint_epsabs = 1e-10
|
30
31
|
vol.odeint_algorithm = 'rk2'
|
31
32
|
vol.set_static_Bfield(0.0, By, 0.0)
|
32
33
|
vol.set_s0(rho, 0.0, 0.0, 0.0, 0.0, 0.0)
|
@@ -41,29 +42,29 @@ def test_rf_track_lattice():
|
|
41
42
|
pi = np.pi
|
42
43
|
elements = {
|
43
44
|
'd1.1': xt.Drift(length=1),
|
44
|
-
'mb1.1': xt.RFT_Element(element=vol),
|
45
|
+
'mb1.1': xt.RFT_Element(element=vol,update_ref=False),
|
45
46
|
'd2.1': xt.Drift(length=1),
|
46
47
|
|
47
48
|
'mqd.1': xt.Quadrupole(length=0.3, k1=-0.7),
|
48
49
|
'd3.1': xt.Drift(length=1),
|
49
|
-
'mb2.1': xt.RFT_Element(element=vol),
|
50
|
+
'mb2.1': xt.RFT_Element(element=vol,update_ref=False),
|
50
51
|
'd4.1': xt.Drift(length=1),
|
51
52
|
|
52
53
|
'd1.2': xt.Drift(length=1),
|
53
|
-
'mb1.2': xt.RFT_Element(element=vol),
|
54
|
+
'mb1.2': xt.RFT_Element(element=vol,update_ref=False),
|
54
55
|
'd2.2': xt.Drift(length=1),
|
55
56
|
|
56
57
|
'mqd.2': xt.Quadrupole(length=0.3, k1=-0.7),
|
57
58
|
'd3.2': xt.Drift(length=1),
|
58
|
-
'mb2.2': xt.RFT_Element(element=vol),
|
59
|
+
'mb2.2': xt.RFT_Element(element=vol,update_ref=False),
|
59
60
|
'd4.2': xt.Drift(length=1),
|
60
|
-
|
61
|
+
}
|
61
62
|
|
62
63
|
# Build the ring
|
63
64
|
line = xt.Line(elements=elements, element_names=list(elements.keys()))
|
64
65
|
line.particle_ref = xt.Particles(p0c=p0c, mass0=xt.PROTON_MASS_EV)
|
65
66
|
line.configure_bend_model(core='full', edge=None)
|
66
|
-
|
67
|
+
line.reset_s_at_end_turn = False
|
67
68
|
|
68
69
|
## Transfer lattice on context and compile tracking code=
|
69
70
|
line.build_tracker()
|
@@ -74,13 +75,13 @@ def test_rf_track_lattice():
|
|
74
75
|
rng = np.random.default_rng(2021)
|
75
76
|
|
76
77
|
particles0 = xp.Particles(p0c=p0c, #eV
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
78
|
+
q0=1, mass0=xp.PROTON_MASS_EV,
|
79
|
+
x=rng.uniform(-1e-3, 1e-3, n_part),
|
80
|
+
px=rng.uniform(-1e-5, 1e-5, n_part),
|
81
|
+
y=rng.uniform(-2e-3, 2e-3, n_part),
|
82
|
+
py=rng.uniform(-3e-5, 3e-5, n_part),
|
83
|
+
zeta=rng.uniform(-1e-2, 1e-2, n_part),
|
84
|
+
delta=rng.uniform(-1e-2, 1e-2, n_part))
|
84
85
|
|
85
86
|
particles_rft = particles0.copy()
|
86
87
|
|
@@ -96,6 +97,7 @@ def test_rf_track_lattice():
|
|
96
97
|
ele_xt['mb2.2'] = b_xt
|
97
98
|
|
98
99
|
line_ref = xt.Line(elements=ele_xt, element_names=line.element_names)
|
100
|
+
line_ref.reset_s_at_end_turn = False
|
99
101
|
line_ref.build_tracker()
|
100
102
|
particles_ref = particles0.copy()
|
101
103
|
|
@@ -105,18 +107,19 @@ def test_rf_track_lattice():
|
|
105
107
|
|
106
108
|
assert_allclose = np.testing.assert_allclose
|
107
109
|
assert np.all(particles_rft.particle_id == particles_ref.particle_id)
|
108
|
-
assert_allclose(particles_rft.x, particles_ref.x, atol=
|
109
|
-
assert_allclose(particles_rft.px, particles_ref.px, atol=
|
110
|
-
assert_allclose(particles_rft.y, particles_ref.y, atol=
|
111
|
-
assert_allclose(particles_rft.py, particles_ref.py, atol=
|
112
|
-
assert_allclose(particles_rft.rpp, particles_ref.rpp, atol=
|
113
|
-
assert_allclose(particles_rft.rvv, particles_ref.rvv, atol=1e-
|
114
|
-
assert_allclose(particles_rft.ptau, particles_ref.ptau, atol=
|
115
|
-
assert_allclose(particles_rft.delta, particles_ref.delta, atol=
|
110
|
+
assert_allclose(particles_rft.x, particles_ref.x, atol=1e-10, rtol=0)
|
111
|
+
assert_allclose(particles_rft.px, particles_ref.px, atol=1e-10, rtol=0)
|
112
|
+
assert_allclose(particles_rft.y, particles_ref.y, atol=1e-10, rtol=0)
|
113
|
+
assert_allclose(particles_rft.py, particles_ref.py, atol=1e-10, rtol=0)
|
114
|
+
assert_allclose(particles_rft.rpp, particles_ref.rpp, atol=1e-10, rtol=0)
|
115
|
+
assert_allclose(particles_rft.rvv, particles_ref.rvv, atol=1e-10, rtol=0)
|
116
|
+
assert_allclose(particles_rft.ptau, particles_ref.ptau, atol=1e-10, rtol=0)
|
117
|
+
assert_allclose(particles_rft.delta, particles_ref.delta, atol=1e-10, rtol=0)
|
116
118
|
assert_allclose(particles_rft.chi, particles_ref.chi, atol=1e-10, rtol=0)
|
117
|
-
assert_allclose(particles_rft.p0c, particles_ref.p0c, atol=
|
118
|
-
assert_allclose(particles_rft.energy0, particles_ref.energy0, atol=
|
119
|
-
assert_allclose(particles_rft.zeta, particles_ref.zeta, atol=
|
119
|
+
assert_allclose(particles_rft.p0c, particles_ref.p0c, atol=1e-10, rtol=0)
|
120
|
+
assert_allclose(particles_rft.energy0, particles_ref.energy0, atol=1e-10, rtol=0)
|
121
|
+
assert_allclose(particles_rft.zeta, particles_ref.zeta, atol=1e-10, rtol=0)
|
120
122
|
assert_allclose(particles_rft.beta0, particles_ref.beta0, atol=1e-10, rtol=0)
|
121
123
|
assert_allclose(particles_rft.mass0, particles_ref.mass0, atol=1e-10, rtol=0)
|
122
124
|
assert_allclose(particles_rft.gamma0, particles_ref.gamma0, atol=1e-10, rtol=0)
|
125
|
+
assert_allclose(particles_rft.s, particles_ref.s, atol=1e-10, rtol=0)
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = '0.84.3'
|
@@ -23,7 +23,7 @@ class RFT_Element:
|
|
23
23
|
iscollective = True # <-- To state that the element uses a python track method
|
24
24
|
isthick = True
|
25
25
|
|
26
|
-
def __init__(self, element):
|
26
|
+
def __init__(self, element, update_ref=False):
|
27
27
|
|
28
28
|
import RF_Track as rft
|
29
29
|
self.length = element.get_length()
|
@@ -33,6 +33,7 @@ class RFT_Element:
|
|
33
33
|
self.bunch_out = rft.Bunch6d()
|
34
34
|
self.arr_for_rft = np.empty(0)
|
35
35
|
self.arr_for_xt = np.empty(0)
|
36
|
+
self.update_ref = update_ref
|
36
37
|
|
37
38
|
def track(self, particles, increment_at_element=False):
|
38
39
|
|
@@ -67,10 +68,13 @@ class RFT_Element:
|
|
67
68
|
|
68
69
|
# Update particles
|
69
70
|
self.arr_for_xt = self.arr_for_xt[self.arr_for_xt[:,7].argsort()] # sort by particle id
|
71
|
+
if self.update_ref:
|
72
|
+
p.p0c = pref1[0].Pc * 1e6
|
73
|
+
p.s += self.length
|
70
74
|
p.x = self.arr_for_xt[:,0] / 1e3 # m
|
71
75
|
p.px = self.arr_for_xt[:,1] * 1e6 / p.p0c # rad
|
72
76
|
p.y = self.arr_for_xt[:,2] / 1e3 # m
|
73
77
|
p.py = self.arr_for_xt[:,3] * 1e6 / p.p0c # rad
|
74
|
-
p.zeta
|
78
|
+
p.zeta = self.length - self.arr_for_xt[:,4] * p.beta0 / 1e3 # m
|
75
79
|
p.delta = (self.arr_for_xt[:,5] * 1e6 - p.p0c) / p.p0c #
|
76
80
|
p.state[np.isnan(self.arr_for_xt[:,6])!=np.isnan(self.arr_for_rft[:,9])] = -400 # lost in RF-Track
|
@@ -68,11 +68,12 @@
|
|
68
68
|
#define END_PER_PARTICLE_BLOCK \
|
69
69
|
}
|
70
70
|
|
71
|
-
#define VECTORIZE_OVER(INDEX_NAME, COUNT) \
|
72
|
-
|
73
|
-
|
71
|
+
#define VECTORIZE_OVER(INDEX_NAME, COUNT) { \
|
72
|
+
int INDEX_NAME = blockDim.x * blockIdx.x + threadIdx.x; \
|
73
|
+
if (INDEX_NAME < (COUNT)) {
|
74
74
|
|
75
75
|
#define END_VECTORIZE \
|
76
|
+
} \
|
76
77
|
}
|
77
78
|
#endif // XO_CONTEXT_CUDA
|
78
79
|
|
@@ -2021,6 +2021,10 @@ class Line:
|
|
2021
2021
|
qx = np.zeros(4)
|
2022
2022
|
qy = np.zeros(4)
|
2023
2023
|
|
2024
|
+
# remove average in case there is a closed orbit
|
2025
|
+
mon.x-=mon.x.mean(axis=1,keepdims=True)
|
2026
|
+
mon.y-=mon.y.mean(axis=1,keepdims=True)
|
2027
|
+
|
2024
2028
|
for ii in range(len(qx)):
|
2025
2029
|
qx[ii] = np.abs(nl.get_tune(mon.x[ii, :]))
|
2026
2030
|
qy[ii] = np.abs(nl.get_tune(mon.y[ii, :]))
|
@@ -864,6 +864,11 @@ class Tracker:
|
|
864
864
|
if isinstance(pp, TrackerPartNonCollective):
|
865
865
|
ret = pp.track(particles, turn_by_turn_monitor=monitor)
|
866
866
|
else:
|
867
|
+
if hasattr(monitor, 'ebe_mode') and monitor.ebe_mode == 1:
|
868
|
+
assert monitor._context is particles._context, (
|
869
|
+
'Element-by-element monitor not supported in multi-context'
|
870
|
+
' mode')
|
871
|
+
monitor.track(particles)
|
867
872
|
ret = pp.track(particles)
|
868
873
|
|
869
874
|
return stop_tracking, skip, ret
|
@@ -3902,7 +3902,7 @@ class TwissTable(Table):
|
|
3902
3902
|
|
3903
3903
|
mass0 = self.particle_on_co.mass0
|
3904
3904
|
r0 = self.particle_on_co.get_classical_particle_radius0()
|
3905
|
-
gamma0 = self.gamma0
|
3905
|
+
gamma0 = self.particle_on_co.gamma0[0]
|
3906
3906
|
|
3907
3907
|
dxprime = dpx * (1 - delta) - kin_px
|
3908
3908
|
dyprime = dpy * (1 - delta) - kin_py
|
@@ -3957,8 +3957,10 @@ class TwissTable(Table):
|
|
3957
3957
|
|
3958
3958
|
i3_integrand = np.abs(kappa * kappa * kappa)
|
3959
3959
|
|
3960
|
-
i4x_integrand = (
|
3961
|
-
i4y_integrand = (
|
3960
|
+
i4x_integrand = dx * (kappa0_x * kappa**2 + 2 * k1 * kappa_x)
|
3961
|
+
i4y_integrand = dy * (kappa0_y * kappa**2 - 2 * k1 * kappa_y)
|
3962
|
+
i4_integrand = i4x_integrand + i4y_integrand
|
3963
|
+
|
3962
3964
|
|
3963
3965
|
i5x_integrand = np.abs(kappa * kappa * kappa) * Hx_rad
|
3964
3966
|
i5y_integrand = np.abs(kappa * kappa * kappa) * Hy_rad
|
@@ -3968,6 +3970,7 @@ class TwissTable(Table):
|
|
3968
3970
|
i1y = np.sum(i1y_integrand * length)
|
3969
3971
|
i2 = np.sum(i2_integrand * length)
|
3970
3972
|
i3 = np.sum(i3_integrand * length)
|
3973
|
+
i4 = np.sum(i4_integrand * length)
|
3971
3974
|
i4x = np.sum(i4x_integrand * length)
|
3972
3975
|
i4y = np.sum(i4y_integrand * length)
|
3973
3976
|
i5x = np.sum(i5x_integrand * length)
|
@@ -3982,7 +3985,7 @@ class TwissTable(Table):
|
|
3982
3985
|
# Damping constants
|
3983
3986
|
damping_constant_x_s = r0/3 * gamma0**3 * clight/self.circumference * (i2 - i4x)
|
3984
3987
|
damping_constant_y_s = r0/3 * gamma0**3 * clight/self.circumference * (i2 - i4y)
|
3985
|
-
damping_constant_zeta_s = r0/3 * gamma0**3 * clight/self.circumference * (2*i2 +
|
3988
|
+
damping_constant_zeta_s = r0/3 * gamma0**3 * clight/self.circumference * (2*i2 + i4)
|
3986
3989
|
|
3987
3990
|
# Velocity direction (for spin)
|
3988
3991
|
tempv = np.sqrt(xp**2 + yp**2 + 1)
|
@@ -3991,14 +3994,13 @@ class TwissTable(Table):
|
|
3991
3994
|
iv_z = 1 / tempv
|
3992
3995
|
|
3993
3996
|
cols = {
|
3994
|
-
'rad_int_kappax': kappa_x,
|
3995
|
-
'rad_int_kappay': kappa_y,
|
3996
3997
|
'rad_int_hx': Hx_rad,
|
3997
3998
|
'rad_int_hy': Hy_rad,
|
3998
3999
|
'rad_int_i1x_integrand': i1x_integrand,
|
3999
4000
|
'rad_int_i1y_integrand': i1y_integrand,
|
4000
4001
|
'rad_int_i2_integrand': i2_integrand,
|
4001
4002
|
'rad_int_i3_integrand': i3_integrand,
|
4003
|
+
'rad_int_i4_integrand': i4_integrand,
|
4002
4004
|
'rad_int_i4x_integrand': i4x_integrand,
|
4003
4005
|
'rad_int_i4y_integrand': i4y_integrand,
|
4004
4006
|
'rad_int_i5x_integrand': i5x_integrand,
|
@@ -4019,6 +4021,7 @@ class TwissTable(Table):
|
|
4019
4021
|
'rad_int_i1y': i1y,
|
4020
4022
|
'rad_int_i2': i2,
|
4021
4023
|
'rad_int_i3': i3,
|
4024
|
+
'rad_int_i4': i4,
|
4022
4025
|
'rad_int_i4x': i4x,
|
4023
4026
|
'rad_int_i4y': i4y,
|
4024
4027
|
'rad_int_i5x': i5x,
|
@@ -84,6 +84,7 @@ tests/test_radial_steering.py
|
|
84
84
|
tests/test_radiation.py
|
85
85
|
tests/test_radiation_equilibrium_emittances.py
|
86
86
|
tests/test_radiation_equilibrium_emittances_thick.py
|
87
|
+
tests/test_radiation_integrals.py
|
87
88
|
tests/test_random_gen.py
|
88
89
|
tests/test_random_gen_exp.py
|
89
90
|
tests/test_random_gen_gauss.py
|
xtrack-0.84.2/xtrack/_version.py
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = '0.84.2'
|
File without changes
|
File without changes
|
File without changes
|