xtrack 0.98.6__tar.gz → 0.98.8__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.98.6/xtrack.egg-info → xtrack-0.98.8}/PKG-INFO +1 -1
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_cavity_absolute_time.py +1 -0
- xtrack-0.98.8/tests/test_cavity_harmonic.py +282 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_madloader.py +1 -2
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_native_madloader.py +3 -3
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_tapering.py +13 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_twiss.py +21 -19
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_twiss_vs_madx_psb.py +0 -1
- xtrack-0.98.8/xtrack/_version.py +1 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/base_element.py +4 -5
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements.py +43 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/cavity.h +1 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/crab_cavity.h +1 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/rfmultipole.h +2 -1
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thick_slice_cavity.h +1 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thick_slice_crab_cavity.h +1 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_cavity.h +1 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_crab_cavity.h +1 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_rf.h +13 -2
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_rf.template.h +13 -2
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/slice_elements_thin.py +1 -1
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/builder.py +6 -4
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/environment.py +3 -13
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/line.py +10 -5
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/mad_loader.py +6 -7
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/mad_parser/loader.py +11 -9
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/mad_writer.py +1 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/particles/particles.py +1 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/tapering.py +8 -2
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/tracker.py +1 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/twiss.py +182 -108
- {xtrack-0.98.6 → xtrack-0.98.8/xtrack.egg-info}/PKG-INFO +1 -1
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack.egg-info/SOURCES.txt +1 -1
- xtrack-0.98.6/xtrack/_version.py +0 -1
- xtrack-0.98.6/xtrack/beam_elements/elements_src/temprf.h +0 -43
- {xtrack-0.98.6 → xtrack-0.98.8}/LICENSE +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/MANIFEST.in +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/README.md +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/base_classes.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/be_beamfields/BB6D.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/be_beamfields/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/be_beamfields/beambeam.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/be_beamfields/boost.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/be_beamfields/qgauss.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/be_beamfields/slicing.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/be_beamfields/spacecharge.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/elements.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/line.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/mathlibs.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/particles.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/ducktrack/temp_pyparticles.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/pyproject.toml +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/setup.cfg +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/setup.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_acceleration.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_acdipole.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_acdipole_twiss.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_amplitude_detuning.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_aperture_polygon.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_aperture_table.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_apertures.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_attr_replicas_and_slices.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_boris_spatial.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_bucket_with_ref_energy_change.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_chromatic_functions_vs_madx.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_coasting.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_collective_tracker.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_collimation.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_coupling_edwards_teng.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_electron_cooler.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_element_characterization_functions.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_element_internal_record.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_elements.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_elements_classflags.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_elements_thick.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_environment.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_fcc_ee_solenoid_correction.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_footprint.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_freeze_longitudinal.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_full_rings.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_h6_sps_beamline.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_hvkick.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_ions.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_json.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_lhc_env.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_lhc_match_phase_15.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_line.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_load.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_load_vars.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_lumi.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_mad_writer.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_madnginterface.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_magnet.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_match_and_track_from_element.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_match_coupling_knob.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_match_nested.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_match_optics_and_ip_knob.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_match_orbit_bump.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_match_tune_chroma_cminus.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_misalign.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_monitor.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_multi_bunch_gauss.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_multiline.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_multisetter.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_multispecies.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_native_madloader_lhc.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_native_madloader_lhc_thin.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_native_madloader_ps.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_native_madloader_sps.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_native_madloader_ti2.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_optimize_for_tracking.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_particles.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_particles_basics.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_particles_pdg.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_pipeline.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_prebuild_kernels.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_ps_against_ptc.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_ps_multiturn_twiss.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_psb_chicane.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_pyht_interface.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_quadrupole_fringe_ptc.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_quadrupole_wedge.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_radial_steering.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_radiation.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_radiation_equilibrium_emittances.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_radiation_equilibrium_emittances_thick.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_radiation_integrals.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_random_gen.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_random_gen_exp.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_random_gen_gauss.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_random_gen_ruth.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_rbend_straight_body.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_rf_track.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_rotation_signs.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_second_order_taylor_map.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_seeds.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_slice_and_insert_with_replicas.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_slice_elements.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_slicing.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_solenoid_bz_map_vs_boris.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_solenoid_bz_map_vs_boris_legacy.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_spacecharge_in_ring.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_spin.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_sps_thick_cpymad_loader.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_sps_thick_native_loader.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_survey.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_thick_kickers_rf_crab.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_thick_lhc.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_tilt_shifts.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_tracker.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_trajectory_correcton.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_twiss_to_file.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_vs_madx.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/tests/test_xmask_orbit_correction.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/_temp/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/_temp/lhc_match/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/_temp/lhc_match/var_limits.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/_temp/python_lattice_writer/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/_temp/python_lattice_writer/lattice_py_generation.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/aperture_meas.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/acdipole.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/apertures.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/apertures_src/limitpolygon.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/beam_interaction.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/_generate_slice_elements_c_code.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/_include_integrator.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/acdipole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/bend.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/default_magnet_config.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/drift.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/drift_exact.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/drift_exact_slice.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/drift_slice_cavity.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/drift_slice_crab_cavity.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/drift_slice_multipole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/drift_slice_rbend.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/drift_slice_uniform_solenoid.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/electroncooler.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/elens.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/exciter.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/legacy_solenoid.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/magnet.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/magnet_drift.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/magnet_edge.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/magnet_kick.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/marker.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/misalignment.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/multipole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/multipoleedge.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/octupole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/quadrupole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/rbend.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/sextupole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/slnd.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/srotation.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thick_slice_bend.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thick_slice_multipole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thick_slice_rbend.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thick_slice_uniform_solenoid.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_bend.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_multipole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_octupole_entry.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_octupole_exit.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_entry.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_exit.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_rbend.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_rbend_entry.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_rbend_exit.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_sextupole_entry.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_sextupole_exit.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_entry.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_exit.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_acdipole.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_drift.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_legacy_solenoid.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_legacy_solenoid_multipolar_components.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_legacy_solenoid_radiation.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_magnet.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_magnet.template.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_magnet_configure.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_magnet_drift.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_magnet_edge.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_magnet_kick.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_magnet_radiation.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_misalignments.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_mult_fringe.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_wedge.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_xyshift.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/variable_solenoid.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/wedge.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/wire.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/exciter.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/rft_element.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/slice_base.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/slice_elements_drift.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/slice_elements_edge.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/beam_elements/slice_elements_thick.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/boris.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/footprint.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/functions.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/general.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/headers/atomicadd.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/headers/checks.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/headers/constants.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/headers/particle_states.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/headers/synrad_spectrum.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/headers/track.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/headers/track_local_particle_with_transformations.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/internal_record.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/json.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/linear_normal_form.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/load.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/loss_location_refinement/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/loss_location_refinement/loss_location_refinement.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/lumi.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/mad_parser/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/mad_parser/madx.lark +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/mad_parser/parse.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/madng_interface.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/match.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/monitors/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/monitors/beam_position_monitor.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/monitors/beam_position_monitor.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/monitors/beam_profile_monitor.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/monitors/beam_profile_monitor.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/monitors/beam_size_monitor.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/monitors/beam_size_monitor.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/monitors/last_turns_monitor.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/monitors/last_turns_monitor.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/monitors/particles_monitor.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/monitors/particles_monitor.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/multiline.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/multiline_legacy/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/multiline_legacy/multiline_legacy.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/multiline_legacy/shared_knobs.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/multisetter/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/multisetter/multisetter.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/multisetter/multisetter.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/particles/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/particles/constants.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/particles/local_particle_custom_api.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/particles/masses.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/particles/pdg.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/particles/rng_src/base_rng.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/particles/rng_src/particles_rng.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/pipeline/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/pipeline/core.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/pipeline/manager.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/pipeline/multitracker.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/prebuilt_kernel_definitions/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/prebuilt_kernel_definitions/element_inits.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/prebuilt_kernel_definitions/element_types.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/progress_indicator.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/random/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/random/random_generators.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/random/random_src/exponential.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/random/random_src/normal.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/random/random_src/rutherford.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/random/random_src/uniform.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/random/random_src/uniform_accurate.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/slicing.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/survey.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/svgutils/__init__.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/svgutils/parser.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/svgutils/path.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/svgutils/svgutils.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/synctime.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/table.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/targets.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/track_flags.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/tracker_data.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/tracker_src/tracker.h +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/trajectory_correction.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/twissplot.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack/view.py +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack.egg-info/dependency_links.txt +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack.egg-info/entry_points.txt +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack.egg-info/requires.txt +0 -0
- {xtrack-0.98.6 → xtrack-0.98.8}/xtrack.egg-info/top_level.txt +0 -0
|
@@ -35,6 +35,7 @@ def test_cavity_absolute_time(test_context):
|
|
|
35
35
|
tt = line.get_table()
|
|
36
36
|
for nn in tt.rows[tt.element_type=='Cavity'].name:
|
|
37
37
|
line[nn].absolute_time = 1 # Need property
|
|
38
|
+
line[nn].harmonic = 0
|
|
38
39
|
line[nn].frequency = line.vars['f_rf']
|
|
39
40
|
|
|
40
41
|
tw1 = line.twiss(search_for_t_rev=True)
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import xtrack as xt
|
|
2
|
+
import xpart as xp
|
|
3
|
+
import xobjects as xo
|
|
4
|
+
import numpy as np
|
|
5
|
+
import pathlib
|
|
6
|
+
from cpymad.madx import Madx
|
|
7
|
+
|
|
8
|
+
test_data_folder = pathlib.Path(
|
|
9
|
+
__file__).parent.joinpath('../test_data').absolute()
|
|
10
|
+
|
|
11
|
+
def test_cavity_harmonic():
|
|
12
|
+
|
|
13
|
+
# Fix numpy random seed for reproducibility
|
|
14
|
+
np.random.seed(42)
|
|
15
|
+
|
|
16
|
+
line = xt.load(test_data_folder /
|
|
17
|
+
'hllhc15_thick/lhc_thick_with_knobs.json')
|
|
18
|
+
|
|
19
|
+
tt_harm = line.get_table(attr=True)
|
|
20
|
+
tt_harm_cav = tt_harm.rows.match(element_type='Cavity')
|
|
21
|
+
|
|
22
|
+
for nn in tt_harm_cav.name:
|
|
23
|
+
assert line[nn].frequency == 0
|
|
24
|
+
assert line[nn].harmonic == 35640
|
|
25
|
+
|
|
26
|
+
line['vrf400'] = 16
|
|
27
|
+
tw_harm = line.twiss6d()
|
|
28
|
+
|
|
29
|
+
pp_harm = xp.generate_matched_gaussian_bunch(line=line,
|
|
30
|
+
num_particles=100_000,
|
|
31
|
+
nemitt_x=2e-6,
|
|
32
|
+
nemitt_y=2.5e-6,
|
|
33
|
+
sigma_z=0.08)
|
|
34
|
+
|
|
35
|
+
# Switch to frequency mode
|
|
36
|
+
for nn in tt_harm_cav.name:
|
|
37
|
+
line[nn].harmonic = 0
|
|
38
|
+
line[nn].frequency=400.79e6
|
|
39
|
+
|
|
40
|
+
tt_freq = line.get_table(attr=True)
|
|
41
|
+
tt_freq_cav = tt_freq.rows.match(element_type='Cavity')
|
|
42
|
+
|
|
43
|
+
pp_freq = xp.generate_matched_gaussian_bunch(line=line,
|
|
44
|
+
num_particles=100_000,
|
|
45
|
+
nemitt_x=2e-6,
|
|
46
|
+
nemitt_y=2.5e-6,
|
|
47
|
+
sigma_z=0.08)
|
|
48
|
+
|
|
49
|
+
tt_freq = line.get_table(attr=True)
|
|
50
|
+
tt_freq_cav = tt_freq.rows.match(element_type='Cavity')
|
|
51
|
+
tw_freq = line.twiss6d()
|
|
52
|
+
|
|
53
|
+
xo.assert_allclose(tw_harm.qs, tw_freq.qs, rtol=0, atol=1e-7)
|
|
54
|
+
xo.assert_allclose(pp_harm.zeta.std(), pp_freq.zeta.std(), rtol=0.01)
|
|
55
|
+
xo.assert_allclose(pp_harm.delta.std(), pp_freq.delta.std(), rtol=0.01)
|
|
56
|
+
|
|
57
|
+
xo.assert_allclose(tt_harm_cav.frequency, 0, rtol=1e-15)
|
|
58
|
+
xo.assert_allclose(tt_freq_cav.frequency, 400.79e6, rtol=1e-15)
|
|
59
|
+
xo.assert_allclose(tt_harm_cav.harmonic, 35640, rtol=1e-15)
|
|
60
|
+
xo.assert_allclose(tt_freq_cav.harmonic, 0, rtol=1e-15)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
# Getting a mix of the two modes
|
|
64
|
+
for nn in tt_harm_cav.name:
|
|
65
|
+
line[nn].frequency = 0
|
|
66
|
+
line[nn].harmonic = 0
|
|
67
|
+
|
|
68
|
+
line['acsca.d5l4.b1'].harmonic = 35640
|
|
69
|
+
line['acsca.c5l4.b1'].frequency = 400.79e6
|
|
70
|
+
line['acsca.b5l4.b1'].harmonic = 35640
|
|
71
|
+
line['acsca.a5l4.b1'].frequency = 400.79e6
|
|
72
|
+
line['acsca.a5r4.b1'].harmonic = 35640
|
|
73
|
+
line['acsca.b5r4.b1'].frequency = 400.79e6
|
|
74
|
+
line['acsca.c5r4.b1'].harmonic = 35640
|
|
75
|
+
line['acsca.d5r4.b1'].frequency = 400.79e6
|
|
76
|
+
|
|
77
|
+
mad_src = line.to_madx_sequence('seq')
|
|
78
|
+
|
|
79
|
+
env2 = xt.load(string=mad_src, format='madx')
|
|
80
|
+
line2 = env2['seq']
|
|
81
|
+
|
|
82
|
+
tt3 = line2.get_table(attr=True)
|
|
83
|
+
tt3_cav = tt3.rows.match(element_type='Cavity')
|
|
84
|
+
xo.assert_allclose(tt3_cav.frequency, [0, 400.79e6, 0, 400.79e6, 0, 400.79e6, 0, 400.79e6], rtol=1e-15)
|
|
85
|
+
xo.assert_allclose(tt3_cav.harmonic, [35640, 0, 35640, 0, 35640, 0, 35640, 0], rtol=1e-15)
|
|
86
|
+
|
|
87
|
+
line2.set_particle_ref('proton', p0c=7e12)
|
|
88
|
+
tw3 = line2.twiss6d()
|
|
89
|
+
xo.assert_allclose(tw_harm.qs, tw3.qs, rtol=0, atol=1e-7)
|
|
90
|
+
|
|
91
|
+
line_slice_thick = line.copy()
|
|
92
|
+
line_slice_thick.slice_thick_elements([
|
|
93
|
+
xt.Strategy(slicing=None),
|
|
94
|
+
xt.Strategy(slicing=xt.Uniform(3, mode='thick'), name='acsca.*'),
|
|
95
|
+
])
|
|
96
|
+
|
|
97
|
+
tt_sliced = line_slice_thick.get_table(attr=True)
|
|
98
|
+
tt_sliced_cav = tt_sliced.rows.match(element_type='ThickSliceCav.*')
|
|
99
|
+
|
|
100
|
+
assert np.all(tt_sliced_cav.name == np.array([
|
|
101
|
+
'acsca.d5l4.b1..0', 'acsca.d5l4.b1..1', 'acsca.d5l4.b1..2',
|
|
102
|
+
'acsca.c5l4.b1..0', 'acsca.c5l4.b1..1', 'acsca.c5l4.b1..2',
|
|
103
|
+
'acsca.b5l4.b1..0', 'acsca.b5l4.b1..1', 'acsca.b5l4.b1..2',
|
|
104
|
+
'acsca.a5l4.b1..0', 'acsca.a5l4.b1..1', 'acsca.a5l4.b1..2',
|
|
105
|
+
'acsca.a5r4.b1..0', 'acsca.a5r4.b1..1', 'acsca.a5r4.b1..2',
|
|
106
|
+
'acsca.b5r4.b1..0', 'acsca.b5r4.b1..1', 'acsca.b5r4.b1..2',
|
|
107
|
+
'acsca.c5r4.b1..0', 'acsca.c5r4.b1..1', 'acsca.c5r4.b1..2',
|
|
108
|
+
'acsca.d5r4.b1..0', 'acsca.d5r4.b1..1', 'acsca.d5r4.b1..2']))
|
|
109
|
+
|
|
110
|
+
xo.assert_allclose(tt_sliced_cav.frequency,
|
|
111
|
+
[0, 0, 0, 400.79e6, 400.79e6, 400.79e6,
|
|
112
|
+
0, 0, 0, 400.79e6, 400.79e6, 400.79e6,
|
|
113
|
+
0, 0, 0, 400.79e6, 400.79e6, 400.79e6,
|
|
114
|
+
0, 0, 0, 400.79e6, 400.79e6, 400.79e6], rtol=1e-15)
|
|
115
|
+
xo.assert_allclose(tt_sliced_cav.harmonic,
|
|
116
|
+
[35640, 35640, 35640, 0, 0, 0,
|
|
117
|
+
35640, 35640, 35640, 0, 0, 0,
|
|
118
|
+
35640, 35640, 35640, 0, 0, 0,
|
|
119
|
+
35640, 35640, 35640, 0, 0, 0], rtol=1e-15)
|
|
120
|
+
xo.assert_allclose(tt_sliced_cav.voltage, 16 / 8 / 3 * 1e6, rtol=1e-3)
|
|
121
|
+
|
|
122
|
+
tw_slice_thick = line_slice_thick.twiss6d()
|
|
123
|
+
xo.assert_allclose(tw_harm.qs, tw_slice_thick.qs, rtol=0, atol=1e-7)
|
|
124
|
+
|
|
125
|
+
line_slice_thin = line.copy()
|
|
126
|
+
line_slice_thin.slice_thick_elements([
|
|
127
|
+
xt.Strategy(slicing=None),
|
|
128
|
+
xt.Strategy(slicing=xt.Uniform(2, mode='thin'), name='acsca.*'),
|
|
129
|
+
])
|
|
130
|
+
|
|
131
|
+
tt_sliced_thin = line_slice_thin.get_table(attr=True)
|
|
132
|
+
tt_sliced_thin_cav = tt_sliced_thin.rows.match(element_type='.*SliceCav.*')
|
|
133
|
+
|
|
134
|
+
assert np.all(tt_sliced_thin_cav.name == np.array(['drift_acsca.d5l4.b1..0', 'acsca.d5l4.b1..0',
|
|
135
|
+
'drift_acsca.d5l4.b1..1', 'acsca.d5l4.b1..1',
|
|
136
|
+
'drift_acsca.d5l4.b1..2', 'drift_acsca.c5l4.b1..0',
|
|
137
|
+
'acsca.c5l4.b1..0', 'drift_acsca.c5l4.b1..1', 'acsca.c5l4.b1..1',
|
|
138
|
+
'drift_acsca.c5l4.b1..2', 'drift_acsca.b5l4.b1..0',
|
|
139
|
+
'acsca.b5l4.b1..0', 'drift_acsca.b5l4.b1..1', 'acsca.b5l4.b1..1',
|
|
140
|
+
'drift_acsca.b5l4.b1..2', 'drift_acsca.a5l4.b1..0',
|
|
141
|
+
'acsca.a5l4.b1..0', 'drift_acsca.a5l4.b1..1', 'acsca.a5l4.b1..1',
|
|
142
|
+
'drift_acsca.a5l4.b1..2', 'drift_acsca.a5r4.b1..0',
|
|
143
|
+
'acsca.a5r4.b1..0', 'drift_acsca.a5r4.b1..1', 'acsca.a5r4.b1..1',
|
|
144
|
+
'drift_acsca.a5r4.b1..2', 'drift_acsca.b5r4.b1..0',
|
|
145
|
+
'acsca.b5r4.b1..0', 'drift_acsca.b5r4.b1..1', 'acsca.b5r4.b1..1',
|
|
146
|
+
'drift_acsca.b5r4.b1..2', 'drift_acsca.c5r4.b1..0',
|
|
147
|
+
'acsca.c5r4.b1..0', 'drift_acsca.c5r4.b1..1', 'acsca.c5r4.b1..1',
|
|
148
|
+
'drift_acsca.c5r4.b1..2', 'drift_acsca.d5r4.b1..0',
|
|
149
|
+
'acsca.d5r4.b1..0', 'drift_acsca.d5r4.b1..1', 'acsca.d5r4.b1..1',
|
|
150
|
+
'drift_acsca.d5r4.b1..2']))
|
|
151
|
+
xo.assert_allclose(tt_sliced_thin_cav.frequency,
|
|
152
|
+
[0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,
|
|
153
|
+
0.0000e+00, 4.0079e+08, 0.0000e+00, 4.0079e+08, 0.0000e+00,
|
|
154
|
+
0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,
|
|
155
|
+
0.0000e+00, 4.0079e+08, 0.0000e+00, 4.0079e+08, 0.0000e+00,
|
|
156
|
+
0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,
|
|
157
|
+
0.0000e+00, 4.0079e+08, 0.0000e+00, 4.0079e+08, 0.0000e+00,
|
|
158
|
+
0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,
|
|
159
|
+
0.0000e+00, 4.0079e+08, 0.0000e+00, 4.0079e+08, 0.0000e+00], rtol=1e-15)
|
|
160
|
+
|
|
161
|
+
xo.assert_allclose(tt_sliced_thin_cav.harmonic,
|
|
162
|
+
[ 0., 35640., 0., 35640., 0., 0., 0., 0.,
|
|
163
|
+
0., 0., 0., 35640., 0., 35640., 0., 0.,
|
|
164
|
+
0., 0., 0., 0., 0., 35640., 0., 35640.,
|
|
165
|
+
0., 0., 0., 0., 0., 0., 0., 35640.,
|
|
166
|
+
0., 35640., 0., 0., 0., 0., 0., 0.], rtol=1e-15)
|
|
167
|
+
|
|
168
|
+
xo.assert_allclose(tt_sliced_thin_cav.voltage,
|
|
169
|
+
[ 0., 1000000., 0., 1000000., 0., 0.,
|
|
170
|
+
1000000., 0., 1000000., 0., 0., 1000000.,
|
|
171
|
+
0., 1000000., 0., 0., 1000000., 0.,
|
|
172
|
+
1000000., 0., 0., 1000000., 0., 1000000.,
|
|
173
|
+
0., 0., 1000000., 0., 1000000., 0.,
|
|
174
|
+
0., 1000000., 0., 1000000., 0., 0.,
|
|
175
|
+
1000000., 0., 1000000., 0.], rtol=1e-15)
|
|
176
|
+
|
|
177
|
+
def test_cavity_harmonic_loader_native():
|
|
178
|
+
|
|
179
|
+
env = xt.load([test_data_folder / 'lhc_2024/lhc.seq',
|
|
180
|
+
test_data_folder / 'lhc_2024/injection_optics.madx'],
|
|
181
|
+
reverse_lines=['lhcb2'])
|
|
182
|
+
env.lhcb1.set_particle_ref('proton', p0c=450e9)
|
|
183
|
+
env.lhcb2.set_particle_ref('proton', p0c=450e9)
|
|
184
|
+
|
|
185
|
+
tt1 = env.lhcb1.get_table(attr=True)
|
|
186
|
+
tt2 = env.lhcb2.get_table(attr=True)
|
|
187
|
+
|
|
188
|
+
tt1_cav = tt1.rows.match(element_type='Cavity')
|
|
189
|
+
tt2_cav = tt2.rows.match(element_type='Cavity')
|
|
190
|
+
|
|
191
|
+
assert len(tt1_cav) == 8
|
|
192
|
+
assert len(tt2_cav) == 8
|
|
193
|
+
xo.assert_allclose(tt1_cav.frequency, 0)
|
|
194
|
+
xo.assert_allclose(tt2_cav.frequency, 0)
|
|
195
|
+
xo.assert_allclose(tt1_cav.harmonic, 35640)
|
|
196
|
+
xo.assert_allclose(tt2_cav.harmonic, 35640)
|
|
197
|
+
|
|
198
|
+
env['vrf400'] = 8
|
|
199
|
+
env['lagrf400.b1'] = 0.5
|
|
200
|
+
|
|
201
|
+
tw_harm = env.lhcb1.twiss6d()
|
|
202
|
+
|
|
203
|
+
for nn in tt1_cav.name:
|
|
204
|
+
env[nn].harmonic = 0
|
|
205
|
+
env[nn].frequency = 400.79e6
|
|
206
|
+
|
|
207
|
+
tw_freq = env.lhcb1.twiss6d()
|
|
208
|
+
|
|
209
|
+
xo.assert_allclose(tw_freq.qs, tw_harm.qs, rtol=0, atol=1e-7)
|
|
210
|
+
|
|
211
|
+
def test_cavity_harmonic_loader_cpymad():
|
|
212
|
+
|
|
213
|
+
mad = Madx()
|
|
214
|
+
mad.call(str(test_data_folder / 'lhc_2024/lhc.seq'))
|
|
215
|
+
mad.call(str(test_data_folder / 'lhc_2024/injection_optics.madx'))
|
|
216
|
+
mad.beam()
|
|
217
|
+
mad.use('lhcb1')
|
|
218
|
+
|
|
219
|
+
line = xt.Line.from_madx_sequence(mad.sequence.lhcb1,
|
|
220
|
+
deferred_expressions=True)
|
|
221
|
+
|
|
222
|
+
line.set_particle_ref('proton', p0c=450e9)
|
|
223
|
+
|
|
224
|
+
tt1 = line.get_table(attr=True)
|
|
225
|
+
tt1_cav = tt1.rows.match(element_type='Cavity')
|
|
226
|
+
|
|
227
|
+
assert len(tt1_cav) == 8
|
|
228
|
+
xo.assert_allclose(tt1_cav.frequency, 0)
|
|
229
|
+
xo.assert_allclose(tt1_cav.harmonic, 35640)
|
|
230
|
+
|
|
231
|
+
line['vrf400'] = 8
|
|
232
|
+
line['lagrf400.b1'] = 0.5
|
|
233
|
+
|
|
234
|
+
tw_harm = line.twiss6d()
|
|
235
|
+
|
|
236
|
+
for nn in tt1_cav.name:
|
|
237
|
+
line[nn].harmonic = 0
|
|
238
|
+
line[nn].frequency = 400.79e6
|
|
239
|
+
|
|
240
|
+
tw_freq = line.twiss6d()
|
|
241
|
+
|
|
242
|
+
xo.assert_allclose(tw_freq.qs, tw_harm.qs, rtol=0, atol=1e-7)
|
|
243
|
+
|
|
244
|
+
def test_cavity_harmonic_more_loader_checks():
|
|
245
|
+
from cpymad.madx import Madx
|
|
246
|
+
import xtrack as xt
|
|
247
|
+
import xobjects as xo
|
|
248
|
+
|
|
249
|
+
madx_src = """
|
|
250
|
+
hh = 5;
|
|
251
|
+
ff = 100;
|
|
252
|
+
cav_harm: rfcavity, harmon:=hh;
|
|
253
|
+
cav_freq: rfcavity, freq:=ff;
|
|
254
|
+
|
|
255
|
+
seq: sequence, l=10;
|
|
256
|
+
cav_harm, at=5;
|
|
257
|
+
cav_freq, at=7;
|
|
258
|
+
endsequence;
|
|
259
|
+
|
|
260
|
+
"""
|
|
261
|
+
|
|
262
|
+
mad = Madx()
|
|
263
|
+
mad.input(madx_src)
|
|
264
|
+
mad.input('''
|
|
265
|
+
beam;
|
|
266
|
+
use, sequence=seq;
|
|
267
|
+
''')
|
|
268
|
+
|
|
269
|
+
lcpymad = xt.Line.from_madx_sequence(mad.sequence.seq,
|
|
270
|
+
deferred_expressions=True)
|
|
271
|
+
|
|
272
|
+
env_native = xt.load(string=madx_src, format='madx')
|
|
273
|
+
lnative = env_native['seq']
|
|
274
|
+
|
|
275
|
+
for ll in [lcpymad, lnative]:
|
|
276
|
+
assert str(ll.ref['cav_harm'].harmonic._expr) == "vars['hh']"
|
|
277
|
+
assert ll.ref['cav_harm'].frequency._expr is None
|
|
278
|
+
assert ll.ref['cav_harm'].frequency._value == 0
|
|
279
|
+
|
|
280
|
+
assert str(ll.ref['cav_freq'].frequency._expr) == "(vars['ff'] * 1000000.0)"
|
|
281
|
+
assert ll.ref['cav_freq'].harmonic._expr is None
|
|
282
|
+
assert ll.ref['cav_freq'].harmonic._value == 0
|
|
@@ -602,8 +602,7 @@ def test_mad_elements_import():
|
|
|
602
602
|
|
|
603
603
|
assert isinstance(line['c1'], xt.Cavity)
|
|
604
604
|
assert line.get_s_position('c1') == 0.2
|
|
605
|
-
xo.assert_allclose(line['c1'].
|
|
606
|
-
rtol=0, atol=1e-7)
|
|
605
|
+
xo.assert_allclose(line['c1'].harmonic, 8, rtol=0, atol=1e-12)
|
|
607
606
|
assert line['c1'].lag == 180
|
|
608
607
|
assert line['c1'].voltage == 6e6
|
|
609
608
|
|
|
@@ -164,7 +164,7 @@ def example_sequence(temp_context_default_mod):
|
|
|
164
164
|
se: sextupole, L=1, K2=2, K2S=3, TILT=2; ! ignore ktap
|
|
165
165
|
oc: octupole, L=2, K3=3, K3S=2, TILT=2;
|
|
166
166
|
ma: marker;
|
|
167
|
-
rf: rfcavity, L=2, VOLT=1, LAG=2, FREQ=3,
|
|
167
|
+
rf: rfcavity, L=2, VOLT=1, LAG=2, FREQ=3, NO_CAVITY_TOTALPATH; ! ignore N_BESSEL
|
|
168
168
|
mu: multipole, LRAD=1, TILT=2, KNL={3, 4, 5, 6}, KSL={1, 2, 3, 4};
|
|
169
169
|
so: solenoid, l=2, ks=3; ! ignore ksi
|
|
170
170
|
|
|
@@ -450,7 +450,7 @@ def test_marker(example_sequence):
|
|
|
450
450
|
|
|
451
451
|
def test_rfcavity(example_sequence):
|
|
452
452
|
env, positions, _ = example_sequence
|
|
453
|
-
# rf: rfcavity, L=2, VOLT=1, LAG=2, FREQ=3
|
|
453
|
+
# rf: rfcavity, L=2, VOLT=1, LAG=2, FREQ=3; ! ignore N_BESSEL, NO_CAVITY_TOTALPATH
|
|
454
454
|
rf1 = env['rf1/line']
|
|
455
455
|
xo.assert_allclose(positions['rf1/line'], 27, atol=1e-14)
|
|
456
456
|
assert isinstance(rf1, xt.Cavity)
|
|
@@ -655,7 +655,7 @@ def test_reversed_marker(example_sequence):
|
|
|
655
655
|
|
|
656
656
|
|
|
657
657
|
def test_reversed_rfcavity(example_sequence):
|
|
658
|
-
env, _, positions_reversed = example_sequence # ma: marker; # rf: rfcavity, L=2, VOLT=1, LAG=2, FREQ=3
|
|
658
|
+
env, _, positions_reversed = example_sequence # ma: marker; # rf: rfcavity, L=2, VOLT=1, LAG=2, FREQ=3; ! ignore N_BESSEL, NO_CAVITY_TOTALPATH
|
|
659
659
|
rf1 = env['rf1/line_reversed']
|
|
660
660
|
xo.assert_allclose(positions_reversed['rf1/line_reversed'], 36 - 27, atol=1e-14)
|
|
661
661
|
assert isinstance(rf1, xt.Cavity)
|
|
@@ -2,6 +2,7 @@ import json
|
|
|
2
2
|
import pathlib
|
|
3
3
|
|
|
4
4
|
import numpy as np
|
|
5
|
+
from scipy.constants import c as clight
|
|
5
6
|
|
|
6
7
|
import xobjects as xo
|
|
7
8
|
import xtrack as xt
|
|
@@ -25,6 +26,12 @@ def test_tapering_and_twiss_with_radiation():
|
|
|
25
26
|
with open(filename, 'r') as f:
|
|
26
27
|
line = xt.Line.from_dict(json.load(f))
|
|
27
28
|
|
|
29
|
+
# Use harmonic for one of the cavities
|
|
30
|
+
t_rev = line.get_length() / clight
|
|
31
|
+
harm = line['rf1'].frequency * t_rev
|
|
32
|
+
line['rf1'].frequency = 0
|
|
33
|
+
line['rf1'].harmonic = harm
|
|
34
|
+
|
|
28
35
|
line.build_tracker()
|
|
29
36
|
|
|
30
37
|
# Initial twiss (no radiation)
|
|
@@ -142,6 +149,12 @@ def test_tapering_zero_mean():
|
|
|
142
149
|
line['rf2b'].voltage *= 2
|
|
143
150
|
line['rf2a'].voltage *= 2
|
|
144
151
|
|
|
152
|
+
# Use harmonic for one of the cavities
|
|
153
|
+
t_rev = line.get_length() / clight
|
|
154
|
+
harm = line['rf1'].frequency * t_rev
|
|
155
|
+
line['rf1'].frequency = 0
|
|
156
|
+
line['rf1'].harmonic = line['rf1'].frequency * t_rev
|
|
157
|
+
|
|
145
158
|
line.particle_ref.p0c = 4e9 # eV
|
|
146
159
|
|
|
147
160
|
line.configure_radiation(model=None)
|
|
@@ -3,6 +3,7 @@ import pathlib
|
|
|
3
3
|
from itertools import product
|
|
4
4
|
|
|
5
5
|
import numpy as np
|
|
6
|
+
from scipy.constants import c as clight
|
|
6
7
|
import pytest
|
|
7
8
|
from cpymad.madx import Madx
|
|
8
9
|
|
|
@@ -68,9 +69,6 @@ def test_coupled_beta(test_context):
|
|
|
68
69
|
line = env['lhcb1']
|
|
69
70
|
line.set_particle_ref('proton', p0c=7e12)
|
|
70
71
|
line['mqwa.a4r3.b1..1'].ksl[1] = 1e-4
|
|
71
|
-
tt_cav = line.get_table().rows.match('Cavity', 'element_type')
|
|
72
|
-
for nn in tt_cav.name:
|
|
73
|
-
line[nn].frequency = 400.79e6
|
|
74
72
|
|
|
75
73
|
line.build_tracker(_context=test_context)
|
|
76
74
|
|
|
@@ -107,10 +105,6 @@ def test_twiss_zeta0_delta0(test_context):
|
|
|
107
105
|
line = env['lhcb1']
|
|
108
106
|
line.set_particle_ref('proton', p0c=7e12)
|
|
109
107
|
|
|
110
|
-
tt_cav = line.get_table().rows.match('Cavity', 'element_type')
|
|
111
|
-
for nn in tt_cav.name:
|
|
112
|
-
line[nn].frequency = 400.79e6
|
|
113
|
-
|
|
114
108
|
env['on_crab1'] = -190
|
|
115
109
|
env['on_crab5'] = -190
|
|
116
110
|
|
|
@@ -1024,6 +1018,11 @@ def test_longitudinal_plane_against_matrix(machine, test_context):
|
|
|
1024
1018
|
tw = line.twiss()
|
|
1025
1019
|
circumference = tw.circumference
|
|
1026
1020
|
|
|
1021
|
+
if line[cavity_name].harmonic:
|
|
1022
|
+
frequency_rf = line[cavity_name].harmonic / (line.get_length() / tw.beta0 / clight)
|
|
1023
|
+
else:
|
|
1024
|
+
frequency_rf = line[cavity_name].frequency
|
|
1025
|
+
|
|
1027
1026
|
if longitudinal_mode == 'nonlinear':
|
|
1028
1027
|
matrix = xt.LineSegmentMap(
|
|
1029
1028
|
qx=tw.qx, qy=tw.qy,
|
|
@@ -1033,7 +1032,7 @@ def test_longitudinal_plane_against_matrix(machine, test_context):
|
|
|
1033
1032
|
dx=tw.dx[0], dpx=tw.dpx[0],
|
|
1034
1033
|
dy=tw.dy[0], dpy=tw.dpy[0],
|
|
1035
1034
|
voltage_rf=line[cavity_name].voltage,
|
|
1036
|
-
frequency_rf=
|
|
1035
|
+
frequency_rf=frequency_rf,
|
|
1037
1036
|
lag_rf=line[cavity_name].lag,
|
|
1038
1037
|
momentum_compaction_factor=tw.momentum_compaction_factor,
|
|
1039
1038
|
length=circumference)
|
|
@@ -1047,7 +1046,7 @@ def test_longitudinal_plane_against_matrix(machine, test_context):
|
|
|
1047
1046
|
dx=tw.dx[0], dpx=tw.dpx[0],
|
|
1048
1047
|
dy=tw.dy[0], dpy=tw.dpy[0],
|
|
1049
1048
|
voltage_rf=line[cavity_name].voltage,
|
|
1050
|
-
frequency_rf=
|
|
1049
|
+
frequency_rf=frequency_rf,
|
|
1051
1050
|
lag_rf=line[cavity_name].lag,
|
|
1052
1051
|
momentum_compaction_factor=tw.momentum_compaction_factor,
|
|
1053
1052
|
length=circumference)
|
|
@@ -1592,14 +1591,17 @@ def test_longitudinal_beam_sizes(test_context):
|
|
|
1592
1591
|
beam_sizes.sigma_zeta / beam_sizes.sigma_pzeta, tw.bets0, atol=0, rtol=5e-5)
|
|
1593
1592
|
|
|
1594
1593
|
@for_all_test_contexts(excluding=('ContextCupy', 'ContextPyopencl'))
|
|
1595
|
-
|
|
1594
|
+
@pytest.mark.parametrize('method', ['6d', '4d'])
|
|
1595
|
+
def test_second_order_chromaticity_and_dispersion(test_context, method):
|
|
1596
1596
|
|
|
1597
1597
|
line = xt.load(test_data_folder /
|
|
1598
1598
|
'hllhc15_thick/lhc_thick_with_knobs.json')
|
|
1599
1599
|
line.vars['on_x5'] = 300
|
|
1600
|
+
line.vars['vrf400'] = 16
|
|
1601
|
+
|
|
1600
1602
|
line.build_tracker(_context=test_context)
|
|
1601
1603
|
|
|
1602
|
-
tw = line.twiss(method=
|
|
1604
|
+
tw = line.twiss(method=method)
|
|
1603
1605
|
tw_fw = line.twiss(start='ip4', end='ip6', init_at='ip4',
|
|
1604
1606
|
x=tw['x', 'ip4'], px=tw['px', 'ip4'],
|
|
1605
1607
|
y=tw['y', 'ip4'], py=tw['py', 'ip4'],
|
|
@@ -1643,14 +1645,14 @@ def test_second_order_chromaticity_and_dispersion(test_context):
|
|
|
1643
1645
|
pxs_qy = np.polyfit(delta, qy_xs, 3)
|
|
1644
1646
|
|
|
1645
1647
|
xo.assert_allclose(delta, nlchr.delta0, atol=1e-6, rtol=0)
|
|
1646
|
-
xo.assert_allclose(tw['dx', location], pxs_x[-2], atol=0, rtol=
|
|
1647
|
-
xo.assert_allclose(tw['dpx', location], pxs_px[-2], atol=0, rtol=
|
|
1648
|
-
xo.assert_allclose(tw['dy', location], pxs_y[-2], atol=0, rtol=
|
|
1649
|
-
xo.assert_allclose(tw['dpy', location], pxs_py[-2], atol=0, rtol=
|
|
1650
|
-
xo.assert_allclose(tw['ddx', location], 2*pxs_x[-3], atol=0, rtol=
|
|
1651
|
-
xo.assert_allclose(tw['ddpx', location], 2*pxs_px[-3], atol=0, rtol=
|
|
1652
|
-
xo.assert_allclose(tw['ddy', location], 2*pxs_y[-3], atol=0, rtol=
|
|
1653
|
-
xo.assert_allclose(tw['ddpy', location], 2*pxs_py[-3], atol=0, rtol=
|
|
1648
|
+
xo.assert_allclose(tw['dx', location], pxs_x[-2], atol=0, rtol=5e-4)
|
|
1649
|
+
xo.assert_allclose(tw['dpx', location], pxs_px[-2], atol=0, rtol=5e-4)
|
|
1650
|
+
xo.assert_allclose(tw['dy', location], pxs_y[-2], atol=0, rtol=5e-4)
|
|
1651
|
+
xo.assert_allclose(tw['dpy', location], pxs_py[-2], atol=0, rtol=5e-4)
|
|
1652
|
+
xo.assert_allclose(tw['ddx', location], 2*pxs_x[-3], atol=0, rtol=5e-4)
|
|
1653
|
+
xo.assert_allclose(tw['ddpx', location], 2*pxs_px[-3], atol=0, rtol=5e-4)
|
|
1654
|
+
xo.assert_allclose(tw['ddy', location], 2*pxs_y[-3], atol=0, rtol=5e-4)
|
|
1655
|
+
xo.assert_allclose(tw['ddpy', location], 2*pxs_py[-3], atol=0, rtol=5e-4)
|
|
1654
1656
|
xo.assert_allclose(tw['dqx'], pxs_qx[-2], atol=0, rtol=1e-3)
|
|
1655
1657
|
xo.assert_allclose(tw['ddqx'], pxs_qx[-3]*2, atol=0, rtol=1e-2)
|
|
1656
1658
|
xo.assert_allclose(tw['dqy'], pxs_qy[-2], atol=0, rtol=1e-3)
|
|
@@ -27,7 +27,6 @@ def test_twiss_psb(test_context):
|
|
|
27
27
|
env = xt.load(test_data_folder / 'psb_injection/psb_injection.seq')
|
|
28
28
|
line = env['psb']
|
|
29
29
|
line.set_particle_ref('proton', gamma0=mad.sequence['psb'].beam.gamma)
|
|
30
|
-
line['br.c02'].frequency = 1 / line_ref.get_length() * clight * line_ref.particle_ref.beta0[0] # h_rf = 1
|
|
31
30
|
|
|
32
31
|
line.build_tracker(_context=test_context)
|
|
33
32
|
beta0 = line.particle_ref.beta0[0]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '0.98.8'
|
|
@@ -531,14 +531,13 @@ class BeamElement(xo.HybridClass, metaclass=MetaBeamElement):
|
|
|
531
531
|
raise ValueError("Invalid array type")
|
|
532
532
|
|
|
533
533
|
def xoinitialize(self, **kwargs):
|
|
534
|
-
rot_s_rad = kwargs.pop('rot_s_rad', None)
|
|
535
|
-
# For the shifts we accept both shift_x and _shift_x for backward compatibility
|
|
534
|
+
rot_s_rad = kwargs.pop('rot_s_rad', kwargs.pop('_rot_s_rad', None))
|
|
536
535
|
shift_x = kwargs.pop('shift_x', kwargs.pop('_shift_x', None))
|
|
537
536
|
shift_y = kwargs.pop('shift_y', kwargs.pop('_shift_y', None))
|
|
538
537
|
shift_s = kwargs.pop('shift_s', kwargs.pop('_shift_s', None))
|
|
539
|
-
rot_x_rad = kwargs.pop('rot_x_rad', None)
|
|
540
|
-
rot_y_rad = kwargs.pop('rot_y_rad', None)
|
|
541
|
-
rot_s_rad_no_frame = kwargs.pop('rot_s_rad_no_frame', None)
|
|
538
|
+
rot_x_rad = kwargs.pop('rot_x_rad', kwargs.pop('_rot_x_rad', None))
|
|
539
|
+
rot_y_rad = kwargs.pop('rot_y_rad', kwargs.pop('_rot_y_rad', None))
|
|
540
|
+
rot_s_rad_no_frame = kwargs.pop('rot_s_rad_no_frame', kwargs.pop('_rot_s_rad_no_frame', None))
|
|
542
541
|
|
|
543
542
|
xo.HybridClass.xoinitialize(self, **kwargs)
|
|
544
543
|
|
|
@@ -523,6 +523,7 @@ class Cavity(_HasModelRF, _HasIntegrator, BeamElement):
|
|
|
523
523
|
'voltage': xo.Float64,
|
|
524
524
|
'frequency': xo.Float64,
|
|
525
525
|
'lag': xo.Float64,
|
|
526
|
+
'harmonic': xo.Float64,
|
|
526
527
|
'lag_taper': xo.Float64,
|
|
527
528
|
'absolute_time': xo.Int64,
|
|
528
529
|
'num_kicks': xo.Int64,
|
|
@@ -539,8 +540,13 @@ class Cavity(_HasModelRF, _HasIntegrator, BeamElement):
|
|
|
539
540
|
_rename = {
|
|
540
541
|
'model': '_model',
|
|
541
542
|
'integrator': '_integrator',
|
|
543
|
+
'frequency': '_frequency',
|
|
544
|
+
'harmonic': '_harmonic',
|
|
542
545
|
}
|
|
543
546
|
|
|
547
|
+
_default_frequency = 0.0
|
|
548
|
+
_default_harmonic = 0.0
|
|
549
|
+
|
|
544
550
|
_noexpr_fields = _NOEXPR_FIELDS
|
|
545
551
|
|
|
546
552
|
def __init__(self, **kwargs):
|
|
@@ -551,6 +557,8 @@ class Cavity(_HasModelRF, _HasIntegrator, BeamElement):
|
|
|
551
557
|
|
|
552
558
|
model = kwargs.pop('model', None)
|
|
553
559
|
integrator = kwargs.pop('integrator', None)
|
|
560
|
+
frequency = kwargs.pop('frequency', None)
|
|
561
|
+
harmonic = kwargs.pop('harmonic', None)
|
|
554
562
|
|
|
555
563
|
self.xoinitialize(**kwargs)
|
|
556
564
|
|
|
@@ -561,6 +569,41 @@ class Cavity(_HasModelRF, _HasIntegrator, BeamElement):
|
|
|
561
569
|
if integrator is not None:
|
|
562
570
|
self.integrator = integrator
|
|
563
571
|
|
|
572
|
+
if frequency is not None:
|
|
573
|
+
self.frequency = frequency
|
|
574
|
+
|
|
575
|
+
if harmonic is not None:
|
|
576
|
+
self.harmonic = harmonic
|
|
577
|
+
|
|
578
|
+
def track(self, particles, *args, **kwargs):
|
|
579
|
+
|
|
580
|
+
if self.harmonic != 0:
|
|
581
|
+
raise RuntimeError("Cavity cannot be used in standalone tracking "
|
|
582
|
+
"when harmonic is not zero. Please use the "
|
|
583
|
+
"cavity within a Line or set frequency instead"
|
|
584
|
+
" of harmonic.")
|
|
585
|
+
return super().track(particles, *args, **kwargs)
|
|
586
|
+
|
|
587
|
+
@property
|
|
588
|
+
def frequency(self):
|
|
589
|
+
return self._frequency
|
|
590
|
+
|
|
591
|
+
@frequency.setter
|
|
592
|
+
def frequency(self, value):
|
|
593
|
+
if self._harmonic != 0 and value != 0:
|
|
594
|
+
raise ValueError("Cannot set non-zero frequency when harmonic is not zero.")
|
|
595
|
+
self._frequency = value
|
|
596
|
+
|
|
597
|
+
@property
|
|
598
|
+
def harmonic(self):
|
|
599
|
+
return self._harmonic
|
|
600
|
+
|
|
601
|
+
@harmonic.setter
|
|
602
|
+
def harmonic(self, value):
|
|
603
|
+
if self._frequency != 0 and value != 0:
|
|
604
|
+
raise ValueError("Cannot set non-zero harmonic when frequency is not zero.")
|
|
605
|
+
self._harmonic = value
|
|
606
|
+
|
|
564
607
|
@property
|
|
565
608
|
def _thin_slice_class(self):
|
|
566
609
|
return xt.ThinSliceCavity
|
|
@@ -18,6 +18,7 @@ void Cavity_track_local_particle(CavityData el, LocalParticle* part0)
|
|
|
18
18
|
/*voltage*/ CavityData_get_voltage(el),
|
|
19
19
|
/*frequency*/ CavityData_get_frequency(el),
|
|
20
20
|
/*lag*/ CavityData_get_lag(el),
|
|
21
|
+
/*harmonic*/ CavityData_get_harmonic(el),
|
|
21
22
|
/*transverse_voltage*/ 0.,
|
|
22
23
|
/*transverse_lag*/ 0.,
|
|
23
24
|
/*absolute_time*/ CavityData_get_absolute_time(el),
|
|
@@ -17,6 +17,7 @@ void CrabCavity_track_local_particle(CrabCavityData el, LocalParticle* part0)
|
|
|
17
17
|
/*length*/ CrabCavityData_get_length(el),
|
|
18
18
|
/*voltage*/ 0,
|
|
19
19
|
/*frequency*/ CrabCavityData_get_frequency(el),
|
|
20
|
+
/*harmonic*/ 0.,
|
|
20
21
|
/*lag*/ 0.,
|
|
21
22
|
/*transverse_voltage*/ CrabCavityData_get_crab_voltage(el),
|
|
22
23
|
/*transverse_lag*/ CrabCavityData_get_lag(el),
|
|
@@ -14,10 +14,11 @@ void RFMultipole_track_local_particle(RFMultipoleData el, LocalParticle* part0){
|
|
|
14
14
|
track_rf_particles(
|
|
15
15
|
/*weight*/ 1.,
|
|
16
16
|
/*part0*/ part0,
|
|
17
|
-
/*length*/ 0
|
|
17
|
+
/*length*/ 0.,
|
|
18
18
|
/*voltage*/ RFMultipoleData_get_voltage(el),
|
|
19
19
|
/*frequency*/ RFMultipoleData_get_frequency(el),
|
|
20
20
|
/*lag*/ RFMultipoleData_get_lag(el),
|
|
21
|
+
/*harmonic*/ 0.,
|
|
21
22
|
/*transverse_voltage*/ 0.,
|
|
22
23
|
/*transverse_lag*/ 0.,
|
|
23
24
|
/*absolute_time*/ 0, // not used here
|
|
@@ -21,6 +21,7 @@ void ThickSliceCavity_track_local_particle(ThickSliceCavityData el, LocalParticl
|
|
|
21
21
|
/*voltage*/ ThickSliceCavityData_get__parent_voltage(el),
|
|
22
22
|
/*frequency*/ ThickSliceCavityData_get__parent_frequency(el),
|
|
23
23
|
/*lag*/ ThickSliceCavityData_get__parent_lag(el),
|
|
24
|
+
/*harmonic*/ ThickSliceCavityData_get__parent_harmonic(el),
|
|
24
25
|
/*transverse_voltage*/ 0.,
|
|
25
26
|
/*transverse_lag*/ 0.,
|
|
26
27
|
/*absolute_time*/ ThickSliceCavityData_get__parent_absolute_time(el),
|
|
@@ -20,6 +20,7 @@ void ThickSliceCrabCavity_track_local_particle(ThickSliceCrabCavityData el, Loca
|
|
|
20
20
|
/*length*/ ThickSliceCrabCavityData_get__parent_length(el),
|
|
21
21
|
/*voltage*/ 0,
|
|
22
22
|
/*frequency*/ ThickSliceCrabCavityData_get__parent_frequency(el),
|
|
23
|
+
/*harmonic*/ 0.,
|
|
23
24
|
/*lag*/ 0.,
|
|
24
25
|
/*transverse_voltage*/ ThickSliceCrabCavityData_get__parent_crab_voltage(el),
|
|
25
26
|
/*transverse_lag*/ ThickSliceCrabCavityData_get__parent_lag(el),
|
|
@@ -21,6 +21,7 @@ void ThinSliceCavity_track_local_particle(ThinSliceCavityData el, LocalParticle*
|
|
|
21
21
|
/*voltage*/ ThinSliceCavityData_get__parent_voltage(el),
|
|
22
22
|
/*frequency*/ ThinSliceCavityData_get__parent_frequency(el),
|
|
23
23
|
/*lag*/ ThinSliceCavityData_get__parent_lag(el),
|
|
24
|
+
/*harmonic*/ ThinSliceCavityData_get__parent_harmonic(el),
|
|
24
25
|
/*transverse_voltage*/ 0.,
|
|
25
26
|
/*transverse_lag*/ 0.,
|
|
26
27
|
/*absolute_time*/ ThinSliceCavityData_get__parent_absolute_time(el),
|
|
@@ -20,6 +20,7 @@ void ThinSliceCrabCavity_track_local_particle(ThinSliceCrabCavityData el, LocalP
|
|
|
20
20
|
/*length*/ ThinSliceCrabCavityData_get__parent_length(el),
|
|
21
21
|
/*voltage*/ 0,
|
|
22
22
|
/*frequency*/ ThinSliceCrabCavityData_get__parent_frequency(el),
|
|
23
|
+
/*harmonic*/ 0.,
|
|
23
24
|
/*lag*/ 0.,
|
|
24
25
|
/*transverse_voltage*/ ThinSliceCrabCavityData_get__parent_crab_voltage(el),
|
|
25
26
|
/*transverse_lag*/ ThinSliceCrabCavityData_get__parent_lag(el),
|