xtrack 0.98.5__tar.gz → 0.98.7__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.5/xtrack.egg-info → xtrack-0.98.7}/PKG-INFO +1 -1
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_cavity_absolute_time.py +1 -0
- xtrack-0.98.7/tests/test_cavity_harmonic.py +282 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_environment.py +146 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_madloader.py +1 -2
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_native_madloader.py +3 -3
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_tapering.py +13 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_twiss.py +21 -19
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_twiss_vs_madx_psb.py +0 -1
- xtrack-0.98.7/xtrack/_version.py +1 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/base_element.py +4 -5
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements.py +43 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/cavity.h +1 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/crab_cavity.h +1 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/rfmultipole.h +2 -1
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thick_slice_cavity.h +1 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thick_slice_crab_cavity.h +1 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_cavity.h +1 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_crab_cavity.h +1 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_rf.h +13 -2
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_rf.template.h +13 -2
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/slice_elements_thin.py +1 -1
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/builder.py +91 -31
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/environment.py +15 -13
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/line.py +10 -5
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/mad_loader.py +6 -7
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/mad_parser/loader.py +1 -4
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/mad_writer.py +1 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/particles/particles.py +1 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/tapering.py +8 -2
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/tracker.py +1 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/twiss.py +182 -108
- {xtrack-0.98.5 → xtrack-0.98.7/xtrack.egg-info}/PKG-INFO +1 -1
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack.egg-info/SOURCES.txt +1 -1
- xtrack-0.98.5/xtrack/_version.py +0 -1
- xtrack-0.98.5/xtrack/beam_elements/elements_src/temprf.h +0 -43
- {xtrack-0.98.5 → xtrack-0.98.7}/LICENSE +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/MANIFEST.in +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/README.md +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/base_classes.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/be_beamfields/BB6D.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/be_beamfields/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/be_beamfields/beambeam.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/be_beamfields/boost.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/be_beamfields/qgauss.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/be_beamfields/slicing.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/be_beamfields/spacecharge.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/elements.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/line.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/mathlibs.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/particles.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/ducktrack/temp_pyparticles.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/pyproject.toml +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/setup.cfg +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/setup.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_acceleration.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_acdipole.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_acdipole_twiss.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_amplitude_detuning.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_aperture_polygon.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_aperture_table.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_apertures.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_attr_replicas_and_slices.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_boris_spatial.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_bucket_with_ref_energy_change.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_chromatic_functions_vs_madx.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_coasting.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_collective_tracker.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_collimation.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_coupling_edwards_teng.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_electron_cooler.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_element_characterization_functions.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_element_internal_record.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_elements.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_elements_classflags.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_elements_thick.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_fcc_ee_solenoid_correction.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_footprint.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_freeze_longitudinal.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_full_rings.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_h6_sps_beamline.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_hvkick.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_ions.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_json.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_lhc_env.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_lhc_match_phase_15.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_line.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_load.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_load_vars.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_lumi.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_mad_writer.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_madnginterface.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_magnet.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_match_and_track_from_element.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_match_coupling_knob.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_match_nested.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_match_optics_and_ip_knob.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_match_orbit_bump.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_match_tune_chroma_cminus.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_misalign.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_monitor.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_multi_bunch_gauss.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_multiline.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_multisetter.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_multispecies.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_native_madloader_lhc.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_native_madloader_lhc_thin.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_native_madloader_ps.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_native_madloader_sps.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_native_madloader_ti2.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_optimize_for_tracking.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_particles.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_particles_basics.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_particles_pdg.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_pipeline.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_prebuild_kernels.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_ps_against_ptc.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_ps_multiturn_twiss.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_psb_chicane.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_pyht_interface.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_quadrupole_fringe_ptc.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_quadrupole_wedge.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_radial_steering.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_radiation.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_radiation_equilibrium_emittances.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_radiation_equilibrium_emittances_thick.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_radiation_integrals.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_random_gen.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_random_gen_exp.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_random_gen_gauss.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_random_gen_ruth.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_rbend_straight_body.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_rf_track.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_rotation_signs.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_second_order_taylor_map.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_seeds.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_slice_and_insert_with_replicas.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_slice_elements.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_slicing.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_solenoid_bz_map_vs_boris.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_solenoid_bz_map_vs_boris_legacy.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_spacecharge_in_ring.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_spin.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_sps_thick_cpymad_loader.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_sps_thick_native_loader.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_survey.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_thick_kickers_rf_crab.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_thick_lhc.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_tilt_shifts.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_tracker.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_trajectory_correcton.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_twiss_to_file.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_vs_madx.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/tests/test_xmask_orbit_correction.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/_temp/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/_temp/lhc_match/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/_temp/lhc_match/var_limits.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/_temp/python_lattice_writer/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/_temp/python_lattice_writer/lattice_py_generation.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/aperture_meas.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/acdipole.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/apertures.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/apertures_src/limitpolygon.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/beam_interaction.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/_generate_slice_elements_c_code.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/_include_integrator.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/acdipole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/bend.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/default_magnet_config.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/drift.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/drift_exact.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/drift_exact_slice.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/drift_slice_cavity.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/drift_slice_crab_cavity.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/drift_slice_multipole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/drift_slice_rbend.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/drift_slice_uniform_solenoid.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/electroncooler.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/elens.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/exciter.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/legacy_solenoid.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/magnet.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/magnet_drift.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/magnet_edge.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/magnet_kick.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/marker.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/misalignment.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/multipole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/multipoleedge.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/octupole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/quadrupole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/rbend.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/sextupole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/slnd.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/srotation.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thick_slice_bend.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thick_slice_multipole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thick_slice_rbend.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thick_slice_uniform_solenoid.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_bend.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_multipole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_octupole_entry.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_octupole_exit.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_entry.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_exit.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_rbend.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_rbend_entry.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_rbend_exit.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_sextupole_entry.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_sextupole_exit.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_entry.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_exit.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_acdipole.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_drift.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_legacy_solenoid.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_legacy_solenoid_multipolar_components.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_legacy_solenoid_radiation.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_magnet.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_magnet.template.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_magnet_configure.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_magnet_drift.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_magnet_edge.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_magnet_kick.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_magnet_radiation.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_misalignments.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_mult_fringe.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_wedge.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_xyshift.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/variable_solenoid.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/wedge.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/wire.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/exciter.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/rft_element.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/slice_base.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/slice_elements_drift.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/slice_elements_edge.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/beam_elements/slice_elements_thick.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/boris.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/footprint.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/functions.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/general.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/headers/atomicadd.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/headers/checks.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/headers/constants.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/headers/particle_states.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/headers/synrad_spectrum.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/headers/track.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/headers/track_local_particle_with_transformations.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/internal_record.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/json.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/linear_normal_form.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/load.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/loss_location_refinement/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/loss_location_refinement/loss_location_refinement.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/lumi.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/mad_parser/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/mad_parser/madx.lark +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/mad_parser/parse.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/madng_interface.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/match.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/monitors/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/monitors/beam_position_monitor.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/monitors/beam_position_monitor.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/monitors/beam_profile_monitor.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/monitors/beam_profile_monitor.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/monitors/beam_size_monitor.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/monitors/beam_size_monitor.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/monitors/last_turns_monitor.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/monitors/last_turns_monitor.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/monitors/particles_monitor.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/monitors/particles_monitor.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/multiline.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/multiline_legacy/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/multiline_legacy/multiline_legacy.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/multiline_legacy/shared_knobs.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/multisetter/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/multisetter/multisetter.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/multisetter/multisetter.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/particles/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/particles/constants.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/particles/local_particle_custom_api.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/particles/masses.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/particles/pdg.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/particles/rng_src/base_rng.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/particles/rng_src/particles_rng.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/pipeline/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/pipeline/core.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/pipeline/manager.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/pipeline/multitracker.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/prebuilt_kernel_definitions/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/prebuilt_kernel_definitions/element_inits.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/prebuilt_kernel_definitions/element_types.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/progress_indicator.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/random/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/random/random_generators.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/random/random_src/exponential.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/random/random_src/normal.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/random/random_src/rutherford.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/random/random_src/uniform.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/random/random_src/uniform_accurate.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/slicing.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/survey.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/svgutils/__init__.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/svgutils/parser.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/svgutils/path.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/svgutils/svgutils.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/synctime.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/table.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/targets.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/track_flags.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/tracker_data.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/tracker_src/tracker.h +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/trajectory_correction.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/twissplot.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack/view.py +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack.egg-info/dependency_links.txt +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack.egg-info/entry_points.txt +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/xtrack.egg-info/requires.txt +0 -0
- {xtrack-0.98.5 → xtrack-0.98.7}/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
|
|
@@ -4339,3 +4339,149 @@ def test_str_in_composer_to_dict_from_dict():
|
|
|
4339
4339
|
assert line2.composer.components[0].at == 2
|
|
4340
4340
|
assert line2.composer.components[1] == 'q1'
|
|
4341
4341
|
assert line2.composer.components[2] == 'q1'
|
|
4342
|
+
|
|
4343
|
+
def test_sandwitch_thin_elements():
|
|
4344
|
+
|
|
4345
|
+
# Create an environment
|
|
4346
|
+
env = xt.Environment()
|
|
4347
|
+
|
|
4348
|
+
env.new('m0', xt.Marker)
|
|
4349
|
+
env.new('m1', xt.Marker)
|
|
4350
|
+
env.new('m2', xt.Marker)
|
|
4351
|
+
env.new('m3', xt.Marker)
|
|
4352
|
+
env.new('m4', xt.Marker)
|
|
4353
|
+
env.new('m5', xt.Marker)
|
|
4354
|
+
env.new('m6', xt.Marker)
|
|
4355
|
+
env.new('m7', xt.Marker)
|
|
4356
|
+
env.new('m8', xt.Marker)
|
|
4357
|
+
env.new('m9', xt.Marker)
|
|
4358
|
+
env.new('m10', xt.Marker)
|
|
4359
|
+
|
|
4360
|
+
env.new_line(name='myline', compose=True)
|
|
4361
|
+
composer = env['myline'].composer
|
|
4362
|
+
|
|
4363
|
+
composer.components.extend([
|
|
4364
|
+
env.place('m0'),
|
|
4365
|
+
env.place('m3', at=10.),
|
|
4366
|
+
env.place(['m1', 'm2']),
|
|
4367
|
+
env.place(['m6', 'm7'], at='m3@end'),
|
|
4368
|
+
env.place(['m4', 'm5'], at='m3@start'),
|
|
4369
|
+
env.place('m8', at=10, from_='m0'),
|
|
4370
|
+
env.place('m9', at=20.),
|
|
4371
|
+
env.place('m10', at=-10, from_='m9'),
|
|
4372
|
+
])
|
|
4373
|
+
|
|
4374
|
+
tt_unsorted = composer.resolve_s_positions(sort=False)
|
|
4375
|
+
tt_unsorted.cols['s from_ from_anchor'].show()
|
|
4376
|
+
# prints:
|
|
4377
|
+
# name s from_ from_anchor
|
|
4378
|
+
# m0 0 None None
|
|
4379
|
+
# m3 10 None None
|
|
4380
|
+
# m1 10 m3 end
|
|
4381
|
+
# m2 10 m1 end
|
|
4382
|
+
# m6 10 m3 end
|
|
4383
|
+
# m7 10 m6 end
|
|
4384
|
+
# m4 10 m3 start
|
|
4385
|
+
# m5 10 m4 end
|
|
4386
|
+
# m8 10 m0 None
|
|
4387
|
+
# m9 20 None None
|
|
4388
|
+
# m10 10 m9 None
|
|
4389
|
+
|
|
4390
|
+
assert np.all(tt_unsorted.name == [
|
|
4391
|
+
'm0', 'm3', 'm1', 'm2', 'm6', 'm7', 'm4', 'm5', 'm8', 'm9', 'm10'
|
|
4392
|
+
])
|
|
4393
|
+
xo.assert_allclose(tt_unsorted.s, [
|
|
4394
|
+
0., 10., 10., 10., 10., 10., 10., 10., 10., 20., 10.])
|
|
4395
|
+
assert np.all(tt_unsorted.from_ == [
|
|
4396
|
+
None, None, 'm3', 'm1', 'm3', 'm6', 'm3', 'm4', 'm0', None, 'm9'
|
|
4397
|
+
])
|
|
4398
|
+
assert np.all(tt_unsorted.from_anchor == [
|
|
4399
|
+
None, None, 'end', 'end', 'end', 'end', 'start', 'end', None, None, None
|
|
4400
|
+
])
|
|
4401
|
+
|
|
4402
|
+
tt_sorted = composer.resolve_s_positions(sort=True)
|
|
4403
|
+
tt_sorted.cols['s from_ from_anchor'].show()
|
|
4404
|
+
# prints:
|
|
4405
|
+
# name s from_ from_anchor
|
|
4406
|
+
# m0 0 None None
|
|
4407
|
+
# m8 10 m0 None
|
|
4408
|
+
# m4 10 m3 start
|
|
4409
|
+
# m5 10 m4 end
|
|
4410
|
+
# m3 10 None None
|
|
4411
|
+
# m1 10 m3 end
|
|
4412
|
+
# m2 10 m1 end
|
|
4413
|
+
# m6 10 m3 end
|
|
4414
|
+
# m7 10 m6 end
|
|
4415
|
+
# m10 10 m9 None
|
|
4416
|
+
# m9 20 None None
|
|
4417
|
+
|
|
4418
|
+
assert np.all(tt_sorted.name == [
|
|
4419
|
+
'm0', 'm8', 'm4', 'm5', 'm3', 'm1', 'm2', 'm6', 'm7', 'm10', 'm9'
|
|
4420
|
+
])
|
|
4421
|
+
xo.assert_allclose(tt_sorted.s, [
|
|
4422
|
+
0., 10., 10., 10., 10., 10., 10., 10., 10., 10., 20.])
|
|
4423
|
+
assert np.all(tt_sorted.from_ == [
|
|
4424
|
+
None, 'm0', 'm3', 'm4', None, 'm3', 'm1', 'm3', 'm6', 'm9', None
|
|
4425
|
+
])
|
|
4426
|
+
assert np.all(tt_sorted.from_anchor == [
|
|
4427
|
+
None, None, 'start', 'end', None, 'end', 'end', 'end', 'end', None, None
|
|
4428
|
+
])
|
|
4429
|
+
|
|
4430
|
+
def test_sandwitch_thin_elements_insert():
|
|
4431
|
+
|
|
4432
|
+
env = xt.Environment()
|
|
4433
|
+
|
|
4434
|
+
# Create a line with two quadrupoles and a marker
|
|
4435
|
+
line = env.new_line(name='myline', components=[
|
|
4436
|
+
env.new('q0', xt.Quadrupole, length=2.0, at=10.),
|
|
4437
|
+
env.new('q1', xt.Quadrupole, length=2.0, at=20.),
|
|
4438
|
+
env.new('m0', xt.Marker, at=40.),
|
|
4439
|
+
])
|
|
4440
|
+
|
|
4441
|
+
# Create a set of new elements to be placed
|
|
4442
|
+
env.new('s1', xt.Sextupole, length=0.1, k2=0.2)
|
|
4443
|
+
env.new('s2', xt.Sextupole, length=0.1, k2=-0.2)
|
|
4444
|
+
env.new('m1', xt.Marker)
|
|
4445
|
+
env.new('m2', xt.Marker)
|
|
4446
|
+
env.new('m3', xt.Marker)
|
|
4447
|
+
|
|
4448
|
+
# Insert the new elements in the line
|
|
4449
|
+
line.insert([
|
|
4450
|
+
env.place('s1', at=5.),
|
|
4451
|
+
env.place('s2', anchor='end', at=-5., from_='q1@start'),
|
|
4452
|
+
env.place(['m1', 'm2'], at='m0@start'),
|
|
4453
|
+
env.place('m3', at='m0@end'),
|
|
4454
|
+
])
|
|
4455
|
+
|
|
4456
|
+
tt = line.get_table()
|
|
4457
|
+
tt.show(cols=['s_start', 's_center', 's_end'])
|
|
4458
|
+
# is:
|
|
4459
|
+
# name s_start s_center s_end
|
|
4460
|
+
# ||drift_4 0 2.475 4.95
|
|
4461
|
+
# s1 4.95 5 5.05
|
|
4462
|
+
# ||drift_6 5.05 7.025 9
|
|
4463
|
+
# q0 9 10 11
|
|
4464
|
+
# ||drift_7 11 12.45 13.9
|
|
4465
|
+
# s2 13.9 13.95 14
|
|
4466
|
+
# ||drift_8 14 16.5 19
|
|
4467
|
+
# q1 19 20 21
|
|
4468
|
+
# ||drift_3 21 30.5 40
|
|
4469
|
+
# m1 40 40 40
|
|
4470
|
+
# m2 40 40 40
|
|
4471
|
+
# m0 40 40 40
|
|
4472
|
+
# m3 40 40 40
|
|
4473
|
+
# _end_point 40 40 40
|
|
4474
|
+
|
|
4475
|
+
assert np.all(tt.name == [
|
|
4476
|
+
'||drift_4', 's1', '||drift_6', 'q0', '||drift_7', 's2',
|
|
4477
|
+
'||drift_8', 'q1', '||drift_3', 'm1', 'm2', 'm0', 'm3', '_end_point'
|
|
4478
|
+
])
|
|
4479
|
+
xo.assert_allclose(tt.s_start, [
|
|
4480
|
+
0., 4.95, 5.05, 9., 11., 13.9, 14., 19., 21., 40., 40., 40., 40., 40.],
|
|
4481
|
+
atol=1e-14)
|
|
4482
|
+
xo.assert_allclose(tt.s_center, [
|
|
4483
|
+
2.475, 5., 7.025, 10., 12.45, 13.95, 16.5, 20., 30.5, 40., 40., 40., 40., 40.],
|
|
4484
|
+
atol=1e-14)
|
|
4485
|
+
xo.assert_allclose(tt.s_end, [
|
|
4486
|
+
4.95, 5.05, 9., 11., 13.9, 14., 19., 21., 40., 40., 40., 40., 40., 40.],
|
|
4487
|
+
atol=1e-14)
|
|
@@ -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.7'
|
|
@@ -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
|
|