CMS 3D CMS Logo

Functions
DDEcalPreshowerAlgo.cc File Reference
#include "DD4hep/DetFactoryHelper.h"
#include "DetectorDescription/DDCMS/interface/DDPlugins.h"
#include "DetectorDescription/DDCMS/interface/BenchmarkGrd.h"
#include "DetectorDescription/DDCMS/interface/DDutils.h"
#include "DataFormats/Math/interface/angle_units.h"
#include "DD4hep/Shapes.h"
#include <string>
#include <vector>

Go to the source code of this file.

Functions

static long algorithm (dd4hep::Detector &, cms::DDParsingContext &ctxt, xml_h e)
 
 DD4HEP_OPEN_PLUGIN (dd4hep, ddcms_det_element_DDCMS_ecal_DDEcalPreshowerAlgo)
 

Function Documentation

◆ algorithm()

static long algorithm ( dd4hep::Detector &  ,
cms::DDParsingContext ctxt,
xml_h  e 
)
static

Definition at line 81 of file DDEcalPreshowerAlgo.cc.

81  {
82  BenchmarkGrd counter("DDEcalPreshowerAlgo");
83  cms::DDNamespace ns(ctxt, e, true);
85 
86  Volume parentVolume = ns.volume(args.parentName());
87  Volume swedLog = ns.volume("esalgo:SWED");
88  Volume sfLog = ns.volume("esalgo:SF");
89  Volume sfbxLog = ns.volume("esalgo:SFBX");
90  Volume sfbyLog = ns.volume("esalgo:SFBY");
91 
92  EcalPreshower es;
93  es.asymLadd = args.vecDble("ASYMETRIC_LADDER");
94  es.typesL5 = args.vecStr("TYPES_OF_LADD_L5");
95  es.typesL4 = args.vecStr("TYPES_OF_LADD_L4");
96  es.laddL5map = args.vecDble("LADD_L5_MAP");
97  es.laddL4map = args.vecDble("LADD_L4_MAP");
98  es.noLaddInCol = args.vecDble("NUMB_OF_LADD_IN_COL");
99  es.startOfFirstLadd = args.vecDble("START_OF_1ST_LADD");
100  es.typeOfLaddRow0 = args.vecStr("TYPE_OF_LADD_1");
101  es.typeOfLaddRow1 = args.vecStr("TYPE_OF_LADD_2");
102  es.typeOfLaddRow2 = args.vecStr("TYPE_OF_LADD_3");
103  es.typeOfLaddRow3 = args.vecStr("TYPE_OF_LADD_4");
104  es.thickLayers = args.vecDble("Layers");
105  es.thickness = args.dble("PRESH_Z_TOTAL");
106  es.materials = args.vecStr("LayMat");
107  es.layName = args.vecStr("LayName");
108  es.rmaxVec = args.vecDble("R_MAX"); // inner radii
109  es.rminVec = args.vecDble("R_MIN"); // outer radii
110  es.waf_intra_col_sep = args.dble("waf_intra_col_sep");
111  es.waf_inter_col_sep = args.dble("waf_inter_col_sep");
112  es.waf_active = args.dble("waf_active");
113  es.wedge_length = args.dble("wedge_length");
114  es.wedge_offset = args.dble("wedge_offset");
115  es.zwedge_ceramic_diff = args.dble("zwedge_ceramic_diff");
116  es.ywedge_ceramic_diff = args.dble("ywedge_ceramic_diff");
117  es.ceramic_length = args.dble("ceramic_length");
118  es.wedge_angle = args.dble("wedge_angle");
119  es.wedge_back_thick = args.dble("wedge_back_thick");
120  es.ladder_thick = args.dble("ladder_thick");
121  es.ladder_width = args.dble("ladder_width");
122  es.micromodule_length = args.dble("micromodule_length");
123  es.box_thick = args.dble("box_thick");
124  es.abs1stx = args.vecDble("1ST_ABSX");
125  es.abs1sty = args.vecDble("1ST_ABSY");
126  es.abs2ndx = args.vecDble("2ND_ABSX");
127  es.abs2ndy = args.vecDble("2ND_ABSY");
128  es.ladPfx = args.vecStr("LadPrefix");
129  es.laddMaterial = args.str("LadderMaterial");
130  es.ldrFrnt_Length = args.dble("LdrFrnt_Length");
131  es.ldrFrnt_Offset = args.dble("LdrFrnt_Offset");
132  es.ldrBck_Length = args.dble("LdrBck_Length");
133  es.ldrBck_Offset = args.dble("LdrBck_Offset");
134  es.dee_separation = args.dble("dee_sep");
135  es.in_rad_Abs_Al = args.dble("R_MIN_Abs_Al");
136  es.in_rad_Abs_Pb = args.dble("R_MIN_Abs_Pb");
137  es.rMax_Abs_Al = args.dble("R_MAX_Abs_Al");
138  es.absAlX_X = args.dble("AbsAlX_X");
139  es.absAlX_Y = args.dble("AbsAlX_Y");
140  es.absAlX_subtr1_Xshift = args.dble("AbsAlX_subtr1_Xshift");
141  es.absAlX_subtr1_Yshift = args.dble("AbsAlX_subtr1_Yshift");
142  es.absAlY_X = args.dble("AbsAlY_X");
143  es.absAlY_Y = args.dble("AbsAlY_Y");
144  es.absAlY_subtr1_Xshift = args.dble("AbsAlY_subtr1_Xshift");
145  es.absAlY_subtr1_Yshift = args.dble("AbsAlY_subtr1_Yshift");
146 
147  // create all the tube-like layers of the preshower
148  {
149  double zpos = -es.thickness / 2., sdx(0), sdy(0), bdx(0), bdy(0);
150 
151  for (size_t i = 0; i < es.thickLayers.size(); ++i) {
152  int I = int(i) + 1; // FOTRAN I (offset +1)
153 
154  double rIn(0), rOut(0), zHalf(0);
155 
156  // create the name
157  const string& ddname("esalgo:" + es.layName[i]); // namespace:name
158 
159  // cone dimensions
160  rIn = es.rminVec[i];
161  rOut = es.rmaxVec[i];
162  zHalf = es.thickLayers[i] / 2.;
163 
164  // create a logical part representing a single layer in the preshower
165  Solid solid = ns.addSolid(ddname, Tube(ddname, rIn, rOut, zHalf, 0., 360._deg));
166 #ifdef EDM_ML_DEBUG
167  edm::LogVerbatim("SFGeomX") << ddname << " Tubs " << cms::convert2mm(zHalf) << ":" << cms::convert2mm(rIn) << ":"
168  << cms::convert2mm(rOut) << ":0:360";
169 #endif
170  Volume layer = ns.addVolume(Volume(ddname, solid, ns.material(es.materials[i])));
171 
172  // position the logical part w.r.t. the parent volume
173  zpos += zHalf;
174 
175  // create a logical part representing a single layer in the preshower
176  // skip layers with detectors, front and rear window
177  if (I == 2 || I == 28 || I == 13 || I == 23) {
178  zpos += zHalf;
179  continue;
180  }
181 
182  if (I == 12) {
183  es.zlead1 = zpos + zHalf;
184  }
185  if (I == 22) {
186  es.zlead2 = zpos + zHalf;
187  }
188 
189  if (I == 10 || I == 20) { // New lead shape
190 
191  int absz = 0;
192  double outalbx, outalby, shiftR, outalbx2, outalby2, shiftR2;
193 
194  absz = int(es.abs1stx.size());
195  if (I == 20)
196  absz = int(es.abs2ndx.size());
197  int cutabsx = -1;
198  int cutabsy = -1;
199 
200  const string& dd_tmp_name_b("esalgo:" + es.layName[i] + "Lcut");
201  const string& dd_tmp_name_c("esalgo:" + es.layName[i] + "tmpb");
202  const string& dd_tmp_name_d("esalgo:" + es.layName[i] + "LinPb");
203  const string& dd_tmp_name_e("esalgo:" + es.layName[i] + "LinAl");
204  const string& dd_tmp_name_f("esalgo:" + es.layName[i] + "LOutAl");
205 
206  const string& dd_Alname_f("esalgo:" + es.layName[i] + "LOutAl");
207  const string& dd_Alname_g("esalgo:" + es.layName[i] + "LOutAl2");
208  const string& dd_Alname_h("esalgo:" + es.layName[i] + "LOutAltmp");
209  const string& dd_Alname_i("esalgo:" + es.layName[i] + "LOutAltmp2");
210  const string& dd_Alname_j("esalgo:" + es.layName[i] + "LOutAltmp3");
211  const string& dd_Alname_k("esalgo:" + es.layName[i] + "LOutAltmp4");
212  const string& dd_Alname_l("esalgo:" + es.layName[i] + "LOutAltmp5");
213  const string& dd_Alname_m("esalgo:" + es.layName[i] + "LOutAltmp6");
214 
215  Solid outAl = ns.addSolid(
216  dd_Alname_f, Tube(dd_Alname_f, es.rMax_Abs_Al - 70 * dd4hep::cm, es.rMax_Abs_Al, zHalf, 0., 90._deg));
217 #ifdef EDM_ML_DEBUG
218  edm::LogVerbatim("SFGeomX") << dd_Alname_f << " Tubs " << cms::convert2mm(zHalf - 0.1 * dd4hep::mm) << ":"
219  << cms::convert2mm(es.rMax_Abs_Al - 20 * dd4hep::cm) << ":"
220  << cms::convert2mm(es.rMax_Abs_Al) << ":0:90";
221 #endif
222 
223  outalbx = es.absAlX_X * 0.1;
224  outalby = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlX_subtr1_Yshift;
225  shiftR = es.absAlX_subtr1_Yshift;
226  if (I == 20) {
227  outalbx = es.absAlY_X * 0.1;
228  outalby = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlY_subtr1_Yshift;
229  shiftR = es.absAlY_subtr1_Xshift;
230  }
231  Solid outAltmp = ns.addSolid(dd_Alname_h,
232  Box(dd_Alname_h,
233  outalbx / 2. + 0.1 * dd4hep::mm,
234  outalby / 2. + 0.1 * dd4hep::mm,
235  zHalf + 0.1 * dd4hep::mm));
236  Solid outAltmp3 = ns.addSolid(
237  dd_Alname_j,
238  SubtractionSolid(dd_Alname_j, outAl, outAltmp, Position(outalbx / 2., outalby / 2. + shiftR, 0)));
239 #ifdef EDM_ML_DEBUG
240  edm::LogVerbatim("SFGeomX") << dd_Alname_h << " Box " << cms::convert2mm(outalbx / 2. + 0.1 * dd4hep::mm) << ":"
241  << cms::convert2mm(outalby / 2. + 0.1 * dd4hep::mm) << ":"
242  << cms::convert2mm(zHalf);
243  edm::LogVerbatim("SFGeomX") << dd_Alname_j << " Subtraction " << outAl.name() << ":" << outAltmp.name()
244  << " at (" << cms::convert2mm(outalbx / 2.) << ","
245  << cms::convert2mm(outalby / 2. + shiftR) << ","
246  << "0) no rotation";
247 #endif
248 
249  outalby2 = es.absAlX_Y * 0.1;
250  outalbx2 = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlX_subtr1_Xshift;
251  shiftR2 = es.absAlX_subtr1_Xshift;
252  if (I == 20) {
253  outalby2 = es.absAlY_Y * 0.1;
254  outalbx2 = es.rMax_Abs_Al + 0.1 * dd4hep::mm - es.absAlY_subtr1_Xshift;
255  shiftR2 = es.absAlY_subtr1_Xshift;
256  }
257  Solid outAltmp2 = ns.addSolid(dd_Alname_i,
258  Box(dd_Alname_i,
259  outalbx2 / 2. + 0.1 * dd4hep::mm,
260  outalby2 / 2. + 0.1 * dd4hep::mm,
261  zHalf + 0.1 * dd4hep::mm));
262  Solid outAltmp4 = ns.addSolid(
263  dd_Alname_k,
264  SubtractionSolid(dd_Alname_k, outAltmp3, outAltmp2, Position(outalbx2 / 2. + shiftR2, outalby2 / 2., 0)));
265  Solid outAltmp5 =
266  ns.addSolid(dd_Alname_l, UnionSolid(dd_Alname_l, outAltmp4, outAltmp4, ns.rotation("esalgo:RABS90")));
267  Solid outAltmp6 =
268  ns.addSolid(dd_Alname_m, UnionSolid(dd_Alname_m, outAltmp5, outAltmp4, ns.rotation("esalgo:RABS180B")));
269  Solid outAl2 =
270  ns.addSolid(dd_Alname_g, UnionSolid(dd_Alname_g, outAltmp6, outAltmp4, ns.rotation("esalgo:R180")));
271 
272  Solid outAlCut = Box(65 * dd4hep::cm, 60 * dd4hep::cm - 0.1 * dd4hep::mm, zHalf + 0.2 * dd4hep::mm);
273  Solid outAlFin = SubtractionSolid(outAl2, outAlCut);
274 #ifdef EDM_ML_DEBUG
275  edm::LogVerbatim("SFGeomX") << dd_Alname_i << " Box " << cms::convert2mm(outalbx2 / 2. + 0.1 * dd4hep::mm)
276  << ":" << cms::convert2mm(outalby2 / 2. + 0.1 * dd4hep::mm) << ":"
277  << cms::convert2mm(zHalf);
278  edm::LogVerbatim("SFGeomX") << dd_Alname_k << " Subtraction " << outAltmp3.name() << ":" << outAltmp2.name()
279  << " at (" << cms::convert2mm(outalbx2 / 2. + shiftR2) << ","
280  << cms::convert2mm(outalby2 / 2) << ",0) no rotation";
281  edm::LogVerbatim("SFGeomX") << dd_Alname_l << " Union " << outAltmp4.name() << ":" << outAltmp4.name()
282  << " at (0,0,0) rotation esalgo:RABS90";
283  edm::LogVerbatim("SFGeomX") << dd_Alname_m << " Union " << outAltmp5.name() << ":" << outAltmp4.name()
284  << " at (0,0,0) rotation esalgo:RABS180B";
285  edm::LogVerbatim("SFGeomX") << dd_Alname_g << " Union " << outAltmp6.name() << ":" << outAltmp4.name()
286  << " at (0,0,0) rotation esalgo:R180";
287  edm::LogVerbatim("SFGeomX") << outAlCut.name() << " Box " << cms::convert2mm(65 * dd4hep::cm) << ":"
288  << cms::convert2mm(60 * dd4hep::cm - 0.1 * dd4hep::mm) << ":"
289  << cms::convert2mm(zHalf + 0.2 * dd4hep::mm);
290  edm::LogVerbatim("SFGeomX") << outAlFin.name() << " Subtraction " << outAl2.name() << ":" << outAlCut.name()
291  << " at (0,0,0) no rotation";
292 #endif
293  Volume layerFinOutAl = Volume(dd_tmp_name_f, outAlFin, ns.material(es.materials[i - 1]));
294 
295  for (int L = 0; L < absz; ++L) {
296  int K = L;
297  ostringstream tmp_name_b, tmp_name_b2, tmp_FAl_name_c, tmp_FAl_name_d1, tmp_FAl_name_d2, tmp_FAl_name_d3,
298  tmp_FAl_name_d;
299  tmp_name_b << es.layName[i] << "L" << K;
300  tmp_name_b2 << es.layName[i] << "Lb2" << K;
301 
302  if (L == 0)
303  tmp_FAl_name_c << es.layName[i] << "LOutAl2";
304  if (L > 0)
305  tmp_FAl_name_c << es.layName[i] << "LtmpAl" << K - 1;
306 
307  tmp_FAl_name_d1 << es.layName[i] << "LtmpAl" << K << "_1";
308  tmp_FAl_name_d2 << es.layName[i] << "LtmpAl" << K << "_2";
309  tmp_FAl_name_d3 << es.layName[i] << "LtmpAl" << K << "_3";
310  tmp_FAl_name_d << es.layName[i] << "LtmpAl" << K;
311 
312  const string& dd_tmp_name_b("esalgo:" + tmp_name_b.str());
313  const string& dd_tmp_name_b2("esalgo:" + tmp_name_b2.str());
314  const string& dd_FAl_name_c("esalgo:" + tmp_FAl_name_c.str());
315  const string& dd_FAl_name_d1("esalgo:" + tmp_FAl_name_d1.str());
316  const string& dd_FAl_name_d2("esalgo:" + tmp_FAl_name_d2.str());
317  const string& dd_FAl_name_d3("esalgo:" + tmp_FAl_name_d3.str());
318  const string& dd_FAl_name_d("esalgo:" + tmp_FAl_name_d.str());
319 
320  if (L == 0)
321  bdx = abs(es.abs1stx[K]) / 2.;
322  if (L > 0)
323  bdx = abs(es.abs1stx[K] - es.abs1stx[K - 1]) / 2.;
324  bdy = es.abs1sty[K];
325  if (es.abs1stx[K] < rIn + 30 * dd4hep::cm) {
326  bdy = es.abs1sty[K] / 2. - 30 * dd4hep::cm;
327  cutabsx = K;
328  }
329 
330  if (I == 20) {
331  if (L == 0)
332  bdx = abs(es.abs2ndx[K]) / 2.;
333  if (L > 0)
334  bdx = abs(es.abs2ndx[K] - es.abs2ndx[K - 1]) / 2.;
335  bdy = es.abs2ndy[K];
336  }
337 
338  if ((es.abs2ndx[K] < rIn + 30 * dd4hep::cm) && I == 20) {
339  bdy = es.abs2ndy[K] / 2. - 30 * dd4hep::cm;
340  cutabsy = K;
341  }
342 
343  Solid solid_b = Box(dd_tmp_name_b, bdx, bdy, zHalf);
344  Solid solid_b2 = Box(dd_tmp_name_b2, bdx + 0.1 * dd4hep::mm, bdy + 0.1 * dd4hep::mm, zHalf);
345 #ifdef EDM_ML_DEBUG
346  edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Box " << cms::convert2mm(bdx) << ":" << cms::convert2mm(bdy)
347  << ":" << cms::convert2mm(zHalf);
348  edm::LogVerbatim("SFGeomX") << dd_tmp_name_b2 << " Box " << cms::convert2mm(bdx + 0.1 * dd4hep::mm) << ":"
349  << cms::convert2mm(bdy + 0.1 * dd4hep::mm) << ":" << cms::convert2mm(zHalf);
350 #endif
351  sdx = es.abs1stx[K] - bdx;
352  sdy = 0;
353  if (es.abs1stx[K] < rIn + 30 * dd4hep::cm)
354  sdy = es.abs1sty[K] - bdy;
355 
356  if (I == 20) {
357  sdx = es.abs2ndx[K] - bdx;
358  sdy = 0;
359  }
360  if ((es.abs2ndx[K] < rIn + 30 * dd4hep::cm) && I == 20)
361  sdy = es.abs2ndy[K] - bdy;
362 
363  Volume layer = Volume(dd_tmp_name_b, solid_b, ns.material(es.materials[i]));
364 
365  layerFinOutAl.placeVolume(layer, 1, Position(sdx, sdy, 0));
366  layerFinOutAl.placeVolume(layer, 2, Position(-sdx, sdy, 0));
367 #ifdef EDM_ML_DEBUG
368  edm::LogVerbatim("SFGeom") << layer.name() << " copy 1 in " << layerFinOutAl.name() << " at ("
369  << cms::convert2mm(sdx) << "," << cms::convert2mm(sdy) << ",0) no rotation";
370  edm::LogVerbatim("SFGeom") << layer.name() << " copy 2 in " << layerFinOutAl.name() << " at ("
371  << -cms::convert2mm(sdx) << "," << cms::convert2mm(sdy) << ",0) no rotation";
372 #endif
373 
374  Solid solid_c = ns.solid(dd_FAl_name_c);
375  Solid solid_d1 = UnionSolid(dd_FAl_name_d1, solid_c, solid_b2, Position(sdx, sdy, 0));
376  Solid solid_d2 =
377  ns.addSolid(dd_FAl_name_d, UnionSolid(dd_FAl_name_d, solid_d1, solid_b2, Position(-sdx, -sdy, 0)));
378 #ifdef EDM_ML_DEBUG
379  edm::LogVerbatim("SFGeomX") << dd_FAl_name_d1 << " Union " << solid_c.name() << ":" << solid_b2.name()
380  << " at (" << cms::convert2mm(sdx) << "," << cms::convert2mm(sdy)
381  << ",0) no rotation";
382  edm::LogVerbatim("SFGeomX") << dd_FAl_name_d << " Union " << solid_d1.name() << ":" << solid_b2.name()
383  << " at (" << -cms::convert2mm(sdx) << "," << -cms::convert2mm(sdy)
384  << ",0) no rotation";
385 #endif
386 
387  if (((es.abs1stx[K] < rIn + 30 * dd4hep::cm) && I == 10) ||
388  ((es.abs2ndx[K] < rIn + 30 * dd4hep::cm) && I == 20)) {
389  layerFinOutAl.placeVolume(layer, 3, Position(sdx, -sdy, 0));
390  layerFinOutAl.placeVolume(layer, 4, Position(-sdx, -sdy, 0));
391 #ifdef EDM_ML_DEBUG
392  edm::LogVerbatim("SFGeom") << layer.name() << " copy 3 in " << layerFinOutAl.name() << " at ("
393  << cms::convert2mm(sdx) << "," << -cms::convert2mm(sdy) << ",0) no rotation";
394  edm::LogVerbatim("SFGeom") << layer.name() << " copy 4 in " << layerFinOutAl.name() << " at ("
395  << -cms::convert2mm(sdx) << "," << -cms::convert2mm(sdy) << ",0) no rotation";
396 #endif
397 
398  Solid solid_c = ns.solid(dd_FAl_name_c);
399  Solid solid_d1 = UnionSolid(dd_FAl_name_d1, solid_c, solid_b2, Position(sdx, sdy, 0));
400  ns.addSolid(dd_FAl_name_d2, UnionSolid(dd_FAl_name_d2, solid_d1, solid_b2, Position(sdx, -sdy, 0)));
401  Solid solid_d3 = UnionSolid(dd_FAl_name_d3, solid_d2, solid_b2, Position(-sdx, sdy, 0));
402  ns.addSolid(dd_FAl_name_d, UnionSolid(dd_FAl_name_d, solid_d3, solid_b2, Position(-sdx, -sdy, 0)));
403 #ifdef EDM_ML_DEBUG
404  edm::LogVerbatim("SFGeomX") << dd_FAl_name_d1 << " Union " << solid_c.name() << ":" << solid_b2.name()
405  << " at (" << cms::convert2mm(sdx) << "," << cms::convert2mm(sdy)
406  << ",0) no rotation";
407  edm::LogVerbatim("SFGeomX") << dd_FAl_name_d2 << " Union " << solid_d1.name() << ":" << solid_b2.name()
408  << " at (" << cms::convert2mm(sdx) << "," << -cms::convert2mm(sdy)
409  << ",0) no rotation";
410  edm::LogVerbatim("SFGeomX") << dd_FAl_name_d3 << " Union " << solid_d2.name() << ":" << solid_b2.name()
411  << " at (" << -cms::convert2mm(sdx) << "," << cms::convert2mm(sdy)
412  << ",0) no rotation";
413  edm::LogVerbatim("SFGeomX") << dd_FAl_name_d << " Union " << solid_d3.name() << ":" << solid_b2.name()
414  << " at (" << -cms::convert2mm(sdx) << "," << -cms::convert2mm(sdy)
415  << ",0) no rotation";
416 #endif
417  }
418  }
419 
420  bdx = es.abs1stx[cutabsx];
421  if (I == 20)
422  bdx = es.abs2ndx[cutabsy];
423  bdy = 2 * 30 * dd4hep::cm;
424 
425  Solid solidcut = Box(dd_tmp_name_b, bdx, bdy, zHalf);
426  Solid iner = Tube(dd_tmp_name_c, 0, es.in_rad_Abs_Pb, zHalf + 0.1 * dd4hep::mm, 0., 360._deg);
427  Solid final = SubtractionSolid(dd_tmp_name_d, solidcut, iner);
428 #ifdef EDM_ML_DEBUG
429  edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Box " << cms::convert2mm(bdx) << ":" << cms::convert2mm(bdy)
430  << ":" << cms::convert2mm(zHalf);
431  edm::LogVerbatim("SFGeomX") << dd_tmp_name_c << " Tubs " << cms::convert2mm(zHalf + 0.1 * dd4hep::mm)
432  << ":0:" << cms::convert2mm(es.in_rad_Abs_Pb) << ":0:360";
433  edm::LogVerbatim("SFGeomX") << dd_tmp_name_d << " Subtraction " << solidcut.name() << ":" << iner.name()
434  << " at (0,0,0) no rotation";
435 #endif
436 
437  Volume blayer = Volume(dd_tmp_name_d, final, ns.material(es.materials[i]));
438  parentVolume.placeVolume(blayer, 1, Position(0, 0, zpos));
439 #ifdef EDM_ML_DEBUG
440  edm::LogVerbatim("SFGeom") << blayer.name() << " copy 1 in " << parentVolume.name() << " at (0,0,"
441  << cms::convert2mm(zpos) << ") no rotation";
442 #endif
443 
444  Solid iner_Al =
445  Tube(dd_tmp_name_e, es.in_rad_Abs_Al, es.in_rad_Abs_Pb - 0.01 * dd4hep::mm, zHalf, 0., 360._deg);
446 #ifdef EDM_ML_DEBUG
447  edm::LogVerbatim("SFGeomX") << dd_tmp_name_e << " Tubs " << cms::convert2mm(zHalf) << ":"
448  << cms::convert2mm(es.in_rad_Abs_Al) << ":"
449  << cms::convert2mm(es.in_rad_Abs_Pb - 0.01 * dd4hep::mm) << ":0:360";
450 #endif
451  Volume layerAl = Volume(dd_tmp_name_e, iner_Al, ns.material(es.materials[i - 1]));
452  parentVolume.placeVolume(layerAl, 1, Position(0, 0, zpos));
453  parentVolume.placeVolume(layerFinOutAl, 1, Position(0, 0, zpos));
454 #ifdef EDM_ML_DEBUG
455  edm::LogVerbatim("SFGeom") << layerAl.name() << " copy 1 in " << parentVolume.name() << " at (0,0,"
456  << cms::convert2mm(zpos) << ") no rotation";
457  edm::LogVerbatim("SFGeom") << layerFinOutAl.name() << " copy 1 in " << parentVolume.name() << " at (0,0,"
458  << cms::convert2mm(zpos) << ") no rotation";
459 #endif
460  } else {
461  parentVolume.placeVolume(layer, 1, Position(0., 0., zpos));
462 #ifdef EDM_ML_DEBUG
463  edm::LogVerbatim("SFGeom") << layer.name() << " copy 1 in " << parentVolume.name() << " at (0,0,"
464  << cms::convert2mm(zpos) << ") no rotation";
465 #endif
466  }
467  zpos += zHalf;
468  }
469  }
470  // create and place the ladders
471  {
472  double xpos(0.), ypos(0.), zpos(0.), sdx(0.), sdy(0.), sdz(0.);
473  double prev_length(0.), ladder_new_length(0.);
474  double ladd_shift(0.);
475  double ladder_length(0.);
476  int enb(0), swed_scopy_glob(0);
477  double sdxe[50] = {0}, sdye[50] = {0}, sdze[50] = {0};
478  double sdxe2[50] = {0}, sdye2[50] = {0}, sdze2[50] = {0}, sdxe3[50] = {0}, sdye3[50] = {0}, sdze3[50] = {0};
479 
480  for (int M = 0; M < int(es.typesL5.size() + es.typesL4.size()); M++) {
481  int scopy(0);
482  double boxax(0.), boxay(0.), boxaz(0.);
483  int ladd_not_plain(0), ladd_subtr_no(0), ladd_upper(0), ladd_side(0);
484  Solid solid_lfront = Trap("esalgo:LDRFRNT",
485  es.ldrFrnt_Length / 2., // pDz
486  -es.wedge_angle, // pTheta
487  0, // pPhi
488  es.ladder_width / 2., // pDy1
489  (es.ladder_thick) / 2., // pDx1
490  (es.ladder_thick) / 2., // pDx2
491  0, // pAlp1
492  es.ladder_width / 2., // pDy2
493  (es.ladder_thick - es.ceramic_length * sin(es.wedge_angle * 2.)) / 2., // pDx3
494  (es.ladder_thick - es.ceramic_length * sin(es.wedge_angle * 2.)) / 2., // pDx4
495  0.);
496 
497  Solid solid_lbck = Trap("esalgo:LDRBCK",
498  es.ldrBck_Length / 2., // pDz
499  -es.wedge_angle, // pTheta
500  0, // pPhi
501  es.ladder_width / 2., // pDy1
502  (es.box_thick / cos(es.wedge_angle * 2) + 0.02 * dd4hep::mm) / 2., // pDx1
503  (es.box_thick / cos(es.wedge_angle * 2) + 0.02 * dd4hep::mm) / 2., // pDx2
504  0, // pAlp1
505  es.ladder_width / 2., // pDy2
506  (es.ladder_thick - es.wedge_back_thick) / 2., // pDx3
507  (es.ladder_thick - es.wedge_back_thick) / 2., // pDx4
508  0.);
509 
510  Solid solid_lfhalf = Trap("esalgo:LDRFHALF",
511  es.ldrFrnt_Length / 2., // pDz
512  -es.wedge_angle, // pTheta
513  0, // pPhi
514  (es.ladder_width / 2.) / 2., // pDy1
515  (es.ladder_thick) / 2., // pDx1
516  (es.ladder_thick) / 2., // pDx2
517  0, // pAlp1
518  (es.ladder_width / 2.) / 2., // pDy2
519  (es.ladder_thick - es.ceramic_length * sin(es.wedge_angle * 2.)) / 2., // pDx3
520  (es.ladder_thick - es.ceramic_length * sin(es.wedge_angle * 2.)) / 2., // pDx4
521  0.);
522 
523  Solid solid_lbhalf = Trap("esalgo:LDRBHALF",
524  es.ldrBck_Length / 2., // pDz
525  -es.wedge_angle, // pTheta
526  0, // pPhi
527  (es.ladder_width / 2.) / 2., // pDy1
528  (es.box_thick / cos(es.wedge_angle * 2.) + 0.02 * dd4hep::mm) / 2., // pDx1
529  (es.box_thick / cos(es.wedge_angle * 2.) + 0.02 * dd4hep::mm) / 2., // pDx2
530  0, // pAlp1
531  (es.ladder_width / 2.) / 2., // pDy2
532  (es.ladder_thick - es.wedge_back_thick) / 2., // pDx3
533  (es.ladder_thick - es.wedge_back_thick) / 2., // pDx4
534  0.);
535 
536  Solid solid_lfhtrunc =
537  Trap("esalgo:LDRFHTR",
538  (es.ldrFrnt_Length - es.waf_active) / 2., // pDz
539  -es.wedge_angle, // pTheta
540  0, // pPhi
541  (es.ladder_width / 2.) / 2., // pDy1
542  (es.ladder_thick) / 2., // pDx1
543  (es.ladder_thick) / 2., // pDx2
544  0, // pAlp1
545  (es.ladder_width / 2.) / 2., // pDy2
546  (es.ladder_thick - (es.ceramic_length - es.waf_active) * sin(es.wedge_angle * 2)) / 2., // pDx3
547  (es.ladder_thick - (es.ceramic_length - es.waf_active) * sin(es.wedge_angle * 2)) / 2., // pDx4
548  0.);
549 #ifdef EDM_ML_DEBUG
550  edm::LogVerbatim("SFGeomX")
551  << "esalgo:LDRFRNT Trap " << cms::convert2mm(es.ldrFrnt_Length / 2.) << ":"
552  << -convertRadToDeg(es.wedge_angle) << ":0:" << cms::convert2mm(es.ladder_width / 2.) << ":"
553  << cms::convert2mm((es.ladder_thick) / 2.) << ":" << cms::convert2mm((es.ladder_thick) / 2.)
554  << ":0:" << cms::convert2mm(es.ladder_width / 2.) << ":"
555  << cms::convert2mm((es.ladder_thick - es.ceramic_length * sin(es.wedge_angle * 2.)) / 2.) << ":"
556  << cms::convert2mm((es.ladder_thick - es.ceramic_length * sin(es.wedge_angle * 2.)) / 2.) << ":0";
557  edm::LogVerbatim("SFGeomX") << "esalgo:LDRBCK Trap " << cms::convert2mm(es.ldrBck_Length / 2.) << ":"
558  << -convertRadToDeg(es.wedge_angle) << ":0:" << cms::convert2mm(es.ladder_width / 2.)
559  << ":"
560  << cms::convert2mm((es.box_thick / cos(es.wedge_angle * 2) + 0.02 * dd4hep::mm) / 2.)
561  << ":"
562  << cms::convert2mm((es.box_thick / cos(es.wedge_angle * 2) + 0.02 * dd4hep::mm) / 2.)
563  << ":0:" << cms::convert2mm(es.ladder_width / 2.) << ":"
564  << cms::convert2mm((es.ladder_thick - es.wedge_back_thick) / 2.) << ":"
565  << cms::convert2mm((es.ladder_thick - es.wedge_back_thick) / 2.) << ":0";
566  edm::LogVerbatim("SFGeomX")
567  << "esalgo:LDRFHALF Trap " << cms::convert2mm(es.ldrFrnt_Length / 2.) << ":"
568  << -convertRadToDeg(es.wedge_angle) << ":0:" << cms::convert2mm((es.ladder_width / 2.) / 2.) << ":"
569  << cms::convert2mm((es.ladder_thick) / 2.) << ":" << cms::convert2mm((es.ladder_thick) / 2.)
570  << ":0:" << cms::convert2mm((es.ladder_width / 2.) / 2.) << ":"
571  << cms::convert2mm((es.ladder_thick - es.ceramic_length * sin(es.wedge_angle * 2.)) / 2.) << ":"
572  << cms::convert2mm((es.ladder_thick - es.ceramic_length * sin(es.wedge_angle * 2.)) / 2.) << ":0";
573  edm::LogVerbatim("SFGeomX") << "esalgo:LDRBHALF Trap " << cms::convert2mm(es.ldrBck_Length / 2.) << ":"
574  << -convertRadToDeg(es.wedge_angle)
575  << ":0:" << cms::convert2mm((es.ladder_width / 2.) / 2.) << ":"
576  << cms::convert2mm((es.box_thick / cos(es.wedge_angle * 2.) + 0.02 * dd4hep::mm) / 2.)
577  << ":"
578  << cms::convert2mm((es.box_thick / cos(es.wedge_angle * 2.) + 0.02 * dd4hep::mm) / 2.)
579  << ":0:" << cms::convert2mm((es.ladder_width / 2.) / 2.) << ":"
580  << cms::convert2mm((es.ladder_thick - es.wedge_back_thick) / 2.) << ":"
581  << cms::convert2mm((es.ladder_thick - es.wedge_back_thick) / 2.) << ":0";
582  edm::LogVerbatim("SFGeomX")
583  << "esalgo:LDRFHTR Trap " << cms::convert2mm((es.ldrFrnt_Length - es.waf_active) / 2.) << ":"
584  << -convertRadToDeg(es.wedge_angle) << ":0:" << cms::convert2mm((es.ladder_width / 2.) / 2.) << ":"
585  << cms::convert2mm((es.ladder_thick) / 2.) << ":" << cms::convert2mm((es.ladder_thick) / 2.)
586  << ":0:" << cms::convert2mm((es.ladder_width / 2.) / 2.) << ":"
587  << cms::convert2mm((es.ladder_thick - (es.ceramic_length - es.waf_active) * sin(es.wedge_angle * 2)) / 2.)
588  << ":"
589  << cms::convert2mm((es.ladder_thick - (es.ceramic_length - es.waf_active) * sin(es.wedge_angle * 2)) / 2.)
590  << ":0";
591 #endif
592 
593  // Creation of ladders with 5 micromodules length
594 
595  if (M < int(es.typesL5.size())) {
596  for (int i = 0; i <= 1; i++) {
597  for (int j = 0; j <= 3; j++) {
598  if (es.laddL5map[(i + j * 2 + M * 10)] != 1) {
599  ladd_not_plain = 1;
600  ladd_subtr_no++;
601  if (j > 1)
602  ladd_upper = 1;
603  ladd_side = i;
604  }
605  }
606  }
607 #ifdef EDM_ML_DEBUG
608  edm::LogVerbatim("SFGeomX") << "Side " << ladd_side << ":" << ladd_upper << ":" << ladd_subtr_no << ":"
609  << ladd_not_plain << " Index " << M << ":" << es.typesL5.size();
610 #endif
611  const string& ddname("esalgo:" + es.ladPfx[0] + es.typesL5[M]);
612  ladder_length = es.micromodule_length + 4 * es.waf_active + 0.1 * dd4hep::mm;
613 
614  if (ladd_not_plain) {
615  if (!ladd_upper) {
616  enb++;
617  const string& dd_tmp_name_5a("esalgo:" + es.ladPfx[2]);
618  const string& dd_tmp_name_5b("esalgo:" + es.ladPfx[3] + to_string(enb));
619  const string& dd_tmp_name_5c("esalgo:" + es.ladPfx[4] + to_string(enb));
620 
621  boxay = ladder_length - es.ldrFrnt_Length - es.ldrBck_Length;
622  boxax = es.ladder_width;
623  boxaz = es.ladder_thick;
624 
625  Solid solid_5a = Box(dd_tmp_name_5a, boxax / 2., boxay / 2., boxaz / 2.);
626 #ifdef EDM_ML_DEBUG
627  edm::LogVerbatim("SFGeomX") << dd_tmp_name_5a << " Box " << cms::convert2mm(boxax / 2.) << ":"
628  << cms::convert2mm(boxay / 2.) << ":" << cms::convert2mm(boxaz / 2.);
629 #endif
630  if (ladd_side == 0)
631  sdxe[enb] = es.ladder_width / 4.;
632  sdye[enb] = -boxay / 2. - es.ldrFrnt_Length / 2.;
633  sdze[enb] = -es.ladder_thick / 2. + es.ldrFrnt_Offset;
634  if (ladd_side == 1)
635  sdxe[enb] = -es.ladder_width / 4.;
636 
637  Solid solid_5b =
638  UnionSolid(dd_tmp_name_5b,
639  solid_5a,
640  solid_lfhalf,
641  Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe[enb], sdye[enb], sdze[enb])));
642 #ifdef EDM_ML_DEBUG
643  edm::LogVerbatim("SFGeomX") << dd_tmp_name_5b << " Union " << solid_5a.name() << ":" << solid_lfhalf.name()
644  << " at (" << cms::convert2mm(sdxe[enb]) << "," << cms::convert2mm(sdye[enb])
645  << "," << cms::convert2mm(sdze[enb]) << ") rotation esalgo:RM1299";
646 #endif
647 
648  if (ladd_side == 0)
649  sdxe2[enb] = -es.ladder_width / 4.;
650  sdye2[enb] = -boxay / 2. - es.ldrFrnt_Length / 2. + es.waf_active / 2.;
651  sdze2[enb] = -es.ladder_thick / 2. + es.ldrFrnt_Offset + (es.waf_active * sin(es.wedge_angle * 2)) / 4.;
652  if (ladd_side == 1)
653  sdxe2[enb] = es.ladder_width / 4.;
654 
655  Solid solid_5c =
656  UnionSolid(dd_tmp_name_5c,
657  solid_5b,
658  solid_lfhtrunc,
659  Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe2[enb], sdye2[enb], sdze2[enb])));
660 #ifdef EDM_ML_DEBUG
661  edm::LogVerbatim("SFGeomX") << dd_tmp_name_5c << " Union " << solid_5b.name() << ":"
662  << solid_lfhtrunc.name() << " at (" << cms::convert2mm(sdxe2[enb]) << ","
663  << cms::convert2mm(sdye2[enb]) << "," << cms::convert2mm(sdze2[enb])
664  << ") rotation esalgo:RM1299";
665 #endif
666 
667  sdxe3[enb] = 0;
668  sdye3[enb] = boxay / 2. + es.ldrBck_Length / 2.;
669  sdze3[enb] = -es.ladder_thick / 2. + es.ldrBck_Offset;
670  Solid solid =
671  UnionSolid(ddname,
672  solid_5c,
673  solid_lbck,
674  Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe3[enb], sdye3[enb], sdze3[enb])));
675 #ifdef EDM_ML_DEBUG
676  edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_5c.name() << ":" << solid_lbck.name() << " at ("
677  << cms::convert2mm(sdxe3[enb]) << "," << cms::convert2mm(sdye3[enb]) << ","
678  << cms::convert2mm(sdze3[enb]) << ") rotation esalgo:RM1299";
679 #endif
680 
681  ns.addVolumeNS(Volume(ddname, solid, ns.material(es.laddMaterial)));
682  ns.addVolumeNS(Volume("esalgo:" + es.ladPfx[1] + es.typesL5[M], solid, ns.material(es.laddMaterial)));
683  }
684  } // end of not plain ladder shape
685  else {
686  const string& dd_tmp_name_5pa("esalgo:" + es.ladPfx[2] + "5p");
687  const string& dd_tmp_name_5pb("esalgo:" + es.ladPfx[3] + "5p");
688 
689  boxay = ladder_length - es.ldrFrnt_Length - es.ldrBck_Length;
690  boxax = es.ladder_width;
691  boxaz = es.ladder_thick;
692 
693  Solid solid_5pa = Box(dd_tmp_name_5pa, boxax / 2., boxay / 2., boxaz / 2.);
694 #ifdef EDM_ML_DEBUG
695  edm::LogVerbatim("SFGeomX") << dd_tmp_name_5pa << " Box " << cms::convert2mm(boxax / 2) << ":"
696  << cms::convert2mm(boxay / 2) << ":" << cms::convert2mm(boxaz / 2);
697 #endif
698  sdx = 0;
699  sdy = -boxay / 2. - es.ldrFrnt_Length / 2.;
700  sdz = -es.ladder_thick / 2. + es.ldrFrnt_Offset;
701 
702  Solid solid_5pb = UnionSolid(dd_tmp_name_5pb,
703  solid_5pa,
704  solid_lfront,
705  Transform3D(ns.rotation("esalgo:RM1299"), Position(sdx, sdy, sdz)));
706 #ifdef EDM_ML_DEBUG
707  edm::LogVerbatim("SFGeomX") << dd_tmp_name_5pb << " Union " << solid_5pa.name() << ":" << solid_lfront.name()
708  << " at (" << cms::convert2mm(sdx) << "," << cms::convert2mm(sdy) << ","
709  << cms::convert2mm(sdz) << ") rotation esalgo:RM1299";
710 #endif
711 
712  sdx = 0;
713  sdy = boxay / 2. + es.ldrBck_Length / 2.;
714  sdz = -es.ladder_thick / 2. + es.ldrBck_Offset;
715 
716  Solid solid = UnionSolid(
717  ddname, solid_5pb, solid_lbck, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdx, sdy, sdz)));
718 #ifdef EDM_ML_DEBUG
719  edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_5pb.name() << ":" << solid_lbck.name() << " at ("
720  << cms::convert2mm(sdx) << "," << cms::convert2mm(sdy) << ","
721  << cms::convert2mm(sdz) << ") rotation esalgo:RM1299";
722 #endif
723  ns.addVolumeNS(Volume(ddname, solid, ns.material(es.laddMaterial)));
724  ns.addVolumeNS(Volume("esalgo:" + es.ladPfx[1] + es.typesL5[M], solid, ns.material(es.laddMaterial)));
725  }
726  }
727 
728  // Creation of ladders with 4 micromodules length
729 
730  if (M >= int(es.typesL5.size())) {
731  int d = M - es.typesL5.size();
732 
733  for (int i = 0; i <= 1; i++) {
734  for (int j = 0; j <= 3; j++) {
735  if (es.laddL4map[(i + j * 2 + (M - es.typesL5.size()) * 8)] != 1) {
736  ladd_not_plain = 1;
737  ladd_subtr_no++;
738  if (j > 1)
739  ladd_upper = 1;
740  ladd_side = i;
741  }
742  }
743  }
744 #ifdef EDM_ML_DEBUG
745  edm::LogVerbatim("SFGeomX") << "Side " << ladd_side << ":" << ladd_upper << ":" << ladd_subtr_no << ":"
746  << ladd_not_plain << " Index " << M << ":" << es.typesL5.size();
747 #endif
748  const string& ddname("esalgo:" + es.ladPfx[0] + es.typesL4[d]);
749  ladder_length = es.micromodule_length + 3 * es.waf_active + 0.1 * dd4hep::mm;
750 
751  if (ladd_not_plain) {
752  if (ladd_upper) {
753  enb++;
754 
755  const string& dd_tmp_name_a("esalgo:" + es.ladPfx[7]);
756  const string& dd_tmp_name_b("esalgo:" + es.ladPfx[8] + to_string(enb));
757 
758  boxay = ladder_length - es.ldrFrnt_Length - es.ldrBck_Length;
759  boxax = es.ladder_width;
760  boxaz = es.ladder_thick;
761  Solid solid_a = Box(dd_tmp_name_a, boxax / 2., boxay / 2., boxaz / 2.);
762 #ifdef EDM_ML_DEBUG
763  edm::LogVerbatim("SFGeomX") << dd_tmp_name_a << " Box " << cms::convert2mm(boxax / 2) << ":"
764  << cms::convert2mm(boxay / 2) << ":" << cms::convert2mm(boxaz / 2);
765 #endif
766 
767  sdxe[enb] = 0;
768  sdye[enb] = -boxay / 2. - es.ldrFrnt_Length / 2.;
769  sdze[enb] = -es.ladder_thick / 2. + es.ldrFrnt_Offset;
770  Solid solid_b =
771  UnionSolid(dd_tmp_name_b,
772  solid_a,
773  solid_lfront,
774  Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe[enb], sdye[enb], sdze[enb])));
775 #ifdef EDM_ML_DEBUG
776  edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Union " << solid_a.name() << ":" << solid_lfront.name()
777  << " at (" << cms::convert2mm(sdxe[enb]) << "," << cms::convert2mm(sdye[enb])
778  << "," << cms::convert2mm(sdze[enb]) << ") rotation esalgo:RM1299";
779 #endif
780 
781  if (ladd_side == 0)
782  sdxe2[enb] = es.ladder_width / 4.;
783  sdye2[enb] = boxay / 2. + es.ldrBck_Length / 2.;
784  sdze2[enb] = -es.ladder_thick / 2. + es.ldrBck_Offset;
785  if (ladd_side == 1)
786  sdxe2[enb] = -es.ladder_width / 4.;
787  Solid solid =
788  UnionSolid(ddname,
789  solid_b,
790  solid_lbhalf,
791  Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe2[enb], sdye2[enb], sdze2[enb])));
792 #ifdef EDM_ML_DEBUG
793  edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_b.name() << ":" << solid_lbhalf.name()
794  << " at (" << cms::convert2mm(sdxe2[enb]) << "," << cms::convert2mm(sdye2[enb])
795  << "," << cms::convert2mm(sdze2[enb]) << ") rotation esalgo:RM1299";
796 #endif
797 
798  ns.addVolumeNS(Volume(ddname, solid, ns.material(es.laddMaterial)));
799  ns.addVolumeNS(Volume("esalgo:" + es.ladPfx[1] + es.typesL4[d], solid, ns.material(es.laddMaterial)));
800 
801  } // upper
802  else {
803  if (ladd_subtr_no > 1) {
804  enb++;
805 
806  const string& dd_tmp_name_a("esalgo:" + es.ladPfx[7]);
807  const string& dd_tmp_name_b("esalgo:" + es.ladPfx[8] + to_string(enb));
808 
809  boxay = ladder_length - es.ldrFrnt_Length - es.ldrBck_Length;
810  boxax = es.ladder_width;
811  boxaz = es.ladder_thick;
812 
813  Solid solid_a = Box(dd_tmp_name_a, boxax / 2., boxay / 2., boxaz / 2.);
814 #ifdef EDM_ML_DEBUG
815  edm::LogVerbatim("SFGeomX") << dd_tmp_name_a << " Box " << cms::convert2mm(boxax / 2) << ":"
816  << cms::convert2mm(boxay / 2) << ":" << cms::convert2mm(boxaz / 2);
817 #endif
818  if (ladd_side == 0)
819  sdxe[enb] = es.ladder_width / 4.;
820  sdye[enb] = -boxay / 2. - es.ldrFrnt_Length / 2.;
821  sdze[enb] = -es.ladder_thick / 2. + es.ldrFrnt_Offset;
822  if (ladd_side == 1)
823  sdxe[enb] = -es.ladder_width / 4.;
824 
825  Solid solid_b =
826  UnionSolid(dd_tmp_name_b,
827  solid_a,
828  solid_lfhalf,
829  Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe[enb], sdye[enb], sdze[enb])));
830 #ifdef EDM_ML_DEBUG
831  edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Union " << solid_a.name() << ":" << solid_lfhalf.name()
832  << " at (" << cms::convert2mm(sdxe[enb]) << "," << cms::convert2mm(sdye[enb])
833  << "," << cms::convert2mm(sdze[enb]) << ") rotation esalgo:RM1299";
834 #endif
835 
836  sdxe2[enb] = 0;
837  sdye2[enb] = boxay / 2. + es.ldrBck_Length / 2.;
838  sdze2[enb] = -es.ladder_thick / 2. + es.ldrBck_Offset;
839 
840  Solid solid =
841  UnionSolid(ddname,
842  solid_b,
843  solid_lbck,
844  Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe2[enb], sdye2[enb], sdze2[enb])));
845 #ifdef EDM_ML_DEBUG
846  edm::LogVerbatim("SFGeomX")
847  << ddname << " Union " << solid_b.name() << ":" << solid_lbck.name() << " at ("
848  << cms::convert2mm(sdxe2[enb]) << "," << cms::convert2mm(sdye2[enb]) << ","
849  << cms::convert2mm(sdze2[enb]) << ") rotation esalgo:RM1299";
850 #endif
851 
852  ns.addVolumeNS(Volume(ddname, solid, ns.material(es.laddMaterial)));
853  ns.addVolumeNS(Volume("esalgo:" + es.ladPfx[1] + es.typesL4[d], solid, ns.material(es.laddMaterial)));
854  } else {
855  enb++;
856  const string& dd_tmp_name_a("esalgo:" + es.ladPfx[7]);
857  const string& dd_tmp_name_b("esalgo:" + es.ladPfx[8] + to_string(enb));
858  const string& dd_tmp_name_c("esalgo:" + es.ladPfx[9] + to_string(enb));
859 
860  boxay = ladder_length - es.ldrFrnt_Length - es.ldrBck_Length;
861  boxax = es.ladder_width;
862  boxaz = es.ladder_thick;
863  Solid solid_a = Box(dd_tmp_name_a, boxax / 2., boxay / 2., boxaz / 2.);
864 #ifdef EDM_ML_DEBUG
865  edm::LogVerbatim("SFGeomX") << dd_tmp_name_a << " Box " << cms::convert2mm(boxax / 2) << ":"
866  << cms::convert2mm(boxay / 2) << ":" << cms::convert2mm(boxaz / 2);
867 #endif
868  if (ladd_side == 0)
869  sdxe[enb] = es.ladder_width / 4.;
870  sdye[enb] = -boxay / 2. - es.ldrFrnt_Length / 2.;
871  sdze[enb] = -es.ladder_thick / 2. + es.ldrFrnt_Offset;
872  if (ladd_side == 1)
873  sdxe[enb] = -es.ladder_width / 4.;
874 
875  Solid solid_b =
876  UnionSolid(dd_tmp_name_b,
877  solid_a,
878  solid_lfhalf,
879  Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe[enb], sdye[enb], sdze[enb])));
880 #ifdef EDM_ML_DEBUG
881  edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Union " << solid_a.name() << ":" << solid_lfhalf.name()
882  << " at (" << cms::convert2mm(sdxe[enb]) << "," << cms::convert2mm(sdye[enb])
883  << "," << cms::convert2mm(sdze[enb]) << ") rotation esalgo:RM1299";
884 #endif
885 
886  if (ladd_side == 0)
887  sdxe2[enb] = -es.ladder_width / 4.;
888  sdye2[enb] = -boxay / 2. - es.ldrFrnt_Length / 2. + es.waf_active / 2.;
889  sdze2[enb] = -es.ladder_thick / 2. + es.ldrFrnt_Offset + (es.waf_active * sin(es.wedge_angle * 2)) / 4.;
890  if (ladd_side == 1)
891  sdxe2[enb] = es.ladder_width / 4.;
892 
893  Solid solid_c =
894  UnionSolid(dd_tmp_name_c,
895  solid_b,
896  solid_lfhtrunc,
897  Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe2[enb], sdye2[enb], sdze2[enb])));
898 #ifdef EDM_ML_DEBUG
899  edm::LogVerbatim("SFGeomX")
900  << dd_tmp_name_c << " Union " << solid_b.name() << ":" << solid_lfhtrunc.name() << " at ("
901  << cms::convert2mm(sdxe2[enb]) << "," << cms::convert2mm(sdye2[enb]) << ","
902  << cms::convert2mm(sdze2[enb]) << ") rotation esalgo:RM1299";
903 #endif
904 
905  sdxe3[enb] = 0;
906  sdye3[enb] = boxay / 2. + es.ldrBck_Length / 2.;
907  sdze3[enb] = -es.ladder_thick / 2. + es.ldrBck_Offset;
908  Solid solid =
909  UnionSolid(ddname,
910  solid_c,
911  solid_lbck,
912  Transform3D(ns.rotation("esalgo:RM1299"), Position(sdxe3[enb], sdye3[enb], sdze3[enb])));
913 #ifdef EDM_ML_DEBUG
914  edm::LogVerbatim("SFGeomX")
915  << ddname << " Union " << solid_c.name() << ":" << solid_lbck.name() << " at ("
916  << cms::convert2mm(sdxe3[enb]) << "," << cms::convert2mm(sdye3[enb]) << ","
917  << cms::convert2mm(sdze3[enb]) << ") rotation esalgo:RM1299";
918 #endif
919 
920  ns.addVolumeNS(Volume(ddname, solid, ns.material(es.laddMaterial)));
921  ns.addVolumeNS(Volume("esalgo:" + es.ladPfx[1] + es.typesL4[d], solid, ns.material(es.laddMaterial)));
922  }
923  }
924  } // end of not plain ladder shape
925  else {
926  const string& dd_tmp_name_pa("esalgo:" + es.ladPfx[2] + "p");
927  const string& dd_tmp_name_pb("esalgo:" + es.ladPfx[3] + "p");
928 
929  boxay = ladder_length - es.ldrFrnt_Length - es.ldrBck_Length;
930  boxax = es.ladder_width;
931  boxaz = es.ladder_thick;
932 
933  Solid solid_pa = Box(dd_tmp_name_pa, boxax / 2., boxay / 2., boxaz / 2.);
934 #ifdef EDM_ML_DEBUG
935  edm::LogVerbatim("SFGeomX") << dd_tmp_name_pa << " Box " << cms::convert2mm(boxax / 2) << ":"
936  << cms::convert2mm(boxay / 2) << ":" << cms::convert2mm(boxaz / 2);
937 #endif
938  sdx = 0;
939  sdy = -boxay / 2. - es.ldrFrnt_Length / 2.;
940  sdz = -es.ladder_thick / 2. + es.ldrFrnt_Offset;
941 
942  Solid solid_pb = UnionSolid(dd_tmp_name_pb,
943  solid_pa,
944  solid_lfront,
945  Transform3D(ns.rotation("esalgo:RM1299"), Position(sdx, sdy, sdz)));
946 #ifdef EDM_ML_DEBUG
947  edm::LogVerbatim("SFGeomX") << dd_tmp_name_pb << " Union " << solid_pa.name() << ":" << solid_lfront.name()
948  << " at (" << cms::convert2mm(sdx) << "," << cms::convert2mm(sdy) << ","
949  << cms::convert2mm(sdz) << ") rotation esalgo:RM1299";
950 #endif
951 
952  sdx = 0;
953  sdy = boxay / 2. + es.ldrBck_Length / 2.;
954  sdz = -es.ladder_thick / 2. + es.ldrBck_Offset;
955  Solid solid = UnionSolid(
956  ddname, solid_pb, solid_lbck, Transform3D(ns.rotation("esalgo:RM1299"), Position(sdx, sdy, sdz)));
957 #ifdef EDM_ML_DEBUG
958  edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_pb.name() << ":" << solid_lbck.name() << " at ("
959  << cms::convert2mm(sdx) << "," << cms::convert2mm(sdy) << ","
960  << cms::convert2mm(sdz) << ") rotation esalgo:RM1299";
961 #endif
962  ns.addVolumeNS(Volume(ddname, solid, ns.material(es.laddMaterial)));
963  ns.addVolumeNS(Volume("esalgo:" + es.ladPfx[1] + es.typesL4[d], solid, ns.material(es.laddMaterial)));
964  }
965  }
966 
967  // insert SWED, SFBX and SFBY into ladders
968  swed_scopy_glob++;
969  if (M < int(es.typesL5.size())) {
970  const string& ddname("esalgo:" + es.ladPfx[0] + es.typesL5[M]);
971  const string& ddname2("esalgo:" + es.ladPfx[1] + es.typesL5[M]);
972  for (int i = 0; i <= 1; i++) {
973  for (int j = 0; j <= 4; j++) {
974  xpos = (i * 2 - 1) * es.waf_intra_col_sep / 2.;
975  ypos = -ladder_length / 2. + 0.05 * dd4hep::mm - (es.ldrFrnt_Length - es.ldrBck_Length) / 2. +
976  es.wedge_length / 2. + j * es.waf_active;
977  zpos = -es.ladder_thick / 2. + 0.005 * dd4hep::mm + es.wedge_offset;
978  if (es.laddL5map[(i + j * 2 + M * 10)] == 1) {
979  scopy++;
980  ns.volume(ddname).placeVolume(swedLog,
981  scopy + 1000 * swed_scopy_glob,
982  Transform3D(ns.rotation("esalgo:RM1299"), Position(xpos, ypos, zpos)));
983  ns.volume(ddname2).placeVolume(swedLog,
984  scopy + 1000 * swed_scopy_glob + 100,
985  Transform3D(ns.rotation("esalgo:RM1299"), Position(xpos, ypos, zpos)));
986 #ifdef EDM_ML_DEBUG
987  edm::LogVerbatim("SFGeom") << swedLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob) << " in "
988  << ddname << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos)
989  << "," << cms::convert2mm(zpos) << ") rotation esalgo:RM1299";
990  edm::LogVerbatim("SFGeom") << swedLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob + 100)
991  << " in " << ddname2 << " at (" << cms::convert2mm(xpos) << ","
992  << cms::convert2mm(ypos) << "," << cms::convert2mm(zpos)
993  << ") rotation esalgo:RM1299";
994 #endif
995 
996  ypos = ypos + es.ywedge_ceramic_diff;
997  zpos = -es.ladder_thick / 2. + 0.005 * dd4hep::mm + es.zwedge_ceramic_diff;
998  ns.volume(ddname).placeVolume(sfbxLog,
999  scopy + 1000 * swed_scopy_glob,
1000  Transform3D(ns.rotation("esalgo:RM1298"), Position(xpos, ypos, zpos)));
1001  ns.volume(ddname2).placeVolume(sfbyLog,
1002  scopy + 1000 * swed_scopy_glob,
1003  Transform3D(ns.rotation("esalgo:RM1300A"), Position(xpos, ypos, zpos)));
1004 #ifdef EDM_ML_DEBUG
1005  edm::LogVerbatim("SFGeom") << sfbxLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob) << " in "
1006  << ddname << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos)
1007  << "," << cms::convert2mm(zpos) << ") rotation esalgo:RM1298";
1008  edm::LogVerbatim("SFGeom") << sfbyLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob) << " in "
1009  << ddname2 << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos)
1010  << "," << cms::convert2mm(zpos) << ") rotation esalgo:RM1300A";
1011 #endif
1012  }
1013  }
1014  }
1015  } else {
1016  int d = M - es.typesL5.size();
1017  const string& ddname("esalgo:" + es.ladPfx[0] + es.typesL4[d]);
1018  const string& ddname2("esalgo:" + es.ladPfx[1] + es.typesL4[d]);
1019  for (int i = 0; i <= 1; i++) {
1020  for (int j = 0; j <= 3; j++) {
1021  xpos = (i * 2 - 1) * es.waf_intra_col_sep / 2.;
1022  ypos = -ladder_length / 2. + 0.05 * dd4hep::mm - (es.ldrFrnt_Length - es.ldrBck_Length) / 2. +
1023  es.wedge_length / 2. + j * es.waf_active;
1024  zpos = -es.ladder_thick / 2. + 0.005 * dd4hep::mm + es.wedge_offset;
1025  if (es.laddL4map[(i + j * 2 + (M - es.typesL5.size()) * 8)] == 1) {
1026  scopy++;
1027  ns.volume(ddname).placeVolume(swedLog,
1028  scopy + 1000 * swed_scopy_glob,
1029  Transform3D(ns.rotation("esalgo:RM1299"), Position(xpos, ypos, zpos)));
1030  ns.volume(ddname2).placeVolume(swedLog,
1031  scopy + 1000 * swed_scopy_glob + 100,
1032  Transform3D(ns.rotation("esalgo:RM1299"), Position(xpos, ypos, zpos)));
1033 #ifdef EDM_ML_DEBUG
1034  edm::LogVerbatim("SFGeom") << swedLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob) << " in "
1035  << ddname << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos)
1036  << "," << cms::convert2mm(zpos) << ") rotation esalgo:RM1299";
1037  edm::LogVerbatim("SFGeom") << swedLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob + 100)
1038  << " in " << ddname2 << " at (" << cms::convert2mm(xpos) << ","
1039  << cms::convert2mm(ypos) << "," << cms::convert2mm(zpos)
1040  << ") rotation esalgo:RM1299";
1041 #endif
1042 
1043  ypos = ypos + es.ywedge_ceramic_diff;
1044  zpos = -es.ladder_thick / 2. + 0.005 * dd4hep::mm + es.zwedge_ceramic_diff;
1045  ns.volume(ddname).placeVolume(sfbxLog,
1046  scopy + 1000 * swed_scopy_glob,
1047  Transform3D(ns.rotation("esalgo:RM1298"), Position(xpos, ypos, zpos)));
1048  ns.volume(ddname2).placeVolume(sfbyLog,
1049  scopy + 1000 * swed_scopy_glob,
1050  Transform3D(ns.rotation("esalgo:RM1300A"), Position(xpos, ypos, zpos)));
1051 #ifdef EDM_ML_DEBUG
1052  edm::LogVerbatim("SFGeom") << sfbxLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob) << " in "
1053  << ddname << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos)
1054  << "," << cms::convert2mm(zpos) << ") rotation esalgo:RM1298";
1055  edm::LogVerbatim("SFGeom") << sfbyLog.name() << " copy " << (scopy + 1000 * swed_scopy_glob) << " in "
1056  << ddname2 << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos)
1057  << "," << cms::convert2mm(zpos) << ") rotation esalgo:RM1300A";
1058 #endif
1059  }
1060  }
1061  }
1062  }
1063  }
1064 
1065  // Positioning of ladders
1066  int icopy[100] = {0};
1067  constexpr int sz = 20;
1068 
1069  for (int I = -9; I <= 9; ++I) {
1070  prev_length = 0;
1071  int J = abs(I);
1072  for (int K = 0; K < es.noLaddInCol[J]; K++) {
1073  string type;
1074 
1075  ladder_new_length = es.micromodule_length + 3. * es.waf_active;
1076  ladd_shift = 4. * es.waf_active;
1077 
1078  if (K == 0)
1079  type = es.typeOfLaddRow0[J];
1080  if (K == 1)
1081  type = es.typeOfLaddRow1[J];
1082  if (K == 2)
1083  type = es.typeOfLaddRow2[J];
1084  if (K == 3)
1085  type = es.typeOfLaddRow3[J];
1086 
1087  for (const auto& i : es.typesL5)
1088  if (type == i) {
1089  ladder_new_length = es.micromodule_length + 4. * es.waf_active;
1090  ladd_shift = 5. * es.waf_active;
1091  }
1092 
1093  int j = 0;
1094 
1095  for (int t = 0; t < int(es.typesL5.size()); t++)
1096  if (type == es.typesL5[t]) {
1097  j = t;
1098  if (I < 0 && es.asymLadd[t] == 1) {
1099  j = j + 1;
1100  type = es.typesL5[j];
1101  }
1102  }
1103  for (int t = 0; t < int(es.typesL4.size()); t++)
1104  if (type == es.typesL4[t]) {
1105  j = t + es.typesL5.size();
1106  if (I < 0 && es.asymLadd[(t + es.typesL5.size())] == 1) {
1107  j = j + 1;
1108  type = es.typesL4[j - es.typesL5.size()];
1109  }
1110  }
1111 
1112  xpos = I * (2 * es.waf_intra_col_sep + es.waf_inter_col_sep);
1113  if (I > 0)
1114  xpos = xpos + es.dee_separation;
1115  if (I < 0)
1116  xpos = xpos - es.dee_separation;
1117 
1118  ypos = (sz - int(es.startOfFirstLadd[J])) * es.waf_active - ladder_new_length / 2. +
1119  (es.ldrFrnt_Length - es.ldrBck_Length) / 2. + es.micromodule_length + 0.05 * dd4hep::cm - prev_length;
1120 
1121  prev_length += ladd_shift;
1122 
1123  zpos = es.zlead1 + es.ladder_thick / 2. + 0.01 * dd4hep::mm;
1124  icopy[j] += 1;
1125 
1126  sfLog.placeVolume(ns.volume("esalgo:" + es.ladPfx[0] + type), icopy[j], Position(xpos, ypos, zpos));
1127 #ifdef EDM_ML_DEBUG
1128  edm::LogVerbatim("SFGeom") << ("esalgo:" + es.ladPfx[0] + type) << " copy " << icopy[j] << " in "
1129  << sfLog.name() << " at (" << cms::convert2mm(xpos) << "," << cms::convert2mm(ypos)
1130  << "," << cms::convert2mm(zpos) << ") no rotation";
1131 #endif
1132 
1133  xpos = I * (2 * es.waf_intra_col_sep + es.waf_inter_col_sep);
1134  sfLog.placeVolume(ns.volume("esalgo:" + es.ladPfx[1] + type),
1135  icopy[j],
1136  Transform3D(ns.rotation("esalgo:R270"), Position(ypos, -xpos, zpos - es.zlead1 + es.zlead2)));
1137 #ifdef EDM_ML_DEBUG
1138  edm::LogVerbatim("SFGeom") << ("esalgo:" + es.ladPfx[1] + type) << " copy " << icopy[j] << " in "
1139  << sfLog.name() << " at (" << cms::convert2mm(ypos) << "," << -cms::convert2mm(xpos)
1140  << "," << cms::convert2mm(zpos - es.zlead1 + es.zlead2) << ") rotation esalgo:R270";
1141 #endif
1142 
1143  int changed = 0;
1144  for (int t = 0; t < int(es.typesL5.size()); t++)
1145  if (type == es.typesL5[t]) {
1146  j = t;
1147  if (es.asymLadd[t] == 2 && !changed) {
1148  j = j - 1;
1149  changed = 1;
1150  }
1151  if (es.asymLadd[t] == 1 && !changed) {
1152  j = j + 1;
1153  changed = 1;
1154  }
1155  type = es.typesL5[j];
1156  }
1157  for (int t = 0; t < int(es.typesL4.size()); t++)
1158  if (type == es.typesL4[t]) {
1159  j = t + es.typesL5.size();
1160  if (es.asymLadd[(t + es.typesL5.size())] == 2 && !changed) {
1161  j = j - 1;
1162  changed = 1;
1163  }
1164  if (es.asymLadd[(t + es.typesL5.size())] == 1 && !changed) {
1165  j = j + 1;
1166  changed = 1;
1167  }
1168  type = es.typesL4[j - es.typesL5.size()];
1169  }
1170 
1171  icopy[j] += 1;
1172 
1173  if (I > 0)
1174  xpos = xpos + es.dee_separation;
1175  if (I < 0)
1176  xpos = xpos - es.dee_separation;
1177 
1178  sfLog.placeVolume(ns.volume("esalgo:" + es.ladPfx[0] + type),
1179  icopy[j],
1180  Transform3D(ns.rotation("esalgo:R180"), Position(xpos, -ypos, zpos)));
1181 #ifdef EDM_ML_DEBUG
1182  edm::LogVerbatim("SFGeom") << ("esalgo:" + es.ladPfx[0] + type) << " copy " << icopy[j] << " in "
1183  << sfLog.name() << " at (" << cms::convert2mm(xpos) << "," << -cms::convert2mm(ypos)
1184  << "," << cms::convert2mm(zpos) << ") rotation esalgo:R180";
1185 #endif
1186 
1187  xpos = I * (2 * es.waf_intra_col_sep + es.waf_inter_col_sep);
1188 
1189  sfLog.placeVolume(
1190  ns.volume("esalgo:" + es.ladPfx[1] + type),
1191  icopy[j],
1192  Transform3D(ns.rotation("esalgo:R090"), Position(-ypos, -xpos, zpos - es.zlead1 + es.zlead2)));
1193 #ifdef EDM_ML_DEBUG
1194  edm::LogVerbatim("SFGeom") << ("esalgo:" + es.ladPfx[1] + type) << " copy " << icopy[j] << " in "
1195  << sfLog.name() << " at (" << -cms::convert2mm(ypos) << "," << -cms::convert2mm(xpos)
1196  << "," << cms::convert2mm(zpos - es.zlead1 + es.zlead2) << ") rotation esalgo:R090";
1197 #endif
1198  }
1199  }
1200  }
1201  // place the slicon strips in active silicon wafers
1202  {
1203  double xpos(0), ypos(0);
1204  Volume sfwxLog = ns.volume("esalgo:SFWX");
1205  Volume sfwyLog = ns.volume("esalgo:SFWY");
1206  Volume sfsxLog = ns.volume("esalgo:SFSX");
1207  Volume sfsyLog = ns.volume("esalgo:SFSY");
1208 
1209  for (size_t i = 0; i < 32; ++i) {
1210  xpos = -es.waf_active / 2. + i * es.waf_active / 32. + es.waf_active / 64.;
1211  sfwxLog.placeVolume(sfsxLog, i + 1, Position(xpos, 0., 0.));
1212 #ifdef EDM_ML_DEBUG
1213  edm::LogVerbatim("SFGeom") << sfsxLog.name() << " copy " << (i + 1) << " in " << sfwxLog.name() << " at ("
1214  << cms::convert2mm(xpos) << ",0,0) no rotation";
1215 #endif
1216 
1217  ypos = -es.waf_active / 2. + i * es.waf_active / 32. + es.waf_active / 64.;
1218  sfwyLog.placeVolume(sfsyLog, i + 1, Position(0., ypos, 0.));
1219 #ifdef EDM_ML_DEBUG
1220  edm::LogVerbatim("SFGeom") << sfsyLog.name() << " copy " << (i + 1) << " in " << sfwyLog.name() << " at (0,"
1221  << cms::convert2mm(ypos) << ",0) no rotation";
1222 #endif
1223  }
1224  }
1225  return 1;
1226 }

References funct::abs(), cms::DDNamespace::addSolid(), cms::DDNamespace::addVolume(), cms::DDNamespace::addVolumeNS(), writedatasetfile::args, cms::convert2mm(), angle_units::operators::convertRadToDeg(), funct::cos(), counter, ztail::d, MillePedeFileConverter_cfg::e, EcalPreshower, Exhume::I, mps_fire::i, createfilelist::int, dqmiolumiharvest::j, dttmaxenums::L, phase1PixelTopology::layer, cms::DDNamespace::material(), PixelTestBeamValidation_cfi::Position, cms::DDNamespace::rotation(), funct::sin(), cms::DDNamespace::solid(), submitPVValidationJobs::t, and cms::DDNamespace::volume().

◆ DD4HEP_OPEN_PLUGIN()

DD4HEP_OPEN_PLUGIN ( dd4hep  ,
ddcms_det_element_DDCMS_ecal_DDEcalPreshowerAlgo   
)

Definition at line 1228 of file DDEcalPreshowerAlgo.cc.

writedatasetfile.args
args
Definition: writedatasetfile.py:18
dttmaxenums::L
Definition: DTTMax.h:29
mps_fire.i
i
Definition: mps_fire.py:428
angle_units::operators::convertRadToDeg
constexpr NumType convertRadToDeg(NumType radians)
Definition: angle_units.h:21
cms::DDNamespace
Definition: DDNamespace.h:16
funct::sin
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
funct::cos
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
Exhume::I
const std::complex< double > I
Definition: I.h:8
PixelTestBeamValidation_cfi.Position
Position
Definition: PixelTestBeamValidation_cfi.py:75
phase1PixelTopology::layer
constexpr std::array< uint8_t, layerIndexSize > layer
Definition: phase1PixelTopology.h:99
cms::Volume
dd4hep::Volume Volume
Definition: DDFilteredView.h:47
type
type
Definition: SiPixelVCal_PayloadInspector.cc:37
gainCalibHelper::gainCalibPI::type
type
Definition: SiPixelGainCalibHelper.h:40
createfilelist.int
int
Definition: createfilelist.py:10
cms::convert2mm
constexpr NumType convert2mm(NumType length)
Definition: DDutils.h:7
cms::DDAlgoArguments
Definition: DDAlgoArguments.h:28
counter
static std::atomic< unsigned int > counter
Definition: SharedResourceNames.cc:18
EcalPreshower
Definition: EcalSubdetector.h:10
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
BenchmarkGrd
Definition: BenchmarkGrd.h:9
ztail.d
d
Definition: ztail.py:151
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
submitPVValidationJobs.t
string t
Definition: submitPVValidationJobs.py:644
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37