accelerator module
Define Accelerator, the highest-level class of LightWin.
It holds, well… an accelerator. This accelerator has a
ListOfElements. For each BeamCalculator defined, it has a
SimulationOutput stored in Accelerator.simulation_outputs.
Additionally, it has a ParticleInitialState, which describes energy,
phase, etc of the beam at the entry of its ListOfElements.
- class Accelerator(name, dat_file, accelerator_path, list_of_elements_factory, e_mev, sigma, **kwargs)[source]
Bases:
objectClass holding a
ListOfElements.- Parameters:
- __init__(name, dat_file, accelerator_path, list_of_elements_factory, e_mev, sigma, **kwargs)[source]
Create object.
- Parameters:
name (
str) – Name of the accelerator, used in plots.dat_file (
Path) – Absolute path to the linacDATfile.accelerator_path (
Path) – Absolute path where results for eachBeamCalculatorwill be stored.list_of_elements_factory (
ListOfElementsFactory) – A factory to create the list of elements.e_mev (
float) – Initial beam energy in \(\mathrm{MeV}\).sigma (
ndarray) – Initial beam \(\sigma\) matrix in \(\mathrm{m}\) and \(\mathrm{rad}\).
-
simulation_outputs:
dict[str,SimulationOutput] Every
SimulationOutputinstance, associated with the name of theBeamCalculatorthat created it. This dictionary is filled bykeep_simulation_output().
-
elts:
ListOfElements The list of elements contained in the accelerator.
- property l_cav
Shortcut to easily get list of cavities.
- get(*keys, to_numpy=True, none_to_nan=False, elt=None, pos=None, **kwargs)[source]
Get attributes from this instance or its attributes.
Note
Simulation-related quantities (e.g., beam parameters, transfer matrices) are stored in the
simulation_outputsdictionary, where each key is the name of aBeamCalculatorsolver (e.g.,"CyEnvelope1D_0","TraceWin_1"), and each value is a correspondingSimulationOutputobject.If simulations have been performed using multiple solvers,
Accelerator.get()becomes ambiguous and should be avoided for solver-dependent data. In that case, prefer callingaccelerator.simulation_outputs[solver_name].get(...)directly.- Parameters:
*keys (
Literal['accelerator_path','elts','name','simulation_outputs'] |Literal['accelerator_path','dat_file','dat_filecontent','elts_n_cmds','files','input_beam','input_particle','tm_cumul_in'] |Literal['aperture_flag','field_map_filename','field_map_folder','geometry'] |Literal['e_spat','n_cell','n_z','starting_position','section_idx'] |Literal['dat_idx','elt_idx','idx','idx_in_lattice','lattice','length_m','name','nature','section'] |Literal['abs_mesh','d_z','n_steps','rel_mesh','s_in','s_out','transf_mat_function'] |Literal['acceptance_energy','field','freq_cavity_mhz','k_e','omega_0_rf','acceptance_phi','phi_ref','phi_rf','phi_s','phi_s_func','reference','rf_field','status','v_cav_mv','w_kin'] |Literal['phi_0_abs','phi_0_rel','phi_s'] |Literal['beta','gamma','phi_abs','synchronous','w_kin','z_in'] |Literal['e_mev','e_rest_mev','f_bunch_mhz','i_milli_a','q_adim','sigma','inv_e_rest_mev','gamma_init','omega_0_bunch','lambda_bunch','q_over_m','m_over_q'] |Literal['alpha_phiw','beta_phiw','envelope_energy_phiw','envelope_pos_phiw','eps_phiw','eps_no_normalization_phiw','eps_normalized_phiw','gamma_phiw','sigma_phiw','twiss_phiw','alpha_phiw99','beta_phiw99','envelope_energy_phiw99','envelope_pos_phiw99','eps_phiw99','eps_no_normalization_phiw99','eps_normalized_phiw99','gamma_phiw99','sigma_phiw99','twiss_phiw99','alpha_t','beta_t','envelope_energy_t','envelope_pos_t','eps_t','eps_no_normalization_t','eps_normalized_t','gamma_t','sigma_t','twiss_t','alpha_x','beta_x','envelope_energy_x','envelope_pos_x','eps_x','eps_no_normalization_x','eps_normalized_x','gamma_x','sigma_x','twiss_x','alpha_x99','beta_x99','envelope_energy_x99','envelope_pos_x99','eps_x99','eps_no_normalization_x99','eps_normalized_x99','gamma_x99','sigma_x99','twiss_x99','alpha_y','beta_y','envelope_energy_y','envelope_pos_y','eps_y','eps_no_normalization_y','eps_normalized_y','gamma_y','sigma_y','twiss_y','alpha_y99','beta_y99','envelope_energy_y99','envelope_pos_y99','eps_y99','eps_no_normalization_y99','eps_normalized_y99','gamma_y99','sigma_y99','twiss_y99','alpha_z','beta_z','envelope_energy_z','envelope_pos_z','eps_z','eps_no_normalization_z','eps_normalized_z','gamma_z','sigma_z','twiss_z','alpha_zdelta','beta_zdelta','envelope_energy_zdelta','envelope_pos_zdelta','eps_zdelta','eps_no_normalization_zdelta','eps_normalized_zdelta','gamma_zdelta','sigma_zdelta','twiss_zdelta'] |Literal['alpha','beta','beta_kin','envelope_energy','envelope_pos','eps','eps_no_normalization','eps_normalized','gamma','gamma_kin','sigma','twiss','z_abs'] |Literal['phiw','phiw99','t','x','x99','y','y99','z','zdelta']) – Names of the desired attributes.to_numpy (
bool, default:True) – Convert list outputs to NumPy arrays.none_to_nan (
bool, default:False) – ReplaceNonevalues withnp.nan.elt (
str|Element|None, default:None) – Target element name or instance, passed to recursive_getter.pos (
Literal['in','out'] |None, default:None) – Position key for slicing data arrays.**kwargs (
Any) – Additional arguments for recursive_getter.
- Returns:
A single value or tuple of values.
- Return type:
Any
- keep_settings(simulation_output, exported_phase)[source]
Save cavity parameters in Elements and new .dat file.
- Parameters:
simulation_output (
SimulationOutput)exported_phase (
Literal['phi_0_abs','phi_0_rel','phi_s'] |Literal['as_in_settings','as_in_original_dat'])
- Return type:
- keep_simulation_output(simulation_output, beam_calculator_id)[source]
Save
SimulationOutputinsimulation_outputs.Also store info on current
Acceleratorin this object. In particular, we want to save a results path in theSimulationOutputso we can study it and save Figures/study results in the proper folder.- Parameters:
simulation_output (
SimulationOutput)beam_calculator_id (
str)
- Return type: