|
13 | 13 | }, |
14 | 14 | { |
15 | 15 | "cell_type": "code", |
16 | | - "execution_count": 1, |
| 16 | + "execution_count": null, |
17 | 17 | "id": "1a092dbb", |
18 | 18 | "metadata": {}, |
19 | 19 | "outputs": [], |
|
23 | 23 | "import numpy as np\n", |
24 | 24 | "\n", |
25 | 25 | "from pyaml.accelerator import Accelerator\n", |
26 | | - "from pyaml.common.constants import ACTION_RESTORE\n", |
| 26 | + "from pyaml.common.constants import ACTION_MEASURE\n", |
27 | 27 | "from pyaml.magnet.magnet import Magnet" |
28 | 28 | ] |
29 | 29 | }, |
|
32 | 32 | "execution_count": null, |
33 | 33 | "id": "9b63d253", |
34 | 34 | "metadata": {}, |
35 | | - "outputs": [ |
36 | | - { |
37 | | - "name": "stdout", |
38 | | - "output_type": "stream", |
39 | | - "text": [ |
40 | | - "28 Jan% 2026, 14:16:39 | WARNING | PyAML OA control system binding (0.1.1) initialized with name 'live' and prefix='a3744:'\n" |
41 | | - ] |
42 | | - } |
43 | | - ], |
| 35 | + "outputs": [], |
44 | 36 | "source": [ |
45 | 37 | "# ----- Load the configuration -----\n", |
46 | 38 | "# Remember to change the prefix for the live mode to the one matching\n", |
|
51 | 43 | }, |
52 | 44 | { |
53 | 45 | "cell_type": "code", |
54 | | - "execution_count": 3, |
| 46 | + "execution_count": null, |
55 | 47 | "id": "bf603b5f", |
56 | 48 | "metadata": {}, |
57 | 49 | "outputs": [], |
|
61 | 53 | "\n", |
62 | 54 | "\n", |
63 | 55 | "def tune_callback(step: int, action: int, m: Magnet, dtune: np.array):\n", |
64 | | - " if action == ACTION_RESTORE:\n", |
65 | | - " # On action restore, the measured delta tune is passed as argument\n", |
| 56 | + " if action == ACTION_MEASURE:\n", |
| 57 | + " # On action measure, the measured dq / dk is passed as argument\n", |
66 | 58 | " print(f\"Tune response: #{step} {m.get_name()} {dtune}\")\n", |
67 | 59 | " return True" |
68 | 60 | ] |
69 | 61 | }, |
70 | 62 | { |
71 | 63 | "cell_type": "code", |
72 | | - "execution_count": 4, |
| 64 | + "execution_count": null, |
73 | 65 | "id": "d1593276", |
74 | 66 | "metadata": {}, |
75 | | - "outputs": [ |
76 | | - { |
77 | | - "name": "stdout", |
78 | | - "output_type": "stream", |
79 | | - "text": [ |
80 | | - "Tune response: #0 Q3M2D1R [ 0.2948122 -1.59761611]\n", |
81 | | - "Tune response: #1 Q3M1T1R [ 0.31455894 -1.62602422]\n", |
82 | | - "Tune response: #2 Q3M2T1R [ 0.39697699 -1.488687 ]\n", |
83 | | - "Tune response: #3 Q3M1D2R [ 0.20694739 -1.66483728]\n", |
84 | | - "Tune response: #4 Q3M2D2R [ 0.2012383 -1.5957427]\n", |
85 | | - "Tune response: #5 Q3M1T2R [ 0.41065785 -1.45769981]\n", |
86 | | - "Tune response: #6 Q3M2T2R [ 0.37243911 -1.47809081]\n", |
87 | | - "Tune response: #7 Q3M1D3R [ 0.17999635 -1.57290023]\n", |
88 | | - "Tune response: #8 Q3M2D3R [ 0.16824072 -1.69184086]\n", |
89 | | - "Tune response: #9 Q3M1T3R [ 0.40143766 -1.53697391]\n", |
90 | | - "Tune response: #10 Q3M2T3R [ 0.42532148 -1.48886172]\n", |
91 | | - "Tune response: #11 Q3M1D4R [ 0.17907349 -1.74931195]\n", |
92 | | - "Tune response: #12 Q3M2D4R [ 0.18700724 -1.51871493]\n", |
93 | | - "Tune response: #13 Q3M1T4R [ 0.40510134 -1.37702393]\n", |
94 | | - "Tune response: #14 Q3M2T4R [ 0.39620807 -1.34034338]\n", |
95 | | - "Tune response: #15 Q3M1D5R [ 0.1820804 -1.56154372]\n", |
96 | | - "Tune response: #16 Q3M2D5R [ 0.18853823 -1.6711882 ]\n", |
97 | | - "Tune response: #17 Q3M1T5R [ 0.38067984 -1.39262069]\n", |
98 | | - "Tune response: #18 Q3M2T5R [ 0.38563368 -1.53580491]\n", |
99 | | - "Tune response: #19 Q3M1D6R [ 0.19110111 -1.51036189]\n", |
100 | | - "Tune response: #20 Q3M2D6R [ 0.18082548 -1.58655204]\n", |
101 | | - "Tune response: #21 Q3M1T6R [ 0.4128393 -1.57413822]\n", |
102 | | - "Tune response: #22 Q3M2T6R [ 0.31077626 -1.37265153]\n", |
103 | | - "Tune response: #23 Q3M1D7R [ 0.20870053 -1.51740208]\n", |
104 | | - "Tune response: #24 Q3M2D7R [ 0.15146622 -1.71353181]\n", |
105 | | - "Tune response: #25 Q3M1T7R [ 0.44789044 -1.46868931]\n", |
106 | | - "Tune response: #26 Q3M2T7R [ 0.49459732 -1.47043094]\n", |
107 | | - "Tune response: #27 Q3M1D8R [ 0.17966521 -1.71068117]\n", |
108 | | - "Tune response: #28 Q3M2D8R [ 0.22093453 -1.55708902]\n", |
109 | | - "Tune response: #29 Q3M1T8R [ 0.3893039 -1.39671459]\n", |
110 | | - "Tune response: #30 Q3M2T8R [ 0.28904045 -1.57182273]\n", |
111 | | - "Tune response: #31 Q3M1D1R [ 0.30996919 -1.51133886]\n", |
112 | | - "Tune response: #32 Q4M2D1R [ 1.23318442 -0.62485904]\n", |
113 | | - "Tune response: #33 Q4M1T1R [ 1.28947607 -0.49815711]\n", |
114 | | - "Tune response: #34 Q4M2T1R [ 1.53574346 -0.46181013]\n", |
115 | | - "Tune response: #35 Q4M1D2R [ 0.91291767 -0.6207083 ]\n", |
116 | | - "Tune response: #36 Q4M2D2R [ 0.89526347 -0.59472661]\n", |
117 | | - "Tune response: #37 Q4M1T2R [ 1.58046247 -0.45848444]\n", |
118 | | - "Tune response: #38 Q4M2T2R [ 1.38596634 -0.46708279]\n", |
119 | | - "Tune response: #39 Q4M1D3R [ 0.75228193 -0.58611061]\n", |
120 | | - "Tune response: #40 Q4M2D3R [ 0.71557388 -0.63069453]\n", |
121 | | - "Tune response: #41 Q4M1T3R [ 1.4825063 -0.48867921]\n", |
122 | | - "Tune response: #42 Q4M2T3R [ 1.60207757 -0.46810845]\n", |
123 | | - "Tune response: #43 Q4M1D4R [ 0.79461217 -0.6544545 ]\n", |
124 | | - "Tune response: #44 Q4M2D4R [ 0.81971865 -0.5683347 ]\n", |
125 | | - "Tune response: #45 Q4M1T4R [ 1.53281506 -0.4400919 ]\n", |
126 | | - "Tune response: #46 Q4M2T4R [ 1.48838393 -0.42459024]\n", |
127 | | - "Tune response: #47 Q4M1D5R [ 0.78662138 -0.59217602]\n", |
128 | | - "Tune response: #48 Q4M2D5R [ 0.80669683 -0.63335949]\n", |
129 | | - "Tune response: #49 Q4M1T5R [ 1.43702316 -0.43218978]\n", |
130 | | - "Tune response: #50 Q4M2T5R [ 1.46247077 -0.49232655]\n", |
131 | | - "Tune response: #51 Q4M1D6R [ 0.82225627 -0.56286775]\n", |
132 | | - "Tune response: #52 Q4M2D6R [ 0.79021783 -0.5910496 ]\n", |
133 | | - "Tune response: #53 Q4M1T6R [ 1.66415844 -0.40783638]\n", |
134 | | - "Tune response: #54 Q4M2T6R [ 1.14304288 -0.46839169]\n", |
135 | | - "Tune response: #55 Q4M1D7R [ 0.83707757 -0.57513168]\n", |
136 | | - "Tune response: #56 Q4M2D7R [ 0.66071841 -0.64897922]\n", |
137 | | - "Tune response: #57 Q4M1T7R [ 1.64291867 -0.46348414]\n", |
138 | | - "Tune response: #58 Q4M2T7R [ 1.87993967 -0.46420292]\n", |
139 | | - "Tune response: #59 Q4M1D8R [ 0.84390192 -0.6385394 ]\n", |
140 | | - "Tune response: #60 Q4M2D8R [ 0.97428121 -0.58117844]\n", |
141 | | - "Tune response: #61 Q4M1T8R [ 1.52427497 -0.43332046]\n", |
142 | | - "Tune response: #62 Q4M2T8R [ 1.19367528 -0.48346323]\n", |
143 | | - "Tune response: #63 Q4M1D1R [ 1.27555778 -0.59139844]\n" |
144 | | - ] |
145 | | - } |
146 | | - ], |
| 67 | + "outputs": [], |
147 | 68 | "source": [ |
148 | 69 | "# ----- Measure the tune response matrix-----\n", |
149 | 70 | "# You can measure the tune response matrix on either the design or live mode.\n", |
| 71 | + "# At the moment they don't give the same result. This will be fixed later by\n", |
| 72 | + "# switching to using SerializedMagnet.\n", |
| 73 | + "\n", |
| 74 | + "# Choose which backend to use.\n", |
| 75 | + "SR = sr.design\n", |
150 | 76 | "\n", |
151 | | - "# sr.design.get_lattice().disable_6d()\n", |
152 | 77 | "tune_adjust = sr.design.tune\n", |
153 | | - "tune_adjust.response.measure(callback=tune_callback)\n", |
| 78 | + "tune_adjust.response.measure(\n", |
| 79 | + " callback=tune_callback, set_wait_time=0.0 if SR == sr.design else 2.0\n", |
| 80 | + ")\n", |
154 | 81 | "tune_adjust.response.save_json(\"tune-response.json\")" |
155 | 82 | ] |
156 | 83 | }, |
|
165 | 92 | "# The example does the correction for the live mode\n", |
166 | 93 | "# but it can also be done on the design mode.\n", |
167 | 94 | "\n", |
168 | | - "sr.design.tune.response.load_json(\"tune-response.json\")" |
| 95 | + "sr.live.tune.response.load_json(\"tune-response.json\")" |
169 | 96 | ] |
170 | 97 | }, |
171 | 98 | { |
172 | 99 | "cell_type": "code", |
173 | 100 | "execution_count": null, |
174 | 101 | "id": "153cefd1", |
175 | 102 | "metadata": {}, |
176 | | - "outputs": [ |
177 | | - { |
178 | | - "name": "stdout", |
179 | | - "output_type": "stream", |
180 | | - "text": [ |
181 | | - "\n", |
182 | | - "Run tune correction:\n", |
183 | | - "Initial tunes: [0.848070 0.726778]\n", |
184 | | - "Final tunes: [0.830001 0.839958]\n" |
185 | | - ] |
186 | | - } |
187 | | - ], |
| 103 | + "outputs": [], |
188 | 104 | "source": [ |
189 | 105 | "# ----- Correct the tune -----\n", |
190 | 106 | "\n", |
191 | 107 | "print(\"\\nRun tune correction:\")\n", |
192 | | - "print(\n", |
193 | | - " f\"Initial tunes: {\n", |
194 | | - " np.array2string(sr.design.tune.readback(), precision=6, floatmode='fixed')\n", |
195 | | - " }\"\n", |
196 | | - ")\n", |
197 | | - "sr.design.tune.set([0.83, 0.84], iter=2, wait_time=3)\n", |
| 108 | + "\n", |
| 109 | + "initial_tunes = np.array2string(sr.live.tune.readback(), precision=6, floatmode=\"fixed\")\n", |
| 110 | + "print(f\"Initial tunes: {initial_tunes}\")\n", |
| 111 | + "\n", |
| 112 | + "sr.live.tune.set([0.83, 0.84], iter=2, wait_time=3)\n", |
198 | 113 | "time.sleep(3)\n", |
199 | | - "print(\n", |
200 | | - " f\"Final tunes: {\n", |
201 | | - " np.array2string(sr.design.tune.readback(), precision=6, floatmode='fixed')\n", |
202 | | - " }\"\n", |
203 | | - ")" |
| 114 | + "\n", |
| 115 | + "final_tunes = np.array2string(sr.live.tune.readback(), precision=6, floatmode=\"fixed\")\n", |
| 116 | + "print(f\"Final tunes: {final_tunes}\")" |
204 | 117 | ] |
205 | 118 | } |
206 | 119 | ], |
|
0 commit comments