xtrack 0.89.4__tar.gz → 0.90.1__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.89.4/xtrack.egg-info → xtrack-0.90.1}/PKG-INFO +1 -1
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_collimation.py +137 -1
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_elements.py +36 -2
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_elements_thick.py +7 -6
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_environment.py +256 -23
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_line.py +1 -1
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_misalign.py +52 -39
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_multispecies.py +2 -8
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_particles.py +45 -1
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_rbend_straight_body.py +1 -1
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_slicing.py +0 -1
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_survey.py +3 -6
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_tilt_shifts.py +2 -1
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_twiss.py +54 -0
- xtrack-0.90.1/xtrack/_version.py +1 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/base_element.py +14 -12
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/apertures_src/limitellipse.h +3 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/apertures_src/limitpolygon.h +4 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/apertures_src/limitracetrack.h +4 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/apertures_src/limitrect.h +4 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/apertures_src/limitrectellipse.h +4 -2
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements.py +88 -3
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/drift.h +19 -3
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/drift_slice.h +19 -3
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/misalignment.h +5 -4
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_misalignments.h +91 -43
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/environment.py +547 -41
- xtrack-0.90.1/xtrack/functions.py +80 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/general.py +26 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/line.py +221 -402
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/loss_location_refinement/loss_location_refinement.py +20 -6
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/mad_loader.py +4 -8
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/multiline_legacy/shared_knobs.py +1 -1
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/particles/__init__.py +2 -1
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/particles/particles.py +69 -15
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/survey.py +2 -1
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/tracker_data.py +9 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/trajectory_correction.py +3 -1
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/twiss.py +19 -3
- {xtrack-0.89.4 → xtrack-0.90.1/xtrack.egg-info}/PKG-INFO +1 -1
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack.egg-info/SOURCES.txt +1 -0
- xtrack-0.89.4/xtrack/_version.py +0 -1
- {xtrack-0.89.4 → xtrack-0.90.1}/LICENSE +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/MANIFEST.in +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/README.md +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/__init__.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/base_classes.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/be_beamfields/BB6D.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/be_beamfields/__init__.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/be_beamfields/beambeam.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/be_beamfields/boost.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/be_beamfields/qgauss.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/be_beamfields/slicing.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/be_beamfields/spacecharge.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/elements.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/line.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/mathlibs.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/particles.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/ducktrack/temp_pyparticles.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/pyproject.toml +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/setup.cfg +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/setup.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_acceleration.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_amplitude_detuning.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_aperture_table.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_apertures.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_attr_replicas_and_slices.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_bucket_with_ref_energy_change.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_cavity_absolute_time.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_chromatic_functions_vs_madx.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_coasting.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_collective_tracker.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_coupling_edwards_teng.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_electron_cooler.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_element_characterization_functions.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_element_internal_record.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_elements_classflags.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_fcc_ee_solenoid_correction.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_footprint.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_freeze_longitudinal.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_full_rings.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_h6_sps_beamline.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_hvkick.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_ions.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_legacy_multiline_to_env.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_lhc_env.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_lhc_match_phase_15.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_load.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_load_vars.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_lumi.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_mad_writer.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_madloader.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_madnginterface.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_magnet.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_match_and_track_from_element.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_match_coupling_knob.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_match_nested.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_match_optics_and_ip_knob.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_match_orbit_bump.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_match_tune_chroma_cminus.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_monitor.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_multi_bunch_gauss.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_multiline.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_multisetter.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_native_madloader.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_optimize_for_tracking.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_particles_basics.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_particles_pdg.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_pipeline.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_prebuild_kernels.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_ps_against_ptc.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_ps_multiturn_twiss.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_psb_chicane.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_pyht_interface.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_quadrupole_fringe_ptc.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_quadrupole_wedge.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_radial_steering.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_radiation.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_radiation_equilibrium_emittances.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_radiation_equilibrium_emittances_thick.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_radiation_integrals.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_random_gen.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_random_gen_exp.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_random_gen_gauss.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_random_gen_ruth.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_rbend_rbarc.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_rf_track.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_rotation_signs.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_second_order_taylor_map.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_seeds.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_slice_and_insert_with_replicas.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_slice_elements.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_solenoid_bz_map_vs_boris.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_solenoid_bz_map_vs_boris_legacy.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_spacecharge_in_ring.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_spin.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_sps_thick.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_tapering.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_thick_kickers_rf_crab.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_thick_lhc.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_tracker.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_trajectory_correcton.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_twiss_vs_madx_psb.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_vs_madx.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/tests/test_xmask_orbit_correction.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/__init__.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/_temp/__init__.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/_temp/lhc_match/__init__.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/_temp/lhc_match/var_limits.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/aperture_meas.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/__init__.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/apertures.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/beam_interaction.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/bend.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/cavity.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/crab_cavity.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/default_magnet_config.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/drift_exact.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/drift_exact_slice.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/drift_slice_cavity.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/drift_slice_crab_cavity.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/drift_slice_multipole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/drift_slice_rbend.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/drift_slice_uniform_solenoid.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/electroncooler.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/elens.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/exciter.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/legacy_solenoid.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/magnet.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/magnet_drift.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/magnet_edge.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/magnet_kick.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/marker.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/multipole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/multipoleedge.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/octupole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/quadrupole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/rbend.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/rfmultipole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/sextupole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/slnd.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/srotation.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/temprf.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thick_slice_bend.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thick_slice_cavity.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thick_slice_crab_cavity.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thick_slice_multipole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thick_slice_rbend.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thick_slice_uniform_solenoid.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_bend.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_cavity.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_crab_cavity.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_multipole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_octupole_entry.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_octupole_exit.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_entry.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_exit.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_rbend.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_rbend_entry.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_rbend_exit.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_sextupole_entry.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_sextupole_exit.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_entry.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_exit.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_drift.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_legacy_solenoid.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_legacy_solenoid_multipolar_components.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_legacy_solenoid_radiation.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_magnet.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_magnet.template.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_magnet_configure.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_magnet_drift.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_magnet_edge.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_magnet_kick.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_magnet_radiation.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_mult_fringe.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_rf.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_rf.template.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_wedge.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_xyshift.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/variable_solenoid.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/wedge.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/wire.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/exciter.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/rft_element.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/slice_base.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/slice_elements_drift.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/slice_elements_edge.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/slice_elements_thick.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/beam_elements/slice_elements_thin.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/footprint.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/headers/atomicadd.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/headers/checks.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/headers/constants.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/headers/particle_states.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/headers/synrad_spectrum.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/headers/track.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/internal_record.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/json.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/linear_normal_form.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/load.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/loss_location_refinement/__init__.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/lumi.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/mad_parser/__init__.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/mad_parser/loader.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/mad_parser/madx.lark +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/mad_parser/parse.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/mad_writer.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/madng_interface.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/match.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/monitors/__init__.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/monitors/beam_position_monitor.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/monitors/beam_position_monitor.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/monitors/beam_profile_monitor.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/monitors/beam_profile_monitor.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/monitors/beam_size_monitor.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/monitors/beam_size_monitor.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/monitors/last_turns_monitor.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/monitors/last_turns_monitor.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/monitors/particles_monitor.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/monitors/particles_monitor.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/multiline.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/multiline_legacy/__init__.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/multiline_legacy/multiline_legacy.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/multisetter/__init__.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/multisetter/multisetter.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/particles/constants.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/particles/masses.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/particles/pdg.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/particles/rng_src/base_rng.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/particles/rng_src/particles_rng.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/pipeline/__init__.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/pipeline/core.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/pipeline/manager.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/pipeline/multitracker.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/progress_indicator.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/random/__init__.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/random/random_generators.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/random/random_src/exponential.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/random/random_src/normal.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/random/random_src/rutherford.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/random/random_src/uniform.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/random/random_src/uniform_accurate.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/slicing.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/svgutils/__init__.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/svgutils/parser.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/svgutils/path.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/svgutils/svgutils.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/synctime.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/tapering.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/targets.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/track_flags.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/tracker.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/tracker_src/tracker.h +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack/twissplot.py +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack.egg-info/dependency_links.txt +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack.egg-info/requires.txt +0 -0
- {xtrack-0.89.4 → xtrack-0.90.1}/xtrack.egg-info/top_level.txt +0 -0
|
@@ -411,7 +411,6 @@ def test_losslocationrefinement_skip_refinement_for_collimators():
|
|
|
411
411
|
#################
|
|
412
412
|
|
|
413
413
|
line.build_tracker()
|
|
414
|
-
line.config.XTRACK_GLOBAL_XY_LIMIT = 1e3
|
|
415
414
|
|
|
416
415
|
##########################
|
|
417
416
|
# Build particles object #
|
|
@@ -442,3 +441,140 @@ def test_losslocationrefinement_skip_refinement_for_collimators():
|
|
|
442
441
|
loss_loc_refinement.refine_loss_location(particles)
|
|
443
442
|
|
|
444
443
|
assert np.all(part_before.s == particles.s)
|
|
444
|
+
|
|
445
|
+
def test_memory_dealloc_repeated_refinements():
|
|
446
|
+
|
|
447
|
+
def _occupied_size(buffer):
|
|
448
|
+
return buffer.capacity - buffer.get_free()
|
|
449
|
+
|
|
450
|
+
n_part=10000
|
|
451
|
+
shift_x = 0.3e-2
|
|
452
|
+
shift_y = 0.5e-2
|
|
453
|
+
sandwitch_aper = True
|
|
454
|
+
|
|
455
|
+
ctx = xo.context_default
|
|
456
|
+
buf = ctx.new_buffer()
|
|
457
|
+
|
|
458
|
+
logger = logging.getLogger('xtrack')
|
|
459
|
+
logger.setLevel(logging.DEBUG)
|
|
460
|
+
|
|
461
|
+
# Define aper_0
|
|
462
|
+
aper_0 = xt.LimitEllipse(_buffer=buf, a=2e-2, b=2e-2)
|
|
463
|
+
shift_aper_0 = (shift_x, shift_y)
|
|
464
|
+
rot_deg_aper_0 = 10.
|
|
465
|
+
|
|
466
|
+
# Define aper_1
|
|
467
|
+
aper_1 = xt.LimitEllipse(_buffer=buf, a=1e-2, b=1e-2)
|
|
468
|
+
shift_aper_1 = (shift_x, shift_y)
|
|
469
|
+
rot_deg_aper_1 = 10.
|
|
470
|
+
|
|
471
|
+
# aper_0_sandwitch
|
|
472
|
+
if sandwitch_aper:
|
|
473
|
+
line_aper_0 = xt.Line(
|
|
474
|
+
elements=[xt.XYShift(_buffer=buf, dx=shift_aper_0[0], dy=shift_aper_0[1]),
|
|
475
|
+
xt.SRotation(_buffer=buf, angle=rot_deg_aper_0),
|
|
476
|
+
aper_0,
|
|
477
|
+
xt.Multipole(_buffer=buf, knl=[0.00]),
|
|
478
|
+
xt.SRotation(_buffer=buf, angle=-rot_deg_aper_0),
|
|
479
|
+
xt.XYShift(_buffer=buf, dx=-shift_aper_0[0], dy=-shift_aper_0[1])])
|
|
480
|
+
line_aper_0.build_tracker(_buffer=buf)
|
|
481
|
+
# aper_1_sandwitch
|
|
482
|
+
line_aper_1 = xt.Line(
|
|
483
|
+
elements=[xt.XYShift(_buffer=buf, dx=shift_aper_1[0], dy=shift_aper_1[1]),
|
|
484
|
+
xt.SRotation(_buffer=buf, angle=rot_deg_aper_1),
|
|
485
|
+
aper_1,
|
|
486
|
+
xt.Multipole(_buffer=buf, knl=[0.00]),
|
|
487
|
+
xt.SRotation(_buffer=buf, angle=-rot_deg_aper_1),
|
|
488
|
+
xt.XYShift(_buffer=buf, dx=-shift_aper_1[0], dy=-shift_aper_1[1])])
|
|
489
|
+
else:
|
|
490
|
+
aper_0.shift_x = shift_aper_0[0]
|
|
491
|
+
aper_0.shift_y = shift_aper_0[1]
|
|
492
|
+
aper_0.rot_s_rad = np.deg2rad(rot_deg_aper_0)
|
|
493
|
+
line_aper_0 = xt.Line(
|
|
494
|
+
elements=[aper_0, xt.Multipole(_buffer=buf, knl=[0.0])])
|
|
495
|
+
line_aper_0.build_tracker(_buffer=buf)
|
|
496
|
+
aper_1.shift_x = shift_aper_1[0]
|
|
497
|
+
aper_1.shift_y = shift_aper_1[1]
|
|
498
|
+
aper_1.rot_s_rad = np.deg2rad(rot_deg_aper_1)
|
|
499
|
+
line_aper_1 = xt.Line(
|
|
500
|
+
elements=[aper_1, xt.Multipole(_buffer=buf, knl=[0.00])])
|
|
501
|
+
|
|
502
|
+
line_aper_1.build_tracker(_buffer=buf)
|
|
503
|
+
|
|
504
|
+
# Build example line
|
|
505
|
+
line=xt.Line(
|
|
506
|
+
elements = ((xt.Drift(_buffer=buf, length=0.5),)
|
|
507
|
+
+ line_aper_0.elements
|
|
508
|
+
+ (xt.Drift(_buffer=buf, length=1),
|
|
509
|
+
xt.Multipole(_buffer=buf, knl=[0.]),
|
|
510
|
+
xt.Quadrupole(_buffer=buf, length=1),
|
|
511
|
+
xt.Cavity(_buffer=buf, voltage=3e6, frequency=400e6),
|
|
512
|
+
xt.ParticlesMonitor(_buffer=buf,
|
|
513
|
+
start_at_turn=0, stop_at_turn=10, num_particles=3),
|
|
514
|
+
xt.Drift(_buffer=buf, length=1.),
|
|
515
|
+
xt.Marker())
|
|
516
|
+
+ line_aper_1.elements))
|
|
517
|
+
line.build_tracker(_buffer=buf)
|
|
518
|
+
|
|
519
|
+
# Test on full line
|
|
520
|
+
r = np.linspace(0, 0.018, n_part)
|
|
521
|
+
theta = np.linspace(0, 8*np.pi, n_part)
|
|
522
|
+
particles0 = xp.Particles(_context=ctx,
|
|
523
|
+
p0c=6500e9,
|
|
524
|
+
x=r*np.cos(theta)+shift_x,
|
|
525
|
+
y=r*np.sin(theta)+shift_y)
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
print('occupied size before refinement', _occupied_size(buf))
|
|
530
|
+
|
|
531
|
+
loss_loc_refinement = xt.LossLocationRefinement(line,
|
|
532
|
+
n_theta = 360,
|
|
533
|
+
r_max = 0.5, # m
|
|
534
|
+
dr = 50e-6,
|
|
535
|
+
ds = 0.1,
|
|
536
|
+
save_refine_lines=False,
|
|
537
|
+
allowed_backtrack_types=[
|
|
538
|
+
xt.Multipole,
|
|
539
|
+
xt.Cavity
|
|
540
|
+
])
|
|
541
|
+
print('occupied size after init refinement', _occupied_size(buf))
|
|
542
|
+
|
|
543
|
+
n_repetitions = 20
|
|
544
|
+
|
|
545
|
+
import time
|
|
546
|
+
for i_iter in range(n_repetitions):
|
|
547
|
+
|
|
548
|
+
particles = particles0.copy()
|
|
549
|
+
|
|
550
|
+
line.track(particles)
|
|
551
|
+
|
|
552
|
+
t0 = time.time()
|
|
553
|
+
|
|
554
|
+
loss_loc_refinement.refine_loss_location(particles)
|
|
555
|
+
print('occupied size after refinement', _occupied_size(buf))
|
|
556
|
+
|
|
557
|
+
if i_iter==0:
|
|
558
|
+
occupied_size_first_iter = _occupied_size(buf)
|
|
559
|
+
else:
|
|
560
|
+
assert _occupied_size(buf) == occupied_size_first_iter, \
|
|
561
|
+
'Buffer size increased after refinement! Memory leak?'
|
|
562
|
+
|
|
563
|
+
t1 = time.time()
|
|
564
|
+
print(f'Took\t{(t1-t0)*1e3:.2f} ms')
|
|
565
|
+
|
|
566
|
+
# Automatic checks
|
|
567
|
+
mask_lost = particles.state == 0
|
|
568
|
+
r_calc = np.sqrt((particles.x-shift_x)**2 + (particles.y-shift_y)**2)
|
|
569
|
+
assert np.all(r_calc[~mask_lost]<1e-2)
|
|
570
|
+
assert np.all(r_calc[mask_lost]>1e-2)
|
|
571
|
+
i_aper_1 = line.elements.index(aper_1)
|
|
572
|
+
assert np.all(particles.at_element[mask_lost]==i_aper_1)
|
|
573
|
+
assert np.all(particles.at_element[~mask_lost]==0)
|
|
574
|
+
s0 = line.get_s_elements()[line.elements.index(aper_0)]
|
|
575
|
+
s1 = line.get_s_elements()[line.elements.index(aper_1)]
|
|
576
|
+
r0 = np.sqrt(aper_0.a_squ)
|
|
577
|
+
r1 = np.sqrt(aper_1.a_squ)
|
|
578
|
+
s_expected = s0 + (r_calc-r0)/(r1 - r0)*(s1 - s0)
|
|
579
|
+
# TODO This threshold is a bit large
|
|
580
|
+
xo.assert_allclose(particles.s[mask_lost], s_expected[mask_lost], atol=0.11)
|
|
@@ -214,6 +214,40 @@ def test_drift(test_context):
|
|
|
214
214
|
dtk_particle.zeta,
|
|
215
215
|
rtol=1e-14, atol=1e-14)
|
|
216
216
|
|
|
217
|
+
@for_all_test_contexts
|
|
218
|
+
def test_drift_exact_and_expanded(test_context):
|
|
219
|
+
|
|
220
|
+
line = xt.Line(elements=[xt.Drift(length=1.), xt.Drift(length=2.), xt.Drift(length=3.)])
|
|
221
|
+
ltot = line.get_length()
|
|
222
|
+
line.build_tracker(_context=test_context)
|
|
223
|
+
|
|
224
|
+
assert line['e2'].model == 'adaptive'
|
|
225
|
+
|
|
226
|
+
p0 = xp.Particles(p0c=1e9, px=0.3, _context=test_context)
|
|
227
|
+
x_prime_expanded = p0.px / (1 + p0.delta)
|
|
228
|
+
x_prime_exact = p0.px / np.sqrt((1 + p0.delta)**2 - p0.px**2)
|
|
229
|
+
|
|
230
|
+
p = p0.copy(_context=test_context)
|
|
231
|
+
line.track(p)
|
|
232
|
+
xo.assert_allclose(p.x, x_prime_expanded*ltot, rtol=1e-14, atol=1e-14)
|
|
233
|
+
|
|
234
|
+
line.configure_drift_model(model='exact')
|
|
235
|
+
assert line['e2'].model == 'exact'
|
|
236
|
+
p = p0.copy(_context=test_context)
|
|
237
|
+
line.track(p)
|
|
238
|
+
xo.assert_allclose(p.x, x_prime_exact*ltot, rtol=1e-14, atol=1e-14)
|
|
239
|
+
|
|
240
|
+
line.configure_drift_model(model='expanded')
|
|
241
|
+
assert line['e2'].model == 'expanded'
|
|
242
|
+
p = p0.copy(_context=test_context)
|
|
243
|
+
line.track(p)
|
|
244
|
+
xo.assert_allclose(p.x, x_prime_expanded*ltot, rtol=1e-14, atol=1e-14)
|
|
245
|
+
|
|
246
|
+
line.config.XTRACK_USE_EXACT_DRIFTS = True
|
|
247
|
+
p = p0.copy(_context=test_context)
|
|
248
|
+
line.track(p)
|
|
249
|
+
xo.assert_allclose(p.x, x_prime_exact*ltot, rtol=1e-14, atol=1e-14)
|
|
250
|
+
|
|
217
251
|
|
|
218
252
|
@for_all_test_contexts
|
|
219
253
|
def test_drift_exact(test_context):
|
|
@@ -232,7 +266,7 @@ def test_drift_exact(test_context):
|
|
|
232
266
|
drift = xt.Drift(_context=test_context, length=10.)
|
|
233
267
|
line = xt.Line(elements=[drift])
|
|
234
268
|
line.build_tracker(compile=False, _context=test_context)
|
|
235
|
-
line.
|
|
269
|
+
line.configure_drift_model(model='exact')
|
|
236
270
|
line.track(particles)
|
|
237
271
|
|
|
238
272
|
dtk_drift = dtk.elements.DriftExact(length=10.)
|
|
@@ -1162,7 +1196,7 @@ def test_nonlinearlens(test_context):
|
|
|
1162
1196
|
""")
|
|
1163
1197
|
|
|
1164
1198
|
line = xt.Line.from_madx_sequence(mad.sequence.ss)
|
|
1165
|
-
line.
|
|
1199
|
+
line.configure_drift_model('exact') # to be consistent with madx
|
|
1166
1200
|
line.build_tracker(_context=test_context)
|
|
1167
1201
|
|
|
1168
1202
|
num_p_test = 10
|
|
@@ -59,7 +59,7 @@ def test_combined_function_dipole_against_ptc(test_context, k0, k1, k2, length,
|
|
|
59
59
|
|
|
60
60
|
ml = MadLoader(mad.sequence.ss, allow_thick=True)
|
|
61
61
|
line_thick = ml.make_line()
|
|
62
|
-
line_thick.
|
|
62
|
+
line_thick.configure_drift_model('exact') # to be consistent with madx
|
|
63
63
|
line_thick.build_tracker(_context=test_context)
|
|
64
64
|
line_thick.configure_bend_model(core=model, edge='dipole-only')
|
|
65
65
|
|
|
@@ -1283,7 +1283,7 @@ def test_solenoid_against_madx(test_context, ks, ksi, length):
|
|
|
1283
1283
|
ml = MadLoader(mad.sequence.ss, allow_thick=True)
|
|
1284
1284
|
line_thick = ml.make_line()
|
|
1285
1285
|
line_thick.build_tracker(_context=test_context)
|
|
1286
|
-
line_thick.
|
|
1286
|
+
line_thick.configure_drift_model('exact') # to be consistent with madx
|
|
1287
1287
|
|
|
1288
1288
|
for ii in range(len(p0.x)):
|
|
1289
1289
|
mad.input(f"""
|
|
@@ -1320,7 +1320,7 @@ def test_solenoid_against_madx(test_context, ks, ksi, length):
|
|
|
1320
1320
|
def test_solenoid_thick_drift_like(test_context):
|
|
1321
1321
|
solenoid = xt.UniformSolenoid(ks=1.001e-9, length=1, _context=test_context)
|
|
1322
1322
|
l_drift = xt.Line(elements=[xt.Drift(length=1)])
|
|
1323
|
-
l_drift.
|
|
1323
|
+
l_drift.configure_drift_model('exact')
|
|
1324
1324
|
l_drift.build_tracker(_context=test_context)
|
|
1325
1325
|
|
|
1326
1326
|
p0 = xp.Particles(
|
|
@@ -1743,7 +1743,6 @@ def test_solenoid_multipole_rotations():
|
|
|
1743
1743
|
def test_drift_like_solenoid_with_kicks_radiation(radiation_mode, config):
|
|
1744
1744
|
test_context = xo.ContextCpu()
|
|
1745
1745
|
|
|
1746
|
-
config['XTRACK_USE_EXACT_DRIFTS'] = True
|
|
1747
1746
|
knl = [0.1, 0.4, 0.5]
|
|
1748
1747
|
ksl = [0.2, 0.3, 0.6]
|
|
1749
1748
|
|
|
@@ -1752,6 +1751,7 @@ def test_drift_like_solenoid_with_kicks_radiation(radiation_mode, config):
|
|
|
1752
1751
|
xt.Multipole(knl=knl, ksl=ksl),
|
|
1753
1752
|
xt.Drift(length=0.5),
|
|
1754
1753
|
])
|
|
1754
|
+
line_test.configure_drift_model('exact')
|
|
1755
1755
|
|
|
1756
1756
|
line_ref = xt.Line(elements=[
|
|
1757
1757
|
xt.UniformSolenoid(ks=0, length=1, knl=knl, ksl=ksl, num_multipole_kicks=1)
|
|
@@ -1803,8 +1803,6 @@ def test_drift_like_solenoid_with_kicks_radiation(radiation_mode, config):
|
|
|
1803
1803
|
def test_solenoid_with_kicks_radiation(radiation_mode, config):
|
|
1804
1804
|
test_context = xo.ContextCpu()
|
|
1805
1805
|
|
|
1806
|
-
config['XTRACK_USE_EXACT_DRIFTS'] = True
|
|
1807
|
-
|
|
1808
1806
|
ks = 0.4
|
|
1809
1807
|
l = 1.1
|
|
1810
1808
|
knl = [0.1, 0.4, 0.5]
|
|
@@ -1818,6 +1816,9 @@ def test_solenoid_with_kicks_radiation(radiation_mode, config):
|
|
|
1818
1816
|
line_1 = xt.Line(elements=[sol_1])
|
|
1819
1817
|
line_3 = xt.Line(elements=[sol_3])
|
|
1820
1818
|
|
|
1819
|
+
for ll in (line_ref, line_1, line_3):
|
|
1820
|
+
ll.configure_drift_model('exact')
|
|
1821
|
+
|
|
1821
1822
|
coords = np.linspace(-0.05, 0.05, 10)
|
|
1822
1823
|
coords_6d = np.array(list(itertools.product(*(coords,) * 6))).T
|
|
1823
1824
|
|
|
@@ -620,19 +620,19 @@ def test_assemble_ring():
|
|
|
620
620
|
assert 'cell3_copy' in env.lines
|
|
621
621
|
assert cell3_select.particle_ref is not None
|
|
622
622
|
assert env.lines['cell3_copy'] is cell3_select
|
|
623
|
-
assert cell3_select.
|
|
623
|
+
assert cell3_select.element_dict is env.element_dict
|
|
624
624
|
assert cell3_select.element_names[0] == 'start.cell.3.arc.2'
|
|
625
625
|
assert cell3_select.element_names[-1] == 'end.cell.3.arc.2'
|
|
626
626
|
assert (np.array(cell3_select.element_names) == np.array(
|
|
627
627
|
tw.rows['start.cell.3.arc.2':'end.cell.3.arc.2'].name)).all()
|
|
628
628
|
|
|
629
|
-
# Check that they share the
|
|
630
|
-
assert cell.
|
|
631
|
-
assert halfcell.
|
|
632
|
-
assert halfcell_ss.
|
|
633
|
-
assert cell_ss.
|
|
634
|
-
assert insertion.
|
|
635
|
-
assert ring2.
|
|
629
|
+
# Check that they share the element_dict
|
|
630
|
+
assert cell.element_dict is env.element_dict
|
|
631
|
+
assert halfcell.element_dict is env.element_dict
|
|
632
|
+
assert halfcell_ss.element_dict is env.element_dict
|
|
633
|
+
assert cell_ss.element_dict is env.element_dict
|
|
634
|
+
assert insertion.element_dict is env.element_dict
|
|
635
|
+
assert ring2.element_dict is env.element_dict
|
|
636
636
|
|
|
637
637
|
cell3_select.twiss4d()
|
|
638
638
|
|
|
@@ -1039,19 +1039,19 @@ def test_assemble_ring_builders():
|
|
|
1039
1039
|
name='cell3_copy')
|
|
1040
1040
|
assert 'cell3_copy' in env.lines
|
|
1041
1041
|
assert env.lines['cell3_copy'] is cell3_select
|
|
1042
|
-
assert cell3_select.
|
|
1042
|
+
assert cell3_select.element_dict is env.element_dict
|
|
1043
1043
|
assert cell3_select.element_names[0] == 'start.cell.3.arc.2'
|
|
1044
1044
|
assert cell3_select.element_names[-1] == 'end.cell.3.arc.2'
|
|
1045
1045
|
assert (np.array(cell3_select.element_names) == np.array(
|
|
1046
1046
|
tw.rows['start.cell.3.arc.2':'end.cell.3.arc.2'].name)).all()
|
|
1047
1047
|
|
|
1048
|
-
# Check that they share the
|
|
1049
|
-
assert cell.
|
|
1050
|
-
assert halfcell.
|
|
1051
|
-
assert halfcell_ss.
|
|
1052
|
-
assert cell_ss.
|
|
1053
|
-
assert insertion.
|
|
1054
|
-
assert ring2.
|
|
1048
|
+
# Check that they share the element_dict
|
|
1049
|
+
assert cell.element_dict is env.element_dict
|
|
1050
|
+
assert halfcell.element_dict is env.element_dict
|
|
1051
|
+
assert halfcell_ss.element_dict is env.element_dict
|
|
1052
|
+
assert cell_ss.element_dict is env.element_dict
|
|
1053
|
+
assert insertion.element_dict is env.element_dict
|
|
1054
|
+
assert ring2.element_dict is env.element_dict
|
|
1055
1055
|
|
|
1056
1056
|
cell3_select.twiss4d()
|
|
1057
1057
|
|
|
@@ -1393,13 +1393,13 @@ def test_assemble_ring_repeated_elements():
|
|
|
1393
1393
|
xo.assert_allclose(tw_ring2.betx[0], tw_cell.betx[0], atol=0, rtol=5e-4)
|
|
1394
1394
|
xo.assert_allclose(tw_ring2.bety[0], tw_cell.bety[0], atol=0, rtol=5e-4)
|
|
1395
1395
|
|
|
1396
|
-
# Check that they share the
|
|
1397
|
-
assert cell.
|
|
1398
|
-
assert halfcell.
|
|
1399
|
-
assert halfcell_ss.
|
|
1400
|
-
assert cell_ss.
|
|
1401
|
-
assert insertion.
|
|
1402
|
-
assert ring2.
|
|
1396
|
+
# Check that they share the element_dict
|
|
1397
|
+
assert cell.element_dict is env.element_dict
|
|
1398
|
+
assert halfcell.element_dict is env.element_dict
|
|
1399
|
+
assert halfcell_ss.element_dict is env.element_dict
|
|
1400
|
+
assert cell_ss.element_dict is env.element_dict
|
|
1401
|
+
assert insertion.element_dict is env.element_dict
|
|
1402
|
+
assert ring2.element_dict is env.element_dict
|
|
1403
1403
|
|
|
1404
1404
|
xo.assert_allclose(tw_ring2['betx', 'ip::0'], tw_half_insertion['betx', 'ip'], atol=0, rtol=5e-4)
|
|
1405
1405
|
xo.assert_allclose(tw_ring2['bety', 'ip::0'], tw_half_insertion['bety', 'ip'], atol=0, rtol=5e-4)
|
|
@@ -3193,3 +3193,236 @@ def test_enviroment_from_two_lines():
|
|
|
3193
3193
|
assert np.allclose(tw2.s, tw2i.s, atol=0, rtol=1e-15)
|
|
3194
3194
|
assert np.allclose(tw2.betx, tw2i.betx, atol=0, rtol=1e-15)
|
|
3195
3195
|
assert np.allclose(tw2.bety, tw2i.bety, atol=0, rtol=1e-15)
|
|
3196
|
+
|
|
3197
|
+
def test_particle_ref_from_particles_container():
|
|
3198
|
+
|
|
3199
|
+
env = xt.Environment()
|
|
3200
|
+
env['a'] = 4.
|
|
3201
|
+
|
|
3202
|
+
env.new_particle('my_particle', p0c=['1e12 * a'])
|
|
3203
|
+
assert 'my_particle' in env.particles
|
|
3204
|
+
xo.assert_allclose(env['my_particle'].p0c, 4e12, rtol=0, atol=1e-9)
|
|
3205
|
+
env['a'] = 5.
|
|
3206
|
+
xo.assert_allclose(env['my_particle'].p0c, 5e12, rtol=0, atol=1e-9)
|
|
3207
|
+
|
|
3208
|
+
env.particle_ref = 'my_particle'
|
|
3209
|
+
|
|
3210
|
+
xo.assert_allclose(env.particle_ref.p0c, 5e12, rtol=0, atol=1e-9)
|
|
3211
|
+
assert env.particle_ref.__class__.__name__ == 'EnvParticleRef'
|
|
3212
|
+
assert env._particle_ref == 'my_particle'
|
|
3213
|
+
assert env.ref['my_particle']._value is env.get('my_particle')
|
|
3214
|
+
env.particle_ref.p0c = '2e12 * a'
|
|
3215
|
+
xo.assert_allclose(env.particle_ref.p0c, 10e12, rtol=0, atol=1e-9)
|
|
3216
|
+
env['my_particle'].p0c = '1e12 * a'
|
|
3217
|
+
xo.assert_allclose(env.particle_ref.p0c, 5e12, rtol=0, atol=1e-9)
|
|
3218
|
+
|
|
3219
|
+
env2 = xt.Environment.from_dict(env.to_dict())
|
|
3220
|
+
assert 'my_particle' in env2.particles
|
|
3221
|
+
assert isinstance(env2.get('my_particle'), xt.Particles)
|
|
3222
|
+
assert env2.get('my_particle') is not env.get('my_particle')
|
|
3223
|
+
assert env2._particle_ref == "my_particle"
|
|
3224
|
+
assert env2.ref['my_particle']._value is env2.get('my_particle')
|
|
3225
|
+
xo.assert_allclose(env2['my_particle'].p0c, 5e12, rtol=0, atol=1e-9)
|
|
3226
|
+
env2['a'] = 6.
|
|
3227
|
+
xo.assert_allclose(env2['my_particle'].p0c, 6e12, rtol=0, atol=1e-9)
|
|
3228
|
+
env2['a'] = 5.
|
|
3229
|
+
|
|
3230
|
+
assert env2.particle_ref.__class__.__name__ == 'EnvParticleRef'
|
|
3231
|
+
env2.particle_ref.p0c = '2e12 * a'
|
|
3232
|
+
xo.assert_allclose(env2.particle_ref.p0c, 10e12, rtol=0, atol=1e-9)
|
|
3233
|
+
env2['my_particle'].p0c = '1e12 * a'
|
|
3234
|
+
xo.assert_allclose(env2.particle_ref.p0c, 5e12, rtol=0, atol=1e-9)
|
|
3235
|
+
|
|
3236
|
+
env2 = env.copy()
|
|
3237
|
+
assert 'my_particle' in env2.particles
|
|
3238
|
+
assert env2._particle_ref == "my_particle"
|
|
3239
|
+
assert env.ref['my_particle']._value is env.get('my_particle')
|
|
3240
|
+
assert isinstance(env2.get('my_particle'), xt.Particles)
|
|
3241
|
+
assert env2.get('my_particle') is not env.get('my_particle')
|
|
3242
|
+
xo.assert_allclose(env2['my_particle'].p0c, 5e12, rtol=0, atol=1e-9)
|
|
3243
|
+
env2['a'] = 6.
|
|
3244
|
+
xo.assert_allclose(env2['my_particle'].p0c, 6e12, rtol=0, atol=1e-9)
|
|
3245
|
+
env2['a'] = 5.
|
|
3246
|
+
|
|
3247
|
+
assert env2.particle_ref.__class__.__name__ == 'EnvParticleRef'
|
|
3248
|
+
env2.particle_ref.p0c = '2e12 * a'
|
|
3249
|
+
xo.assert_allclose(env2.particle_ref.p0c, 10e12, rtol=0, atol=1e-9)
|
|
3250
|
+
env2['my_particle'].p0c = '1e12 * a'
|
|
3251
|
+
xo.assert_allclose(env2.particle_ref.p0c, 5e12, rtol=0, atol=1e-9)
|
|
3252
|
+
|
|
3253
|
+
ll = env.new_line(name='my_line', components=[])
|
|
3254
|
+
assert ll._particle_ref == 'my_particle'
|
|
3255
|
+
|
|
3256
|
+
xo.assert_allclose(ll.particle_ref.p0c, 5e12, rtol=0, atol=1e-9)
|
|
3257
|
+
assert ll.particle_ref.__class__.__name__ == 'LineParticleRef'
|
|
3258
|
+
ll.particle_ref.p0c = '2e12 * a'
|
|
3259
|
+
xo.assert_allclose(env.particle_ref.p0c, 10e12, rtol=0, atol=1e-9)
|
|
3260
|
+
env['my_particle'].p0c = '1e12 * a'
|
|
3261
|
+
xo.assert_allclose(ll.particle_ref.p0c, 5e12, rtol=0, atol=1e-9)
|
|
3262
|
+
|
|
3263
|
+
ll2 = xt.Line.from_dict(ll.to_dict())
|
|
3264
|
+
assert 'my_particle' in ll2.env.particles
|
|
3265
|
+
assert ll2.env.particle_ref is None
|
|
3266
|
+
assert ll2.particle_ref.__class__.__name__ == 'LineParticleRef'
|
|
3267
|
+
assert ll2._particle_ref == 'my_particle'
|
|
3268
|
+
xo.assert_allclose(ll2.env['my_particle'].p0c, 5e12, rtol=0, atol=1e-9)
|
|
3269
|
+
ll2['a'] = 7.
|
|
3270
|
+
xo.assert_allclose(ll2.env['my_particle'].p0c, 7e12, rtol=0, atol=1e-9)
|
|
3271
|
+
ll2['a'] = 5.
|
|
3272
|
+
|
|
3273
|
+
ll2.particle_ref.p0c = '2e12 * a'
|
|
3274
|
+
xo.assert_allclose(ll2.particle_ref.p0c, 10e12, rtol=0, atol=1e-9)
|
|
3275
|
+
ll2.env['my_particle'].p0c = '1e12 * a'
|
|
3276
|
+
xo.assert_allclose(ll2.particle_ref.p0c, 5e12, rtol=0, atol=1e-9)
|
|
3277
|
+
|
|
3278
|
+
|
|
3279
|
+
ll2 = ll.copy()
|
|
3280
|
+
assert 'my_particle' in ll2.env.particles
|
|
3281
|
+
assert ll2.env.particle_ref is None
|
|
3282
|
+
assert ll2.particle_ref.__class__.__name__ == 'LineParticleRef'
|
|
3283
|
+
assert ll2._particle_ref == 'my_particle'
|
|
3284
|
+
xo.assert_allclose(ll2.env['my_particle'].p0c, 5e12, rtol=0, atol=1e-9)
|
|
3285
|
+
ll2['a'] = 7.
|
|
3286
|
+
xo.assert_allclose(ll2.env['my_particle'].p0c, 7e12, rtol=0, atol=1e-9)
|
|
3287
|
+
ll2['a'] = 5.
|
|
3288
|
+
|
|
3289
|
+
ll2.particle_ref.p0c = '2e12 * a'
|
|
3290
|
+
xo.assert_allclose(ll2.particle_ref.p0c, 10e12, rtol=0, atol=1e-9)
|
|
3291
|
+
ll2.env['my_particle'].p0c = '1e12 * a'
|
|
3292
|
+
xo.assert_allclose(ll2.particle_ref.p0c, 5e12, rtol=0, atol=1e-9)
|
|
3293
|
+
|
|
3294
|
+
def test_particle_ref_as_object():
|
|
3295
|
+
|
|
3296
|
+
env = xt.Environment()
|
|
3297
|
+
env['a'] = 4.
|
|
3298
|
+
|
|
3299
|
+
env.new_particle('my_particle', p0c=['1e12 * a'])
|
|
3300
|
+
assert 'my_particle' in env.particles
|
|
3301
|
+
xo.assert_allclose(env['my_particle'].p0c, 4e12, rtol=0, atol=1e-9)
|
|
3302
|
+
env['a'] = 5.
|
|
3303
|
+
xo.assert_allclose(env['my_particle'].p0c, 5e12, rtol=0, atol=1e-9)
|
|
3304
|
+
|
|
3305
|
+
part = env['my_particle'].copy()
|
|
3306
|
+
env.particle_ref = part
|
|
3307
|
+
|
|
3308
|
+
xo.assert_allclose(env.particle_ref.p0c, 5e12, rtol=0, atol=1e-9)
|
|
3309
|
+
assert env.particle_ref.__class__.__name__ == 'EnvParticleRef'
|
|
3310
|
+
assert env._particle_ref is part
|
|
3311
|
+
env['my_particle'].p0c = '2e12 * a'
|
|
3312
|
+
xo.assert_allclose(env.eval('2e12 * a'), 10e12, rtol=0, atol=1e-9)
|
|
3313
|
+
xo.assert_allclose(env.particle_ref.p0c, 5e12, rtol=0, atol=1e-9)
|
|
3314
|
+
|
|
3315
|
+
env2 = xt.Environment.from_dict(env.to_dict())
|
|
3316
|
+
assert 'my_particle' in env2.particles
|
|
3317
|
+
assert isinstance(env2.get('my_particle'), xt.Particles)
|
|
3318
|
+
assert env2.get('my_particle') is not env.get('my_particle')
|
|
3319
|
+
assert isinstance(env2._particle_ref, xt.Particles)
|
|
3320
|
+
assert env2.particle_ref.__class__.__name__ == 'EnvParticleRef'
|
|
3321
|
+
|
|
3322
|
+
env2 = env.copy()
|
|
3323
|
+
assert 'my_particle' in env2.particles
|
|
3324
|
+
assert isinstance(env2._particle_ref, xt.Particles)
|
|
3325
|
+
assert isinstance(env2.get('my_particle'), xt.Particles)
|
|
3326
|
+
assert env2.get('my_particle') is not env.get('my_particle')
|
|
3327
|
+
assert env2.particle_ref.__class__.__name__ == 'EnvParticleRef'
|
|
3328
|
+
|
|
3329
|
+
ll = env.new_line(name='my_line', components=[])
|
|
3330
|
+
assert isinstance(ll._particle_ref, xt.Particles)
|
|
3331
|
+
assert ll._particle_ref is env._particle_ref
|
|
3332
|
+
xo.assert_allclose(ll.particle_ref.p0c, 5e12, rtol=0, atol=1e-9)
|
|
3333
|
+
assert ll.particle_ref.__class__.__name__ == 'LineParticleRef'
|
|
3334
|
+
|
|
3335
|
+
ll2 = xt.Line.from_dict(ll.to_dict())
|
|
3336
|
+
assert ll2.env.particle_ref is None
|
|
3337
|
+
assert ll2.particle_ref.__class__.__name__ == 'LineParticleRef'
|
|
3338
|
+
assert isinstance(ll2._particle_ref, xt.Particles)
|
|
3339
|
+
assert ll2._particle_ref is not ll._particle_ref
|
|
3340
|
+
|
|
3341
|
+
|
|
3342
|
+
ll2 = ll.copy()
|
|
3343
|
+
assert ll2.env.particle_ref is None
|
|
3344
|
+
assert ll2.particle_ref.__class__.__name__ == 'LineParticleRef'
|
|
3345
|
+
assert isinstance(ll2._particle_ref, xt.Particles)
|
|
3346
|
+
assert ll2._particle_ref is not ll._particle_ref
|
|
3347
|
+
|
|
3348
|
+
def test_line_set_particle_ref():
|
|
3349
|
+
|
|
3350
|
+
line = xt.Line()
|
|
3351
|
+
line.set_particle_ref('electron', beta0=0.9)
|
|
3352
|
+
|
|
3353
|
+
xo.assert_allclose(line.particle_ref.q0 , -1, rtol=0, atol=1e-14)
|
|
3354
|
+
xo.assert_allclose(line.particle_ref.mass0 , xt.ELECTRON_MASS_EV)
|
|
3355
|
+
xo.assert_allclose(line.particle_ref.beta0 , 0.9, rtol=0, atol=1e-14)
|
|
3356
|
+
|
|
3357
|
+
env = xt.Environment()
|
|
3358
|
+
env['my_beta0'] = 0.1
|
|
3359
|
+
env.new_particle('my_part', 'proton', beta0='my_beta0')
|
|
3360
|
+
|
|
3361
|
+
line = env.new_line()
|
|
3362
|
+
line.set_particle_ref('my_part')
|
|
3363
|
+
line['my_beta0'] = 0.6
|
|
3364
|
+
|
|
3365
|
+
xo.assert_allclose(line.particle_ref.q0 , 1, rtol=0, atol=1e-14)
|
|
3366
|
+
xo.assert_allclose(line.particle_ref.mass0 , xt.PROTON_MASS_EV)
|
|
3367
|
+
xo.assert_allclose(line.particle_ref.beta0 , 0.6, rtol=0, atol=1e-14)
|
|
3368
|
+
|
|
3369
|
+
p_ref = xt.Particles('Pb208', p0c=7e12/82)
|
|
3370
|
+
line = xt.Line()
|
|
3371
|
+
line.set_particle_ref(p_ref)
|
|
3372
|
+
|
|
3373
|
+
xo.assert_allclose(line.particle_ref.q0 , 82, rtol=0, atol=1e-14)
|
|
3374
|
+
xo.assert_allclose(line.particle_ref.mass0, xt.particles.masses.Pb208_MASS_EV)
|
|
3375
|
+
xo.assert_allclose(line.particle_ref.p0c , 7e12/82, rtol=0, atol=1e-14)
|
|
3376
|
+
|
|
3377
|
+
|
|
3378
|
+
def test_env_set_particle_ref():
|
|
3379
|
+
|
|
3380
|
+
env = xt.Environment()
|
|
3381
|
+
env.set_particle_ref('electron', beta0=0.9)
|
|
3382
|
+
|
|
3383
|
+
xo.assert_allclose(env.particle_ref.q0 , -1, rtol=0, atol=1e-14)
|
|
3384
|
+
xo.assert_allclose(env.particle_ref.mass0 , xt.ELECTRON_MASS_EV)
|
|
3385
|
+
xo.assert_allclose(env.particle_ref.beta0 , 0.9, rtol=0, atol=1e-14)
|
|
3386
|
+
|
|
3387
|
+
env.new_line(name='line1', components=[env.new('d1', 'Drift', length=1)])
|
|
3388
|
+
env.line1.set_particle_ref('electron', beta0=0.9)
|
|
3389
|
+
|
|
3390
|
+
xo.assert_allclose(env.line1.particle_ref.q0 , -1, rtol=0, atol=1e-14)
|
|
3391
|
+
xo.assert_allclose(env.line1.particle_ref.mass0 , xt.ELECTRON_MASS_EV)
|
|
3392
|
+
xo.assert_allclose(env.line1.particle_ref.beta0 , 0.9, rtol=0, atol=1e-14)
|
|
3393
|
+
|
|
3394
|
+
env.set_particle_ref('proton', beta0=0.8)
|
|
3395
|
+
xo.assert_allclose(env.particle_ref.q0 , 1, rtol=0, atol=1e-14)
|
|
3396
|
+
xo.assert_allclose(env.particle_ref.mass0 , xt.PROTON_MASS_EV)
|
|
3397
|
+
xo.assert_allclose(env.particle_ref.beta0 , 0.8, rtol=0, atol=1e-14)
|
|
3398
|
+
xo.assert_allclose(env.line1.particle_ref.q0 , 1, rtol=0, atol=1e-14)
|
|
3399
|
+
xo.assert_allclose(env.line1.particle_ref.mass0 , xt.PROTON_MASS_EV)
|
|
3400
|
+
xo.assert_allclose(env.line1.particle_ref.beta0 , 0.8, rtol=0, atol=1e-14)
|
|
3401
|
+
|
|
3402
|
+
env['my_beta0'] = 0.1
|
|
3403
|
+
env.new_particle('my_part', 'proton', beta0='my_beta0')
|
|
3404
|
+
env.set_particle_ref('my_part')
|
|
3405
|
+
|
|
3406
|
+
env['my_beta0'] = 0.6
|
|
3407
|
+
xo.assert_allclose(env.line1.particle_ref.q0 , 1, rtol=0, atol=1e-14)
|
|
3408
|
+
xo.assert_allclose(env.line1.particle_ref.mass0 , xt.PROTON_MASS_EV)
|
|
3409
|
+
xo.assert_allclose(env.line1.particle_ref.beta0 , 0.6, rtol=0, atol=1e-14)
|
|
3410
|
+
|
|
3411
|
+
p_ref = xt.Particles('Pb208', p0c=7e12/82)
|
|
3412
|
+
env.set_particle_ref(p_ref)
|
|
3413
|
+
|
|
3414
|
+
xo.assert_allclose(env.particle_ref.q0 , 82, rtol=0, atol=1e-14)
|
|
3415
|
+
xo.assert_allclose(env.particle_ref.mass0, xt.particles.masses.Pb208_MASS_EV)
|
|
3416
|
+
xo.assert_allclose(env.particle_ref.p0c , 7e12/82, rtol=0, atol=1e-14)
|
|
3417
|
+
xo.assert_allclose(env.line1.particle_ref.q0 , 82, rtol=0, atol=1e-14)
|
|
3418
|
+
xo.assert_allclose(env.line1.particle_ref.mass0, xt.particles.masses.Pb208_MASS_EV)
|
|
3419
|
+
xo.assert_allclose(env.line1.particle_ref.p0c , 7e12/82, rtol=0, atol=1e-14)
|
|
3420
|
+
|
|
3421
|
+
env.set_particle_ref('positron', beta0=0.7, lines=None)
|
|
3422
|
+
xo.assert_allclose(env.particle_ref.q0 , 1, rtol=0, atol=1e-14)
|
|
3423
|
+
xo.assert_allclose(env.particle_ref.mass0 , xt.ELECTRON_MASS_EV)
|
|
3424
|
+
xo.assert_allclose(env.particle_ref.beta0 , 0.7, rtol=0, atol=1e-14)
|
|
3425
|
+
# line unchanged
|
|
3426
|
+
xo.assert_allclose(env.line1.particle_ref.q0 , 82, rtol=0, atol=1e-14)
|
|
3427
|
+
xo.assert_allclose(env.line1.particle_ref.mass0, xt.particles.masses.Pb208_MASS_EV)
|
|
3428
|
+
xo.assert_allclose(env.line1.particle_ref.p0c , 7e12/82, rtol=0, atol=1e-14)
|
|
@@ -65,7 +65,7 @@ def test_simplification_methods():
|
|
|
65
65
|
line.remove_zero_length_drifts(inplace=True)
|
|
66
66
|
|
|
67
67
|
# Test merging of multipoles
|
|
68
|
-
line._var_management = None
|
|
68
|
+
line.env._var_management = None
|
|
69
69
|
line.insert_element(element=xt.Multipole(knl=[1, 0, 3], ksl=[0, 20, 0]), name='m1', at_s=3.3)
|
|
70
70
|
line.insert_element(element=xt.Multipole(knl=[4, 2], ksl=[10, 40]), name='m2', at_s=3.3)
|
|
71
71
|
line.insert_element(element=xt.Multipole(knl=[0, 3, 8], ksl=[2, 0, 17]), name='m3', at_s=3.3)
|