87 Volume parentVolume = ns.volume(
args.parentName());
88 Volume swedLog = ns.volume(
"esalgo:SWED");
89 Volume sfLog = ns.volume(
"esalgo:SF");
90 Volume sfbxLog = ns.volume(
"esalgo:SFBX");
91 Volume sfbyLog = ns.volume(
"esalgo:SFBY");
94 es.asymLadd =
args.vecFloat(
"ASYMETRIC_LADDER");
95 es.typesL5 =
args.vecStr(
"TYPES_OF_LADD_L5");
96 es.typesL4 =
args.vecStr(
"TYPES_OF_LADD_L4");
97 es.laddL5map =
args.vecFloat(
"LADD_L5_MAP");
98 es.laddL4map =
args.vecFloat(
"LADD_L4_MAP");
99 es.noLaddInCol =
args.vecFloat(
"NUMB_OF_LADD_IN_COL");
100 es.startOfFirstLadd =
args.vecFloat(
"START_OF_1ST_LADD");
101 es.typeOfLaddRow0 =
args.vecStr(
"TYPE_OF_LADD_1");
102 es.typeOfLaddRow1 =
args.vecStr(
"TYPE_OF_LADD_2");
103 es.typeOfLaddRow2 =
args.vecStr(
"TYPE_OF_LADD_3");
104 es.typeOfLaddRow3 =
args.vecStr(
"TYPE_OF_LADD_4");
105 es.thickLayers =
args.vecFloat(
"Layers");
106 es.thickness =
args.dble(
"PRESH_Z_TOTAL");
107 es.materials =
args.vecStr(
"LayMat");
108 es.layName =
args.vecStr(
"LayName");
109 es.rmaxVec =
args.vecFloat(
"R_MAX");
110 es.rminVec =
args.vecFloat(
"R_MIN");
111 es.waf_intra_col_sep =
args.dble(
"waf_intra_col_sep");
112 es.waf_inter_col_sep =
args.dble(
"waf_inter_col_sep");
113 es.waf_active =
args.dble(
"waf_active");
114 es.wedge_length =
args.dble(
"wedge_length");
115 es.wedge_offset =
args.dble(
"wedge_offset");
116 es.zwedge_ceramic_diff =
args.dble(
"zwedge_ceramic_diff");
117 es.ywedge_ceramic_diff =
args.dble(
"ywedge_ceramic_diff");
118 es.ceramic_length =
args.dble(
"ceramic_length");
119 es.wedge_angle =
args.dble(
"wedge_angle");
120 es.wedge_back_thick =
args.dble(
"wedge_back_thick");
121 es.ladder_thick =
args.dble(
"ladder_thick");
122 es.ladder_width =
args.dble(
"ladder_width");
123 es.micromodule_length =
args.dble(
"micromodule_length");
124 es.box_thick =
args.dble(
"box_thick");
125 es.abs1stx =
args.vecFloat(
"1ST_ABSX");
126 es.abs1sty =
args.vecFloat(
"1ST_ABSY");
127 es.abs2ndx =
args.vecFloat(
"2ND_ABSX");
128 es.abs2ndy =
args.vecFloat(
"2ND_ABSY");
129 es.ladPfx =
args.vecStr(
"LadPrefix");
130 es.laddMaterial =
args.str(
"LadderMaterial");
131 es.ldrFrnt_Length =
args.dble(
"LdrFrnt_Length");
132 es.ldrFrnt_Offset =
args.dble(
"LdrFrnt_Offset");
133 es.ldrBck_Length =
args.dble(
"LdrBck_Length");
134 es.ldrBck_Offset =
args.dble(
"LdrBck_Offset");
135 es.dee_separation =
args.dble(
"dee_sep");
136 es.in_rad_Abs_Al =
args.dble(
"R_MIN_Abs_Al");
137 es.in_rad_Abs_Pb =
args.dble(
"R_MIN_Abs_Pb");
138 es.rMax_Abs_Al =
args.dble(
"R_MAX_Abs_Al");
139 es.absAlX_X =
args.dble(
"AbsAlX_X");
140 es.absAlX_Y =
args.dble(
"AbsAlX_Y");
141 es.absAlX_subtr1_Xshift =
args.dble(
"AbsAlX_subtr1_Xshift");
142 es.absAlX_subtr1_Yshift =
args.dble(
"AbsAlX_subtr1_Yshift");
143 es.absAlY_X =
args.dble(
"AbsAlY_X");
144 es.absAlY_Y =
args.dble(
"AbsAlY_Y");
145 es.absAlY_subtr1_Xshift =
args.dble(
"AbsAlY_subtr1_Xshift");
146 es.absAlY_subtr1_Yshift =
args.dble(
"AbsAlY_subtr1_Yshift");
150 double zpos = -es.thickness *
k_half, sdx(0), sdy(0), bdx(0), bdy(0);
152 for (
size_t i = 0;
i < es.thickLayers.size(); ++
i) {
155 float rIn(0), rOut(0), zHalf(0);
158 const string& ddname(
"esalgo:" + es.layName[
i]);
162 rOut = es.rmaxVec[
i];
163 zHalf = es.thickLayers[
i] *
k_half;
166 Solid solid = ns.addSolid(ddname, Tube(ddname, rIn, rOut, zHalf, 0., 360._deg));
174 if (
I == 2 ||
I == 28 ||
I == 13 ||
I == 23) {
180 es.zlead1 = zpos + zHalf;
183 es.zlead2 = zpos + zHalf;
186 if (
I == 10 ||
I == 20) {
189 double outalbx, outalby, shiftR, outalbx2, outalby2, shiftR2;
191 absz =
int(es.abs1stx.size());
193 absz =
int(es.abs2ndx.size());
197 const string& dd_tmp_name_b(
"esalgo:" + es.layName[
i] +
"Lcut");
198 const string& dd_tmp_name_c(
"esalgo:" + es.layName[
i] +
"tmpb");
199 const string& dd_tmp_name_d(
"esalgo:" + es.layName[
i] +
"LinPb");
200 const string& dd_tmp_name_e(
"esalgo:" + es.layName[
i] +
"LinAl");
201 const string& dd_tmp_name_f(
"esalgo:" + es.layName[
i] +
"LOutAl");
203 const string& dd_Alname_f(
"esalgo:" + es.layName[
i] +
"LOutAl");
204 const string& dd_Alname_g(
"esalgo:" + es.layName[
i] +
"LOutAl2");
205 const string& dd_Alname_h(
"esalgo:" + es.layName[
i] +
"LOutAltmp");
206 const string& dd_Alname_i(
"esalgo:" + es.layName[
i] +
"LOutAltmp2");
207 const string& dd_Alname_j(
"esalgo:" + es.layName[
i] +
"LOutAltmp3");
208 const string& dd_Alname_k(
"esalgo:" + es.layName[
i] +
"LOutAltmp4");
209 const string& dd_Alname_l(
"esalgo:" + es.layName[
i] +
"LOutAltmp5");
210 const string& dd_Alname_m(
"esalgo:" + es.layName[
i] +
"LOutAltmp6");
212 Solid outAl = ns.addSolid(
213 dd_Alname_f, Tube(dd_Alname_f, es.rMax_Abs_Al - 70 * dd4hep::cm, es.rMax_Abs_Al, zHalf, 0., 90._deg));
215 outalbx = es.absAlX_X * 0.1;
216 outalby = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlX_subtr1_Yshift;
217 shiftR = es.absAlX_subtr1_Yshift;
219 outalbx = es.absAlY_X * 0.1;
220 outalby = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlY_subtr1_Yshift;
221 shiftR = es.absAlY_subtr1_Xshift;
223 Solid outAltmp = ns.addSolid(dd_Alname_h,
225 outalbx *
k_half + 0.1 * dd4hep::mm,
226 outalby *
k_half + 0.1 * dd4hep::mm,
227 zHalf + 0.1 * dd4hep::mm));
228 Solid outAltmp3 = ns.addSolid(
230 SubtractionSolid(dd_Alname_j, outAl, outAltmp,
Position(outalbx *
k_half, outalby *
k_half + shiftR, 0)));
232 outalby2 = es.absAlX_Y * 0.1;
233 outalbx2 = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlX_subtr1_Xshift;
234 shiftR2 = es.absAlX_subtr1_Xshift;
236 outalby2 = es.absAlY_Y * 0.1;
237 outalbx2 = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlY_subtr1_Xshift;
238 shiftR2 = es.absAlY_subtr1_Xshift;
240 Solid outAltmp2 = ns.addSolid(dd_Alname_i,
242 outalbx2 *
k_half + 0.1 * dd4hep::mm,
243 outalby2 *
k_half + 0.1 * dd4hep::mm,
244 zHalf + 0.1 * dd4hep::mm));
245 Solid outAltmp4 = ns.addSolid(
248 dd_Alname_k, outAltmp3, outAltmp2,
Position(outalbx2 *
k_half + shiftR2, outalby2 *
k_half, 0)));
250 ns.addSolid(dd_Alname_l, UnionSolid(dd_Alname_l, outAltmp4, outAltmp4, ns.rotation(
"esalgo:RABS90")));
252 ns.addSolid(dd_Alname_m, UnionSolid(dd_Alname_m, outAltmp5, outAltmp4, ns.rotation(
"esalgo:RABS180B")));
254 ns.addSolid(dd_Alname_g, UnionSolid(dd_Alname_g, outAltmp6, outAltmp4, ns.rotation(
"esalgo:R180")));
256 Solid outAlCut = Box(65 * dd4hep::cm, 60 * dd4hep::cm - 0.1 * dd4hep::mm, zHalf + 0.2 * dd4hep::mm);
257 Solid outAlFin = SubtractionSolid(outAl2, outAlCut);
259 Volume layerFinOutAl =
Volume(dd_tmp_name_f, outAlFin, ns.material(es.materials[
i - 1]));
261 for (
int L = 0;
L < absz; ++
L) {
263 ostringstream tmp_name_b, tmp_name_b2, tmp_FAl_name_c, tmp_FAl_name_d1, tmp_FAl_name_d2, tmp_FAl_name_d3,
265 tmp_name_b << es.layName[
i] <<
"L" << K;
266 tmp_name_b2 << es.layName[
i] <<
"Lb2" << K;
269 tmp_FAl_name_c << es.layName[
i] <<
"LOutAl2";
271 tmp_FAl_name_c << es.layName[
i] <<
"LtmpAl" << K - 1;
273 tmp_FAl_name_d1 << es.layName[
i] <<
"LtmpAl" << K <<
"_1";
274 tmp_FAl_name_d2 << es.layName[
i] <<
"LtmpAl" << K <<
"_2";
275 tmp_FAl_name_d3 << es.layName[
i] <<
"LtmpAl" << K <<
"_3";
276 tmp_FAl_name_d << es.layName[
i] <<
"LtmpAl" << K;
278 const string& dd_tmp_name_b(
"esalgo:" + tmp_name_b.str());
279 const string& dd_tmp_name_b2(
"esalgo:" + tmp_name_b2.str());
280 const string& dd_FAl_name_c(
"esalgo:" + tmp_FAl_name_c.str());
281 const string& dd_FAl_name_d1(
"esalgo:" + tmp_FAl_name_d1.str());
282 const string& dd_FAl_name_d2(
"esalgo:" + tmp_FAl_name_d2.str());
283 const string& dd_FAl_name_d3(
"esalgo:" + tmp_FAl_name_d3.str());
284 const string& dd_FAl_name_d(
"esalgo:" + tmp_FAl_name_d.str());
289 bdx =
abs(es.abs1stx[K] - es.abs1stx[K - 1]) *
k_half;
291 if (es.abs1stx[K] < rIn + 30 * dd4hep::cm) {
292 bdy = es.abs1sty[K] *
k_half - 30 * dd4hep::cm;
300 bdx =
abs(es.abs2ndx[K] - es.abs2ndx[K - 1]) *
k_half;
304 if ((es.abs2ndx[K] < rIn + 30 * dd4hep::cm) &&
I == 20) {
305 bdy = es.abs2ndy[K] *
k_half - 30 * dd4hep::cm;
309 Solid solid_b = Box(dd_tmp_name_b, bdx, bdy, zHalf);
310 Solid solid_b2 = Box(dd_tmp_name_b2, bdx + 0.1 * dd4hep::mm, bdy + 0.1 * dd4hep::mm, zHalf);
312 sdx = es.abs1stx[K] - bdx;
314 if (es.abs1stx[K] < rIn + 30 * dd4hep::cm)
315 sdy = es.abs1sty[K] - bdy;
318 sdx = es.abs2ndx[K] - bdx;
321 if ((es.abs2ndx[K] < rIn + 30 * dd4hep::cm) &&
I == 20)
322 sdy = es.abs2ndy[K] - bdy;
329 Solid solid_c = ns.solid(dd_FAl_name_c);
331 ns.addSolid(dd_FAl_name_d1, UnionSolid(dd_FAl_name_d1, solid_c, solid_b2,
Position(sdx, sdy, 0)));
333 ns.addSolid(dd_FAl_name_d, UnionSolid(dd_FAl_name_d, solid_d1, solid_b2,
Position(-sdx, -sdy, 0)));
335 if (((es.abs1stx[K] < rIn + 30 * dd4hep::cm) &&
I == 10) ||
336 ((es.abs2ndx[K] < rIn + 30 * dd4hep::cm) &&
I == 20)) {
338 layerFinOutAl.placeVolume(
layer, 4,
Position(-sdx, -sdy, 0));
340 Solid solid_c = ns.solid(dd_FAl_name_c);
341 Solid solid_d1 = UnionSolid(dd_FAl_name_d1, solid_c, solid_b2,
Position(sdx, sdy, 0));
342 ns.addSolid(dd_FAl_name_d2, UnionSolid(dd_FAl_name_d2, solid_d1, solid_b2,
Position(sdx, -sdy, 0)));
343 Solid solid_d3 = UnionSolid(dd_FAl_name_d3, solid_d2, solid_b2,
Position(-sdx, sdy, 0));
344 ns.addSolid(dd_FAl_name_d, UnionSolid(dd_FAl_name_d, solid_d3, solid_b2,
Position(-sdx, -sdy, 0)));
348 bdx = es.abs1stx[cutabsx];
350 bdx = es.abs2ndx[cutabsy];
351 bdy = 2 * 30 * dd4hep::cm;
353 Solid solidcut = Box(dd_tmp_name_b, bdx, bdy, zHalf);
354 Solid iner = Tube(dd_tmp_name_c, 0, es.in_rad_Abs_Pb, zHalf + 0.1 * dd4hep::mm, 0., 360._deg);
355 Solid
final = SubtractionSolid(dd_tmp_name_d, solidcut, iner);
357 Volume blayer =
Volume(dd_tmp_name_d,
final, ns.material(es.materials[
i]));
358 parentVolume.placeVolume(blayer, 1,
Position(0, 0, zpos));
361 Tube(dd_tmp_name_e, es.in_rad_Abs_Al, es.in_rad_Abs_Pb - 0.01 * dd4hep::mm, zHalf, 0., 360._deg);
362 Volume layerAl =
Volume(dd_tmp_name_e, iner_Al, ns.material(es.materials[
i - 1]));
363 parentVolume.placeVolume(layerAl, 1,
Position(0, 0, zpos));
364 parentVolume.placeVolume(layerFinOutAl, 1,
Position(0, 0, zpos));
373 double xpos(0.), ypos(0.), zpos(0.);
374 float prev_length(0.), ladder_new_length(0.);
375 float ladd_shift(0.);
376 float ladder_length(0.);
377 int swed_scopy_glob(0);
379 for (
int M = 0; M <
int(es.typesL5.size() + es.typesL4.size()); M++) {
381 int ladd_not_plain(0), ladd_subtr_no(0), ladd_upper(0);
385 if (M <
int(es.typesL5.size())) {
386 for (
int i = 0;
i <= 1;
i++) {
387 for (
int j = 0;
j <= 3;
j++) {
388 if (es.laddL5map[(
i +
j * 2 + M * 10)] != 1) {
397 const string& ddname(
"esalgo:" + es.ladPfx[0] + es.typesL5[M]);
398 ladder_length = es.micromodule_length + 4 * es.waf_active + 0.1 * dd4hep::mm;
400 if (ladd_not_plain) {
402 ns.addAssembly(ddname);
403 ns.addAssembly(
"esalgo:" + es.ladPfx[1] + es.typesL5[M]);
407 ns.addAssembly(ddname);
408 ns.addAssembly(
"esalgo:" + es.ladPfx[1] + es.typesL5[M]);
414 if (M >=
int(es.typesL5.size())) {
415 int d = M - es.typesL5.size();
417 for (
int i = 0;
i <= 1;
i++) {
418 for (
int j = 0;
j <= 3;
j++) {
419 if (es.laddL4map[(
i +
j * 2 + (M - es.typesL5.size()) * 8)] != 1) {
428 const string& ddname(
"esalgo:" + es.ladPfx[0] + es.typesL4[
d]);
429 ladder_length = es.micromodule_length + 3 * es.waf_active + 0.1 * dd4hep::mm;
431 if (ladd_not_plain) {
433 ns.addAssembly(ddname);
434 ns.addAssembly(
"esalgo:" + es.ladPfx[1] + es.typesL4[
d]);
438 if (ladd_subtr_no > 1) {
439 ns.addAssembly(ddname);
440 ns.addAssembly(
"esalgo:" + es.ladPfx[1] + es.typesL4[
d]);
442 ns.addAssembly(ddname);
443 ns.addAssembly(
"esalgo:" + es.ladPfx[1] + es.typesL4[
d]);
448 ns.addAssembly(ddname);
449 ns.addAssembly(
"esalgo:" + es.ladPfx[1] + es.typesL4[
d]);
455 if (M <
int(es.typesL5.size())) {
456 const string& ddname(
"esalgo:" + es.ladPfx[0] + es.typesL5[M]);
457 const string& ddname2(
"esalgo:" + es.ladPfx[1] + es.typesL5[M]);
458 for (
int i = 0;
i <= 1;
i++) {
459 for (
int j = 0;
j <= 4;
j++) {
460 xpos = (
i * 2 - 1) * es.waf_intra_col_sep *
k_half;
461 ypos = -ladder_length *
k_half + 0.05 * dd4hep::mm - (es.ldrFrnt_Length - es.ldrBck_Length) *
k_half +
462 es.wedge_length *
k_half +
j * es.waf_active;
463 zpos = -es.ladder_thick *
k_half + 0.005 * dd4hep::mm + es.wedge_offset;
464 if (es.laddL5map[(
i +
j * 2 + M * 10)] == 1) {
466 ns.assembly(ddname).placeVolume(swedLog,
467 scopy + 1000 * swed_scopy_glob,
468 Transform3D(ns.rotation(
"esalgo:RM1299"),
Position(xpos, ypos, zpos)));
469 ns.assembly(ddname2).placeVolume(swedLog,
470 scopy + 1000 * swed_scopy_glob + 100,
471 Transform3D(ns.rotation(
"esalgo:RM1299"),
Position(xpos, ypos, zpos)));
473 ypos = ypos + es.ywedge_ceramic_diff;
474 zpos = -es.ladder_thick *
k_half + 0.005 * dd4hep::mm + es.zwedge_ceramic_diff;
475 ns.assembly(ddname).placeVolume(sfbxLog,
476 scopy + 1000 * swed_scopy_glob,
477 Transform3D(ns.rotation(
"esalgo:RM1298"),
Position(xpos, ypos, zpos)));
478 ns.assembly(ddname2).placeVolume(sfbyLog,
479 scopy + 1000 * swed_scopy_glob,
480 Transform3D(ns.rotation(
"esalgo:RM1300A"),
Position(xpos, ypos, zpos)));
485 int d = M - es.typesL5.size();
486 const string& ddname(
"esalgo:" + es.ladPfx[0] + es.typesL4[
d]);
487 const string& ddname2(
"esalgo:" + es.ladPfx[1] + es.typesL4[
d]);
488 for (
int i = 0;
i <= 1;
i++) {
489 for (
int j = 0;
j <= 3;
j++) {
490 xpos = (
i * 2 - 1) * es.waf_intra_col_sep *
k_half;
491 ypos = -ladder_length *
k_half + 0.05 * dd4hep::mm - (es.ldrFrnt_Length - es.ldrBck_Length) *
k_half +
492 es.wedge_length *
k_half +
j * es.waf_active;
493 zpos = -es.ladder_thick *
k_half + 0.005 * dd4hep::mm + es.wedge_offset;
494 if (es.laddL4map[(
i +
j * 2 + (M - es.typesL5.size()) * 8)] == 1) {
496 ns.assembly(ddname).placeVolume(swedLog,
497 scopy + 1000 * swed_scopy_glob,
498 Transform3D(ns.rotation(
"esalgo:RM1299"),
Position(xpos, ypos, zpos)));
499 ns.assembly(ddname2).placeVolume(swedLog,
500 scopy + 1000 * swed_scopy_glob + 100,
501 Transform3D(ns.rotation(
"esalgo:RM1299"),
Position(xpos, ypos, zpos)));
503 ypos = ypos + es.ywedge_ceramic_diff;
504 zpos = -es.ladder_thick *
k_half + 0.005 * dd4hep::mm + es.zwedge_ceramic_diff;
505 ns.assembly(ddname).placeVolume(sfbxLog,
506 scopy + 1000 * swed_scopy_glob,
507 Transform3D(ns.rotation(
"esalgo:RM1298"),
Position(xpos, ypos, zpos)));
508 ns.assembly(ddname2).placeVolume(sfbyLog,
509 scopy + 1000 * swed_scopy_glob,
510 Transform3D(ns.rotation(
"esalgo:RM1300A"),
Position(xpos, ypos, zpos)));
518 int icopy[100] = {0};
519 constexpr
int sz = 20;
521 for (
int I = -9;
I <= 9; ++
I) {
524 for (
int K = 0; K < es.noLaddInCol[J]; K++) {
527 ladder_new_length = es.micromodule_length + 3. * es.waf_active;
528 ladd_shift = 4. * es.waf_active;
531 type = es.typeOfLaddRow0[J];
533 type = es.typeOfLaddRow1[J];
535 type = es.typeOfLaddRow2[J];
537 type = es.typeOfLaddRow3[J];
539 for (
const auto&
i : es.typesL5)
541 ladder_new_length = es.micromodule_length + 4. * es.waf_active;
542 ladd_shift = 5. * es.waf_active;
547 for (
int t = 0;
t <
int(es.typesL5.size());
t++)
548 if (
type == es.typesL5[
t]) {
550 if (
I < 0 && es.asymLadd[
t] == 1) {
552 type = es.typesL5[
j];
555 for (
int t = 0;
t <
int(es.typesL4.size());
t++)
556 if (
type == es.typesL4[
t]) {
557 j =
t + es.typesL5.size();
558 if (
I < 0 && es.asymLadd[(
t + es.typesL5.size())] == 1) {
560 type = es.typesL4[
j - es.typesL5.size()];
564 xpos =
I * (2 * es.waf_intra_col_sep + es.waf_inter_col_sep);
566 xpos = xpos + es.dee_separation;
568 xpos = xpos - es.dee_separation;
570 ypos = (sz -
int(es.startOfFirstLadd[J])) * es.waf_active - ladder_new_length *
k_half +
571 (es.ldrFrnt_Length - es.ldrBck_Length) *
k_half + es.micromodule_length + 0.05 * dd4hep::cm -
574 prev_length += ladd_shift;
576 zpos = es.zlead1 + es.ladder_thick *
k_half + 0.01 * dd4hep::mm;
579 sfLog.placeVolume(ns.assembly(
"esalgo:" + es.ladPfx[0] +
type), icopy[
j],
Position(xpos, ypos, zpos));
581 xpos =
I * (2 * es.waf_intra_col_sep + es.waf_inter_col_sep);
583 sfLog.placeVolume(ns.assembly(
"esalgo:" + es.ladPfx[1] +
type),
585 Transform3D(ns.rotation(
"esalgo:R270"),
Position(ypos, -xpos, zpos - es.zlead1 + es.zlead2)));
588 for (
int t = 0;
t <
int(es.typesL5.size());
t++)
589 if (
type == es.typesL5[
t]) {
591 if (es.asymLadd[
t] == 2 && !changed) {
595 if (es.asymLadd[
t] == 1 && !changed) {
599 type = es.typesL5[
j];
601 for (
int t = 0;
t <
int(es.typesL4.size());
t++)
602 if (
type == es.typesL4[
t]) {
603 j =
t + es.typesL5.size();
604 if (es.asymLadd[(
t + es.typesL5.size())] == 2 && !changed) {
608 if (es.asymLadd[(
t + es.typesL5.size())] == 1 && !changed) {
612 type = es.typesL4[
j - es.typesL5.size()];
618 xpos = xpos + es.dee_separation;
620 xpos = xpos - es.dee_separation;
622 sfLog.placeVolume(ns.assembly(
"esalgo:" + es.ladPfx[0] +
type),
624 Transform3D(ns.rotation(
"esalgo:R180"),
Position(xpos, -ypos, zpos)));
626 xpos =
I * (2 * es.waf_intra_col_sep + es.waf_inter_col_sep);
629 ns.assembly(
"esalgo:" + es.ladPfx[1] +
type),
631 Transform3D(ns.rotation(
"esalgo:R090"),
Position(-ypos, -xpos, zpos - es.zlead1 + es.zlead2)));
637 float xpos(0), ypos(0);
638 Volume sfwxLog = ns.volume(
"esalgo:SFWX");
639 Volume sfwyLog = ns.volume(
"esalgo:SFWY");
640 Volume sfsxLog = ns.volume(
"esalgo:SFSX");
641 Volume sfsyLog = ns.volume(
"esalgo:SFSY");
643 for (
size_t i = 0;
i < 32; ++
i) {
645 sfwxLog.placeVolume(sfsxLog,
i + 1,
Position(xpos, 0., 0.));
648 sfwyLog.placeVolume(sfsyLog,
i + 1,
Position(0., ypos, 0.));