@@ -184,31 +184,80 @@ struct StaveConfig {
184184
185185namespace OT_StavePositions
186186{
187+ /*
188+ * Staves that the beam pipe cuts in two, built as two pieces on +-y_midpoint.
189+ * Do NOT add any zero midpoints, this is taken off separately.
190+ */
187191const std::map<int , std::pair<double , bool >> staveID_to_y_midpoint = {
188- {-2 , {39.0 , true }},
189- {-1 , {41.4 , true }},
190- {1 , {41.4 , true }},
191- {2 , {39.0 , true }}};
192+ {-5 , {32.73 , true }},
193+ {-4 , {38.609 , true }},
194+ {-3 , {42.094 , true }},
195+ {-2 , {43.023 , true }},
196+ {-1 , {44.054 , true }},
197+ {1 , {44.053 , true }},
198+ {2 , {43.023 , true }},
199+ {3 , {42.094 , true }},
200+ {4 , {38.609 , true }},
201+ {5 , {32.73 , true }}};
202+ /*
203+ * Length of one stave piece: for a stave in staveID_to_y_midpoint that is one
204+ * of its two pieces, otherwise the whole stave centred on y=0. Sized to cover
205+ * the modules in exactStaveFills, with 1 mm of margin.
206+ */
192207const std::vector<double > y_lengths = {
193- 52.8 , 66.0 , 79.2 , 92.4 , 99.0 , 105.6 , 118.8 , 118.8 ,
194- 128.7 , 132.0 , 132.0 , 138.6 , 138.6 , 56.1 , 52.8 ,
195- 52.8 , 56.1 , 138.6 , 138.6 , 132.0 , 132.0 , 128.7 ,
196- 118.8 , 118.8 , 105.6 , 99.0 , 92.4 , 79.2 , 66.0 , 52.8 };
208+ 40.87 , 61.31 , 78.83 , 90.51 , 99.27 ,
209+ 108.03 , 113.87 , 119.71 , 122.63 , 128.47 ,
210+ 64.23 , 55.47 , 49.63 , 49.63 , 47.23 ,
211+ 47.23 , 49.63 , 49.63 , 55.47 , 64.23 ,
212+ 128.47 , 122.63 , 119.71 , 113.87 , 108.03 ,
213+ 99.27 , 90.51 , 78.83 , 61.31 , 40.87 };
197214const unsigned nStaves = 30 ; // y_lengths, staveOnFront and exactStaveFills follow this
198215const double x_midpoint_spacing = 4.5 ;
199216const std::vector<double > x_midpoints = makeStaveXMidpoints(nStaves, x_midpoint_spacing);
200217const double maxToleranceInner = 9 .; // close but not directly at 10cm yet
201218const double maxToleranceOuter = 3.4 ; // leave 1mm for layer air encapsulation
202219const std::vector<bool > staveOnFront = makeStaveOnFront(nStaves);
203220/*
204- * TODO: fill from the disk optimiser output. One entry per stave, in the same
205- * order as x_midpoints, and nStaves entries in total before
206- * useExactStavePlacement works. Each entry lists that stave's fills:
221+ * From the disk optimiser: Rin 20, Rout 68, stave width 5.22, overlap 0.72,
222+ * intrusion <= 9, extrusion <= 3, giving 99.84% filling with staves and
223+ * 99.29% with modules. One entry per stave in x_midpoints order; a stave cut
224+ * in two by the beam pipe has one fill either side of the hole.
207225 *
208- * {{{-52.80, {4, 4, 4, 3}}}}, // reaches across y=0
209- * {{-63.84, {4, 4, 3}}, {8.34, {4, 4, 3}}}, // split by the beam pipe
226+ * Each fill is anchored on its centre rather than the optimiser's own yStart,
227+ * because FT3 puts a stackGap between modules and the optimiser does not.
210228 */
211- const std::vector<std::vector<StaveFill>> exactStaveFills = {};
229+ const std::vector<std::vector<StaveFill>> exactStaveFills = {
230+ {{-20.43 , {4 , 4 , 3 , 3 }}}, // ID -15
231+ {{-30.65 , {4 , 4 , 4 , 3 , 3 , 3 }}}, // ID -14
232+ {{-39.41 , {4 , 4 , 4 , 4 , 4 , 4 , 3 }}}, // ID -13
233+ {{-45.25 , {4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 }}}, // ID -12
234+ {{-49.63 , {4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 }}}, // ID -11
235+ {{-54.01 , {4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 3 }}}, // ID -10
236+ {{-56.93 , {4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 }}}, // ID -9
237+ {{-59.85 , {4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 3 }}}, // ID -8
238+ {{-61.31 , {4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 }}}, // ID -7
239+ {{-64.23 , {4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 }}}, // ID -6
240+ {{-64.84 , {4 , 4 , 4 , 4 , 3 , 3 }}, {0.62 , {4 , 4 , 4 , 4 , 3 , 3 }}}, // ID -5
241+ {{-66.339 , {4 , 4 , 4 , 4 , 3 }}, {10.879 , {4 , 4 , 4 , 4 , 3 }}}, // ID -4
242+ {{-66.904 , {4 , 4 , 3 , 3 , 3 }}, {17.284 , {4 , 4 , 3 , 3 , 3 }}}, // ID -3
243+ {{-67.833 , {4 , 4 , 3 , 3 , 3 }}, {18.213 , {4 , 4 , 3 , 3 , 3 }}}, // ID -2
244+ {{-67.147 , {4 , 3 , 3 , 3 , 3 }}, {20.96 , {4 , 3 , 3 , 3 , 3 }}}, // ID -1
245+ {{-67.66 , {4 , 3 , 3 , 3 , 3 }}, {20.447 , {4 , 3 , 3 , 3 , 3 }}}, // ID +1
246+ {{-67.833 , {4 , 4 , 3 , 3 , 3 }}, {18.213 , {4 , 4 , 3 , 3 , 3 }}}, // ID +2
247+ {{-66.904 , {4 , 4 , 3 , 3 , 3 }}, {17.284 , {4 , 4 , 3 , 3 , 3 }}}, // ID +3
248+ {{-66.339 , {4 , 4 , 4 , 4 , 3 }}, {10.879 , {4 , 4 , 4 , 4 , 3 }}}, // ID +4
249+ {{-64.84 , {4 , 4 , 4 , 4 , 3 , 3 }}, {0.62 , {4 , 4 , 4 , 4 , 3 , 3 }}}, // ID +5
250+ {{-64.23 , {4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 }}}, // ID +6
251+ {{-61.31 , {4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 }}}, // ID +7
252+ {{-59.85 , {4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 3 }}}, // ID +8
253+ {{-56.93 , {4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 }}}, // ID +9
254+ {{-54.01 , {4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 3 }}}, // ID +10
255+ {{-49.63 , {4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 }}}, // ID +11
256+ {{-45.25 , {4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 }}}, // ID +12
257+ {{-39.41 , {4 , 4 , 4 , 4 , 4 , 4 , 3 }}}, // ID +13
258+ {{-30.65 , {4 , 4 , 4 , 3 , 3 , 3 }}}, // ID +14
259+ {{-20.43 , {4 , 4 , 3 , 3 }}}, // ID +15
260+ };
212261} // namespace OT_StavePositions
213262
214263namespace ML_StavePositions
0 commit comments