|
11 | 11 | from ..common.element import ElementConfigModel |
12 | 12 | from ..external.pySC_interface import pySCInterface |
13 | 13 | from .measurement_tool import MeasurementTool |
| 14 | +from .orbit_response_matrix_data import ConfigModel as OrbitResponseMatrixDataConfigModel |
| 15 | +from .orbit_response_matrix_data import OrbitResponseMatrixData |
14 | 16 |
|
15 | 17 | logger = logging.getLogger(__name__) |
16 | 18 |
|
@@ -82,11 +84,6 @@ def measure( |
82 | 84 | hcorrector_names = element_holder.get_magnets(self.hcorr_array_name).names() |
83 | 85 | vcorrector_names = element_holder.get_magnets(self.vcorr_array_name).names() |
84 | 86 | corrector_names = hcorrector_names + vcorrector_names |
85 | | - else: |
86 | | - all_hcorrector_names = element_holder.get_magnets(self.hcorr_array_name).names() |
87 | | - all_vcorrector_names = element_holder.get_magnets(self.vcorr_array_name).names() |
88 | | - hcorrector_names = [corr for corr in corrector_names if corr in all_hcorrector_names] |
89 | | - vcorrector_names = [corr for corr in corrector_names if corr in all_vcorrector_names] |
90 | 87 |
|
91 | 88 | generator = measure_ORM( |
92 | 89 | interface=interface, |
@@ -117,19 +114,36 @@ def measure( |
117 | 114 | logger.warning("Measurement aborted! Settings have not been restored.") |
118 | 115 | return |
119 | 116 |
|
120 | | - response_data = measurement.response_data # contains also pre-processed data |
121 | | - bpm_names = element_holder.get_bpms(self.bpm_array_name).names() |
122 | | - # This is because we assume always dual-plane bpms now. |
123 | | - response_data.output_names = bpm_names * 2 |
124 | | - self.latest_measurement = response_data.model_dump() |
| 117 | + orm_data = self._pySC_response_data_to_ORMData(measurement.response_data.model_dump()) |
| 118 | + self.latest_measurement = orm_data.model_dump() |
| 119 | + |
| 120 | + def _pySC_response_data_to_ORMData(self, data: dict) -> OrbitResponseMatrixDataConfigModel: |
| 121 | + # all metadata is discarded here. Should we keep something? |
125 | 122 |
|
126 | | - input_planes = [] |
127 | | - for corr in corrector_names: |
128 | | - if corr in hcorrector_names: |
129 | | - input_planes.append("H") |
130 | | - elif corr in vcorrector_names: |
131 | | - input_planes.append("V") |
132 | | - self.latest_measurement["input_planes"] = input_planes |
| 123 | + element_holder = self._peer |
| 124 | + all_hcorrector_names = element_holder.get_magnets(self.hcorr_array_name).names() |
| 125 | + all_vcorrector_names = element_holder.get_magnets(self.vcorr_array_name).names() |
| 126 | + variable_planes = [] |
| 127 | + for corr in data["input_names"]: |
| 128 | + if corr in all_hcorrector_names: |
| 129 | + variable_planes.append("H") |
| 130 | + elif corr in all_vcorrector_names: |
| 131 | + variable_planes.append("V") |
133 | 132 |
|
| 133 | + bpm_names = element_holder.get_bpms(self.bpm_array_name).names() |
| 134 | + # This is because we assume always dual-plane bpms now. |
134 | 135 | len_b = len(bpm_names) |
135 | | - self.latest_measurement["output_planes"] = ["H"] * len_b + ["V"] * len_b |
| 136 | + observable_names = bpm_names * 2 |
| 137 | + observable_planes = ["H"] * len_b + ["V"] * len_b |
| 138 | + |
| 139 | + orm_data_model = { |
| 140 | + "matrix": data["matrix"], |
| 141 | + "variable_names": data["input_names"], |
| 142 | + "observable_names": observable_names, |
| 143 | + "rf_response": None, |
| 144 | + "variable_planes": variable_planes, |
| 145 | + "observable_planes": observable_planes, |
| 146 | + } |
| 147 | + |
| 148 | + orm_data = OrbitResponseMatrixDataConfigModel(**orm_data_model) |
| 149 | + return orm_data |
0 commit comments