wtf section
wtf stands for what to fit.
This section parametrizes the failed cavities, as well as how they are fixed.
Selecting compensating cavities
Compensating cavities are selected according to the strategy keyword; actual functions mapping failures with failed cavities are listed here:
Strategy function |
Corresponding keyword |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
Every strategy requires user to set specific parameters, as listed below.
k out of n method
Compensate the \(n\) failed cavities with \(k\times n\) closest cavities [SPK21, YRKT+22].
Entry |
Type |
Description |
Mandatory? |
Allowed values |
|---|---|---|---|---|
|
|
Index/name of failed cavities. Must be a
|
✅ |
|
|
|
kwargs for the |
❌ |
|
|
|
Indicates if failed is element index/cavity index/name,
|
✅ |
(‘element’, ‘cavity’, ‘name’) |
|
|
Objectives for the optimisation algorithm. |
✅ |
(‘CorrectorAtExit’, ‘EnergyMismatch’, ‘EnergyPhaseMismatch’, ‘EnergySeveralMismatches’, ‘EnergySyncPhaseMismatch’, ‘experimental’, ‘rephased_ADS’, ‘simple_ADS’, ‘sync_phase_as_objective_ADS’) |
|
|
Name of optimisation algorithm. |
✅ |
(‘bayesian_optimization’, ‘differential_evolution’, ‘downhill_simplex’, ‘downhill_simplex_penalty’, ‘experimental’, ‘explorator’, ‘least_squares’, ‘least_squares_penalty’, ‘nelder_mead’, ‘nelder_mead_penalty’, ‘simulated_annealing’) |
|
|
Keyword arguments passed to the optimisation algorithm. |
❌ |
|
|
|
How compensating cavities are selected. |
✅ |
(‘corrector at exit’, ‘global’, ‘global_downstream’, ‘k out of n’, ‘l neighboring lattices’, ‘manual’) |
|
|
How to select the compensating elements when several are equidistant to the failure. |
❌ |
(‘upstream first’, ‘downstream first’) |
|
|
Distance increase for downstream elements (
( window of compensating cavities which is not centered around the failed elements. |
❌ |
|
|
|
Number of compensating cavities per failed cavity. |
✅ |
l neighboring lattices method
Every fault will be compensated by l full lattices, direct neighbors of the errors [BBU14, PB22].
You must provide l.
Non-failed cavities in the same lattice as the failure are also used.
Entry |
Type |
Description |
Mandatory? |
Allowed values |
|---|---|---|---|---|
|
|
Index/name of failed cavities. Must be a
|
✅ |
|
|
|
kwargs for the |
❌ |
|
|
|
Indicates if failed is element index/cavity index/name,
|
✅ |
(‘element’, ‘cavity’, ‘name’) |
|
|
Objectives for the optimisation algorithm. |
✅ |
(‘CorrectorAtExit’, ‘EnergyMismatch’, ‘EnergyPhaseMismatch’, ‘EnergySeveralMismatches’, ‘EnergySyncPhaseMismatch’, ‘experimental’, ‘rephased_ADS’, ‘simple_ADS’, ‘sync_phase_as_objective_ADS’) |
|
|
Name of optimisation algorithm. |
✅ |
(‘bayesian_optimization’, ‘differential_evolution’, ‘downhill_simplex’, ‘downhill_simplex_penalty’, ‘experimental’, ‘explorator’, ‘least_squares’, ‘least_squares_penalty’, ‘nelder_mead’, ‘nelder_mead_penalty’, ‘simulated_annealing’) |
|
|
Keyword arguments passed to the optimisation algorithm. |
❌ |
|
|
|
How compensating cavities are selected. |
✅ |
(‘corrector at exit’, ‘global’, ‘global_downstream’, ‘k out of n’, ‘l neighboring lattices’, ‘manual’) |
|
|
How to select the compensating elements when several are equidistant to the failure. |
❌ |
(‘upstream first’, ‘downstream first’) |
|
|
Distance increase for downstream elements (
( window of compensating cavities which is not centered around the failed elements. |
❌ |
|
|
|
Number of compensating lattices per failed cavity. |
✅ |
|
|
|
Minimum number of compensating cavities in the lattice; when a lattice does not reach this number, we use it anyway for compensation, but we also take another lattice. Designed to remove the lattices that do not have any cavity. |
❌ |
Corrector at exit method
Use n_compensating cavities around the failure to shape the beam and propagate it without losses.
Rephase downstream cavities to keep the beam as intact as possible.
Give an ultimate energy boost to the beam with the last n_correctors cavities.
This method is very similar to the one used at SNS [SP22]. In this paper however, there are no compensating cavities around the failure.
Important
This method was designed to to work with:
reference_phase_policy = "phi_s". This way, cavities downstream of a failure are rephased to preserve synchronous phase and hence acceptance.
strategy = "corrector at exit". This tells thefailed_and_compensating()called at initialization ofFaultScenarioto addn_correctorscavities at the end of the linac to retrieve energy.
LightWin will not verify that these keys are properly set.
Todo
Automatically check validity of reference_phase_policy and consistency of strategy/objective_preset.
Warning
Setting n_compensating = 0 in the [wtf] section of the TOML configuration file will raise an error, as LightWin currently does not handle optimization problem without compensating elements.
Todo
Handle optimization problems without compensating cavities.
- Skip creation of associated Fault?
- Other solution?
Entry |
Type |
Description |
Mandatory? |
Allowed values |
|---|---|---|---|---|
|
|
Index/name of failed cavities. Must be a
|
✅ |
|
|
|
kwargs for the |
❌ |
|
|
|
Indicates if failed is element index/cavity index/name,
|
✅ |
(‘element’, ‘cavity’, ‘name’) |
|
|
Objectives for the optimisation algorithm. |
✅ |
(‘CorrectorAtExit’, ‘EnergyMismatch’, ‘EnergyPhaseMismatch’, ‘EnergySeveralMismatches’, ‘EnergySyncPhaseMismatch’, ‘experimental’, ‘rephased_ADS’, ‘simple_ADS’, ‘sync_phase_as_objective_ADS’) |
|
|
Name of optimisation algorithm. |
✅ |
(‘bayesian_optimization’, ‘differential_evolution’, ‘downhill_simplex’, ‘downhill_simplex_penalty’, ‘experimental’, ‘explorator’, ‘least_squares’, ‘least_squares_penalty’, ‘nelder_mead’, ‘nelder_mead_penalty’, ‘simulated_annealing’) |
|
|
Keyword arguments passed to the optimisation algorithm. |
❌ |
|
|
|
How compensating cavities are selected. |
✅ |
(‘corrector at exit’, ‘global’, ‘global_downstream’, ‘k out of n’, ‘l neighboring lattices’, ‘manual’) |
|
|
How to select the compensating elements when several are equidistant to the failure. |
❌ |
(‘upstream first’, ‘downstream first’) |
|
|
Distance increase for downstream elements (
( window of compensating cavities which is not centered around the failed elements. |
❌ |
|
|
|
Number of compensating cavities around every failure. They are used to shape the beam without retrieving nominal energy, so that it can propagate up to the `` correctors `` without losses. Currently, you must set at least 1 compensating cavity to avoid errors. |
✅ |
|
|
|
Number of compensating cavities at the exit of the linac. They are used to retrieve nominal energy. Not affected by the `` shift `` keyword. |
✅ |
Manual association of failed / compensating cavities
If you want to manually associate each failed cavity with its compensating cavities:
Entry |
Type |
Description |
Mandatory? |
Allowed values |
|---|---|---|---|---|
|
|
Index/name of failed cavities. Must be a
|
✅ |
|
|
|
kwargs for the |
❌ |
|
|
|
Indicates if failed is element index/cavity index/name,
|
✅ |
(‘element’, ‘cavity’, ‘name’) |
|
|
Objectives for the optimisation algorithm. |
✅ |
(‘CorrectorAtExit’, ‘EnergyMismatch’, ‘EnergyPhaseMismatch’, ‘EnergySeveralMismatches’, ‘EnergySyncPhaseMismatch’, ‘experimental’, ‘rephased_ADS’, ‘simple_ADS’, ‘sync_phase_as_objective_ADS’) |
|
|
Name of optimisation algorithm. |
✅ |
(‘bayesian_optimization’, ‘differential_evolution’, ‘downhill_simplex’, ‘downhill_simplex_penalty’, ‘experimental’, ‘explorator’, ‘least_squares’, ‘least_squares_penalty’, ‘nelder_mead’, ‘nelder_mead_penalty’, ‘simulated_annealing’) |
|
|
Keyword arguments passed to the optimisation algorithm. |
❌ |
|
|
|
How compensating cavities are selected. |
✅ |
(‘corrector at exit’, ‘global’, ‘global_downstream’, ‘k out of n’, ‘l neighboring lattices’, ‘manual’) |
|
|
Index/name of failed cavities. Must be a
|
✅ |
|
|
|
Index/name of compensating cavities cavities. Must be a
number of:class: length of most outer list) must match of groups of compensating cavities (second level) must match |
✅ |
Example
# Indexes are cavity indexes
idx = "cavity"
failed = [
[0, 1], # First simulation first cryomodule is down
[0], # Second simulation only first cavity is down
[1, 45] # Third simulation second and 46th cavity are down
]
Global, global downstream compensation
Use either all cavities of the linac, or all cavities downstream of the failure. These methods require a very large number of compensating cavities and therefore significant numerical resources. As a result, they are only lightly tested.
Settings optimization problem
Optimisation objectives
The values for objective_preset are explained here:
Objectives preset |
Corresponding keys |
|---|---|
|
|
|
|
|
|
|
|
|
If you do not retrieve the beam absolute phase at the exit of the compensation zone (eg, if you use EnergyMismatch), you should probably rephase downstream cavities to keep RF/beam synchronicity.
This is acheived by setting your beam_calculator.reference_phase_policy key to "phi_0_rel" or "phi_0_s".
See also this notebook.
Note
You can subclass
ObjectiveFactoryto your liking, and pass the created object torun_simulation()directly.
config = process_config(toml_filepath, toml_keys)
fault_scenarios = run_simulation(
config,
objective_factory_class=MyObjectiveFactory, # subclass of ObjectiveFactory
)
An example is provided in data/example/my_own_objectives.py.
Todo
Make it more explicit and easy to understand with a jupyter notebook.
Optimisation algorithms
Here are mappings of optimisation_algorithm key to actual OptimisationAlgorithm.
Check the documentation of the optimisation algorithm you want to use, in particular if you want to tune it using optimisation_algorithm_kwargs key.
Optimisation algorithm |
Corresponding keys |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|