CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DDEcalPreshowerAlgoTB.cc
Go to the documentation of this file.
2 
3 #include <cmath>
4 #include <algorithm>
5 #include <ostream>
6 
16 #include "CLHEP/Units/GlobalPhysicalConstants.h"
17 #include "CLHEP/Units/GlobalSystemOfUnits.h"
18 
19 using namespace CLHEP;
20 
22  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB info: Creating an instance";
23 }
24 
26  const DDVectorArguments& vArgs,
27  const DDMapArguments& mArgs,
28  const DDStringArguments& sArgs,
29  const DDStringVectorArguments& vsArgs) {
30  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB info: Initialize";
31  quadMin_ = vArgs["IQUAD_MIN"];
32  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB IQUAD_MIN";
33  quadMax_ = vArgs["IQUAD_MAX"];
34  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB IQUAD_MAX";
35  thickLayers_ = vArgs["Layers"];
36  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB Layers";
37  thickness_ = double(nArgs["PRESH_Z_TOTAL"]);
38  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB PRESH_Z_TOTAL";
39  materials_ = vsArgs["LayMat"];
40  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB material";
41  rmaxVec = vArgs["R_MAX"]; // inner radii
42  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB R_MAX";
43  rminVec = vArgs["R_MIN"]; // outer radii
44  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB R_MIN";
45  waf_intra_col_sep = double(nArgs["waf_intra_col_sep"]);
46  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB waf_intra_col_sep";
47  waf_inter_col_sep = double(nArgs["waf_inter_col_sep"]);
48  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB waf_intra_col_sep = " << waf_inter_col_sep;
49  waf_active = double(nArgs["waf_active"]);
50  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB waf_active = " << waf_active;
51  wedge_length = double(nArgs["wedge_length"]);
52  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB wedge_length = " << wedge_length;
53  wedge_offset = double(nArgs["wedge_offset"]);
54  zwedge_ceramic_diff = double(nArgs["zwedge_ceramic_diff"]);
55  ywedge_ceramic_diff = double(nArgs["ywedge_ceramic_diff"]);
56  micromodulesx = vArgs["MicromodulesX"]; // micromodules in X plane
57  micromodulesy = vArgs["MicromodulesY"]; // micromodules in Y plane
58  absorbx = double(nArgs["absorbx"]);
59  absorby = double(nArgs["absorby"]);
60  trabsorbx = double(nArgs["trabsorbx"]);
61  trabsorby = double(nArgs["trabsorby"]);
62  ScndplaneXshift = double(nArgs["2ndPlaneXshift"]);
63  ScndplaneYshift = double(nArgs["2ndPlaneYshift"]);
64  TotSFXshift = double(nArgs["SF07vsSF_Xshift"]);
65  TotSFYshift = double(nArgs["SF07vsSF_Yshift"]);
66  dummyMaterial = sArgs["DummyMaterial"];
67  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB Dummy Material = " << dummyMaterial;
68 
70 
71  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB info: end initialize";
72 }
73 
75  LogDebug("HCalGeom") << "******** DDEcalPreshowerAlgoTB execute!";
76 
77  // creates all the tube-like layers of the preshower
78  doLayers(cpv);
79  // places the wedges and silicon strip detectors in their x and y layer
80  doWedges(cpv);
81  // places the slicon strips in active silicon wafers
82  doSens(cpv);
83 }
84 
86  //double sum_z=0;
87  double zpos = -thickness_ / 2.;
88  for (size_t i = 0; i < rminVec.size(); ++i) {
89  int I = int(i) + 1; // FOTRAN I (offset +1)
90 
91  double zHalf(0);
92 
93  // create the name
94  std::ostringstream name;
95  name << "SF" << int((50 + I) / 10) << I - int(I / 10) * 10;
96  DDName ddname(name.str(), idNameSpace); // namespace:name
97 
98  // tube dimensions
99  // rIn = rmaxVec[i];
100  // rOut = rminVec[i];
101  zHalf = thickLayers_[i] / 2.;
102 
103  // position the logical part w.r.t. the parent volume
104  zpos += zHalf;
105  //sum_z += thickLayers_[i];
106  if (I == 7 || I == 15) { // skip layers with detectors
107  zpos += zHalf;
108  continue;
109  }
110  if (I == 2) {
111  zfoam1_ = zpos;
112  }
113  if (I == 6) {
114  zlead1_ = zpos + zHalf;
115  }
116  if (I == 14) {
117  zlead2_ = zpos + zHalf;
118  }
119 
120  if (getMaterial(i) != dummyMaterial) {
121  // create a logical part representing a single layer in the preshower
122  //DDSolid solid = DDSolidFactory::tubs(ddname,zHalf,rIn,rOut,0.,360.*deg);
123 
124  DDSolid solid = DDSolidFactory::box(ddname, absorbx, absorby, zHalf);
125 
126  DDName matname(getMaterial(i), "materials");
127  DDMaterial material(matname);
128  DDLogicalPart layer = DDLogicalPart(ddname, material, solid);
129 
131  cpv.position(layer, parent(), 1, tran, DDRotation());
132  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB debug : Child " << layer << " Copy 1 in " << parent().name()
133  << " with translation " << tran << " and rotation " << DDRotation();
134  }
135  zpos += zHalf;
136  }
137 }
138 
140  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : doWedges()";
141  int nx(0), ny(0), icopy(0), icopyt(0);
142  double xpos(0), ypos(0), zpos(0); // zposY(0);
143  int sz = int(quadMax_.size());
144 
145  DDTranslation tran;
146  DDName name1("SWED", idNameSpace);
147  DDName name2("SFBX", idNameSpace);
148  DDRotation rot1("rotations:RM1299");
149  DDRotation rot2("rotations:RM1298");
150  // Do Plane X
151  for (int I = 1; I <= sz; ++I) {
152  for (int J = int(quadMax_[I - 1]); J >= int(quadMin_[I - 1]); --J) {
153  //LogDebug("HCalGeom") <<"DDEcalPreshowerAlgoTB::I=" << I << " J=" << J;
154  nx += 1;
155  icopy += 1;
156  go = 0;
157  for (double m : micromodulesx)
158  if (m == icopy) {
159  go = 1;
160  icopyt += 1;
161  }
162  xpos = -1. * (J * waf_intra_col_sep + (int(J / 2)) * waf_inter_col_sep - waf_intra_col_sep / 2.);
163  ypos = (sz - int(I)) * waf_active + wedge_length / 2. + 0.05 * cm;
164  xpos = xpos + TotSFXshift;
165  ypos = ypos + TotSFYshift;
166  zpos = zlead1_ + wedge_offset;
167  // place the wedge
168  if (go == 1) {
169  tran = DDTranslation(xpos, ypos, zpos);
170  cpv.position(DDLogicalPart(name1), parent(), icopyt, tran, rot1);
171  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name1 << " copy = " << icopy << " ("
172  << icopyt << ") in Mother " << parent().name() << " translation " << tran << " rotation "
173  << rot1;
174  }
175  zpos = zlead1_ + zwedge_ceramic_diff;
176  ypos = ypos + ywedge_ceramic_diff;
177  if (go == 1) {
178  tran = DDTranslation(xpos, ypos, zpos);
179  cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
180  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name2 << " copy = " << icopy << " ("
181  << icopyt << ") in Mother " << parent().name() << " translation " << tran << " rotation "
182  << rot2;
183  }
184  }
185 
186  for (int J = int(quadMin_[I - 1]); J <= int(quadMax_[I - 1]); ++J) {
187  nx += 1;
188  icopy += 1;
189  go = 0;
190  for (double m : micromodulesx)
191  if (m == icopy) {
192  go = 1;
193  icopyt += 1;
194  }
195  xpos = 1. * (J * waf_intra_col_sep + (int(J / 2)) * waf_inter_col_sep - waf_intra_col_sep / 2.);
196  ypos = (sz - int(I)) * waf_active + wedge_length / 2. + 0.05 * cm;
197  xpos = xpos + TotSFXshift;
198  ypos = ypos + TotSFYshift;
199  zpos = zlead1_ + wedge_offset;
200  if (go == 1) {
201  tran = DDTranslation(xpos, ypos, zpos);
202  cpv.position(DDLogicalPart(name1), parent(), icopyt, tran, rot1);
203  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name1 << " copy = " << icopy << " ("
204  << icopyt << ") in Mother " << parent().name() << " translation " << tran << " rotation "
205  << rot1;
206  }
207  zpos = zlead1_ + zwedge_ceramic_diff;
208  ypos = ypos + ywedge_ceramic_diff;
209  if (go == 1) {
210  tran = DDTranslation(xpos, ypos, zpos);
211  cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
212  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name2 << " copy = " << icopy << " ("
213  << icopyt << ") in Mother " << parent().name() << " translation " << tran << " rotation "
214  << rot2;
215  }
216  }
217  }
218 
219  // mirror image system
220  rot1 = DDRotation("rotations:RM1303");
221  rot2 = DDRotation("rotations:RM1302");
222  for (int I = sz; I >= 1; --I) {
223  for (int J = int(quadMax_[I - 1]); J >= int(quadMin_[I - 1]); --J) {
224  nx += 1;
225  icopy += 1;
226  go = 0;
227  for (double m : micromodulesx)
228  if (m == icopy) {
229  go = 1;
230  icopyt += 1;
231  }
232  //LogDebug("HCalGeom") <<"DDEcalPreshowerAlgoTB::I=" << I << " J=" << J;
233  xpos = -1. * (J * waf_intra_col_sep + (int(J / 2)) * waf_inter_col_sep - waf_intra_col_sep / 2.);
234  ypos = -1. * (sz - int(I)) * waf_active - wedge_length / 2. - 0.05 * cm;
235  xpos = xpos + TotSFXshift;
236  ypos = ypos + TotSFYshift;
237  zpos = zlead1_ + wedge_offset;
238  if (go == 1) {
239  tran = DDTranslation(xpos, ypos, zpos);
240  cpv.position(DDLogicalPart(name1), parent(), icopyt, tran, rot1);
241  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name1 << " copy = " << icopy << " ("
242  << icopyt << ") in Mother " << parent().name() << " translation " << tran << " rotation "
243  << rot1;
244  }
245  zpos = zlead1_ + zwedge_ceramic_diff;
246  ypos = ypos - ywedge_ceramic_diff;
247  if (go == 1) {
248  tran = DDTranslation(xpos, ypos, zpos);
249  cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
250  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name2 << " copy = " << icopy << " ("
251  << icopyt << ") in Mother " << parent().name() << " translation " << tran << " rotation "
252  << rot2;
253  }
254  }
255 
256  for (int J = int(quadMin_[I - 1]); J <= int(quadMax_[I - 1]); ++J) {
257  nx += 1;
258  icopy += 1;
259  go = 0;
260  for (double m : micromodulesx)
261  if (m == icopy) {
262  go = 1;
263  icopyt += 1;
264  }
265  xpos = 1. * (J * waf_intra_col_sep + (int(J / 2)) * waf_inter_col_sep - waf_intra_col_sep / 2.);
266  ypos = -1. * (sz - int(I)) * waf_active - wedge_length / 2. - 0.05 * cm;
267  xpos = xpos + TotSFXshift;
268  ypos = ypos + TotSFYshift;
269  zpos = zlead1_ + wedge_offset;
270  if (go == 1) {
271  tran = DDTranslation(xpos, ypos, zpos);
272  cpv.position(DDLogicalPart(name1), parent(), icopyt, tran, rot1);
273  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name1 << " copy = " << icopy << " ("
274  << icopyt << ") in Mother " << parent().name() << " translation " << tran << " rotation "
275  << rot1;
276  }
277  zpos = zlead1_ + zwedge_ceramic_diff;
278  ypos = ypos - ywedge_ceramic_diff;
279  if (go == 1) {
280  tran = DDTranslation(xpos, ypos, zpos);
281  cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
282  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name2 << " copy = " << icopy << " ("
283  << icopyt << ") in Mother " << parent().name() << " translation " << tran << " rotation "
284  << rot2;
285  }
286  }
287  }
288 
289  // Do Plane Y
290  icopy = 0;
291  int nxt = micromodulesy.size();
292  name1 = DDName("SWED", idNameSpace);
293  name2 = DDName("SFBY", idNameSpace);
294  rot1 = DDRotation(DDName("RM1301B", idNameSpace));
295  rot2 = DDRotation(DDName("RM1300B", idNameSpace));
296  for (int I = 1; I <= sz; ++I) {
297  for (int J = int(quadMax_[I - 1]); J >= int(quadMin_[I - 1]); --J) {
298  ny += 1;
299  icopy += 1;
300  go = 0;
301  for (double m : micromodulesy)
302  if (m == icopy) {
303  go = 1;
304  icopyt += 1;
305  }
306  //LogDebug("HCalGeom") <<"DDEcalPreshowerAlgoTB::I=" << I << " J=" << J;
307  ypos = -1. * (J * waf_intra_col_sep + (int(J / 2)) * waf_inter_col_sep - waf_intra_col_sep / 2.);
308  xpos = (sz - int(I)) * waf_active + wedge_length / 2. + 0.05 * cm + ScndplaneXshift;
309  xpos = xpos + TotSFXshift;
310  ypos = ypos + TotSFYshift;
311  zpos = zlead2_ + wedge_offset;
312  if (go == 1) {
313  tran = DDTranslation(xpos, ypos, zpos);
314  cpv.position(DDLogicalPart(name1), parent(), icopy + nxt, tran, rot1);
315  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name1 << " copy = " << icopy << " ("
316  << icopyt + nxt << ") in Mother " << parent().name() << " translation " << tran
317  << " rotation " << rot1;
318  }
319  zpos = zlead2_ + zwedge_ceramic_diff;
320  xpos = xpos - ywedge_ceramic_diff;
321  if (go == 1) {
322  tran = DDTranslation(xpos, ypos, zpos);
323  cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
324  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name2 << " copy = " << icopy << " ("
325  << icopyt << ") in Mother " << parent().name() << " translation " << tran << " rotation "
326  << rot2;
327  }
328  }
329 
330  for (int J = int(quadMin_[I - 1]); J <= int(quadMax_[I - 1]); ++J) {
331  ny += 1;
332  icopy += 1;
333  go = 0;
334  for (double m : micromodulesy)
335  if (m == icopy) {
336  go = 1;
337  icopyt += 1;
338  }
339  //LogDebug("HCalGeom") <<"DDEcalPreshowerAlgoTB::I=" << I << " J=" << J;
340  ypos = 1. * (J * waf_intra_col_sep + (int(J / 2)) * waf_inter_col_sep - waf_intra_col_sep / 2.);
341  xpos = (sz - int(I)) * waf_active + wedge_length / 2. + 0.05 * cm + ScndplaneXshift;
342  xpos = xpos + TotSFXshift;
343  ypos = ypos + TotSFYshift;
344  zpos = zlead2_ + wedge_offset;
345  if (go == 1) {
346  tran = DDTranslation(xpos, ypos, zpos);
347  cpv.position(DDLogicalPart(name1), parent(), icopyt + nxt, tran, rot1);
348  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name1 << " copy = " << icopy << " ("
349  << icopyt + nxt << ") in Mother " << parent().name() << " translation " << tran
350  << " rotation " << rot1;
351  }
352  zpos = zlead2_ + zwedge_ceramic_diff;
353  xpos = xpos - ywedge_ceramic_diff;
354  if (go == 1) {
355  tran = DDTranslation(xpos, ypos, zpos);
356  cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
357  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name2 << " copy = " << icopy << " ("
358  << icopyt << ") in Mother " << parent().name() << " translation " << tran << " rotation "
359  << rot2;
360  }
361  }
362  }
363 
364  // mirror image system
365  rot1 = DDRotation(DDName("RM1305B", idNameSpace));
366  rot2 = DDRotation(DDName("RM1304B", idNameSpace));
367  for (int I = sz; I >= 1; --I) {
368  for (int J = int(quadMax_[I - 1]); J >= int(quadMin_[I - 1]); --J) {
369  ny += 1;
370  icopy += 1;
371  go = 0;
372  for (double m : micromodulesy)
373  if (m == icopy) {
374  go = 1;
375  icopyt += 1;
376  }
377  //LogDebug("HCalGeom") <<"DDEcalPreshowerAlgoTB::I=" << I << " J=" << J;
378  ypos = -1. * (J * waf_intra_col_sep + (int(J / 2)) * waf_inter_col_sep - waf_intra_col_sep / 2.);
379  xpos = -1. * (sz - int(I)) * waf_active - wedge_length / 2. - 0.05 * cm + ScndplaneXshift;
380  xpos = xpos + TotSFXshift;
381  ypos = ypos + TotSFYshift;
382  zpos = zlead2_ + wedge_offset;
383  if (go == 1) {
384  tran = DDTranslation(xpos, ypos, zpos);
385  cpv.position(DDLogicalPart(name1), parent(), icopyt + nxt, tran, rot1);
386  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name1 << " copy = " << icopy << " ("
387  << icopyt + nxt << ") in Mother " << parent().name() << " translation " << tran
388  << " rotation " << rot1;
389  }
390  zpos = zlead2_ + zwedge_ceramic_diff;
391  xpos = xpos + ywedge_ceramic_diff;
392  if (go == 1) {
393  tran = DDTranslation(xpos, ypos, zpos);
394  cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
395  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name2 << " copy = " << icopy << " ("
396  << icopyt << ") in Mother " << parent().name() << " translation " << tran << " rotation "
397  << rot2;
398  }
399  }
400 
401  for (int J = int(quadMin_[I - 1]); J <= int(quadMax_[I - 1]); ++J) {
402  ny += 1;
403  icopy += 1;
404  go = 0;
405  for (double m : micromodulesy)
406  if (m == icopy) {
407  go = 1;
408  icopyt += 1;
409  }
410  //LogDebug("HCalGeom") <<"DDEcalPreshowerAlgoTB::I=" << I << " J=" << J;
411  ypos = 1. * (J * waf_intra_col_sep + (int(J / 2)) * waf_inter_col_sep - waf_intra_col_sep / 2.);
412  xpos = -1. * (sz - int(I)) * waf_active - wedge_length / 2. - 0.05 * cm + ScndplaneXshift;
413  xpos = xpos + TotSFXshift;
414  ypos = ypos + TotSFYshift;
415  zpos = zlead2_ + wedge_offset;
416  if (go == 1) {
417  tran = DDTranslation(xpos, ypos, zpos);
418  cpv.position(DDLogicalPart(name1), parent(), icopyt + nxt, tran, rot1);
419  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name1 << " copy = " << icopy << " ("
420  << icopyt + nxt << ") in Mother " << parent().name() << " translation " << tran
421  << " rotation " << rot1;
422  }
423  zpos = zlead2_ + zwedge_ceramic_diff;
424  xpos = xpos + ywedge_ceramic_diff;
425  if (go == 1) {
426  tran = DDTranslation(xpos, ypos, zpos);
427  cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
428  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << name2 << " copy = " << icopy << " ("
429  << icopyt << ") in Mother " << parent().name() << " translation " << tran << " rotation "
430  << rot2;
431  }
432  }
433  }
434 }
435 
437  double xpos(0), ypos(0);
438  DDTranslation tran;
439  DDName child1 = DDName("SFSX", idNameSpace);
440  DDName child2 = DDName("SFSY", idNameSpace);
441  DDName mother1 = DDName("SFAX", idNameSpace);
442  DDName mother2 = DDName("SFAY", idNameSpace);
443  DDRotation rot;
444  for (size_t i = 0; i < 32; ++i) {
445  xpos = -waf_active / 2. + i * waf_active / 32. + waf_active / 64.;
446  tran = DDTranslation(xpos, 0., 0.);
447  cpv.position(DDLogicalPart(child1), mother1, i + 1, tran, rot);
448  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << child1 << "\ncopy number " << i + 1 << " in "
449  << mother1 << " translation " << tran << " rotation " << rot;
450 
451  ypos = -waf_active / 2. + i * waf_active / 32. + waf_active / 64.;
452  tran = DDTranslation(0., ypos, 0.);
453  cpv.position(DDLogicalPart(child2), mother2, i + 1, tran, rot);
454  LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << child2 << "\ncopy number " << i + 1 << " in "
455  << mother2 << " translation " << tran << " rotation " << rot;
456  }
457 }
void doSens(DDCompactView &pos)
void position(const DDLogicalPart &self, const DDLogicalPart &parent, const std::string &copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=nullptr)
std::vector< double > quadMax_
DDMaterial is used to define and access material information.
Definition: DDMaterial.h:45
std::vector< std::string > materials_
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:17
std::vector< double > micromodulesy
static std::string & ns()
Compact representation of the geometrical detector hierarchy.
Definition: DDCompactView.h:81
A DDSolid represents the shape of a part.
Definition: DDSolid.h:39
constexpr std::array< uint8_t, layerIndexSize > layer
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:57
std::vector< double > rminVec
std::string getMaterial(unsigned int i) const
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:93
const std::complex< double > I
Definition: I.h:8
std::vector< double > rmaxVec
static DDSolid box(const DDName &name, double xHalf, double yHalf, double zHalf)
Creates a box with side length 2*xHalf, 2*yHalf, 2*zHalf.
Definition: DDSolid.cc:547
void doLayers(DDCompactView &pos)
std::vector< double > thickLayers_
std::vector< double > quadMin_
void initialize(const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs) override
void doWedges(DDCompactView &pos)
std::vector< double > micromodulesx
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
void execute(DDCompactView &pos) override
#define LogDebug(id)