[Feature Request]: Proper Arc-by-Arc correction #480
Labels
Estimate: Complicated
Might need some major overhaul of the code.
Priority: Medium
Work on this.
Status: On Hold
Work currently stopped, but not for blocking reasons.
Status: Review Needed
Work currently stopped, untils someone else reviews it.
Type: Feature
A (suggetion for a) new feature or enhancement in functionality.
Feature Description
In the current implementation of the arc-by-arc phase-advance correction, the phase-advances per arc are simply combined to get a total phase advance per arc, which is then corrected using the standard response matrix approach.
While this might work in some cases, a more robust correction approach should do the following:
Possible Implementation
Firstly, this requires an additional loop within the iterative global correction scheme, but that should not be too hard to implement.
Secondly, this requires the algorithm to know which MQTs are in which arcs and which knobs control them.
There are three options that I see:
Hardcode the MQT knobs that belong to each LHC arc.
A bit more flexible: there is unused code, leftover from BBS, to prepare for such a scenario in the accelerator class module
omc3/omc3/model/accelerators/accelerator.py
Lines 347 to 368 in 68b622b
also seen by the
frm
andto
variables in the signature of the respective functions:omc3/omc3/model/accelerators/accelerator.py
Lines 245 to 258 in 68b622b
As far as I can tell, this functionality has never been used, but we could activate it to define corrector classes with locations, which would again need to be hard-coded into the accelerator they belong to.
An even more flexible way, which would allow users to implement arbitrary correction knobs, could be to ask the model directly: while not easily possible in
madx
,cpymad
as well asxsuite
have features that quickly give you the magnets that are steered by a knob and one could filter then by their location. This implementation needs a full re-write of the model creation and global correction with one of those simulation tools, and I guess the idea would then be for the global correction to create an accelerator instance at the beginning of its run and hold this in memory until the end.This would also allow avoiding all the read/write of the global correction, but implementing parallel running might be a bit more cumbersome.
To be evaluated and should probably be split up into smaller issues. Feel free to link them here then.
The text was updated successfully, but these errors were encountered: