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, status, dat_file, accelerator_path, list_of_elements_factory, e_mev, sigma, pickle_path=None, index=0, **kwargs)[source]
Bases:
objectClass holding a
ListOfElements.- Parameters:
- __init__(name, status, dat_file, accelerator_path, list_of_elements_factory, e_mev, sigma, pickle_path=None, index=0, **kwargs)[source]
Create object.
- Parameters:
name (
str) – Name of the accelerator, used in plots.status (
Literal['reference','broken','fix']) – Current status design.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[tuple[Any,...],dtype[double]]) – Initial beam \(\sigma\) matrix in \(\mathrm{m}\) and \(\mathrm{rad}\).pickle_path (
Path|None, default:None) – Where to pickle object. Used inkeep().index (
int, default:0) – CorrespondingFaultScenarioindex. A null index is reserved for reference accelerator.
- Return type:
None
- name
Name for the object. The default will be
"Reference"or"Solution". If object is unpickled, the name will be taken from theTOMLconfiguration dictionary.
- index
Corresponding
FaultScenarioindex. A null index is reserved for reference accelerator.
- simulation_outputs: dict[str, SimulationOutput]
Every
SimulationOutputinstance, associated with the name of theBeamCalculatorthat created it. This dictionary is filled bykeep().
- accelerator_path
Absolute path where results for each
BeamCalculatorwill be stored. Typically, this is a000001/-like folder.
- elts: ListOfElements
The list of elements contained in the accelerator.
- _is_unpickled: bool
Internal variable telling if this instance was create by unpickling a
PKLfile.
- property id: str
Produce a unique identifier for current object.
It is the concatenation of
indexandname:000000_Reference # Default for reference 000001_Solution # Default for broken/fixed of first failure 000001_AnotherSolution # Can be created by unpickling
- property l_cav
Shortcut to easily get list of cavities.
- property is_unpickled: bool
Tell if current object was created by unpickling a
PKLfile.If this flag is
True, the main consequence is that theBeamCalculatorinstances will not re-create newSimulationOutput, and instead return the ones that should already be insimulation_outputs.See also
- 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['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','acceptance_phi','field','freq_cavity_mhz','k_e','omega_0_rf','phi_ref','phi_rf','phi_s','reference','rf_field','status','v_cav_mv'] |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:
- is_computed(solver_id=None)[source]
Determine if propagation was calculated.
- Parameters:
solver_id (
str|None, default:None) – If given, we check if this key was set insimulation_outputs.- Return type:
- Returns:
True if propagation was calculated with
solver_id(or with anysolver if
solver_idwas not given).
- keep(simulation_output, exported_phase, beam_calculator_id, skip_pickle=False)[source]
Save simulation and settings.
- In particular:
Store the cavity settings in the appropriate
FieldMap.Save the settings in a
DATfile.Store the
SimulationOutputin thesimulation_outputsdictionary.
- Parameters:
simulation_output (
SimulationOutput) – The instance to keep.exported_phase (
Literal['phi_0_abs','phi_0_rel','phi_s'] |Literal['as_in_original_dat'] |Literal['as_in_settings']) – The reference phase in the outputDATfile.beam_calculator_id (
str) – Unique ID for theBeamCalculatorthat createdsimulation_output. Will be the key to accesssimulation_outputinsimulation_outputs.skip_pickle (
bool, default:False) – Use this during failure compensation to avoid pickling after everyFaultcompensation.simulation_output – The instance to keep.
exported_phase – The reference phase in the output
DATfile.beam_calculator_id – Unique ID for the
BeamCalculatorthat createdsimulation_output. Will be the key to accesssimulation_outputinsimulation_outputs.skip_pickle – Use this during failure compensation to avoid pickling after every
Faultcompensation.
- Return type:
- pickle(pickler, path=None)[source]
Pickle (save) the object.
This is useful for debug and temporary saves; do not use it for long time saving.
- plot(key, to_deg=True, grid=True, x=None, legend_entry=None, ax=None, **kwargs)[source]
Plot
keyfor every storedSimulationOutput.This method does not use the default plotting module, but pandas dataframe plotting method.
- Parameters:
key (
Literal['acceptance_energy','acceptance_phi','beam_parameters','element_to_index','elt_idx','mismatch_factor_zdelta','phi_s','set_of_cavity_settings','synch_trajectory','v_cav_mv','z_abs'] |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'] |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['cumulated','individual','n_points','r_xx','r_yy','r_zdelta','r_zz','r_zdelta_11','r_zdelta_12','r_zdelta_21','r_zdelta_22'] |Literal['eps_t','eps_x','eps_y','mismatch_factor_t','mismatch_factor_x','mismatch_factor_y'] |Literal['eps_phiw99','eps_x99','eps_y99','pow_lost'])to_deg (
bool, default:True)grid (
bool, default:True)
- Return type:
- classmethod from_pickle(pickler, path=None, name=None, accelerator_id=None, index=0)[source]
Instantiate object from previously pickled file.
Note
Also sets the “private” attribute
Accelerator._is_unpickledtoTrue.Todo
The GUI may also ask for the new
Acceleratorname? I think it would be too much intricated because I have no GUI specific module. Maybe one day…- Parameters:
pickler (
MyPickler) – Pickler object.path (
Path|str|None, default:None) – Path to the pickled object file. If not provided, useTkto open GUI and let user choose.name (
str|None, default:None) – To override the unpickledAccelerator.name.accelerator_id (
str|Sequence[str] |None, default:None) – Use this to override theSimulationOutput.beam_calculator_idstored in unpickledAccelerator.simulation_outputs. In particular, used to legend plots.index (
int, default:0) – CorrespondingFaultScenarioindex. A null index is reserved for reference accelerator. Will override theindexalready stored in the unpickled object.
- Return type:
Self