CMS 3D CMS Logo

Functions
DDTIDModuleAlgo.cc File Reference
#include "DD4hep/DetFactoryHelper.h"
#include "DataFormats/Math/interface/CMSUnits.h"
#include "DetectorDescription/DDCMS/interface/DDPlugins.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"

Go to the source code of this file.

Functions

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

Function Documentation

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

Definition at line 11 of file DDTIDModuleAlgo.cc.

References cms::DDNamespace::addSolidNS(), cms::DDNamespace::addVolumeNS(), writedatasetfile::args, angle_units::operators::convertRadToDeg(), funct::cos(), cms::DDAlgoArguments::dble(), PVValHelper::dx, PVValHelper::dy, PVValHelper::dz, mps_fire::i, cms::DDAlgoArguments::integer(), dqmdumpme::k, LogDebug, cms::DDNamespace::material(), Skims_PA_cff::name, cms::DDAlgoArguments::parentName(), makeMuonMisalignmentScenario::rot, cms::DDNamespace::rotation(), funct::sin(), cms::DDAlgoArguments::str(), AlCaHLTBitMon_QueryRunRegistry::string, cms::DDAlgoArguments::vecDble(), and cms::DDAlgoArguments::vecStr().

11  {
12  cms::DDNamespace ns(ctxt, e, true);
13  DDAlgoArguments args(ctxt, e);
14  string mother = args.parentName();
15  string genMat = args.str("GeneralMaterial"); //General material name
16  int detectorN = args.integer("DetectorNumber"); //Detector planes
17  double moduleThick = args.dble("ModuleThick"); //Module thickness
18  double detTilt = args.dble("DetTilt"); //Tilt of stereo detector
19  double fullHeight = args.dble("FullHeight"); //Height
20  double dlTop = args.dble("DlTop"); //Width at top of wafer
21  double dlBottom = args.dble("DlBottom"); //Width at bottom of wafer
22  double dlHybrid = args.dble("DlHybrid"); //Width at the hybrid end
23  bool doComponents = ::toupper(args.str("DoComponents")[0]) != 'N'; //Components to be made
24 
25  string boxFrameName = args.str("BoxFrameName"); //Top frame name
26  string boxFrameMat = args.str("BoxFrameMaterial"); // material
27  double boxFrameHeight = args.dble("BoxFrameHeight"); // height
28  double boxFrameThick = args.dble("BoxFrameThick"); // thickness
29  double boxFrameWidth = args.dble("BoxFrameWidth"); // extra width
30  double bottomFrameHeight = args.dble("BottomFrameHeight"); //Bottom of the frame
31  double bottomFrameOver = args.dble("BottomFrameOver"); // overlap
32  double topFrameHeight = args.dble("TopFrameHeight"); //Top of the frame
33  double topFrameOver = args.dble("TopFrameOver"); // overlap
34  vector<string> sideFrameName = args.vecStr("SideFrameName"); //Side frame name
35  string sideFrameMat = args.str("SideFrameMaterial"); // material
36  double sideFrameWidth = args.dble("SideFrameWidth"); // width
37  double sideFrameThick = args.dble("SideFrameThick"); // thickness
38  double sideFrameOver = args.dble("SideFrameOver"); // overlap (wrt wafer)
39  vector<string> holeFrameName = args.vecStr("HoleFrameName"); //Hole in the frame name
40  vector<string> holeFrameRot = args.vecStr("HoleFrameRotation"); // Rotation matrix
41 
42  vector<string> kaptonName = args.vecStr("KaptonName"); //Kapton circuit name
43  string kaptonMat = args.str("KaptonMaterial"); // material
44  double kaptonThick = args.dble("KaptonThick"); // thickness
45  double kaptonOver = args.dble("KaptonOver"); // overlap (wrt Wafer)
46  vector<string> holeKaptonName = args.vecStr("HoleKaptonName"); //Hole in the kapton circuit name
47  vector<string> holeKaptonRot = args.vecStr("HoleKaptonRotation"); // Rotation matrix
48 
49  vector<string> waferName = args.vecStr("WaferName"); //Wafer name
50  string waferMat = args.str("WaferMaterial"); // material
51  double sideWidthTop = args.dble("SideWidthTop"); // width on the side Top
52  double sideWidthBottom = args.dble("SideWidthBottom"); // Bottom
53  vector<string> activeName = args.vecStr("ActiveName"); //Sensitive name
54  string activeMat = args.str("ActiveMaterial"); // material
55  double activeHeight = args.dble("ActiveHeight"); // height
56  vector<double> waferThick =
57  args.vecDble("WaferThick"); // wafer thickness (active = wafer - backplane)
58  string activeRot = args.str("ActiveRotation"); // Rotation matrix
59  vector<double> backplaneThick = args.vecDble("BackPlaneThick"); // thickness
60  string hybridName = args.str("HybridName"); //Hybrid name
61  string hybridMat = args.str("HybridMaterial"); // material
62  double hybridHeight = args.dble("HybridHeight"); // height
63  double hybridWidth = args.dble("HybridWidth"); // width
64  double hybridThick = args.dble("HybridThick"); // thickness
65  vector<string> pitchName = args.vecStr("PitchName"); //Pitch adapter name
66  string pitchMat = args.str("PitchMaterial"); // material
67  double pitchHeight = args.dble("PitchHeight"); // height
68  double pitchThick = args.dble("PitchThick"); // thickness
69  double pitchStereoTol = args.dble("PitchStereoTolerance"); // tolerance in dimensions of the stereo
70  string coolName = args.str("CoolInsertName"); // Cool insert name
71  string coolMat = args.str("CoolInsertMaterial"); // material
72  double coolHeight = args.dble("CoolInsertHeight"); // height
73  double coolThick = args.dble("CoolInsertThick"); // thickness
74  double coolWidth = args.dble("CoolInsertWidth"); // width
75 
76  LogDebug("TIDGeom") << "Parent " << mother << " General Material " << genMat << " Detector Planes " << detectorN;
77 
78  LogDebug("TIDGeom") << "ModuleThick " << moduleThick << " Detector Tilt " << convertRadToDeg(detTilt) << " Height "
79  << fullHeight << " dl(Top) " << dlTop << " dl(Bottom) " << dlBottom << " dl(Hybrid) " << dlHybrid
80  << " doComponents " << doComponents;
81  LogDebug("TIDGeom") << "" << boxFrameName << " Material " << boxFrameMat << " Thickness " << boxFrameThick
82  << " width " << boxFrameWidth << " height " << boxFrameHeight << " Extra Height at Bottom "
83  << bottomFrameHeight << " Overlap " << bottomFrameOver;
84 
85  for (int i = 0; i < detectorN; i++)
86  LogDebug("TIDGeom") << sideFrameName[i] << " Material " << sideFrameMat << " Width " << sideFrameWidth
87  << " Thickness " << sideFrameThick << " Overlap " << sideFrameOver << " Hole "
88  << holeFrameName[i];
89 
90  for (int i = 0; i < detectorN; i++)
91  LogDebug("TIDGeom") << kaptonName[i] << " Material " << kaptonMat << " Thickness " << kaptonThick << " Overlap "
92  << kaptonOver << " Hole " << holeKaptonName[i];
93 
94  LogDebug("TIDGeom") << "Wafer Material " << waferMat << " Side Width Top " << sideWidthTop << " Side Width Bottom "
95  << sideWidthBottom;
96  for (int i = 0; i < detectorN; i++)
97  LogDebug("TIDGeom") << "\twaferName[" << i << "] = " << waferName[i];
98 
99  LogDebug("TIDGeom") << "Active Material " << activeMat << " Height " << activeHeight << " rotated by " << activeRot;
100  for (int i = 0; i < detectorN; i++)
101  LogDebug("TIDGeom") << " translated by (0," << -0.5 * backplaneThick[i] << ",0)\tactiveName[" << i
102  << "] = " << activeName[i] << " of thickness " << waferThick[i] - backplaneThick[i];
103 
104  LogDebug("TIDGeom") << "" << hybridName << " Material " << hybridMat << " Height " << hybridHeight << " Width "
105  << hybridWidth << " Thickness " << hybridThick;
106  LogDebug("TIDGeom") << "Pitch Adapter Material " << pitchMat << " Height " << pitchHeight << " Thickness "
107  << pitchThick;
108  for (int i = 0; i < detectorN; i++)
109  LogDebug("TIDGeom") << "\tpitchName[" << i << "] = " << pitchName[i];
110  LogDebug("TIDGeom") << "Cool Element Material " << coolMat << " Height " << coolHeight << " Thickness " << coolThick
111  << " Width " << coolWidth;
112 
113  string name = mother;
114  double sidfr = sideFrameWidth - sideFrameOver; // width of side frame on the sides of module
115  double botfr; // width of side frame at the the bottom of the modules
116  double topfr; // width of side frame at the the top of the modules
117  double kaptonHeight;
118  if (dlHybrid > dlTop) {
119  // ring 1, ring 2
120  topfr = topFrameHeight - pitchHeight - topFrameOver;
121  botfr = bottomFrameHeight - bottomFrameOver;
122  kaptonHeight = fullHeight + botfr;
123  } else {
124  // ring 3
125  topfr = topFrameHeight - topFrameOver;
126  botfr = bottomFrameHeight - bottomFrameOver - pitchHeight;
127  kaptonHeight = fullHeight + topfr;
128  }
129 
130  double sideFrameHeight = fullHeight + pitchHeight + botfr + topfr;
131  double kaptonWidth = sidfr + kaptonOver;
132 
133  double dxbot = 0.5 * dlBottom + sidfr;
134  double dxtop = 0.5 * dlTop + sidfr;
135  double dxtopenv, dxbotenv; // top/bot width of the module envelope trap
136 
137  // Envelope
138  if (dlHybrid > dlTop) {
139  // ring 1, ring 2
140  dxtopenv = dxbot + (dxtop - dxbot) * (fullHeight + pitchHeight + topfr + hybridHeight) / fullHeight;
141  dxbotenv = dxtop - (dxtop - dxbot) * (fullHeight + botfr) / fullHeight;
142  } else {
143  // ring 3
144  dxtopenv = dxbot + (dxtop - dxbot) * (fullHeight + topfr) / fullHeight;
145  dxbotenv = dxbot;
146  }
147  double bl1 = dxbotenv;
148  double bl2 = dxtopenv;
149  double h1 = 0.5 * moduleThick;
150  double dx, dy;
151  double dz = 0.5 * (boxFrameHeight + sideFrameHeight);
152 
153  Solid solid = ns.addSolidNS(name, Trap(dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0));
154  /* Volume module = */ ns.addVolumeNS(Volume(name, solid, ns.material(genMat)));
155  LogDebug("TIDGeom") << solid.name() << " Trap made of " << genMat << " of dimensions " << dz << ", 0, 0, " << h1
156  << ", " << bl1 << ", " << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 << ", 0";
157 
158  if (doComponents) {
159  //Box frame
160  name = boxFrameName;
161  dx = 0.5 * boxFrameWidth;
162  dy = 0.5 * boxFrameThick;
163  dz = 0.5 * boxFrameHeight;
164  solid = ns.addSolidNS(name, Box(dx, dy, dz));
165  LogDebug("TIDGeom") << solid.name() << " Box made of " << boxFrameMat << " of dimensions " << dx << ", " << dy
166  << ", " << dz;
167  /* Volume boxFrame = */ ns.addVolumeNS(Volume(name, solid, ns.material(boxFrameMat)));
168 
169  // Hybrid
170  name = hybridName;
171  dx = 0.5 * hybridWidth;
172  dy = 0.5 * hybridThick;
173  dz = 0.5 * hybridHeight;
174  solid = ns.addSolidNS(name, Box(dx, dy, dz));
175  LogDebug("TIDGeom") << solid.name() << " Box made of " << hybridMat << " of dimensions " << dx << ", " << dy << ", "
176  << dz;
177  /* Volume hybrid = */ ns.addVolumeNS(Volume(name, solid, ns.material(hybridMat)));
178 
179  // Cool Insert
180  name = coolName;
181  dx = 0.5 * coolWidth;
182  dy = 0.5 * coolThick;
183  dz = 0.5 * coolHeight;
184  solid = ns.addSolidNS(name, Box(dx, dy, dz));
185  LogDebug("TIDGeom") << solid.name() << " Box made of " << coolMat << " of dimensions " << dx << ", " << dy << ", "
186  << dz;
187  /* Volume cool = */ ns.addVolumeNS(Volume(name, solid, ns.material(coolMat)));
188 
189  // Loop over detectors to be placed
190  for (int k = 0; k < detectorN; k++) {
191  double bbl1, bbl2; // perhaps useless (bl1 enough)
192  // Frame Sides
193  name = sideFrameName[k];
194  if (dlHybrid > dlTop) {
195  // ring 1, ring 2
196  bbl1 = dxtop - (dxtop - dxbot) * (fullHeight + botfr) / fullHeight;
197  bbl2 = dxbot + (dxtop - dxbot) * (fullHeight + pitchHeight + topfr) / fullHeight;
198  } else {
199  // ring 3
200  bbl1 = dxtop - (dxtop - dxbot) * (fullHeight + pitchHeight + botfr) / fullHeight;
201  bbl2 = dxbot + (dxtop - dxbot) * (fullHeight + topfr) / fullHeight;
202  }
203  h1 = 0.5 * sideFrameThick;
204  dz = 0.5 * sideFrameHeight;
205  solid = ns.addSolidNS(name, Trap(dz, 0., 0., h1, bbl1, bbl1, 0., h1, bbl2, bbl2, 0.));
206  LogDebug("TIDGeom") << solid.name() << " Trap made of " << sideFrameMat << " of dimensions " << dz << ", 0, 0, "
207  << h1 << ", " << bbl1 << ", " << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", " << bbl2
208  << ", 0";
209  Volume sideFrame = ns.addVolumeNS(Volume(name, solid, ns.material(sideFrameMat)));
210 
211  std::string rotstr, rotns;
212  Rotation3D rot;
213 
214  // Hole in the frame below the wafer
215  name = holeFrameName[k];
216  double xpos, zpos;
217  dz = fullHeight - bottomFrameOver - topFrameOver;
218  bbl1 = dxbot - sideFrameWidth + bottomFrameOver * (dxtop - dxbot) / fullHeight;
219  bbl2 = dxtop - sideFrameWidth - topFrameOver * (dxtop - dxbot) / fullHeight;
220  if (dlHybrid > dlTop) {
221  // ring 1, ring 2
222  zpos = -(topFrameHeight + 0.5 * dz - 0.5 * sideFrameHeight);
223  } else {
224  // ring 3
225  zpos = bottomFrameHeight + 0.5 * dz - 0.5 * sideFrameHeight;
226  }
227  dz /= 2.;
228  solid = ns.addSolidNS(name, Trap(dz, 0, 0, h1, bbl1, bbl1, 0, h1, bbl2, bbl2, 0));
229  LogDebug("TIDGeom") << solid.name() << " Trap made of " << genMat << " of dimensions " << dz << ", 0, 0, " << h1
230  << ", " << bbl1 << ", " << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", " << bbl2 << ", 0";
231  Volume holeFrame = ns.addVolumeNS(Volume(name, solid, ns.material(genMat)));
232 
233  rot = ns.rotation(holeFrameRot[k]);
234  sideFrame.placeVolume(holeFrame, 1, Transform3D(rot, Position(0e0, 0e0, zpos))); // copyNr=1
235  LogDebug("TIDGeom") << holeFrame.name() << " number 1 positioned in " << sideFrame.name() << " at (0,0," << zpos
236  << ") with no rotation";
237 
238  // Kapton circuit
239  double kaptonExtraHeight = 0; // kapton extra height in the stereo
240  if (dlHybrid > dlTop) {
241  // ring 1, ring 2
242  bbl1 = dxtop - (dxtop - dxbot) * (fullHeight + botfr) / fullHeight;
243  if (k == 1) {
244  kaptonExtraHeight = dlTop * sin(detTilt) - fullHeight * (1 - cos(detTilt));
245  kaptonExtraHeight = 0.5 * fabs(kaptonExtraHeight);
246  bbl2 = dxbot + (dxtop - dxbot) * (fullHeight + kaptonExtraHeight) / fullHeight;
247  } else {
248  bbl2 = dxtop;
249  }
250  } else {
251  // ring 3
252  bbl2 = dxbot + (dxtop - dxbot) * (fullHeight + topfr) / fullHeight;
253  if (k == 1) {
254  kaptonExtraHeight = dlBottom * sin(detTilt) - fullHeight * (1 - cos(detTilt));
255  kaptonExtraHeight = 0.5 * fabs(kaptonExtraHeight);
256  bbl1 = dxtop - (dxtop - dxbot) * (fullHeight + kaptonExtraHeight) / fullHeight;
257  } else {
258  bbl1 = dxbot;
259  }
260  }
261  h1 = 0.5 * kaptonThick;
262  dz = 0.5 * (kaptonHeight + kaptonExtraHeight);
263 
264  // For the stereo create the uncut solid, the solid to be removed and then the subtraction solid
265  if (k == 1) {
266  // Uncut solid
267  Solid solidUncut =
268  ns.addSolidNS(kaptonName[k] + "Uncut", Trap(dz, 0., 0., h1, bbl1, bbl1, 0., h1, bbl2, bbl2, 0));
269 
270  // Piece to be cut
271  dz = (dlHybrid > dlTop) ? 0.5 * dlTop : 0.5 * dlBottom;
272  h1 = 0.5 * kaptonThick;
273  bbl1 = fabs(dz * sin(detTilt));
274  bbl2 = bbl1 * 0.000001;
275  double thet = atan((bbl1 - bbl2) / (2 * dz));
276  Solid solidCut =
277  ns.addSolidNS(kaptonName[k] + "Cut", Trap(dz, thet, 0., h1, bbl1, bbl1, 0., h1, bbl2, bbl2, 0));
278 
279  // Subtraction Solid
280  name = kaptonName[k];
281  rot = ns.rotation("tidmodpar:9PYX");
282  xpos = -0.5 * fullHeight * sin(detTilt);
283  zpos = 0.5 * kaptonHeight - bbl2;
284  solid =
285  ns.addSolidNS(name, SubtractionSolid(solidUncut, solidCut, Transform3D(rot, Position(xpos, 0.0, zpos))));
286  } else {
287  name = kaptonName[k];
288  solid = ns.addSolidNS(name, Trap(dz, 0., 0., h1, bbl1, bbl1, 0., h1, bbl2, bbl2, 0.));
289  }
290 
291  Volume kapton = ns.addVolumeNS(Volume(name, solid, ns.material(kaptonMat)));
292  LogDebug("TIDGeom") << solid.name() << " SUBTRACTION SOLID Trap made of " << kaptonMat << " of dimensions " << dz
293  << ", 0, 0, " << h1 << ", " << bbl1 << ", " << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", "
294  << bbl2 << ", 0";
295 
296  // Hole in the kapton below the wafer
297  name = holeKaptonName[k];
298  dz = fullHeight - kaptonOver;
299  xpos = 0;
300  if (dlHybrid > dlTop) {
301  // ring 1, ring 2
302  bbl1 = dxbot - kaptonWidth + kaptonOver * (dxtop - dxbot) / fullHeight;
303  bbl2 = dxtop - kaptonWidth;
304  zpos = 0.5 * (kaptonHeight - kaptonExtraHeight - dz);
305  if (k == 1) {
306  zpos -= 0.5 * kaptonOver * (1 - cos(detTilt));
307  xpos = -0.5 * kaptonOver * sin(detTilt);
308  }
309  } else {
310  // ring 3
311  bbl1 = dxbot - kaptonWidth;
312  bbl2 = dxtop - kaptonWidth - kaptonOver * (dxtop - dxbot) / fullHeight;
313  zpos = -0.5 * (kaptonHeight - kaptonExtraHeight - dz);
314  }
315  dz /= 2.;
316  solid = ns.addSolidNS(name, Trap(dz, 0., 0., h1, bbl1, bbl1, 0., h1, bbl2, bbl2, 0.));
317  LogDebug("TIDGeom") << solid.name() << " Trap made of " << genMat << " of dimensions " << dz << ", 0, 0, " << h1
318  << ", " << bbl1 << ", " << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", " << bbl2 << ", 0";
319  Volume holeKapton = ns.addVolumeNS(Volume(name, solid, ns.material(genMat)));
320 
321  rot = ns.rotation(holeKaptonRot[k]);
322  kapton.placeVolume(holeKapton, 1, Transform3D(rot, Position(xpos, 0.0, zpos)));
323  LogDebug("TIDGeom") << holeKapton.name() << " number 1 positioned in " << kapton.name() << " at (0,0," << zpos
324  << ") with no rotation";
325 
326  // Wafer
327  name = waferName[k];
328  if (k == 0 && dlHybrid < dlTop) {
329  bl1 = 0.5 * dlTop;
330  bl2 = 0.5 * dlBottom;
331  } else {
332  bl1 = 0.5 * dlBottom;
333  bl2 = 0.5 * dlTop;
334  }
335  h1 = 0.5 * waferThick[k];
336  dz = 0.5 * fullHeight;
337  solid = ns.addSolidNS(name, Trap(dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0));
338  LogDebug("TIDGeom") << solid.name() << " Trap made of " << waferMat << " of dimensions " << dz << ", 0, 0, " << h1
339  << ", " << bl1 << ", " << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 << ", 0";
340  Volume wafer = ns.addVolumeNS(Volume(name, solid, ns.material(waferMat)));
341 
342  // Active
343  name = activeName[k];
344  if (k == 0 && dlHybrid < dlTop) {
345  bl1 -= sideWidthTop;
346  bl2 -= sideWidthBottom;
347  } else {
348  bl1 -= sideWidthBottom;
349  bl2 -= sideWidthTop;
350  }
351  dz = 0.5 * (waferThick[k] - backplaneThick[k]); // inactive backplane
352  h1 = 0.5 * activeHeight;
353  solid = ns.addSolidNS(name, Trap(dz, 0, 0, h1, bl2, bl1, 0, h1, bl2, bl1, 0));
354  LogDebug("TIDGeom") << solid.name() << " Trap made of " << activeMat << " of dimensions " << dz << ", 0, 0, "
355  << h1 << ", " << bl2 << ", " << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl1 << ", 0";
356  Volume active = ns.addVolumeNS(Volume(name, solid, ns.material(activeMat)));
357  rot = ns.rotation(activeRot);
358  Position tran(0.0, -0.5 * backplaneThick[k], 0.0); // from the definition of the wafer local axes
359  wafer.placeVolume(active, 1, Transform3D(rot, tran)); // inactive backplane copyNr=1
360  LogDebug("TIDGeom") << "DDTIDModuleAlgo test: " << active.name() << " number 1 positioned in " << wafer.name()
361  << " at " << tran << " with " << rot;
362 
363  //Pitch Adapter
364  name = pitchName[k];
365  if (dlHybrid > dlTop) {
366  dz = 0.5 * dlTop;
367  } else {
368  dz = 0.5 * dlBottom;
369  }
370  if (k == 0) {
371  dx = dz;
372  dy = 0.5 * pitchThick;
373  dz = 0.5 * pitchHeight;
374  solid = ns.addSolidNS(name, Box(dx, dy, dz));
375  LogDebug("TIDGeom") << solid.name() << " Box made of " << pitchMat << " of dimensions"
376  << " " << dx << ", " << dy << ", " << dz;
377  } else {
378  h1 = 0.5 * pitchThick;
379  bl1 = 0.5 * pitchHeight + 0.5 * dz * sin(detTilt);
380  bl2 = 0.5 * pitchHeight - 0.5 * dz * sin(detTilt);
381 
382  dz -= 0.5 * pitchStereoTol;
383  bl1 -= pitchStereoTol;
384  bl2 -= pitchStereoTol;
385 
386  double thet = atan((bl1 - bl2) / (2. * dz));
387  solid = ns.addSolidNS(name, Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0));
388  LogDebug("TIDGeom") << solid.name() << " Trap made of " << pitchMat << " of "
389  << "dimensions " << dz << ", " << convertRadToDeg(thet) << ", 0, " << h1 << ", " << bl1
390  << ", " << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 << ", 0";
391  }
392  /* Volume pa = */ ns.addVolumeNS(Volume(name, solid, ns.material(pitchMat)));
393  }
394  }
395  LogDebug("TIDGeom") << "<<== End of DDTIDModuleAlgo construction ...";
396  return 1;
397 }
#define LogDebug(id)
constexpr NumType convertRadToDeg(NumType radians)
Definition: angle_units.h:21
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
dd4hep::Volume Volume
DD4HEP_OPEN_PLUGIN ( dd4hep  ,
ddcms_det_element_DDCMS_track_DDTIDModuleAlgo   
)

Definition at line 400 of file DDTIDModuleAlgo.cc.