CMS 3D CMS Logo

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