xtrack 0.84.0__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.0/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.0 → xtrack-0.84.3}/tests/test_rf_track.py +28 -25
- xtrack-0.84.3/xtrack/_version.py +1 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/apertures_src/limitpolygon.h +32 -33
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/rft_element.py +6 -2
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/headers/track.h +29 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/line.py +4 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/particles/rng_src/particles_rng.h +9 -10
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/tracker.py +5 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/twiss.py +9 -6
- {xtrack-0.84.0 → xtrack-0.84.3/xtrack.egg-info}/PKG-INFO +1 -1
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack.egg-info/SOURCES.txt +1 -0
- xtrack-0.84.0/xtrack/_version.py +0 -1
- {xtrack-0.84.0 → xtrack-0.84.3}/LICENSE +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/MANIFEST.in +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/README.md +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/base_classes.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/be_beamfields/BB6D.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/be_beamfields/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/be_beamfields/beambeam.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/be_beamfields/boost.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/be_beamfields/qgauss.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/be_beamfields/slicing.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/be_beamfields/spacecharge.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/elements.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/line.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/mathlibs.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/particles.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/ducktrack/temp_pyparticles.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/pyproject.toml +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/setup.cfg +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/setup.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_acceleration.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_amplitude_detuning.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_aperture_table.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_apertures.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_attr_replicas_and_slices.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_bucket_with_ref_energy_change.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_cavity_absolute_time.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_chromatic_functions_vs_madx.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_coasting.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_collective_tracker.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_collimation.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_electron_cooler.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_element_characterization_functions.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_element_internal_record.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_elements.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_elements_classflags.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_elements_thick.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_environment.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_fcc_ee_solenoid_correction.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_footprint.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_freeze_longitudinal.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_full_rings.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_h6_sps_beamline.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_hvkick.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_ions.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_legacy_multiline_to_env.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_lhc_env.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_lhc_match_phase_15.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_line.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_lumi.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_mad_writer.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_madloader.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_madnginterface.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_magnet.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_match_and_track_from_element.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_match_coupling_knob.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_match_nested.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_match_optics_and_ip_knob.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_match_orbit_bump.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_match_tune_chroma_cminus.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_monitor.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_multi_bunch_gauss.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_multiline.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_multisetter.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_multispecies.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_native_madloader.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_optimize_for_tracking.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_particles.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_particles_basics.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_particles_pdg.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_periodic_symmetric_twiss_and_match.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_pipeline.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_prebuild_kernels.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_ps_against_ptc.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_ps_multiturn_twiss.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_psb_chicane.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_pyht_interface.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_radial_steering.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_radiation.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_radiation_equilibrium_emittances.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_radiation_equilibrium_emittances_thick.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_random_gen.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_random_gen_exp.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_random_gen_gauss.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_random_gen_ruth.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_rbend_rbarc.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_rotation_signs.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_second_order_taylor_map.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_seeds.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_slice_and_insert_with_replicas.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_slice_elements.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_slicing.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_solenoid_bz_map_vs_boris.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_spacecharge_in_ring.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_spin.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_sps_thick.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_survey.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_tapering.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_thick_lhc.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_tilt_shifts.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_tracker.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_trajectory_correcton.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_twiss.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_twiss_vs_madx_psb.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_vs_madx.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/tests/test_xmask_orbit_correction.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/_temp/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/_temp/lhc_match/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/_temp/lhc_match/var_limits.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/aperture_meas.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/base_element.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/apertures.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/beam_interaction.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/bend.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/cavity.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/drift.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/drift_slice_rbend.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/electroncooler.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/elens.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/exciter.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/magnet.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/magnet_drift.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/magnet_edge.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/magnet_kick.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/marker.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/multipole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/multipoleedge.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/octupole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/quadrupole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/rbend.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/rfmultipole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/sextupole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/solenoid.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/srotation.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thick_slice_bend.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thick_slice_drift.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thick_slice_rbend.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thick_slice_solenoid.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_bend.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_octupole_entry.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_octupole_exit.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_entry.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_exit.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_rbend.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_rbend_entry.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_rbend_exit.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_sextupole_entry.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/thin_slice_sextupole_exit.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_bend.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_cavity.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_drift.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_magnet.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_magnet_drift.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_magnet_edge.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_magnet_kick.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_magnet_radiation.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_mult_fringe.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_multipolar_components.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_multipole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_quadrupole.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_solenoid.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_wedge.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/wedge.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/wire.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/exciter.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/magnets.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/slice_elements.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/beam_elements/slice_elements_thick.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/environment.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/footprint.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/general.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/headers/atomicadd.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/headers/checks.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/headers/constants.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/headers/particle_states.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/headers/synrad_spectrum.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/internal_record.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/json.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/linear_normal_form.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/loss_location_refinement/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/loss_location_refinement/loss_location_refinement.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/lumi.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/mad_loader.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/mad_parser/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/mad_parser/loader.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/mad_parser/madx.lark +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/mad_parser/parse.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/mad_writer.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/madng_interface.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/match.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/monitors/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/monitors/beam_position_monitor.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/monitors/beam_position_monitor.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/monitors/beam_profile_monitor.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/monitors/beam_profile_monitor.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/monitors/beam_size_monitor.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/monitors/beam_size_monitor.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/monitors/last_turns_monitor.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/monitors/last_turns_monitor.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/monitors/particles_monitor.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/monitors/particles_monitor.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/multiline.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/multiline_legacy/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/multiline_legacy/multiline_legacy.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/multiline_legacy/shared_knobs.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/multisetter/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/multisetter/multisetter.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/particles/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/particles/constants.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/particles/masses.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/particles/particles.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/particles/pdg.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/particles/rng_src/base_rng.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/pipeline/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/pipeline/core.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/pipeline/manager.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/pipeline/multitracker.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/progress_indicator.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/random/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/random/random_generators.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/random/random_src/exponential.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/random/random_src/normal.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/random/random_src/rutherford.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/random/random_src/uniform.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/random/random_src/uniform_accurate.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/slicing.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/survey.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/svgutils/__init__.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/svgutils/parser.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/svgutils/path.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/svgutils/svgutils.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/synctime.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/tapering.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/targets.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/tracker_data.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/tracker_src/tracker.h +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/trajectory_correction.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack/twissplot.py +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack.egg-info/dependency_links.txt +0 -0
- {xtrack-0.84.0 → xtrack-0.84.3}/xtrack.egg-info/requires.txt +0 -0
- {xtrack-0.84.0 → 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'
|
@@ -56,30 +56,30 @@ void LimitPolygon_track_local_particle(LimitPolygonData el,
|
|
56
56
|
GPUKERN
|
57
57
|
void LimitPolygon_impact_point_and_normal(
|
58
58
|
LimitPolygonData el,
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
59
|
+
GPUGLMEM const double* x_in,
|
60
|
+
GPUGLMEM const double* y_in,
|
61
|
+
GPUGLMEM const double* z_in,
|
62
|
+
GPUGLMEM const double* x_out,
|
63
|
+
GPUGLMEM const double* y_out,
|
64
|
+
GPUGLMEM const double* z_out,
|
65
|
+
const int64_t n_impacts,
|
66
|
+
GPUGLMEM double* x_inters,
|
67
|
+
GPUGLMEM double* y_inters,
|
68
|
+
GPUGLMEM double* z_inters,
|
69
|
+
GPUGLMEM double* Nx_inters,
|
70
|
+
GPUGLMEM double* Ny_inters,
|
71
|
+
GPUGLMEM int64_t* i_found){
|
72
|
+
|
73
73
|
double const tol = 1e-13;
|
74
74
|
|
75
75
|
int64_t N_edg = LimitPolygonData_len_x_vertices(el);
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
76
|
+
GPUGLMEM const double* Vx = LimitPolygonData_getp1_x_vertices(el, 0);
|
77
|
+
GPUGLMEM const double* Vy = LimitPolygonData_getp1_y_vertices(el, 0);
|
78
|
+
GPUGLMEM const double* Nx = LimitPolygonData_getp1_x_normal(el, 0);
|
79
|
+
GPUGLMEM const double* Ny = LimitPolygonData_getp1_y_normal(el, 0);
|
80
80
|
double resc_fac = LimitPolygonData_get_resc_fac(el);
|
81
81
|
|
82
|
-
|
82
|
+
VECTORIZE_OVER(i_imp, n_impacts);
|
83
83
|
|
84
84
|
double t_min_curr = 1.;
|
85
85
|
int64_t i_found_curr = -1;
|
@@ -89,9 +89,8 @@ void LimitPolygon_impact_point_and_normal(
|
|
89
89
|
double y_out_curr = y_out[i_imp];
|
90
90
|
|
91
91
|
for (int64_t ii=0; ii<N_edg; ii++){
|
92
|
-
|
93
|
-
|
94
|
-
double t_ii;
|
92
|
+
double t_border;
|
93
|
+
double t_ii;
|
95
94
|
double const den = ((y_out_curr-y_in_curr)*(Vx[ii+1]-Vx[ii])
|
96
95
|
+(x_in_curr-x_out_curr)*(Vy[ii+1]-Vy[ii]));
|
97
96
|
if (den == 0.){
|
@@ -99,23 +98,23 @@ void LimitPolygon_impact_point_and_normal(
|
|
99
98
|
// the case case overlapping the edge is not possible (this would not allow Pin inside and Pout outside - a point on the edge is condidered outside)
|
100
99
|
// the only case left is segment parallel to tue edge => no intersection
|
101
100
|
t_border = -2.;
|
102
|
-
|
101
|
+
}
|
103
102
|
else{
|
104
103
|
t_border=((y_out_curr-y_in_curr)*(x_in_curr-Vx[ii])
|
105
104
|
+(x_in_curr-x_out_curr)*(y_in_curr-Vy[ii]))/den;
|
106
|
-
|
105
|
+
}
|
107
106
|
|
108
107
|
if (t_border>=0.-tol && t_border<=1.+tol){
|
109
108
|
t_ii = (Nx[ii]*(Vx[ii]-x_in_curr)
|
110
|
-
|
111
|
-
|
112
|
-
|
109
|
+
+Ny[ii]*(Vy[ii]-y_in_curr))
|
110
|
+
/(Nx[ii]*(x_out_curr-x_in_curr)
|
111
|
+
+Ny[ii]*(y_out_curr-y_in_curr));
|
113
112
|
if (t_ii>=0.-tol && t_ii<t_min_curr+tol){
|
114
|
-
t_min_curr=t_ii;
|
113
|
+
t_min_curr = t_ii;
|
115
114
|
i_found_curr = ii;
|
116
|
-
|
115
|
+
}
|
117
116
|
}
|
118
|
-
|
117
|
+
}
|
119
118
|
|
120
119
|
t_min_curr=resc_fac*t_min_curr;
|
121
120
|
x_inters[i_imp]=t_min_curr*x_out_curr+(1.-t_min_curr)*x_in_curr;
|
@@ -125,10 +124,10 @@ void LimitPolygon_impact_point_and_normal(
|
|
125
124
|
if (i_found_curr>=0){
|
126
125
|
Nx_inters[i_imp] = Nx[i_found_curr];
|
127
126
|
Ny_inters[i_imp] = Ny[i_found_curr];
|
128
|
-
|
127
|
+
}
|
129
128
|
i_found[i_imp] = i_found_curr;
|
130
|
-
|
131
|
-
|
129
|
+
|
130
|
+
END_VECTORIZE;
|
132
131
|
}
|
133
132
|
|
134
133
|
#endif
|
@@ -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
|