CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DDEcalBarrelAlgo.cc
Go to the documentation of this file.
1 
3 // File: DDEcalBarrelAlgo.cc
4 // Description: Geometry factory class for Ecal Barrel
6 
7 #include <cmath>
8 #include <algorithm>
9 
15 #include "CLHEP/Units/GlobalSystemOfUnits.h"
16 
17 #include <CLHEP/Geometry/Point3D.h>
18 #include <CLHEP/Geometry/Vector3D.h>
19 #include <CLHEP/Geometry/Transform3D.h>
20 #include <map>
21 #include <string>
22 #include <vector>
30 #include "CLHEP/Geometry/Transform3D.h"
31 
32 class DDEcalBarrelAlgo : public DDAlgorithm {
33 public:
35  typedef HepGeom::Point3D<double> Pt3D;
36  typedef HepGeom::Transform3D Tf3D;
37  typedef HepGeom::ReflectZ3D RfZ3D;
38  typedef HepGeom::Translate3D Tl3D;
39  typedef HepGeom::Rotate3D Ro3D;
40  typedef HepGeom::RotateZ3D RoZ3D;
41  typedef HepGeom::RotateY3D RoY3D;
42  typedef HepGeom::RotateX3D RoX3D;
43 
44  typedef CLHEP::Hep3Vector Vec3;
45  typedef CLHEP::HepRotation Rota;
46 
47  //Constructor and Destructor
49  ~DDEcalBarrelAlgo() override;
50 
51  void initialize(const DDNumericArguments& nArgs,
52  const DDVectorArguments& vArgs,
53  const DDMapArguments& mArgs,
54  const DDStringArguments& sArgs,
55  const DDStringVectorArguments& vsArgs) override;
56  void execute(DDCompactView& cpv) override;
57 
58  DDMaterial ddmat(const std::string& s) const;
59  DDName ddname(const std::string& s) const;
60  DDRotation myrot(const std::string& s, const CLHEP::HepRotation& r) const;
61  DDSolid mytrap(const std::string& s, const Trap& t) const;
62 
63  const std::string& idNameSpace() const { return m_idNameSpace; }
64 
65  // barrel parent volume
66  DDName barName() const { return ddname(m_BarName); }
67  DDMaterial barMat() const { return ddmat(m_BarMat); }
68  const std::vector<double>& vecBarZPts() const { return m_vecBarZPts; }
69  const std::vector<double>& vecBarRMin() const { return m_vecBarRMin; }
70  const std::vector<double>& vecBarRMax() const { return m_vecBarRMax; }
71  const std::vector<double>& vecBarTran() const { return m_vecBarTran; }
72  const std::vector<double>& vecBarRota() const { return m_vecBarRota; }
73  const std::vector<double>& vecBarRota2() const { return m_vecBarRota2; }
74  const std::vector<double>& vecBarRota3() const { return m_vecBarRota3; }
75  double barPhiLo() const { return m_BarPhiLo; }
76  double barPhiHi() const { return m_BarPhiHi; }
77  double barHere() const { return m_BarHere; }
78 
79  DDName spmName() const { return ddname(m_SpmName); }
80  DDMaterial spmMat() const { return ddmat(m_SpmMat); }
81  const std::vector<double>& vecSpmZPts() const { return m_vecSpmZPts; }
82  const std::vector<double>& vecSpmRMin() const { return m_vecSpmRMin; }
83  const std::vector<double>& vecSpmRMax() const { return m_vecSpmRMax; }
84  const std::vector<double>& vecSpmTran() const { return m_vecSpmTran; }
85  const std::vector<double>& vecSpmRota() const { return m_vecSpmRota; }
86  const std::vector<double>& vecSpmBTran() const { return m_vecSpmBTran; }
87  const std::vector<double>& vecSpmBRota() const { return m_vecSpmBRota; }
88  unsigned int spmNPerHalf() const { return m_SpmNPerHalf; }
89  double spmLowPhi() const { return m_SpmLowPhi; }
90  double spmDelPhi() const { return m_SpmDelPhi; }
91  double spmPhiOff() const { return m_SpmPhiOff; }
92  const std::vector<double>& vecSpmHere() const { return m_vecSpmHere; }
93  DDName spmCutName() const { return ddname(m_SpmCutName); }
94  double spmCutThick() const { return m_SpmCutThick; }
95  int spmCutShow() const { return m_SpmCutShow; }
96  double spmCutRM() const { return m_SpmCutRM; }
97  double spmCutRP() const { return m_SpmCutRP; }
98  const std::vector<double>& vecSpmCutTM() const { return m_vecSpmCutTM; }
99  const std::vector<double>& vecSpmCutTP() const { return m_vecSpmCutTP; }
100  double spmExpThick() const { return m_SpmExpThick; }
101  double spmExpWide() const { return m_SpmExpWide; }
102  double spmExpYOff() const { return m_SpmExpYOff; }
103  DDName spmSideName() const { return ddname(m_SpmSideName); }
105  double spmSideHigh() const { return m_SpmSideHigh; }
106  double spmSideThick() const { return m_SpmSideThick; }
107  double spmSideYOffM() const { return m_SpmSideYOffM; }
108  double spmSideYOffP() const { return m_SpmSideYOffP; }
109 
110  double nomCryDimAF() const { return m_NomCryDimAF; }
111  double nomCryDimLZ() const { return m_NomCryDimLZ; }
112  const std::vector<double>& vecNomCryDimBF() const { return m_vecNomCryDimBF; }
113  const std::vector<double>& vecNomCryDimCF() const { return m_vecNomCryDimCF; }
114  const std::vector<double>& vecNomCryDimAR() const { return m_vecNomCryDimAR; }
115  const std::vector<double>& vecNomCryDimBR() const { return m_vecNomCryDimBR; }
116  const std::vector<double>& vecNomCryDimCR() const { return m_vecNomCryDimCR; }
117 
118  double underAF() const { return m_UnderAF; }
119  double underLZ() const { return m_UnderLZ; }
120  double underBF() const { return m_UnderBF; }
121  double underCF() const { return m_UnderCF; }
122  double underAR() const { return m_UnderAR; }
123  double underBR() const { return m_UnderBR; }
124  double underCR() const { return m_UnderCR; }
125 
126  double wallThAlv() const { return m_WallThAlv; }
127  double wrapThAlv() const { return m_WrapThAlv; }
128  double clrThAlv() const { return m_ClrThAlv; }
129  const std::vector<double>& vecGapAlvEta() const { return m_vecGapAlvEta; }
130 
131  double wallFrAlv() const { return m_WallFrAlv; }
132  double wrapFrAlv() const { return m_WrapFrAlv; }
133  double clrFrAlv() const { return m_ClrFrAlv; }
134 
135  double wallReAlv() const { return m_WallReAlv; }
136  double wrapReAlv() const { return m_WrapReAlv; }
137  double clrReAlv() const { return m_ClrReAlv; }
138 
139  unsigned int nCryTypes() const { return m_NCryTypes; }
140  unsigned int nCryPerAlvEta() const { return m_NCryPerAlvEta; }
141 
142  const std::string& cryName() const { return m_CryName; }
143  const std::string& clrName() const { return m_ClrName; }
144  const std::string& wrapName() const { return m_WrapName; }
145  const std::string& wallName() const { return m_WallName; }
146 
147  DDMaterial cryMat() const { return ddmat(m_CryMat); }
148  DDMaterial clrMat() const { return ddmat(m_ClrMat); }
149  DDMaterial wrapMat() const { return ddmat(m_WrapMat); }
150  DDMaterial wallMat() const { return ddmat(m_WallMat); }
151 
152  DDName apdName() const { return ddname(m_APDName); }
153  double apdHere() const { return m_APDHere; }
154  DDMaterial apdMat() const { return ddmat(m_APDMat); }
155  double apdSide() const { return m_APDSide; }
156  double apdThick() const { return m_APDThick; }
157  double apdZ() const { return m_APDZ; }
158  double apdX1() const { return m_APDX1; }
159  double apdX2() const { return m_APDX2; }
160 
161  double webHere() const { return m_WebHere; }
162  const std::string& webPlName() const { return m_WebPlName; }
163  const std::string& webClrName() const { return m_WebClrName; }
164  DDMaterial webPlMat() const { return ddmat(m_WebPlMat); }
165  DDMaterial webClrMat() const { return ddmat(m_WebClrMat); }
166  const std::vector<double>& vecWebPlTh() const { return m_vecWebPlTh; }
167  const std::vector<double>& vecWebClrTh() const { return m_vecWebClrTh; }
168  const std::vector<double>& vecWebLength() const { return m_vecWebLength; }
169 
170  double ilyHere() const { return m_IlyHere; }
171  const std::string& ilyName() const { return m_IlyName; }
172  double ilyPhiLow() const { return m_IlyPhiLow; }
173  double ilyDelPhi() const { return m_IlyDelPhi; }
174  const std::vector<std::string>& vecIlyMat() const { return m_vecIlyMat; }
175  const std::vector<double>& vecIlyThick() const { return m_vecIlyThick; }
176 
177  const std::string& ilyPipeName() const { return m_IlyPipeName; }
178  double ilyPipeHere() const { return m_IlyPipeHere; }
180  double ilyPipeOD() const { return m_IlyPipeOD; }
181  double ilyPipeID() const { return m_IlyPipeID; }
182  const std::vector<double>& vecIlyPipeLength() const { return m_vecIlyPipeLength; }
183  const std::vector<double>& vecIlyPipeType() const { return m_vecIlyPipeType; }
184  const std::vector<double>& vecIlyPipePhi() const { return m_vecIlyPipePhi; }
185  const std::vector<double>& vecIlyPipeZ() const { return m_vecIlyPipeZ; }
186 
187  DDName ilyPTMName() const { return ddname(m_IlyPTMName); }
188  double ilyPTMHere() const { return m_IlyPTMHere; }
189  DDMaterial ilyPTMMat() const { return ddmat(m_IlyPTMMat); }
190  double ilyPTMWidth() const { return m_IlyPTMWidth; }
191  double ilyPTMLength() const { return m_IlyPTMLength; }
192  double ilyPTMHeight() const { return m_IlyPTMHeight; }
193  const std::vector<double>& vecIlyPTMZ() const { return m_vecIlyPTMZ; }
194  const std::vector<double>& vecIlyPTMPhi() const { return m_vecIlyPTMPhi; }
195 
197  double ilyFanOutHere() const { return m_IlyFanOutHere; }
199  double ilyFanOutWidth() const { return m_IlyFanOutWidth; }
200  double ilyFanOutLength() const { return m_IlyFanOutLength; }
201  double ilyFanOutHeight() const { return m_IlyFanOutHeight; }
202  const std::vector<double>& vecIlyFanOutZ() const { return m_vecIlyFanOutZ; }
203  const std::vector<double>& vecIlyFanOutPhi() const { return m_vecIlyFanOutPhi; }
204  DDName ilyDiffName() const { return ddname(m_IlyDiffName); }
206  double ilyDiffOff() const { return m_IlyDiffOff; }
207  double ilyDiffLength() const { return m_IlyDiffLength; }
208  DDName ilyBndlName() const { return ddname(m_IlyBndlName); }
210  double ilyBndlOff() const { return m_IlyBndlOff; }
211  double ilyBndlLength() const { return m_IlyBndlLength; }
212  DDName ilyFEMName() const { return ddname(m_IlyFEMName); }
213  DDMaterial ilyFEMMat() const { return ddmat(m_IlyFEMMat); }
214  double ilyFEMWidth() const { return m_IlyFEMWidth; }
215  double ilyFEMLength() const { return m_IlyFEMLength; }
216  double ilyFEMHeight() const { return m_IlyFEMHeight; }
217  const std::vector<double>& vecIlyFEMZ() const { return m_vecIlyFEMZ; }
218  const std::vector<double>& vecIlyFEMPhi() const { return m_vecIlyFEMPhi; }
219 
220  DDName hawRName() const { return ddname(m_HawRName); }
221  DDName fawName() const { return ddname(m_FawName); }
222  double fawHere() const { return m_FawHere; }
223  double hawRHBIG() const { return m_HawRHBIG; }
224  double hawRhsml() const { return m_HawRhsml; }
225  double hawRCutY() const { return m_HawRCutY; }
226  double hawRCutZ() const { return m_HawRCutZ; }
227  double hawRCutDelY() const { return m_HawRCutDelY; }
228  double hawYOffCry() const { return m_HawYOffCry; }
229 
230  unsigned int nFawPerSupm() const { return m_NFawPerSupm; }
231  double fawPhiOff() const { return m_FawPhiOff; }
232  double fawDelPhi() const { return m_FawDelPhi; }
233  double fawPhiRot() const { return m_FawPhiRot; }
234  double fawRadOff() const { return m_FawRadOff; }
235 
236  double gridHere() const { return m_GridHere; }
237  DDName gridName() const { return ddname(m_GridName); }
238  DDMaterial gridMat() const { return ddmat(m_GridMat); }
239  double gridThick() const { return m_GridThick; }
240 
241  double backHere() const { return m_BackHere; }
242  double backXOff() const { return m_BackXOff; }
243  double backYOff() const { return m_BackYOff; }
245  double backSideHere() const { return m_BackSideHere; }
246  double backSideLength() const { return m_BackSideLength; }
247  double backSideHeight() const { return m_BackSideHeight; }
248  double backSideWidth() const { return m_BackSideWidth; }
249  double backSideYOff1() const { return m_BackSideYOff1; }
250  double backSideYOff2() const { return m_BackSideYOff2; }
251  double backSideAngle() const { return m_BackSideAngle; }
254  double backPlateHere() const { return m_BackPlateHere; }
255  double backPlateLength() const { return m_BackPlateLength; }
256  double backPlateThick() const { return m_BackPlateThick; }
257  double backPlateWidth() const { return m_BackPlateWidth; }
260  double backPlate2Thick() const { return m_BackPlate2Thick; }
262  const std::string& grilleName() const { return m_GrilleName; }
263  double grilleThick() const { return m_GrilleThick; }
264  double grilleHere() const { return m_GrilleHere; }
265  double grilleWidth() const { return m_GrilleWidth; }
266  double grilleZSpace() const { return m_GrilleZSpace; }
267  DDMaterial grilleMat() const { return ddmat(m_GrilleMat); }
268  const std::vector<double>& vecGrilleHeight() const { return m_vecGrilleHeight; }
269  const std::vector<double>& vecGrilleZOff() const { return m_vecGrilleZOff; }
270 
273  double grEdgeSlotHere() const { return m_GrEdgeSlotHere; }
274  double grEdgeSlotHeight() const { return m_GrEdgeSlotHeight; }
275  double grEdgeSlotWidth() const { return m_GrEdgeSlotWidth; }
276  const std::string& grMidSlotName() const { return m_GrMidSlotName; }
278  double grMidSlotHere() const { return m_GrMidSlotHere; }
279  double grMidSlotWidth() const { return m_GrMidSlotWidth; }
280  double grMidSlotXOff() const { return m_GrMidSlotXOff; }
281  const std::vector<double>& vecGrMidSlotHeight() const { return m_vecGrMidSlotHeight; }
282 
283  double backPipeHere() const { return m_BackPipeHere; }
284  const std::string& backPipeName() const { return m_BackPipeName; }
285  const std::vector<double>& vecBackPipeDiam() const { return m_vecBackPipeDiam; }
286  const std::vector<double>& vecBackPipeThick() const { return m_vecBackPipeThick; }
289  double backMiscHere() const { return m_BackMiscHere; }
290  const std::vector<double>& vecBackMiscThick() const { return m_vecBackMiscThick; }
291  const std::vector<std::string>& vecBackMiscName() const { return m_vecBackMiscName; }
292  const std::vector<std::string>& vecBackMiscMat() const { return m_vecBackMiscMat; }
293  double patchPanelHere() const { return m_PatchPanelHere; }
294  const std::vector<double>& vecPatchPanelThick() const { return m_vecPatchPanelThick; }
295  const std::vector<std::string>& vecPatchPanelNames() const { return m_vecPatchPanelNames; }
296  const std::vector<std::string>& vecPatchPanelMat() const { return m_vecPatchPanelMat; }
298 
299  const std::vector<std::string>& vecBackCoolName() const { return m_vecBackCoolName; }
300  double backCoolHere() const { return m_BackCoolHere; }
301  double backCoolBarWidth() const { return m_BackCoolBarWidth; }
302  double backCoolBarHeight() const { return m_BackCoolBarHeight; }
304  double backCoolBarHere() const { return m_BackCoolBarHere; }
306  double backCoolBarThick() const { return m_BackCoolBarThick; }
309  double backCoolBarSSThick() const { return m_BackCoolBarSSThick; }
312  double backCoolBarWaThick() const { return m_BackCoolBarWaThick; }
314  double backCoolVFEHere() const { return m_BackCoolVFEHere; }
317  DDName backVFEName() const { return ddname(m_BackVFEName); }
319  const std::vector<double>& vecBackVFELyrThick() const { return m_vecBackVFELyrThick; }
320  const std::vector<std::string>& vecBackVFELyrName() const { return m_vecBackVFELyrName; }
321  const std::vector<std::string>& vecBackVFELyrMat() const { return m_vecBackVFELyrMat; }
322  const std::vector<double>& vecBackCoolNSec() const { return m_vecBackCoolNSec; }
323  const std::vector<double>& vecBackCoolSecSep() const { return m_vecBackCoolSecSep; }
324  const std::vector<double>& vecBackCoolNPerSec() const { return m_vecBackCoolNPerSec; }
325  double backCBStdSep() const { return m_BackCBStdSep; }
326 
327  double backCoolTankHere() const { return m_BackCoolTankHere; }
329  double backCoolTankWidth() const { return m_BackCoolTankWidth; }
330  double backCoolTankThick() const { return m_BackCoolTankThick; }
333  double backCoolTankWaWidth() const { return m_BackCoolTankWaWidth; }
335  const std::string& backBracketName() const { return m_BackBracketName; }
336  double backBracketHeight() const { return m_BackBracketHeight; }
338 
339  double dryAirTubeHere() const { return m_DryAirTubeHere; }
340  const std::string& dryAirTubeName() const { return m_DryAirTubeName; }
341  double mBCoolTubeNum() const { return m_MBCoolTubeNum; }
342  double dryAirTubeInnDiam() const { return m_DryAirTubeInnDiam; }
343  double dryAirTubeOutDiam() const { return m_DryAirTubeOutDiam; }
345  double mBCoolTubeHere() const { return m_MBCoolTubeHere; }
346  const std::string& mBCoolTubeName() const { return m_MBCoolTubeName; }
347  double mBCoolTubeInnDiam() const { return m_MBCoolTubeInnDiam; }
348  double mBCoolTubeOutDiam() const { return m_MBCoolTubeOutDiam; }
350  double mBManifHere() const { return m_MBManifHere; }
351  DDName mBManifName() const { return ddname(m_MBManifName); }
352  double mBManifInnDiam() const { return m_MBManifInnDiam; }
353  double mBManifOutDiam() const { return m_MBManifOutDiam; }
355  double mBLyrHere() const { return m_MBLyrHere; }
356  const std::vector<double>& vecMBLyrThick() const { return m_vecMBLyrThick; }
357  const std::vector<std::string>& vecMBLyrName() const { return m_vecMBLyrName; }
358  const std::vector<std::string>& vecMBLyrMat() const { return m_vecMBLyrMat; }
359 
360  //----------
361 
362  double pincerRodHere() const { return m_PincerRodHere; }
365  std::vector<double> vecPincerRodAzimuth() const { return m_vecPincerRodAzimuth; }
368  double pincerEnvWidth() const { return m_PincerEnvWidth; }
369  double pincerEnvHeight() const { return m_PincerEnvHeight; }
370  double pincerEnvLength() const { return m_PincerEnvLength; }
371  std::vector<double> vecPincerEnvZOff() const { return m_vecPincerEnvZOff; }
372 
375  double pincerBlkLength() const { return m_PincerBlkLength; }
376 
378  double pincerShimHeight() const { return m_PincerShimHeight; }
381  double pincerShim1Width() const { return m_PincerShim1Width; }
382  double pincerShim2Width() const { return m_PincerShim2Width; }
383 
386  double pincerCutWidth() const { return m_PincerCutWidth; }
387  double pincerCutHeight() const { return m_PincerCutHeight; }
388 
389 protected:
390 private:
391  void web(unsigned int iWeb,
392  double bWeb,
393  double BWeb,
394  double LWeb,
395  double theta,
396  const Pt3D& corner,
397  const DDLogicalPart& logPar,
398  double& zee,
399  double side,
400  double front,
401  double delta,
402  DDCompactView& cpv);
403 
404  std::string m_idNameSpace; //Namespace of this and ALL sub-parts
405 
406  // Barrel volume
407  std::string m_BarName; // Barrel volume name
408  std::string m_BarMat; // Barrel material name
409  std::vector<double> m_vecBarZPts; // Barrel list of z pts
410  std::vector<double> m_vecBarRMin; // Barrel list of rMin pts
411  std::vector<double> m_vecBarRMax; // Barrel list of rMax pts
412  std::vector<double> m_vecBarTran; // Barrel translation
413  std::vector<double> m_vecBarRota; // Barrel rotation
414  std::vector<double> m_vecBarRota2; // 2nd Barrel rotation
415  std::vector<double> m_vecBarRota3; // 2nd Barrel rotation
416  double m_BarPhiLo; // Barrel phi lo
417  double m_BarPhiHi; // Barrel phi hi
418  double m_BarHere; // Barrel presence flag
419 
420  // Supermodule volume
421  std::string m_SpmName; // Supermodule volume name
422  std::string m_SpmMat; // Supermodule material name
423  std::vector<double> m_vecSpmZPts; // Supermodule list of z pts
424  std::vector<double> m_vecSpmRMin; // Supermodule list of rMin pts
425  std::vector<double> m_vecSpmRMax; // Supermodule list of rMax pts
426  std::vector<double> m_vecSpmTran; // Supermodule translation
427  std::vector<double> m_vecSpmRota; // Supermodule rotation
428  std::vector<double> m_vecSpmBTran; // Base Supermodule translation
429  std::vector<double> m_vecSpmBRota; // Base Supermodule rotation
430  unsigned int m_SpmNPerHalf; // # Supermodules per half detector
431  double m_SpmLowPhi; // Low phi value of base supermodule
432  double m_SpmDelPhi; // Delta phi value of base supermodule
433  double m_SpmPhiOff; // Phi offset value supermodule
434  std::vector<double> m_vecSpmHere; // Bit saying if a supermodule is present or not
435  std::string m_SpmCutName; // Name of cut box
436  double m_SpmCutThick; // Box thickness
437  int m_SpmCutShow; // Non-zero means show the box on display (testing only)
438  std::vector<double> m_vecSpmCutTM; // Translation for minus phi cut box
439  std::vector<double> m_vecSpmCutTP; // Translation for plus phi cut box
440  double m_SpmCutRM; // Rotation for minus phi cut box
441  double m_SpmCutRP; // Rotation for plus phi cut box
442  double m_SpmExpThick; // Thickness (x) of supermodule expansion box
443  double m_SpmExpWide; // Width (y) of supermodule expansion box
444  double m_SpmExpYOff; // Offset (y) of supermodule expansion box
445  std::string m_SpmSideName; // Supermodule Side Plate volume name
446  std::string m_SpmSideMat; // Supermodule Side Plate material name
447  double m_SpmSideHigh; // Side plate height
448  double m_SpmSideThick; // Side plate thickness
449  double m_SpmSideYOffM; // Side plate Y offset on minus phi side
450  double m_SpmSideYOffP; // Side plate Y offset on plus phi side
451 
452  double m_NomCryDimAF; // Nominal crystal AF
453  double m_NomCryDimLZ; // Nominal crystal LZ
454  std::vector<double> m_vecNomCryDimBF; // Nominal crystal BF
455  std::vector<double> m_vecNomCryDimCF; // Nominal crystal CF
456  std::vector<double> m_vecNomCryDimAR; // Nominal crystal AR
457  std::vector<double> m_vecNomCryDimBR; // Nominal crystal BR
458  std::vector<double> m_vecNomCryDimCR; // Nominal crystal CR
459 
460  double m_UnderAF; // undershoot of AF
461  double m_UnderLZ; // undershoot of LZ
462  double m_UnderBF; // undershoot of BF
463  double m_UnderCF; // undershoot of CF
464  double m_UnderAR; // undershoot of AR
465  double m_UnderBR; // undershoot of BR
466  double m_UnderCR; // undershoot of CR
467 
468  double m_WallThAlv; // alveoli wall thickness
469  double m_WrapThAlv; // wrapping thickness
470  double m_ClrThAlv; // clearance thickness (nominal)
471  std::vector<double> m_vecGapAlvEta; // Extra clearance after each alveoli perp to crystal axis
472 
473  double m_WallFrAlv; // alveoli wall frontage
474  double m_WrapFrAlv; // wrapping frontage
475  double m_ClrFrAlv; // clearance frontage (nominal)
476 
477  double m_WallReAlv; // alveoli wall rearage
478  double m_WrapReAlv; // wrapping rearage
479  double m_ClrReAlv; // clearance rearage (nominal)
480 
481  unsigned int m_NCryTypes; // number of crystal shapes
482  unsigned int m_NCryPerAlvEta; // number of crystals in eta per alveolus
483 
484  std::string m_CryName; // string name of crystal volume
485  std::string m_ClrName; // string name of clearance volume
486  std::string m_WrapName; // string name of wrap volume
487  std::string m_WallName; // string name of wall volume
488 
489  std::string m_CryMat; // string name of crystal material
490  std::string m_ClrMat; // string name of clearance material
491  std::string m_WrapMat; // string name of wrap material
492  std::string m_WallMat; // string name of wall material
493 
495  double m_APDHere; //
497  double m_APDSide; //
498  double m_APDThick; //
499  double m_APDZ; //
500  double m_APDX1; //
501  double m_APDX2; //
502 
503  double m_WebHere; // here flag
504  std::string m_WebPlName; // string name of web plate volume
505  std::string m_WebClrName; // string name of web clearance volume
506  std::string m_WebPlMat; // string name of web material
507  std::string m_WebClrMat; // string name of web clearance material
508  std::vector<double> m_vecWebPlTh; // Thickness of web plates
509  std::vector<double> m_vecWebClrTh; // Thickness of total web clearance
510  std::vector<double> m_vecWebLength; // Length of web plate
511 
512  double m_IlyHere; // here flag
513  std::string m_IlyName; // string name of inner layer volume
514  double m_IlyPhiLow; // low phi of volumes
515  double m_IlyDelPhi; // delta phi of ily
516  std::vector<std::string> m_vecIlyMat; // materials of inner layer volumes
517  std::vector<double> m_vecIlyThick; // Thicknesses of inner layer volumes
518 
519  std::string m_IlyPipeName; // Cooling pipes
520  double m_IlyPipeHere; //
522  double m_IlyPipeOD; //
523  double m_IlyPipeID; //
524  std::vector<double> m_vecIlyPipeLength; //
525  std::vector<double> m_vecIlyPipeType; //
526  std::vector<double> m_vecIlyPipePhi; //
527  std::vector<double> m_vecIlyPipeZ; //
528 
530  double m_IlyPTMHere; //
532  double m_IlyPTMWidth; //
533  double m_IlyPTMLength; //
534  double m_IlyPTMHeight; //
535  std::vector<double> m_vecIlyPTMZ; //
536  std::vector<double> m_vecIlyPTMPhi; //
537 
539  double m_IlyFanOutHere; //
541  double m_IlyFanOutWidth; //
542  double m_IlyFanOutLength; //
543  double m_IlyFanOutHeight; //
544  std::vector<double> m_vecIlyFanOutZ; //
545  std::vector<double> m_vecIlyFanOutPhi; //
548  double m_IlyDiffOff; //
549  double m_IlyDiffLength; //
550  std::string m_IlyBndlName; // Fiber bundle
552  double m_IlyBndlOff; //
553  double m_IlyBndlLength; //
556  double m_IlyFEMWidth; //
557  double m_IlyFEMLength; //
558  double m_IlyFEMHeight; //
559  std::vector<double> m_vecIlyFEMZ; //
560  std::vector<double> m_vecIlyFEMPhi; //
561 
562  std::string m_HawRName; // string name of half-alveolar wedge
563  std::string m_FawName; // string name of full-alveolar wedge
564  double m_FawHere; // here flag
565  double m_HawRHBIG; // height at big end of half alveolar wedge
566  double m_HawRhsml; // height at small end of half alveolar wedge
567  double m_HawRCutY; // x dim of hawR cut box
568  double m_HawRCutZ; // y dim of hawR cut box
569  double m_HawRCutDelY; // y offset of hawR cut box from top of HAW
570  double m_HawYOffCry; // Y offset of crystal wrt HAW at front
571  unsigned int m_NFawPerSupm; // Number of Full Alv. Wedges per supermodule
572  double m_FawPhiOff; // Phi offset for FAW placement
573  double m_FawDelPhi; // Phi delta for FAW placement
574  double m_FawPhiRot; // Phi rotation of FAW about own axis prior to placement
575  double m_FawRadOff; // Radial offset for FAW placement
576 
577  double m_GridHere; // here flag
578  std::string m_GridName; // Grid name
579  std::string m_GridMat; // Grid material
580  double m_GridThick; // Grid Thickness
581 
582  double m_BackXOff; //
583  double m_BackYOff; //
584 
585  double m_BackHere; // here flag
587  double m_BackSideHere; //
588  double m_BackSideLength; //
589  double m_BackSideHeight; //
590  double m_BackSideWidth; //
591  double m_BackSideYOff1; //
592  double m_BackSideYOff2; //
593  double m_BackSideAngle; //
596  double m_BackPlateHere; //
597  double m_BackPlateLength; //
598  double m_BackPlateThick; //
599  double m_BackPlateWidth; //
602  double m_BackPlate2Thick; //
605  double m_GrilleHere; //
606  double m_GrilleThick; //
607  double m_GrilleWidth; //
608  double m_GrilleZSpace; //
610  std::vector<double> m_vecGrilleHeight; //
611  std::vector<double> m_vecGrilleZOff; //
612 
613  std::string m_GrEdgeSlotName; // Slots in Grille
615  double m_GrEdgeSlotHere; //
617  double m_GrEdgeSlotWidth; //
618 
619  std::string m_GrMidSlotName; // Slots in Grille
621  double m_GrMidSlotHere; //
622  double m_GrMidSlotWidth; //
623  double m_GrMidSlotXOff; //
624  std::vector<double> m_vecGrMidSlotHeight; //
625 
626  double m_BackPipeHere; // here flag
628  std::vector<double> m_vecBackPipeDiam; // pipes
629  std::vector<double> m_vecBackPipeThick; // pipes
632 
633  std::vector<std::string> m_vecBackCoolName; // cooling circuits
634  double m_BackCoolHere; // here flag
635  double m_BackCoolBarHere; // here flag
642  std::string m_BackCoolBarSSName; // cooling bar tubing
645  std::string m_BackCoolBarWaName; // cooling bar water
648  double m_BackCoolVFEHere; // here flag
653  std::vector<double> m_vecBackVFELyrThick; //
654  std::vector<std::string> m_vecBackVFELyrName; //
655  std::vector<std::string> m_vecBackVFELyrMat; //
656  std::vector<double> m_vecBackCoolNSec; //
657  std::vector<double> m_vecBackCoolSecSep; //
658  std::vector<double> m_vecBackCoolNPerSec; //
659  double m_BackMiscHere; // here flag
660  std::vector<double> m_vecBackMiscThick; // misc materials
661  std::vector<std::string> m_vecBackMiscName; //
662  std::vector<std::string> m_vecBackMiscMat; //
663  double m_BackCBStdSep; //
664 
665  double m_PatchPanelHere; // here flag
667  std::vector<double> m_vecPatchPanelThick; // patch panel materials
668  std::vector<std::string> m_vecPatchPanelNames; //
669  std::vector<std::string> m_vecPatchPanelMat; //
670 
671  double m_BackCoolTankHere; // here flag
682 
683  double m_DryAirTubeHere; // here flag
684  std::string m_DryAirTubeName; // dry air tube
685  unsigned int m_MBCoolTubeNum; //
689  double m_MBCoolTubeHere; // here flag
690  std::string m_MBCoolTubeName; // mothr bd cooling tube
694  double m_MBManifHere; // here flag
695  std::string m_MBManifName; //mother bd manif
696  double m_MBManifInnDiam; //
697  double m_MBManifOutDiam; //
699  double m_MBLyrHere; // here flag
700  std::vector<double> m_vecMBLyrThick; // mother bd lyrs
701  std::vector<std::string> m_vecMBLyrName; //
702  std::vector<std::string> m_vecMBLyrMat; //
703 
704  //-------------------------------------------------------------------
705 
706  double m_PincerRodHere; // here flag
709  std::vector<double> m_vecPincerRodAzimuth; //
710 
711  std::string m_PincerEnvName; // pincer envelope
713  double m_PincerEnvWidth; //
714  double m_PincerEnvHeight; //
715  double m_PincerEnvLength; //
716  std::vector<double> m_vecPincerEnvZOff; //
717 
718  std::string m_PincerBlkName; // pincer block
720  double m_PincerBlkLength; //
721 
728 
729  std::string m_PincerCutName; // pincer block
731  double m_PincerCutWidth; //
732  double m_PincerCutHeight; //
733 };
734 
735 namespace std {}
736 using namespace std;
737 
739  : m_idNameSpace(""),
740  m_BarName(""),
741  m_BarMat(""),
742  m_vecBarZPts(),
743  m_vecBarRMin(),
744  m_vecBarRMax(),
745  m_vecBarTran(),
746  m_vecBarRota(),
747  m_vecBarRota2(),
748  m_vecBarRota3(),
749  m_BarPhiLo(0),
750  m_BarPhiHi(0),
751  m_BarHere(0),
752  m_SpmName(""),
753  m_SpmMat(""),
754  m_vecSpmZPts(),
755  m_vecSpmRMin(),
756  m_vecSpmRMax(),
757  m_vecSpmTran(),
758  m_vecSpmRota(),
759  m_vecSpmBTran(),
760  m_vecSpmBRota(),
761  m_SpmNPerHalf(0),
762  m_SpmLowPhi(0),
763  m_SpmDelPhi(0),
764  m_SpmPhiOff(0),
765  m_vecSpmHere(),
766  m_SpmCutName(""),
767  m_SpmCutThick(0),
768  m_SpmCutShow(0),
769  m_vecSpmCutTM(),
770  m_vecSpmCutTP(),
771  m_SpmCutRM(0),
772  m_SpmCutRP(0),
773  m_SpmExpThick(0),
774  m_SpmExpWide(0),
775  m_SpmExpYOff(0),
776  m_SpmSideName(""),
777  m_SpmSideMat(""),
778  m_SpmSideHigh(0),
779  m_SpmSideThick(0),
780  m_SpmSideYOffM(0),
781  m_SpmSideYOffP(0),
782  m_NomCryDimAF(0),
783  m_NomCryDimLZ(0),
784  m_vecNomCryDimBF(),
785  m_vecNomCryDimCF(),
786  m_vecNomCryDimAR(),
787  m_vecNomCryDimBR(),
788  m_vecNomCryDimCR(),
789  m_UnderAF(0),
790  m_UnderLZ(0),
791  m_UnderBF(0),
792  m_UnderCF(0),
793  m_UnderAR(0),
794  m_UnderBR(0),
795  m_UnderCR(0),
796  m_WallThAlv(0),
797  m_WrapThAlv(0),
798  m_ClrThAlv(0),
799  m_vecGapAlvEta(),
800  m_WallFrAlv(0),
801  m_WrapFrAlv(0),
802  m_ClrFrAlv(0),
803  m_WallReAlv(0),
804  m_WrapReAlv(0),
805  m_ClrReAlv(0),
806  m_NCryTypes(0),
807  m_NCryPerAlvEta(0),
808  m_CryName(""),
809  m_ClrName(""),
810  m_WrapName(""),
811  m_WallName(""),
812  m_CryMat(""),
813  m_ClrMat(""),
814  m_WrapMat(""),
815  m_WallMat(""),
816 
817  m_APDName(""),
818  m_APDHere(0),
819  m_APDMat(""),
820  m_APDSide(0),
821  m_APDThick(0),
822  m_APDZ(0),
823  m_APDX1(0),
824  m_APDX2(0),
825 
826  m_WebHere(0),
827  m_WebPlName(""),
828  m_WebClrName(""),
829  m_WebPlMat(""),
830  m_WebClrMat(""),
831  m_vecWebPlTh(),
832  m_vecWebClrTh(),
833  m_vecWebLength(),
834  m_IlyHere(0),
835  m_IlyName(),
836  m_IlyPhiLow(0),
837  m_IlyDelPhi(0),
838  m_vecIlyMat(),
839  m_vecIlyThick(),
840  m_IlyPipeName(""),
841  m_IlyPipeHere(0),
842  m_IlyPipeMat(""),
843  m_IlyPipeOD(0),
844  m_IlyPipeID(0),
845  m_vecIlyPipeLength(),
846  m_vecIlyPipeType(),
847  m_vecIlyPipePhi(),
848  m_vecIlyPipeZ(),
849  m_IlyPTMName(""),
850  m_IlyPTMHere(0),
851  m_IlyPTMMat(""),
852  m_IlyPTMWidth(0),
853  m_IlyPTMLength(0),
854  m_IlyPTMHeight(0),
855  m_vecIlyPTMZ(),
856  m_vecIlyPTMPhi(),
857  m_IlyFanOutName(""),
858  m_IlyFanOutHere(0),
859  m_IlyFanOutMat(""),
860  m_IlyFanOutWidth(0),
861  m_IlyFanOutLength(0),
862  m_IlyFanOutHeight(0),
863  m_vecIlyFanOutZ(),
864  m_vecIlyFanOutPhi(),
865  m_IlyDiffName(""),
866  m_IlyDiffMat(""),
867  m_IlyDiffOff(0),
868  m_IlyDiffLength(0),
869  m_IlyBndlName(""),
870  m_IlyBndlMat(""),
871  m_IlyBndlOff(0),
872  m_IlyBndlLength(0),
873  m_IlyFEMName(""),
874  m_IlyFEMMat(""),
875  m_IlyFEMWidth(0),
876  m_IlyFEMLength(0),
877  m_IlyFEMHeight(0),
878  m_vecIlyFEMZ(),
879  m_vecIlyFEMPhi(),
880  m_HawRName(""),
881  m_FawName(""),
882  m_FawHere(0),
883  m_HawRHBIG(0),
884  m_HawRhsml(0),
885  m_HawRCutY(0),
886  m_HawRCutZ(0),
887  m_HawRCutDelY(0),
888  m_HawYOffCry(0),
889  m_NFawPerSupm(0),
890  m_FawPhiOff(0),
891  m_FawDelPhi(0),
892  m_FawPhiRot(0),
893  m_FawRadOff(0),
894  m_GridHere(0),
895  m_GridName(""),
896  m_GridMat(""),
897  m_GridThick(0),
898  m_BackXOff(0),
899  m_BackYOff(0),
900  m_BackHere(0),
901  m_BackSideName(""),
902  m_BackSideHere(0),
903  m_BackSideLength(0),
904  m_BackSideHeight(0),
905  m_BackSideWidth(0),
906  m_BackSideYOff1(0),
907  m_BackSideYOff2(0),
908  m_BackSideAngle(0),
909  m_BackSideMat(""),
910  m_BackPlateName(""),
911  m_BackPlateHere(0),
912  m_BackPlateLength(0),
913  m_BackPlateThick(0),
914  m_BackPlateWidth(0),
915  m_BackPlateMat(""),
916  m_BackPlate2Name(""),
917  m_BackPlate2Thick(0),
918  m_BackPlate2Mat(""),
919  m_GrilleName(""),
920  m_GrilleHere(0),
921  m_GrilleThick(0),
922  m_GrilleWidth(0),
923  m_GrilleZSpace(0),
924  m_GrilleMat(""),
925  m_vecGrilleHeight(),
926  m_vecGrilleZOff(),
927  m_GrEdgeSlotName(""),
928  m_GrEdgeSlotMat(""),
929  m_GrEdgeSlotHere(0),
930  m_GrEdgeSlotHeight(0),
931  m_GrEdgeSlotWidth(0),
932  m_GrMidSlotName(""),
933  m_GrMidSlotMat(""),
934  m_GrMidSlotHere(0),
935  m_GrMidSlotWidth(0),
936  m_GrMidSlotXOff(0),
937  m_vecGrMidSlotHeight(),
938  m_BackPipeHere(0),
939  m_BackPipeName(""),
940  m_vecBackPipeDiam(),
941  m_vecBackPipeThick(),
942  m_BackPipeMat(""),
943  m_BackPipeWaterMat(""),
944 
945  m_vecBackCoolName(),
946  m_BackCoolHere(0),
947  m_BackCoolBarHere(0),
948  m_BackCoolBarWidth(0),
949  m_BackCoolBarHeight(0),
950  m_BackCoolMat(""),
951  m_BackCoolBarName(""),
952  m_BackCoolBarThick(0),
953  m_BackCoolBarMat(""),
954  m_BackCoolBarSSName(""),
955  m_BackCoolBarSSThick(0),
956  m_BackCoolBarSSMat(""),
957  m_BackCoolBarWaName(""),
958  m_BackCoolBarWaThick(0),
959  m_BackCoolBarWaMat(""),
960  m_BackCoolVFEHere(0),
961  m_BackCoolVFEName(""),
962  m_BackCoolVFEMat(""),
963  m_BackVFEName(""),
964  m_BackVFEMat(""),
965  m_vecBackVFELyrThick(),
966  m_vecBackVFELyrName(),
967  m_vecBackVFELyrMat(),
968  m_vecBackCoolNSec(),
969  m_vecBackCoolSecSep(),
970  m_vecBackCoolNPerSec(),
971 
972  m_BackMiscHere(0),
973  m_vecBackMiscThick(),
974  m_vecBackMiscName(),
975  m_vecBackMiscMat(),
976  m_BackCBStdSep(0),
977  m_PatchPanelHere(0),
978  m_PatchPanelName(""),
979  m_vecPatchPanelThick(),
980  m_vecPatchPanelNames(),
981  m_vecPatchPanelMat(),
982  m_BackCoolTankHere(0),
983  m_BackCoolTankName(""),
984  m_BackCoolTankWidth(0),
985  m_BackCoolTankThick(0),
986  m_BackCoolTankMat(""),
987  m_BackCoolTankWaName(""),
988  m_BackCoolTankWaWidth(0),
989  m_BackCoolTankWaMat(""),
990  m_BackBracketName(""),
991  m_BackBracketHeight(0),
992  m_BackBracketMat(""),
993 
994  m_DryAirTubeHere(0),
995  m_DryAirTubeName(""),
996  m_MBCoolTubeNum(0),
997  m_DryAirTubeInnDiam(0),
998  m_DryAirTubeOutDiam(0),
999  m_DryAirTubeMat(""),
1000  m_MBCoolTubeHere(0),
1001  m_MBCoolTubeName(""),
1002  m_MBCoolTubeInnDiam(0),
1003  m_MBCoolTubeOutDiam(0),
1004  m_MBCoolTubeMat(""),
1005  m_MBManifHere(0),
1006  m_MBManifName(""),
1007  m_MBManifInnDiam(0),
1008  m_MBManifOutDiam(0),
1009  m_MBManifMat(""),
1010  m_MBLyrHere(0),
1011  m_vecMBLyrThick(0),
1012  m_vecMBLyrName(),
1013  m_vecMBLyrMat(),
1014 
1015  m_PincerRodHere(0),
1016  m_PincerRodName(""),
1017  m_PincerRodMat(""),
1018  m_vecPincerRodAzimuth(),
1019  m_PincerEnvName(""),
1020  m_PincerEnvMat(""),
1021  m_PincerEnvWidth(0),
1022  m_PincerEnvHeight(0),
1023  m_PincerEnvLength(0),
1024  m_vecPincerEnvZOff(),
1025  m_PincerBlkName(""),
1026  m_PincerBlkMat(""),
1027  m_PincerBlkLength(0),
1028  m_PincerShim1Name(""),
1029  m_PincerShimHeight(0),
1030  m_PincerShim2Name(""),
1031  m_PincerShimMat(""),
1032  m_PincerShim1Width(0),
1033  m_PincerShim2Width(0),
1034  m_PincerCutName(""),
1035  m_PincerCutMat(""),
1036  m_PincerCutWidth(0),
1037  m_PincerCutHeight(0)
1038 
1039 {
1040  LogDebug("EcalGeom") << "DDEcalBarrelAlgo info: Creating an instance";
1041 }
1042 
1044 
1046  const DDVectorArguments& vArgs,
1047  const DDMapArguments& /*mArgs*/,
1048  const DDStringArguments& sArgs,
1049  const DDStringVectorArguments& vsArgs) {
1050  LogDebug("EcalGeom") << "DDEcalBarrelAlgo info: Initialize";
1052  // TRICK!
1053  m_idNameSpace = parent().name().ns();
1054  // barrel parent volume
1055  m_BarName = sArgs["BarName"];
1056  m_BarMat = sArgs["BarMat"];
1057  m_vecBarZPts = vArgs["BarZPts"];
1058  m_vecBarRMin = vArgs["BarRMin"];
1059  m_vecBarRMax = vArgs["BarRMax"];
1060  m_vecBarTran = vArgs["BarTran"];
1061  m_vecBarRota = vArgs["BarRota"];
1062  m_vecBarRota2 = vArgs["BarRota2"];
1063  m_vecBarRota3 = vArgs["BarRota3"];
1064  m_BarPhiLo = nArgs["BarPhiLo"];
1065  m_BarPhiHi = nArgs["BarPhiHi"];
1066  m_BarHere = nArgs["BarHere"];
1067 
1068  m_SpmName = sArgs["SpmName"];
1069  m_SpmMat = sArgs["SpmMat"];
1070  m_vecSpmZPts = vArgs["SpmZPts"];
1071  m_vecSpmRMin = vArgs["SpmRMin"];
1072  m_vecSpmRMax = vArgs["SpmRMax"];
1073  m_vecSpmTran = vArgs["SpmTran"];
1074  m_vecSpmRota = vArgs["SpmRota"];
1075  m_vecSpmBTran = vArgs["SpmBTran"];
1076  m_vecSpmBRota = vArgs["SpmBRota"];
1077  m_SpmNPerHalf = static_cast<unsigned int>(nArgs["SpmNPerHalf"]);
1078  m_SpmLowPhi = nArgs["SpmLowPhi"];
1079  m_SpmDelPhi = nArgs["SpmDelPhi"];
1080  m_SpmPhiOff = nArgs["SpmPhiOff"];
1081  m_vecSpmHere = vArgs["SpmHere"];
1082  m_SpmCutName = sArgs["SpmCutName"];
1083  m_SpmCutThick = nArgs["SpmCutThick"];
1084  m_SpmCutShow = int(nArgs["SpmCutShow"]);
1085  m_vecSpmCutTM = vArgs["SpmCutTM"];
1086  m_vecSpmCutTP = vArgs["SpmCutTP"];
1087  m_SpmCutRM = nArgs["SpmCutRM"];
1088  m_SpmCutRP = nArgs["SpmCutRP"];
1089  m_SpmExpThick = nArgs["SpmExpThick"];
1090  m_SpmExpWide = nArgs["SpmExpWide"];
1091  m_SpmExpYOff = nArgs["SpmExpYOff"];
1092  m_SpmSideName = sArgs["SpmSideName"];
1093  m_SpmSideMat = sArgs["SpmSideMat"];
1094  m_SpmSideHigh = nArgs["SpmSideHigh"];
1095  m_SpmSideThick = nArgs["SpmSideThick"];
1096  m_SpmSideYOffM = nArgs["SpmSideYOffM"];
1097  m_SpmSideYOffP = nArgs["SpmSideYOffP"];
1098 
1099  m_NomCryDimAF = nArgs["NomCryDimAF"];
1100  m_NomCryDimLZ = nArgs["NomCryDimLZ"];
1101  m_vecNomCryDimBF = vArgs["NomCryDimBF"];
1102  m_vecNomCryDimCF = vArgs["NomCryDimCF"];
1103  m_vecNomCryDimAR = vArgs["NomCryDimAR"];
1104  m_vecNomCryDimBR = vArgs["NomCryDimBR"];
1105  m_vecNomCryDimCR = vArgs["NomCryDimCR"];
1106 
1107  m_UnderAF = nArgs["UnderAF"];
1108  m_UnderLZ = nArgs["UnderLZ"];
1109  m_UnderBF = nArgs["UnderBF"];
1110  m_UnderCF = nArgs["UnderCF"];
1111  m_UnderAR = nArgs["UnderAR"];
1112  m_UnderBR = nArgs["UnderBR"];
1113  m_UnderCR = nArgs["UnderCR"];
1114 
1115  m_WallThAlv = nArgs["WallThAlv"];
1116  m_WrapThAlv = nArgs["WrapThAlv"];
1117  m_ClrThAlv = nArgs["ClrThAlv"];
1118  m_vecGapAlvEta = vArgs["GapAlvEta"];
1119 
1120  m_WallFrAlv = nArgs["WallFrAlv"];
1121  m_WrapFrAlv = nArgs["WrapFrAlv"];
1122  m_ClrFrAlv = nArgs["ClrFrAlv"];
1123 
1124  m_WallReAlv = nArgs["WallReAlv"];
1125  m_WrapReAlv = nArgs["WrapReAlv"];
1126  m_ClrReAlv = nArgs["ClrReAlv"];
1127 
1128  m_NCryTypes = static_cast<unsigned int>(nArgs["NCryTypes"]);
1129  m_NCryPerAlvEta = static_cast<unsigned int>(nArgs["NCryPerAlvEta"]);
1130 
1131  m_CryName = sArgs["CryName"];
1132  m_ClrName = sArgs["ClrName"];
1133  m_WrapName = sArgs["WrapName"];
1134  m_WallName = sArgs["WallName"];
1135 
1136  m_CryMat = sArgs["CryMat"];
1137  m_ClrMat = sArgs["ClrMat"];
1138  m_WrapMat = sArgs["WrapMat"];
1139  m_WallMat = sArgs["WallMat"];
1140 
1141  m_APDName = sArgs["APDName"];
1142  m_APDHere = nArgs["APDHere"];
1143  m_APDMat = sArgs["APDMat"];
1144  m_APDSide = nArgs["APDSide"];
1145  m_APDThick = nArgs["APDThick"];
1146  m_APDZ = nArgs["APDZ"];
1147  m_APDX1 = nArgs["APDX1"];
1148  m_APDX2 = nArgs["APDX2"];
1149 
1150  m_WebHere = nArgs["WebHere"];
1151  m_WebPlName = sArgs["WebPlName"];
1152  m_WebClrName = sArgs["WebClrName"];
1153  m_WebPlMat = sArgs["WebPlMat"];
1154  m_WebClrMat = sArgs["WebClrMat"];
1155  m_vecWebPlTh = vArgs["WebPlTh"];
1156  m_vecWebClrTh = vArgs["WebClrTh"];
1157  m_vecWebLength = vArgs["WebLength"];
1158 
1159  m_IlyHere = nArgs["IlyHere"];
1160  m_IlyName = sArgs["IlyName"];
1161  m_IlyPhiLow = nArgs["IlyPhiLow"];
1162  m_IlyDelPhi = nArgs["IlyDelPhi"];
1163  m_vecIlyMat = vsArgs["IlyMat"];
1164  m_vecIlyThick = vArgs["IlyThick"];
1165 
1166  m_IlyPipeName = sArgs["IlyPipeName"];
1167  m_IlyPipeHere = nArgs["IlyPipeHere"];
1168  m_IlyPipeMat = sArgs["IlyPipeMat"];
1169  m_IlyPipeOD = nArgs["IlyPipeOD"];
1170  m_IlyPipeID = nArgs["IlyPipeID"];
1171  m_vecIlyPipeLength = vArgs["IlyPipeLength"];
1172  m_vecIlyPipeType = vArgs["IlyPipeType"];
1173  m_vecIlyPipePhi = vArgs["IlyPipePhi"];
1174  m_vecIlyPipeZ = vArgs["IlyPipeZ"];
1175 
1176  m_IlyPTMName = sArgs["IlyPTMName"];
1177  m_IlyPTMHere = nArgs["IlyPTMHere"];
1178  m_IlyPTMMat = sArgs["IlyPTMMat"];
1179  m_IlyPTMWidth = nArgs["IlyPTMWidth"];
1180  m_IlyPTMLength = nArgs["IlyPTMLength"];
1181  m_IlyPTMHeight = nArgs["IlyPTMHeight"];
1182  m_vecIlyPTMZ = vArgs["IlyPTMZ"];
1183  m_vecIlyPTMPhi = vArgs["IlyPTMPhi"];
1184 
1185  m_IlyFanOutName = sArgs["IlyFanOutName"];
1186  m_IlyFanOutHere = nArgs["IlyFanOutHere"];
1187  m_IlyFanOutMat = sArgs["IlyFanOutMat"];
1188  m_IlyFanOutWidth = nArgs["IlyFanOutWidth"];
1189  m_IlyFanOutLength = nArgs["IlyFanOutLength"];
1190  m_IlyFanOutHeight = nArgs["IlyFanOutHeight"];
1191  m_vecIlyFanOutZ = vArgs["IlyFanOutZ"];
1192  m_vecIlyFanOutPhi = vArgs["IlyFanOutPhi"];
1193  m_IlyDiffName = sArgs["IlyDiffName"];
1194  m_IlyDiffMat = sArgs["IlyDiffMat"];
1195  m_IlyDiffOff = nArgs["IlyDiffOff"];
1196  m_IlyDiffLength = nArgs["IlyDiffLength"];
1197  m_IlyBndlName = sArgs["IlyBndlName"];
1198  m_IlyBndlMat = sArgs["IlyBndlMat"];
1199  m_IlyBndlOff = nArgs["IlyBndlOff"];
1200  m_IlyBndlLength = nArgs["IlyBndlLength"];
1201  m_IlyFEMName = sArgs["IlyFEMName"];
1202  m_IlyFEMMat = sArgs["IlyFEMMat"];
1203  m_IlyFEMWidth = nArgs["IlyFEMWidth"];
1204  m_IlyFEMLength = nArgs["IlyFEMLength"];
1205  m_IlyFEMHeight = nArgs["IlyFEMHeight"];
1206  m_vecIlyFEMZ = vArgs["IlyFEMZ"];
1207  m_vecIlyFEMPhi = vArgs["IlyFEMPhi"];
1208 
1209  m_HawRName = sArgs["HawRName"];
1210  m_FawName = sArgs["FawName"];
1211  m_FawHere = nArgs["FawHere"];
1212  m_HawRHBIG = nArgs["HawRHBIG"];
1213  m_HawRhsml = nArgs["HawRhsml"];
1214  m_HawRCutY = nArgs["HawRCutY"];
1215  m_HawRCutZ = nArgs["HawRCutZ"];
1216  m_HawRCutDelY = nArgs["HawRCutDelY"];
1217  m_HawYOffCry = nArgs["HawYOffCry"];
1218 
1219  m_NFawPerSupm = static_cast<unsigned int>(nArgs["NFawPerSupm"]);
1220  m_FawPhiOff = nArgs["FawPhiOff"];
1221  m_FawDelPhi = nArgs["FawDelPhi"];
1222  m_FawPhiRot = nArgs["FawPhiRot"];
1223  m_FawRadOff = nArgs["FawRadOff"];
1224 
1225  m_GridHere = nArgs["GridHere"];
1226  m_GridName = sArgs["GridName"];
1227  m_GridMat = sArgs["GridMat"];
1228  m_GridThick = nArgs["GridThick"];
1229 
1230  m_BackHere = nArgs["BackHere"];
1231  m_BackXOff = nArgs["BackXOff"];
1232  m_BackYOff = nArgs["BackYOff"];
1233  m_BackSideName = sArgs["BackSideName"];
1234  m_BackSideHere = nArgs["BackSideHere"];
1235  m_BackSideLength = nArgs["BackSideLength"];
1236  m_BackSideHeight = nArgs["BackSideHeight"];
1237  m_BackSideWidth = nArgs["BackSideWidth"];
1238  m_BackSideYOff1 = nArgs["BackSideYOff1"];
1239  m_BackSideYOff2 = nArgs["BackSideYOff2"];
1240  m_BackSideAngle = nArgs["BackSideAngle"];
1241  m_BackSideMat = sArgs["BackSideMat"];
1242  m_BackPlateName = sArgs["BackPlateName"];
1243  m_BackPlateHere = nArgs["BackPlateHere"];
1244  m_BackPlateLength = nArgs["BackPlateLength"];
1245  m_BackPlateThick = nArgs["BackPlateThick"];
1246  m_BackPlateWidth = nArgs["BackPlateWidth"];
1247  m_BackPlateMat = sArgs["BackPlateMat"];
1248  m_BackPlate2Name = sArgs["BackPlate2Name"];
1249  m_BackPlate2Thick = nArgs["BackPlate2Thick"];
1250  m_BackPlate2Mat = sArgs["BackPlate2Mat"];
1251  m_GrilleName = sArgs["GrilleName"];
1252  m_GrilleHere = nArgs["GrilleHere"];
1253  m_GrilleThick = nArgs["GrilleThick"];
1254  m_GrilleWidth = nArgs["GrilleWidth"];
1255  m_GrilleZSpace = nArgs["GrilleZSpace"];
1256  m_GrilleMat = sArgs["GrilleMat"];
1257  m_vecGrilleHeight = vArgs["GrilleHeight"];
1258  m_vecGrilleZOff = vArgs["GrilleZOff"];
1259 
1260  m_GrEdgeSlotName = sArgs["GrEdgeSlotName"];
1261  m_GrEdgeSlotMat = sArgs["GrEdgeSlotMat"];
1262  m_GrEdgeSlotHere = nArgs["GrEdgeSlotHere"];
1263  m_GrEdgeSlotHeight = nArgs["GrEdgeSlotHeight"];
1264  m_GrEdgeSlotWidth = nArgs["GrEdgeSlotWidth"];
1265  m_GrMidSlotName = sArgs["GrMidSlotName"];
1266  m_GrMidSlotMat = sArgs["GrMidSlotMat"];
1267  m_GrMidSlotHere = nArgs["GrMidSlotHere"];
1268  m_GrMidSlotWidth = nArgs["GrMidSlotWidth"];
1269  m_GrMidSlotXOff = nArgs["GrMidSlotXOff"];
1270  m_vecGrMidSlotHeight = vArgs["GrMidSlotHeight"];
1271 
1272  m_BackPipeHere = nArgs["BackPipeHere"];
1273  m_BackPipeName = sArgs["BackPipeName"];
1274  m_vecBackPipeDiam = vArgs["BackPipeDiam"];
1275  m_vecBackPipeThick = vArgs["BackPipeThick"];
1276  m_BackPipeMat = sArgs["BackPipeMat"];
1277  m_BackPipeWaterMat = sArgs["BackPipeWaterMat"];
1278 
1279  m_BackCoolHere = nArgs["BackCoolHere"];
1280  m_vecBackCoolName = vsArgs["BackCoolName"];
1281  m_BackCoolBarHere = nArgs["BackCoolBarHere"];
1282  m_BackCoolBarWidth = nArgs["BackCoolBarWidth"];
1283  m_BackCoolBarHeight = nArgs["BackCoolBarHeight"];
1284  m_BackCoolMat = sArgs["BackCoolMat"];
1285  m_BackCoolBarName = sArgs["BackCoolBarName"];
1286  m_BackCoolBarThick = nArgs["BackCoolBarThick"];
1287  m_BackCoolBarMat = sArgs["BackCoolBarMat"];
1288  m_BackCoolBarSSName = sArgs["BackCoolBarSSName"];
1289  m_BackCoolBarSSThick = nArgs["BackCoolBarSSThick"];
1290  m_BackCoolBarSSMat = sArgs["BackCoolBarSSMat"];
1291  m_BackCoolBarWaName = sArgs["BackCoolBarWaName"];
1292  m_BackCoolBarWaThick = nArgs["BackCoolBarWaThick"];
1293  m_BackCoolBarWaMat = sArgs["BackCoolBarWaMat"];
1294  m_BackCoolVFEHere = nArgs["BackCoolVFEHere"];
1295  m_BackCoolVFEName = sArgs["BackCoolVFEName"];
1296  m_BackCoolVFEMat = sArgs["BackCoolVFEMat"];
1297  m_BackVFEName = sArgs["BackVFEName"];
1298  m_BackVFEMat = sArgs["BackVFEMat"];
1299  m_vecBackVFELyrThick = vArgs["BackVFELyrThick"];
1300  m_vecBackVFELyrName = vsArgs["BackVFELyrName"];
1301  m_vecBackVFELyrMat = vsArgs["BackVFELyrMat"];
1302  m_vecBackCoolNSec = vArgs["BackCoolNSec"];
1303  m_vecBackCoolSecSep = vArgs["BackCoolSecSep"];
1304  m_vecBackCoolNPerSec = vArgs["BackCoolNPerSec"];
1305  m_BackCBStdSep = nArgs["BackCBStdSep"];
1306 
1307  m_BackMiscHere = nArgs["BackMiscHere"];
1308  m_vecBackMiscThick = vArgs["BackMiscThick"];
1309  m_vecBackMiscName = vsArgs["BackMiscName"];
1310  m_vecBackMiscMat = vsArgs["BackMiscMat"];
1311  m_PatchPanelHere = nArgs["PatchPanelHere"];
1312  m_vecPatchPanelThick = vArgs["PatchPanelThick"];
1313  m_vecPatchPanelNames = vsArgs["PatchPanelNames"];
1314  m_vecPatchPanelMat = vsArgs["PatchPanelMat"];
1315  m_PatchPanelName = sArgs["PatchPanelName"];
1316 
1317  m_BackCoolTankHere = nArgs["BackCoolTankHere"];
1318  m_BackCoolTankName = sArgs["BackCoolTankName"];
1319  m_BackCoolTankWidth = nArgs["BackCoolTankWidth"];
1320  m_BackCoolTankThick = nArgs["BackCoolTankThick"];
1321  m_BackCoolTankMat = sArgs["BackCoolTankMat"];
1322  m_BackCoolTankWaName = sArgs["BackCoolTankWaName"];
1323  m_BackCoolTankWaWidth = nArgs["BackCoolTankWaWidth"];
1324  m_BackCoolTankWaMat = sArgs["BackCoolTankWaMat"];
1325  m_BackBracketName = sArgs["BackBracketName"];
1326  m_BackBracketHeight = nArgs["BackBracketHeight"];
1327  m_BackBracketMat = sArgs["BackBracketMat"];
1328 
1329  m_DryAirTubeHere = nArgs["DryAirTubeHere"];
1330  m_DryAirTubeName = sArgs["DryAirTubeName"];
1331  m_MBCoolTubeNum = static_cast<unsigned int>(nArgs["MBCoolTubeNum"]);
1332  m_DryAirTubeInnDiam = nArgs["DryAirTubeInnDiam"];
1333  m_DryAirTubeOutDiam = nArgs["DryAirTubeOutDiam"];
1334  m_DryAirTubeMat = sArgs["DryAirTubeMat"];
1335  m_MBCoolTubeHere = nArgs["MBCoolTubeHere"];
1336  m_MBCoolTubeName = sArgs["MBCoolTubeName"];
1337  m_MBCoolTubeInnDiam = nArgs["MBCoolTubeInnDiam"];
1338  m_MBCoolTubeOutDiam = nArgs["MBCoolTubeOutDiam"];
1339  m_MBCoolTubeMat = sArgs["MBCoolTubeMat"];
1340  m_MBManifHere = nArgs["MBManifHere"];
1341  m_MBManifName = sArgs["MBManifName"];
1342  m_MBManifInnDiam = nArgs["MBManifInnDiam"];
1343  m_MBManifOutDiam = nArgs["MBManifOutDiam"];
1344  m_MBManifMat = sArgs["MBManifMat"];
1345  m_MBLyrHere = nArgs["MBLyrHere"];
1346  m_vecMBLyrThick = vArgs["MBLyrThick"];
1347  m_vecMBLyrName = vsArgs["MBLyrName"];
1348  m_vecMBLyrMat = vsArgs["MBLyrMat"];
1349 
1350  m_PincerRodHere = nArgs["PincerRodHere"];
1351  m_PincerRodName = sArgs["PincerRodName"];
1352  m_PincerRodMat = sArgs["PincerRodMat"];
1353  m_vecPincerRodAzimuth = vArgs["PincerRodAzimuth"];
1354  m_PincerEnvName = sArgs["PincerEnvName"];
1355  m_PincerEnvMat = sArgs["PincerEnvMat"];
1356  m_PincerEnvWidth = nArgs["PincerEnvWidth"];
1357  m_PincerEnvHeight = nArgs["PincerEnvHeight"];
1358  m_PincerEnvLength = nArgs["PincerEnvLength"];
1359  m_vecPincerEnvZOff = vArgs["PincerEnvZOff"];
1360  m_PincerBlkName = sArgs["PincerBlkName"];
1361  m_PincerBlkMat = sArgs["PincerBlkMat"];
1362  m_PincerBlkLength = nArgs["PincerBlkLength"];
1363  m_PincerShim1Name = sArgs["PincerShim1Name"];
1364  m_PincerShimHeight = nArgs["PincerShimHeight"];
1365  m_PincerShim2Name = sArgs["PincerShim2Name"];
1366  m_PincerShimMat = sArgs["PincerShimMat"];
1367  m_PincerShim1Width = nArgs["PincerShim1Width"];
1368  m_PincerShim2Width = nArgs["PincerShim2Width"];
1369  m_PincerCutName = sArgs["PincerCutName"];
1370  m_PincerCutMat = sArgs["PincerCutMat"];
1371  m_PincerCutWidth = nArgs["PincerCutWidth"];
1372  m_PincerCutHeight = nArgs["PincerCutHeight"];
1373 
1374  LogDebug("EcalGeom") << "DDEcalBarrelAlgo info: end initialize";
1375 }
1376 
1378 // DDEcalBarrelAlgo methods...
1380 
1382  LogDebug("EcalGeom") << "******** DDEcalBarrelAlgo execute!" << std::endl;
1383 
1384  if (barHere() != 0) {
1385  const unsigned int copyOne(1);
1386  const unsigned int copyTwo(2);
1387  // Barrel parent volume----------------------------------------------------------
1388  cpv.position(
1390  barMat(),
1393  parent().name(),
1394  copyOne,
1395  DDTranslation(vecBarTran()[0], vecBarTran()[1], vecBarTran()[2]),
1396  myrot(barName().name() + "Rot",
1397  Rota(Vec3(vecBarRota3()[0], vecBarRota3()[1], vecBarRota3()[2]), vecBarRota3()[3]) *
1398  Rota(Vec3(vecBarRota2()[0], vecBarRota2()[1], vecBarRota2()[2]), vecBarRota2()[3]) *
1399  Rota(Vec3(vecBarRota()[0], vecBarRota()[1], vecBarRota()[2]), vecBarRota()[3])));
1400  // End Barrel parent volume----------------------------------------------------------
1401 
1402  // Supermodule parent------------------------------------------------------------
1403 
1404  const DDName spmcut1ddname((0 != spmCutShow()) ? spmName() : ddname(m_SpmName + "CUT1"));
1405  const DDSolid ddspm(
1407 
1408  const unsigned int indx(vecSpmRMax().size() / 2);
1409 
1410  // Deal with the cut boxes first
1411  const DDSolid spmCutBox(DDSolidFactory::box(spmCutName(),
1412  1.05 * (vecSpmRMax()[indx] - vecSpmRMin()[indx]) / 2.,
1413  spmCutThick() / 2.,
1414  fabs(vecSpmZPts().back() - vecSpmZPts().front()) / 2. + 1 * mm));
1415  const std::vector<double>& cutBoxParms(spmCutBox.parameters());
1416  const DDLogicalPart spmCutLog(spmCutName(), spmMat(), spmCutBox);
1417 
1418  // Now the expansion box
1419  const double xExp(spmExpThick() / 2.);
1420  const double yExp(spmExpWide() / 2.);
1421  const double zExp(fabs(vecSpmZPts().back() - vecSpmZPts().front()) / 2.);
1422  const DDName expName(m_SpmName + "EXP");
1423  const DDSolid spmExpBox(DDSolidFactory::box(expName, xExp, yExp, zExp));
1424  const DDTranslation expTra(vecSpmRMax().back() - xExp, spmExpYOff(), vecSpmZPts().front() + zExp);
1425  const DDLogicalPart expLog(expName, spmMat(), spmExpBox);
1426 
1427  // Supermodule side platess
1428  const DDSolid sideSolid(DDSolidFactory::box(
1429  spmSideName(), spmSideHigh() / 2., spmSideThick() / 2., fabs(vecSpmZPts()[1] - vecSpmZPts()[0]) / 2.));
1430  const std::vector<double>& sideParms(sideSolid.parameters());
1431  const DDLogicalPart sideLog(spmSideName(), spmSideMat(), sideSolid);
1432 
1433  DDSolid temp1;
1434  DDSolid temp2;
1435  for (unsigned int icopy(1); icopy <= 2; ++icopy) {
1436  const std::vector<double>& tvec(1 == icopy ? vecSpmCutTM() : vecSpmCutTP());
1437  const double rang(1 == icopy ? spmCutRM() : spmCutRP());
1438 
1439  const Tl3D tr(tvec[0], tvec[1], tvec[2]);
1440  const RoZ3D ro(rang);
1441  const Tf3D alltrot(
1442  RoZ3D(1 == icopy ? spmLowPhi() : spmLowPhi() + spmDelPhi()) *
1443  Tl3D((vecSpmRMax()[indx] + vecSpmRMin()[indx]) / 2., 0, (vecSpmZPts().front() + vecSpmZPts().back()) / 2.) *
1444  tr * ro);
1445 
1446  const DDRotation ddrot(myrot(spmCutName().name() + std::to_string(icopy), alltrot.getRotation()));
1447  const DDTranslation ddtra(alltrot.getTranslation());
1448 
1449  const Tl3D trSide(tvec[0],
1450  tvec[1] + (1 == icopy ? 1. : -1.) * (cutBoxParms[1] + sideParms[1]) +
1451  (1 == icopy ? spmSideYOffM() : spmSideYOffP()),
1452  tvec[2]);
1453  const RoZ3D roSide(rang);
1454  const Tf3D sideRot(RoZ3D(1 == icopy ? spmLowPhi() : spmLowPhi() + spmDelPhi()) *
1455  Tl3D(vecSpmRMin().front() + sideParms[0], 0, vecSpmZPts().front() + sideParms[2]) * trSide *
1456  roSide);
1457 
1458  const DDRotation sideddrot(myrot(spmSideName().name() + std::to_string(icopy), sideRot.getRotation()));
1459  const DDTranslation sideddtra(sideRot.getTranslation());
1460 
1461  cpv.position(sideLog, spmName(), icopy, sideddtra, sideddrot);
1462 
1463  if (0 != spmCutShow()) // do this if we are "showing" the boxes
1464  {
1465  cpv.position(spmCutLog, spmName(), icopy, ddtra, ddrot);
1466  } else // do this if we are subtracting the boxes
1467  {
1468  if (1 == icopy) {
1469  temp1 = DDSolidFactory::subtraction(DDName(m_SpmName + "_T1"), spmcut1ddname, spmCutBox, ddtra, ddrot);
1470  } else {
1471  temp2 = DDSolidFactory::subtraction(spmName(), temp1, spmCutBox, ddtra, ddrot);
1472  }
1473  }
1474  }
1475 
1476  const DDLogicalPart spmLog(spmName(), spmMat(), ((0 != spmCutShow()) ? ddspm : temp2));
1477 
1478  const double dphi(360. * deg / (1. * spmNPerHalf()));
1479  for (unsigned int iphi(0); iphi < 2 * spmNPerHalf(); ++iphi) {
1480  const double phi(iphi * dphi + spmPhiOff()); //- 0.000130/deg ) ;
1481 
1482  // this base rotation includes the base translation & rotation
1483  // plus flipping for the negative z hemisphere, plus
1484  // the phi rotation for this module
1485  const Tf3D rotaBase(RoZ3D(phi) * (iphi < spmNPerHalf() ? Ro3D() : RoX3D(180. * deg)) *
1486  Ro3D(vecSpmBRota()[3], Vec3(vecSpmBRota()[0], vecSpmBRota()[1], vecSpmBRota()[2])) *
1487  Tl3D(Vec3(vecSpmBTran()[0], vecSpmBTran()[1], vecSpmBTran()[2])));
1488 
1489  // here the individual rotations & translations of the supermodule
1490  // are implemented on top of the overall "base" rotation & translation
1491 
1492  const unsigned int offr(4 * iphi);
1493  const unsigned int offt(3 * iphi);
1494 
1495  const Ro3D r1(vecSpmRota()[offr + 3],
1496  Vec3(vecSpmRota()[offr + 0], vecSpmRota()[offr + 1], vecSpmRota()[offr + 2]));
1497 
1498  const Tf3D rotaExtra(r1 * Tl3D(Vec3(vecSpmTran()[offt + 0], vecSpmTran()[offt + 1], vecSpmTran()[offt + 2])));
1499 
1500  const Tf3D both(rotaExtra * rotaBase);
1501 
1502  const DDRotation rota(myrot(spmName().name() + std::to_string(phi / deg), both.getRotation()));
1503 
1504  if (vecSpmHere()[iphi] != 0) {
1505  // convert from CLHEP to DDTranslation & etc. -- Michael Case
1506  DDTranslation myTran(both.getTranslation().x(), both.getTranslation().y(), both.getTranslation().z());
1507  cpv.position(spmLog, barName(), iphi + 1, myTran, rota);
1508  }
1509  }
1510  // End Supermodule parent------------------------------------------------------------
1511 
1512  // Begin Inner Layer volumes---------------------------------------------------------
1513  const double ilyLength(vecSpmZPts()[1] - vecSpmZPts()[0]);
1514  double ilyRMin(vecSpmRMin()[0]);
1515  double ilyThick(0);
1516  for (unsigned int ilyx(0); ilyx != vecIlyThick().size(); ++ilyx) {
1517  ilyThick += vecIlyThick()[ilyx];
1518  }
1519  const DDName ilyDDName(ddname(ilyName()));
1520  const DDSolid ilySolid(
1521  DDSolidFactory::tubs(ilyDDName, ilyLength / 2, ilyRMin, ilyRMin + ilyThick, ilyPhiLow(), ilyDelPhi()));
1522  const DDLogicalPart ilyLog(ilyDDName, spmMat(), ilySolid);
1523  cpv.position(ilyLog, spmLog, copyOne, DDTranslation(0, 0, ilyLength / 2), DDRotation());
1524 
1525  DDLogicalPart ilyPipeLog[200];
1526 
1527  if (0 != ilyPipeHere()) {
1528  for (unsigned int iPipeType(0); iPipeType != vecIlyPipeLength().size(); ++iPipeType) {
1529  const DDName pName(ddname(ilyPipeName() + "_" + std::to_string(iPipeType + 1)));
1530 
1531  DDSolid ilyPipeSolid(
1532  DDSolidFactory::tubs(pName, vecIlyPipeLength()[iPipeType] / 2., 0, ilyPipeOD() / 2, 0 * deg, 360 * deg));
1533  ilyPipeLog[iPipeType] = DDLogicalPart(pName, ilyPipeMat(), ilyPipeSolid);
1534 
1535  const DDName pWaName(ddname(ilyPipeName() + "Wa_" + std::to_string(iPipeType + 1)));
1536  DDSolid ilyPipeWaSolid(
1537  DDSolidFactory::tubs(pWaName, vecIlyPipeLength()[iPipeType] / 2., 0, ilyPipeID() / 2, 0 * deg, 360 * deg));
1538  const DDLogicalPart ilyPipeWaLog(pWaName, backPipeWaterMat(), ilyPipeWaSolid);
1539 
1540  cpv.position(ilyPipeWaLog, pName, copyOne, DDTranslation(0, 0, 0), DDRotation());
1541  }
1542  }
1543 
1544  DDSolid ilyPTMSolid(
1546  const DDLogicalPart ilyPTMLog(ilyPTMName(), ilyPTMMat(), ilyPTMSolid);
1547 
1548  DDSolid ilyFanOutSolid(
1550  const DDLogicalPart ilyFanOutLog(ilyFanOutName(), ilyFanOutMat(), ilyFanOutSolid);
1551 
1552  DDSolid ilyFEMSolid(
1554  const DDLogicalPart ilyFEMLog(ilyFEMName(), ilyFEMMat(), ilyFEMSolid);
1555 
1556  DDSolid ilyDiffSolid(
1558  const DDLogicalPart ilyDiffLog(ilyDiffName(), ilyDiffMat(), ilyDiffSolid);
1559 
1560  DDSolid ilyBndlSolid(
1562  const DDLogicalPart ilyBndlLog(ilyBndlName(), ilyBndlMat(), ilyBndlSolid);
1563  cpv.position(ilyDiffLog,
1564  ilyFanOutName(),
1565  copyOne,
1566  DDTranslation(0, 0, -ilyFanOutLength() / 2 + ilyDiffLength() / 2 + ilyDiffOff()),
1567  DDRotation());
1568  cpv.position(ilyBndlLog,
1569  ilyFanOutName(),
1570  copyOne,
1571  DDTranslation(0, 0, -ilyFanOutLength() / 2 + ilyBndlLength() / 2 + ilyBndlOff()),
1572  DDRotation());
1573 
1574  for (unsigned int ily(0); ily != vecIlyThick().size(); ++ily) {
1575  const double ilyRMax(ilyRMin + vecIlyThick()[ily]);
1576  const DDName xilyName(ddname(ilyName() + std::to_string(ily)));
1577  const DDSolid xilySolid(
1578  DDSolidFactory::tubs(xilyName, ilyLength / 2, ilyRMin, ilyRMax, ilyPhiLow(), ilyDelPhi()));
1579 
1580  const DDLogicalPart xilyLog(xilyName, ddmat(vecIlyMat()[ily]), xilySolid);
1581 
1582  if (0 != ilyHere()) {
1583  cpv.position(xilyLog, ilyLog, copyOne, DDTranslation(0, 0, 0), DDRotation());
1584 
1585  unsigned int copyNum[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1586 
1587  if (10 * mm < vecIlyThick()[ily] && vecIlyThick().size() != (ily + 1) && 0 != ilyPipeHere()) {
1588  if (0 != ilyPTMHere()) {
1589  unsigned int ptmCopy(0);
1590  for (unsigned int ilyPTM(0); ilyPTM != vecIlyPTMZ().size(); ++ilyPTM) {
1591  const double radius(ilyRMax - 1 * mm - ilyPTMHeight() / 2.);
1592  const double phi(vecIlyPTMPhi()[ilyPTM]);
1593  const double yy(radius * sin(phi));
1594  const double xx(radius * cos(phi));
1595  ++ptmCopy;
1596  cpv.position(ilyPTMLog,
1597  xilyLog,
1598  ptmCopy,
1599  DDTranslation(xx, yy, vecIlyPTMZ()[ilyPTM] - ilyLength / 2),
1600  myrot(ilyPTMLog.name().name() + "_rot" + std::to_string(ptmCopy), CLHEP::HepRotationZ(phi)));
1601  }
1602  }
1603  if (0 != ilyFanOutHere()) {
1604  unsigned int fanOutCopy(0);
1605  for (unsigned int ilyFO(0); ilyFO != vecIlyFanOutZ().size(); ++ilyFO) {
1606  const double radius(ilyRMax - 1 * mm - ilyFanOutHeight() / 2.);
1607  const double phi(vecIlyFanOutPhi()[ilyFO]);
1608  const double yy(radius * sin(phi));
1609  const double xx(radius * cos(phi));
1610  ++fanOutCopy;
1611  cpv.position(ilyFanOutLog,
1612  xilyLog,
1613  fanOutCopy,
1614  DDTranslation(xx, yy, vecIlyFanOutZ()[ilyFO] - ilyLength / 2),
1615  myrot(ilyFanOutLog.name().name() + "_rot" + std::to_string(fanOutCopy),
1616  CLHEP::HepRotationZ(phi) * CLHEP::HepRotationY(180 * deg)));
1617  }
1618  unsigned int femCopy(0);
1619  for (unsigned int ilyFEM(0); ilyFEM != vecIlyFEMZ().size(); ++ilyFEM) {
1620  const double radius(ilyRMax - 1 * mm - ilyFEMHeight() / 2.);
1621  const double phi(vecIlyFEMPhi()[ilyFEM]);
1622  const double yy(radius * sin(phi));
1623  const double xx(radius * cos(phi));
1624  ++femCopy;
1625  cpv.position(ilyFEMLog,
1626  xilyLog,
1627  femCopy,
1628  DDTranslation(xx, yy, vecIlyFEMZ()[ilyFEM] - ilyLength / 2),
1629  myrot(ilyFEMLog.name().name() + "_rot" + std::to_string(femCopy), CLHEP::HepRotationZ(phi)));
1630  }
1631  }
1632  for (unsigned int iPipe(0); iPipe != vecIlyPipePhi().size(); ++iPipe) {
1633  const unsigned int type(static_cast<unsigned int>(round(vecIlyPipeType()[iPipe])));
1634  // std::cout<<" iPipe, type= " << iPipe << ", " << type << std::endl ;
1635  const double zz(-ilyLength / 2 + vecIlyPipeZ()[iPipe] + (9 > type ? vecIlyPipeLength()[type] / 2. : 0));
1636 
1637  for (unsigned int ly(0); ly != 2; ++ly) {
1638  const double radius(0 == ly ? ilyRMin + ilyPipeOD() / 2. + 1 * mm : ilyRMax - ilyPipeOD() / 2. - 1 * mm);
1639  const double phi(vecIlyPipePhi()[iPipe]);
1640  const double yy(radius * sin(phi));
1641  const double xx(radius * cos(phi));
1642  ++copyNum[type],
1643  cpv.position(
1644  ilyPipeLog[type],
1645  xilyLog,
1646  copyNum[type],
1647  DDTranslation(xx, yy, zz),
1648  (9 > type ? DDRotation()
1649  : myrot(ilyPipeLog[type].name().name() + "_rot" + std::to_string(copyNum[type]),
1650  Rota(Vec3(xx, yy, 0), 90 * deg))));
1651  }
1652  }
1653  }
1654  }
1655  ilyRMin = ilyRMax;
1656  }
1657  // End Inner Layer volumes---------------------------------------------------------
1658 
1659  const DDName clyrName(DDName("ECLYR"));
1660  std::vector<double> cri;
1661  std::vector<double> cro;
1662  std::vector<double> czz;
1663  czz.emplace_back(vecSpmZPts()[1]);
1664  cri.emplace_back(vecSpmRMin()[0]);
1665  cro.emplace_back(vecSpmRMin()[0] + 25 * mm);
1666  czz.emplace_back(vecSpmZPts()[2]);
1667  cri.emplace_back(vecSpmRMin()[2]);
1668  cro.emplace_back(vecSpmRMin()[2] + 10 * mm);
1669  const DDSolid clyrSolid(DDSolidFactory::polycone(clyrName, -9.5 * deg, 19 * deg, czz, cri, cro));
1670  const DDLogicalPart clyrLog(clyrName, ddmat(vecIlyMat()[4]), clyrSolid);
1671  cpv.position(clyrLog, spmLog, copyOne, DDTranslation(0, 0, 0), DDRotation());
1672 
1673  // Begin Alveolar Wedge parent ------------------------------------------------------
1674  //----------------
1675 
1676  // the next few lines accumulate dimensions appropriate to crystal type 1
1677  // which we use to set some of the features of the half-alveolar wedge (hawR).
1678 
1679  // const double ANom1 ( vecNomCryDimAR()[0] ) ;
1680  const double BNom1(vecNomCryDimCR()[0]);
1681  const double bNom1(vecNomCryDimCF()[0]);
1682  // const double HNom1 ( vecNomCryDimBR()[0] ) ;
1683  // const double hNom1 ( vecNomCryDimBF()[0] ) ;
1684  const double sWall1(wallThAlv());
1685  const double fWall1(wallFrAlv());
1686  // const double rWall1( wallReAlv() ) ;
1687  const double sWrap1(wrapThAlv());
1688  const double fWrap1(wrapFrAlv());
1689  // const double rWrap1( wrapReAlv() ) ;
1690  const double sClr1(clrThAlv());
1691  const double fClr1(clrFrAlv());
1692  // const double rClr1 ( clrReAlv() ) ;
1693  const double LNom1(nomCryDimLZ());
1694  const double beta1(atan((BNom1 - bNom1) / LNom1));
1695  // const double cosbeta1 ( cos( beta1 ) ) ;
1696  const double sinbeta1(sin(beta1));
1697 
1698  const double tana_hawR((BNom1 - bNom1) / LNom1);
1699 
1700  const double H_hawR(hawRHBIG());
1701  const double h_hawR(hawRhsml());
1702  const double a_hawR(bNom1 + sClr1 + 2 * sWrap1 + 2 * sWall1 - sinbeta1 * (fClr1 + fWrap1 + fWall1));
1703  const double B_hawR(a_hawR + H_hawR * tana_hawR);
1704  const double b_hawR(a_hawR + h_hawR * tana_hawR);
1705  const double L_hawR(vecSpmZPts()[2]);
1706 
1707  const Trap trapHAWR(a_hawR / 2., //double aHalfLengthXNegZLoY , // bl1, A/2
1708  a_hawR / 2., //double aHalfLengthXPosZLoY , // bl2, a/2
1709  b_hawR / 2., //double aHalfLengthXPosZHiY , // tl2, b/2
1710  H_hawR / 2., //double aHalfLengthYNegZ , // h1, H/2
1711  h_hawR / 2., //double aHalfLengthYPosZ , // h2, h/2
1712  L_hawR / 2., //double aHalfLengthZ , // dz, L/2
1713  90 * deg, //double aAngleAD , // alfa1
1714  0, //double aCoord15X , // x15
1715  0 //double aCoord15Y // y15
1716  );
1717 
1718  const DDName hawRName1(ddname(hawRName().name() + "1"));
1719  const DDSolid hawRSolid1(mytrap(hawRName1.name(), trapHAWR));
1720  const DDLogicalPart hawRLog1(hawRName1, spmMat(), hawRSolid1);
1721 
1722  const double al1_fawR(atan((B_hawR - a_hawR) / H_hawR) + M_PI_2);
1723 
1724  // here is trap for Full Alveolar Wedge
1725  const Trap trapFAW(a_hawR, //double aHalfLengthXNegZLoY , // bl1, A/2
1726  a_hawR, //double aHalfLengthXPosZLoY , // bl2, a/2
1727  b_hawR, //double aHalfLengthXPosZHiY , // tl2, b/2
1728  H_hawR / 2., //double aHalfLengthYNegZ , // h1, H/2
1729  h_hawR / 2., //double aHalfLengthYPosZ , // h2, h/2
1730  L_hawR / 2., //double aHalfLengthZ , // dz, L/2
1731  al1_fawR, //double aAngleAD , // alfa1
1732  0, //double aCoord15X , // x15
1733  0 //double aCoord15Y // y15
1734  );
1735 
1736  const DDName fawName1(ddname(fawName().name() + "1"));
1737  const DDSolid fawSolid1(mytrap(fawName1.name(), trapFAW));
1738  const DDLogicalPart fawLog1(fawName1, spmMat(), fawSolid1);
1739 
1740  const Trap::VertexList vHAW(trapHAWR.vertexList());
1741  const Trap::VertexList vFAW(trapFAW.vertexList());
1742 
1743  const double hawBoxClr(1 * mm);
1744 
1745  // HAW cut box to cut off back end of wedge
1746  const DDName hawCutName(ddname(hawRName().name() + "CUTBOX"));
1747  const DDSolid hawCutBox(DDSolidFactory::box(hawCutName, b_hawR / 2 + hawBoxClr, hawRCutY() / 2, hawRCutZ() / 2));
1748  const std::vector<double>& hawBoxParms(hawCutBox.parameters());
1749  const DDLogicalPart hawCutLog(hawCutName, spmMat(), hawCutBox);
1750 
1751  const Pt3D b1(hawBoxParms[0], hawBoxParms[1], hawBoxParms[2]);
1752  const Pt3D b2(-hawBoxParms[0], hawBoxParms[1], hawBoxParms[2]);
1753  const Pt3D b3(-hawBoxParms[0], hawBoxParms[1], -hawBoxParms[2]);
1754 
1755  const double zDel(sqrt(4 * hawBoxParms[2] * hawBoxParms[2] - (h_hawR - hawRCutDelY()) * (h_hawR - hawRCutDelY())));
1756 
1757  const Tf3D hawCutForm(b1,
1758  b2,
1759  b3,
1760  vHAW[2] + Pt3D(hawBoxClr, -hawRCutDelY(), 0),
1761  vHAW[1] + Pt3D(-hawBoxClr, -hawRCutDelY(), 0),
1762  Pt3D(vHAW[0].x() - hawBoxClr, vHAW[0].y(), vHAW[0].z() - zDel));
1763 
1764  const DDSolid hawRSolid(DDSolidFactory::subtraction(
1765  hawRName(),
1766  hawRSolid1,
1767  hawCutBox,
1768  DDTranslation(
1769  hawCutForm.getTranslation().x(), hawCutForm.getTranslation().y(), hawCutForm.getTranslation().z()),
1770  myrot(hawCutName.name() + "R", hawCutForm.getRotation())));
1771  const DDLogicalPart hawRLog(hawRName(), spmMat(), hawRSolid);
1772 
1773  // FAW cut box to cut off back end of wedge
1774  const DDName fawCutName(ddname(fawName().name() + "CUTBOX"));
1775  const DDSolid fawCutBox(DDSolidFactory::box(fawCutName, 2 * hawBoxParms[0], hawBoxParms[1], hawBoxParms[2]));
1776 
1777  const std::vector<double>& fawBoxParms(fawCutBox.parameters());
1778  const DDLogicalPart fawCutLog(fawCutName, spmMat(), fawCutBox);
1779 
1780  const Pt3D bb1(fawBoxParms[0], fawBoxParms[1], fawBoxParms[2]);
1781  const Pt3D bb2(-fawBoxParms[0], fawBoxParms[1], fawBoxParms[2]);
1782  const Pt3D bb3(-fawBoxParms[0], fawBoxParms[1], -fawBoxParms[2]);
1783 
1784  const Tf3D fawCutForm(bb1,
1785  bb2,
1786  bb3,
1787  vFAW[2] + Pt3D(2 * hawBoxClr, -5 * mm, 0),
1788  vFAW[1] + Pt3D(-2 * hawBoxClr, -5 * mm, 0),
1789  Pt3D(vFAW[1].x() - 2 * hawBoxClr, vFAW[1].y() - trapFAW.h(), vFAW[1].z() - zDel));
1790 
1791  const DDSolid fawSolid(DDSolidFactory::subtraction(
1792  fawName(),
1793  fawSolid1,
1794  fawCutBox,
1795  DDTranslation(
1796  fawCutForm.getTranslation().x(), fawCutForm.getTranslation().y(), fawCutForm.getTranslation().z()),
1797  myrot(fawCutName.name() + "R", fawCutForm.getRotation())));
1798  const DDLogicalPart fawLog(fawName(), spmMat(), fawSolid);
1799 
1800  const Tf3D hawRform(vHAW[3],
1801  vHAW[0],
1802  vHAW[1], // HAW inside FAW
1803  vFAW[3],
1804  0.5 * (vFAW[0] + vFAW[3]),
1805  0.5 * (vFAW[1] + vFAW[2]));
1806  cpv.position(
1807  hawRLog,
1808  fawLog,
1809  copyOne,
1810  DDTranslation(hawRform.getTranslation().x(), hawRform.getTranslation().y(), hawRform.getTranslation().z()),
1811  myrot(hawRName().name() + "R", hawRform.getRotation()));
1812 
1813  cpv.position(
1814  hawRLog,
1815  fawLog,
1816  copyTwo,
1817  DDTranslation(-hawRform.getTranslation().x(), -hawRform.getTranslation().y(), -hawRform.getTranslation().z()),
1818  myrot(hawRName().name() + "RotRefl",
1819  CLHEP::HepRotationY(180 * deg) * // rotate about Y after refl thru Z
1820  CLHEP::HepRep3x3(1, 0, 0, 0, 1, 0, 0, 0, -1)));
1821 
1822  /* this for display of haw cut box instead of subtraction
1823  cpv.position( hawCutLog,
1824  hawRName,
1825  copyOne,
1826  hawCutForm.getTranslation(),
1827  myrot( hawCutName.name()+"R",
1828  hawCutForm.getRotation() ) ) ;
1829 */
1830 
1831  for (unsigned int iPhi(1); iPhi <= nFawPerSupm(); ++iPhi) {
1832  const double rPhi(fawPhiOff() + (iPhi - 0.5) * fawDelPhi());
1833 
1834  const Tf3D fawform(RoZ3D(rPhi) * Tl3D(fawRadOff() + (trapFAW.H() + trapFAW.h()) / 4, 0, trapFAW.L() / 2) *
1835  RoZ3D(-90 * deg + fawPhiRot()));
1836  if (fawHere())
1837  cpv.position(
1838  fawLog,
1839  spmLog,
1840  iPhi,
1841  DDTranslation(fawform.getTranslation().x(), fawform.getTranslation().y(), fawform.getTranslation().z()),
1842  myrot(fawName().name() + "_Rot" + std::to_string(iPhi), fawform.getRotation()));
1843  }
1844 
1845  // End Alveolar Wedge parent ------------------------------------------------------
1846 
1847  // Begin Grid + Tablet insertion
1848 
1849  const double h_Grid(gridThick());
1850 
1851  const Trap trapGrid((B_hawR - h_Grid * (B_hawR - a_hawR) / H_hawR) / 2, // bl1, A/2
1852  (b_hawR - h_Grid * (B_hawR - a_hawR) / H_hawR) / 2, // bl2, a/2
1853  b_hawR / 2., // tl2, b/2
1854  h_Grid / 2., // h1, H/2
1855  h_Grid / 2., // h2, h/2
1856  (L_hawR - 8 * cm) / 2., // dz, L/2
1857  90 * deg, // alfa1
1858  0, // x15
1859  H_hawR - h_hawR // y15
1860  );
1861 
1862  const DDSolid gridSolid(mytrap(gridName().name(), trapGrid));
1863  const DDLogicalPart gridLog(gridName(), gridMat(), gridSolid);
1864 
1865  const Trap::VertexList vGrid(trapGrid.vertexList());
1866 
1867  const Tf3D gridForm(vGrid[4],
1868  vGrid[5],
1869  vGrid[6], // Grid inside HAW
1870  vHAW[5] - Pt3D(0, h_Grid, 0),
1871  vHAW[5],
1872  vHAW[6]);
1873 
1874  if (0 != gridHere())
1875  cpv.position(
1876  gridLog,
1877  hawRLog,
1878  copyOne,
1879  DDTranslation(gridForm.getTranslation().x(), gridForm.getTranslation().y(), gridForm.getTranslation().z()),
1880  myrot(gridName().name() + "R", gridForm.getRotation()));
1881 
1882  // End Grid + Tablet insertion
1883 
1884  // begin filling Wedge with crystal plus supports --------------------------
1885 
1886  const double aNom(nomCryDimAF());
1887  const double LNom(nomCryDimLZ());
1888 
1889  const double AUnd(underAR());
1890  const double aUnd(underAF());
1891  // const double BUnd ( underCR() ) ;
1892  const double bUnd(underCF());
1893  const double HUnd(underBR());
1894  const double hUnd(underBF());
1895  const double LUnd(underLZ());
1896 
1897  const double sWall(wallThAlv());
1898  const double sWrap(wrapThAlv());
1899  const double sClr(clrThAlv());
1900 
1901  const double fWall(wallFrAlv());
1902  const double fWrap(wrapFrAlv());
1903  const double fClr(clrFrAlv());
1904 
1905  const double rWall(wallReAlv());
1906  const double rWrap(wrapReAlv());
1907  const double rClr(clrReAlv());
1908 
1909  // theta is angle in yz plane between z axis & leading edge of crystal
1910  double theta(90 * deg);
1911  double zee(0 * mm);
1912  double side(0 * mm);
1913  double zeta(0 * deg); // increment in theta for last crystal
1914 
1915  for (unsigned int cryType(1); cryType <= nCryTypes(); ++cryType) {
1916  const std::string sType("_" + std::string(10 > cryType ? "0" : "") + std::to_string(cryType));
1917 
1918  LogDebug("EcalGeom") << "Crytype=" << cryType;
1919  const double ANom(vecNomCryDimAR()[cryType - 1]);
1920  const double BNom(vecNomCryDimCR()[cryType - 1]);
1921  const double bNom(vecNomCryDimCF()[cryType - 1]);
1922  const double HNom(vecNomCryDimBR()[cryType - 1]);
1923  const double hNom(vecNomCryDimBF()[cryType - 1]);
1924 
1925  const double alfCry(90 * deg + atan((bNom - bUnd - aNom + aUnd) / (hNom - hUnd)));
1926 
1927  const Trap trapCry((ANom - AUnd) / 2., //double aHalfLengthXNegZLoY , // bl1, A/2
1928  (aNom - aUnd) / 2., //double aHalfLengthXPosZLoY , // bl2, a/2
1929  (bNom - bUnd) / 2., //double aHalfLengthXPosZHiY , // tl2, b/2
1930  (HNom - HUnd) / 2., //double aHalfLengthYNegZ , // h1, H/2
1931  (hNom - hUnd) / 2., //double aHalfLengthYPosZ , // h2, h/2
1932  (LNom - LUnd) / 2., //double aHalfLengthZ , // dz, L/2
1933  alfCry, //double aAngleAD , // alfa1
1934  aNom - aUnd - ANom + AUnd, //double aCoord15X , // x15
1935  hNom - hUnd - HNom + HUnd //double aCoord15Y // y15
1936  );
1937 
1938  const DDName cryDDName(cryName() + sType);
1939  const DDSolid crySolid(mytrap(cryDDName.name(), trapCry));
1940  const DDLogicalPart cryLog(cryDDName, cryMat(), crySolid);
1941 
1942  //++++++++++++++++++++++++++++++++++ APD ++++++++++++++++++++++++++++++++++
1943 
1944  const DDName apdDDName(apdName().name() + sType);
1945 
1946  const Trap trapAPD(apdSide() / 2., //double aHalfLengthXNegZLoY , // bl1, A/2
1947  apdSide() / 2., //double aHalfLengthXPosZLoY , // bl2, a/2
1948  apdSide() / 2., //double aHalfLengthXPosZHiY , // tl2, b/2
1949  apdSide() / 2., //double aHalfLengthYNegZ , // h1, H/2
1950  apdSide() / 2., //double aHalfLengthYPosZ , // h2, h/2
1951  apdThick() / 2., // dz, L/2
1952  90 * deg, //double aAngleAD , // alfa1
1953  0, //double aCoord15X , // x15
1954  0 //double aCoord15Y // y15
1955  );
1956 
1957  // DDSolid apdSolid ( DDSolidFactory::box( apdDDName,
1958  // apdSide()/2.,
1959  // apdSide()/2.,
1960  // apdThick()/2. ) ) ;
1961  const DDSolid apdSolid(mytrap(apdDDName.name(), trapAPD));
1962  const DDLogicalPart apdLog(apdDDName, apdMat(), apdSolid);
1963 
1964  unsigned int copyAPD(0);
1965  //++++++++++++++++++++++++++++++++++ END APD ++++++++++++++++++++++++++++++++++
1966 
1967  const double delta(atan((HNom - hNom) / LNom));
1968  //unused const double cosdelta ( cos( delta ) ) ;
1969  const double sindelta(sin(delta));
1970 
1971  const double gamma(atan((ANom - aNom) / LNom));
1972  //unused const double cosgamma ( cos( gamma ) ) ;
1973  const double singamma(sin(gamma));
1974 
1975  const double beta(atan((BNom - bNom) / LNom));
1976  //unused const double cosbeta ( cos( beta ) ) ;
1977  const double sinbeta(sin(beta));
1978 
1979  // Now clearance trap
1980  const double alfClr(90 * deg + atan((bNom - aNom) / (hNom + sClr)));
1981 
1982  const Trap trapClr((ANom + sClr + rClr * singamma) / 2., //double aHalfLengthXNegZLoY , // bl1, A/2
1983  (aNom + sClr - fClr * singamma) / 2., //double aHalfLengthXPosZLoY , // bl2, a/2
1984  (bNom + sClr - fClr * sinbeta) / 2., //double aHalfLengthXPosZHiY , // tl2, b/2
1985  (HNom + sClr + rClr * sindelta) / 2., //double aHalfLengthYNegZ , // h1, H/2
1986  (hNom + sClr - fClr * sindelta) / 2., //double aHalfLengthYPosZ , // h2, h/2
1987  (LNom + fClr + rClr) / 2., // dz, L/2
1988  alfClr, //double aAngleAD , // alfa1
1989  aNom - ANom, //double aCoord15X , // x15
1990  hNom - HNom //double aCoord15Y // y15
1991  );
1992 
1993  const DDName clrDDName(clrName() + sType);
1994  const DDSolid clrSolid(mytrap(clrDDName.name(), trapClr));
1995  const DDLogicalPart clrLog(clrDDName, clrMat(), clrSolid);
1996 
1997  // Now wrap trap
1998 
1999  const double alfWrap(90 * deg + atan((bNom - aNom) / (hNom + sClr + 2 * sWrap)));
2000 
2001  const Trap trapWrap((trapClr.A() + 2 * sWrap + rWrap * singamma) / 2, // bl1, A/2
2002  (trapClr.a() + 2 * sWrap - fWrap * singamma) / 2, // bl2, a/2
2003  (trapClr.b() + 2 * sWrap - fWrap * sinbeta) / 2, // tl2, b/2
2004  (trapClr.H() + 2 * sWrap + rWrap * sindelta) / 2, // h1, H/2
2005  (trapClr.h() + 2 * sWrap - fWrap * sindelta) / 2, // h2, h/2
2006  (trapClr.L() + fWrap + rWrap) / 2., // dz, L/2
2007  alfWrap, //double aAngleAD , // alfa1
2008  aNom - ANom - (cryType > 9 ? 0 : 0.020 * mm),
2009  hNom - HNom //double aCoord15Y // y15
2010  );
2011 
2012  const DDName wrapDDName(wrapName() + sType);
2013  const DDSolid wrapSolid(mytrap(wrapDDName.name(), trapWrap));
2014  const DDLogicalPart wrapLog(wrapDDName, wrapMat(), wrapSolid);
2015 
2016  // Now wall trap
2017 
2018  const double alfWall(90 * deg + atan((bNom - aNom) / (hNom + sClr + 2 * sWrap + 2 * sWall)));
2019 
2020  const Trap trapWall((trapWrap.A() + 2 * sWall + rWall * singamma) / 2, // A/2
2021  (trapWrap.a() + 2 * sWall - fWall * singamma) / 2, // a/2
2022  (trapWrap.b() + 2 * sWall - fWall * sinbeta) / 2, // b/2
2023  (trapWrap.H() + 2 * sWall + rWall * sindelta) / 2, // H/2
2024  (trapWrap.h() + 2 * sWall - fWall * sindelta) / 2, // h/2
2025  (trapWrap.L() + fWall + rWall) / 2., // L/2
2026  alfWall, // alfa1
2027  aNom - ANom - (cryType < 10 ? 0.150 * mm : 0.100 * mm),
2028  hNom - HNom // y15
2029  );
2030 
2031  const DDName wallDDName(wallName() + sType);
2032  const DDSolid wallSolid(mytrap(wallDDName.name(), trapWall));
2033  const DDLogicalPart wallLog(wallDDName, wallMat(), wallSolid);
2034 
2035  /* std::cout << "Traps:\n a: "
2036  << trapCry.a() << ", "
2037  << trapClr.a() << ", "
2038  << trapWrap.a() << ", "
2039  << trapWall.a() << "\n b: "
2040  << trapCry.b() << ", "
2041  << trapClr.b() << ", "
2042  << trapWrap.b() << ", "
2043  << trapWall.b() << "\n A: "
2044  << trapCry.A() << ", "
2045  << trapClr.A() << ", "
2046  << trapWrap.A() << ", "
2047  << trapWall.A() << "\n B: "
2048  << trapCry.B() << ", "
2049  << trapClr.B() << ", "
2050  << trapWrap.B() << ", "
2051  << trapWall.B() << "\n h: "
2052  << trapCry.h() << ", "
2053  << trapClr.h() << ", "
2054  << trapWrap.h() << ", "
2055  << trapWall.h() << "\n H: "
2056  << trapCry.H() << ", "
2057  << trapClr.H() << ", "
2058  << trapWrap.H() << ", "
2059  << trapWall.H() << "\n a1: "
2060  << trapCry.a1()/deg << ", "
2061  << trapClr.a1()/deg << ", "
2062  << trapWrap.a1()/deg << ", "
2063  << trapWall.a1()/deg << "\n a4: "
2064  << trapCry.a4()/deg << ", "
2065  << trapClr.a4()/deg << ", "
2066  << trapWrap.a4()/deg << ", "
2067  << trapWall.a4()/deg << "\n x15: "
2068  << trapCry.x15() << ", "
2069  << trapClr.x15() << ", "
2070  << trapWrap.x15() << ", "
2071  << trapWall.x15() << "\n y15: "
2072  << trapCry.y15() << ", "
2073  << trapClr.y15() << ", "
2074  << trapWrap.y15() << ", "
2075  << trapWall.y15()
2076  << std::endl ;
2077 */
2078  // Now for placement of cry within clr
2079  const Vec3 cryToClr(0, 0, (rClr - fClr) / 2);
2080 
2081  cpv.position(cryLog,
2082  clrLog,
2083  copyOne,
2084  DDTranslation(0, 0, (rClr - fClr) / 2), //SAME as cryToClr above.
2085  DDRotation());
2086 
2087  if (0 != apdHere()) {
2088  cpv.position(
2089  apdLog,
2090  clrLog,
2091  ++copyAPD,
2092  DDTranslation(
2093  +trapCry.bl1() - apdX1(), +trapCry.h1() - apdZ(), -trapCry.dz() - apdThick() / 2. + (rClr - fClr) / 2.),
2094  DDRotation());
2095  cpv.position(
2096  apdLog,
2097  clrLog,
2098  ++copyAPD,
2099  DDTranslation(
2100  +trapCry.bl1() - apdX2(), +trapCry.h1() - apdZ(), -trapCry.dz() - apdThick() / 2. + (rClr - fClr) / 2.),
2101  DDRotation());
2102  }
2103 
2104  const Vec3 clrToWrap(0, 0, (rWrap - fWrap) / 2);
2105 
2106  cpv.position(clrLog,
2107  wrapLog,
2108  copyOne,
2109  DDTranslation(0, 0, (rWrap - fWrap) / 2), //SAME as cryToWrap
2110  DDRotation());
2111 
2112  // Now for placement of clr within wall
2113  const Vec3 wrapToWall1(0, 0, (rWall - fWall) / 2);
2114  const Vec3 wrapToWall(Vec3((cryType > 9 ? 0 : 0.005 * mm), 0, 0) + wrapToWall1);
2115 
2116  cpv.position(wrapLog,
2117  wallLog,
2118  copyOne,
2119  DDTranslation(Vec3((cryType > 9 ? 0 : 0.005 * mm), 0, 0) + wrapToWall1), //SAME as wrapToWall
2120  DDRotation());
2121 
2122  const Trap::VertexList vWall(trapWall.vertexList());
2123  const Trap::VertexList vCry(trapCry.vertexList());
2124 
2125  const double sidePrime((trapWall.a() - trapCry.a()) / 2);
2126  const double frontPrime(fWall + fWrap + fClr + LUnd / 2);
2127 
2128  // define web plates with clearance ===========================================
2129 
2130  if (1 == cryType) // first web plate: inside clearance volume
2131  {
2132  web(0,
2133  trapWall.b(),
2134  trapWall.B(),
2135  trapWall.L(),
2136  theta,
2137  vHAW[4] + Pt3D(0, hawYOffCry(), 0),
2138  hawRLog,
2139  zee,
2140  sidePrime,
2141  frontPrime,
2142  delta,
2143  cpv);
2144  zee += vecGapAlvEta()[0];
2145  }
2146 
2147  for (unsigned int etaAlv(1); etaAlv <= nCryPerAlvEta(); ++etaAlv) {
2148  LogDebug("EcalGeom") << "theta=" << theta / deg << ", sidePrime=" << sidePrime << ", frontPrime=" << frontPrime
2149  << ", zeta=" << zeta << ", delta=" << delta << ", zee=" << zee;
2150 
2151  zee += 0.075 * mm + (side * cos(zeta) + trapWall.h() - sidePrime) / sin(theta);
2152 
2153  LogDebug("EcalGeom") << "New zee=" << zee;
2154 
2155  // make transform for placing enclosed crystal
2156 
2157  const Pt3D trap2(vCry[2] + cryToClr + clrToWrap + wrapToWall);
2158 
2159  const Pt3D trap3(trap2 + Pt3D(0, -trapCry.h(), 0));
2160  const Pt3D trap1(trap3 + Pt3D(-trapCry.a(), 0, 0));
2161 
2162  const Pt3D wedge3(vHAW[4] + Pt3D(sidePrime, hawYOffCry(), zee));
2163  const Pt3D wedge2(wedge3 + Pt3D(0, trapCry.h() * cos(theta), -trapCry.h() * sin(theta)));
2164  const Pt3D wedge1(wedge3 + Pt3D(trapCry.a(), 0, 0));
2165 
2166  const Tf3D tForm1(trap1, trap2, trap3, wedge1, wedge2, wedge3);
2167 
2168  const double xx(0.050 * mm);
2169 
2170  const Tf3D tForm(HepGeom::Translate3D(xx, 0, 0) * tForm1);
2171 
2172  cpv.position(wallLog,
2173  hawRLog,
2174  etaAlv,
2175  DDTranslation(tForm.getTranslation().x(), tForm.getTranslation().y(), tForm.getTranslation().z()),
2176  myrot(wallLog.name().name() + "_" + std::to_string(etaAlv), tForm.getRotation()));
2177 
2178  theta -= delta;
2179  side = sidePrime;
2180  zeta = delta;
2181  }
2182  if (5 == cryType || 9 == cryType || 13 == cryType || 17 == cryType) // web plates
2183  {
2184  const unsigned int webIndex(cryType / 4);
2185  zee += 0.5 * vecGapAlvEta()[cryType] / sin(theta);
2186  web(webIndex,
2187  trapWall.a(),
2188  trapWall.A(),
2189  trapWall.L(),
2190  theta,
2191  vHAW[4] + Pt3D(0, hawYOffCry(), 0),
2192  hawRLog,
2193  zee,
2194  sidePrime,
2195  frontPrime,
2196  delta,
2197  cpv);
2198  zee += 0.5 * vecGapAlvEta()[cryType] / sin(theta);
2199  } else {
2200  if (17 != cryType)
2201  zee += vecGapAlvEta()[cryType] / sin(theta);
2202  }
2203  }
2204  // END filling Wedge with crystal plus supports --------------------------
2205 
2206  //------------------------------------------------------------------------
2207  //------------------------------------------------------------------------
2208  //------------------------------------------------------------------------
2209  //------------------------------------------------------------------------
2210  //**************** Material at outer radius of supermodule ***************
2211  //------------------------------------------------------------------------
2212  //------------------------------------------------------------------------
2213  //------------------------------------------------------------------------
2214  //------------------------------------------------------------------------
2215 
2216  if (0 != backHere()) {
2222 
2223  const DDTranslation outtra(backXOff() + backSideHeight() / 2, backYOff(), backSideLength() / 2);
2224 
2225  const double realBPthick(backPlateThick() + backPlate2Thick());
2226 
2227  DDSolid backPlateSolid(
2228  DDSolidFactory::box(backPlateName(), backPlateWidth() / 2., realBPthick / 2., backPlateLength() / 2.));
2229  const std::vector<double>& backPlateParms(backPlateSolid.parameters());
2230  const DDLogicalPart backPlateLog(backPlateName(), backPlateMat(), backPlateSolid);
2231 
2232  const DDTranslation backPlateTra(
2233  backSideHeight() / 2 + backPlateParms[1], 0 * mm, backPlateParms[2] - backSideLength() / 2);
2234 
2235  DDSolid backPlate2Solid(
2237 
2238  const DDLogicalPart backPlate2Log(backPlate2Name(), backPlate2Mat(), backPlate2Solid);
2239 
2240  const DDTranslation backPlate2Tra(0, -backPlateParms[1] + backPlate2Thick() / 2., 0);
2241  if (0 != backPlateHere()) {
2242  cpv.position(backPlate2Log, backPlateName(), copyOne, backPlate2Tra, DDRotation());
2243 
2244  cpv.position(backPlateLog,
2245  spmName(),
2246  copyOne,
2247  outtra + backPlateTra,
2248  myrot(backPlateName().name() + "Rot5", CLHEP::HepRotationZ(270 * deg)));
2249  }
2255 
2261 
2262  const Trap trapBS(backSideWidth() / 2., //double aHalfLengthXNegZLoY , // bl1, A/2
2263  backSideWidth() / 2., //double aHalfLengthXPosZLoY , // bl2, a/2
2264  backSideWidth() / 4., //double aHalfLengthXPosZHiY , // tl2, b/2
2265  backSideHeight() / 2., //double aHalfLengthYNegZ , // h1, H/2
2266  backSideHeight() / 2., //double aHalfLengthYPosZ , // h2, h/2
2267  backSideLength() / 2., //double aHalfLengthZ , // dz, L/2
2268  backSideAngle(), //double aAngleAD , // alfa1
2269  0, //double aCoord15X , // x15
2270  0 //double aCoord15Y // y15
2271  );
2272 
2273  const DDSolid backSideSolid(mytrap(backSideName().name(), trapBS));
2274  const DDLogicalPart backSideLog(backSideName(), backSideMat(), backSideSolid);
2275 
2276  const DDTranslation backSideTra1(0 * mm, backPlateWidth() / 2 + backSideYOff1(), 1 * mm);
2277  if (0 != backSideHere()) {
2278  cpv.position(
2279  backSideLog,
2280  spmName(),
2281  copyOne,
2282  outtra + backSideTra1,
2283  myrot(backSideName().name() + "Rot8", CLHEP::HepRotationX(180 * deg) * CLHEP::HepRotationZ(90 * deg)));
2284 
2285  const DDTranslation backSideTra2(0 * mm, -backPlateWidth() / 2 + backSideYOff2(), 1 * mm);
2286  cpv.position(backSideLog,
2287  spmName(),
2288  copyTwo,
2289  outtra + backSideTra2,
2290  myrot(backSideName().name() + "Rot9", CLHEP::HepRotationZ(90 * deg)));
2291  }
2297 
2298  //=====================
2299  const double backCoolWidth(backCoolBarWidth() + 2. * backCoolTankWidth());
2300 
2306 
2307  const double manifCut(2 * mm);
2308 
2309  DDSolid mBManifSolid(DDSolidFactory::tubs(
2310  mBManifName(), backCoolWidth / 2. - manifCut, 0, mBManifOutDiam() / 2, 0 * deg, 360 * deg));
2311  const DDLogicalPart mBManifLog(mBManifName(), mBManifMat(), mBManifSolid);
2312 
2313  const DDName mBManifWaName(ddname(mBManifName().name() + "Wa"));
2314  DDSolid mBManifWaSolid(DDSolidFactory::tubs(
2315  mBManifWaName, backCoolWidth / 2. - manifCut, 0, mBManifInnDiam() / 2, 0 * deg, 360 * deg));
2316  const DDLogicalPart mBManifWaLog(mBManifWaName, backPipeWaterMat(), mBManifWaSolid);
2317  cpv.position(mBManifWaLog, mBManifName(), copyOne, DDTranslation(0, 0, 0), DDRotation());
2318 
2324  //=====================
2325 
2331  const double deltaY(-5 * mm);
2332 
2333  DDSolid grEdgeSlotSolid(
2335  const DDLogicalPart grEdgeSlotLog(grEdgeSlotName(), grEdgeSlotMat(), grEdgeSlotSolid);
2336 
2337  unsigned int edgeSlotCopy(0);
2338  unsigned int midSlotCopy(0);
2339 
2340  DDLogicalPart grMidSlotLog[4];
2341 
2342  for (unsigned int iGr(0); iGr != vecGrilleHeight().size(); ++iGr) {
2343  DDName gName(ddname(grilleName() + std::to_string(iGr)));
2344  DDSolid grilleSolid(
2345  DDSolidFactory::box(gName, vecGrilleHeight()[iGr] / 2., backCoolWidth / 2., grilleThick() / 2.));
2346  const DDLogicalPart grilleLog(gName, grilleMat(), grilleSolid);
2347 
2348  const DDTranslation grilleTra(-realBPthick / 2 - vecGrilleHeight()[iGr] / 2,
2349  deltaY,
2350  vecGrilleZOff()[iGr] + grilleThick() / 2 - backSideLength() / 2);
2351  const DDTranslation gTra(outtra + backPlateTra + grilleTra);
2352 
2353  if (0 != grMidSlotHere() && 0 != iGr) {
2354  if (0 == (iGr - 1) % 2) {
2355  DDName mName(ddname(grMidSlotName() + std::to_string(iGr / 2)));
2356  DDSolid grMidSlotSolid(DDSolidFactory::box(
2357  mName, vecGrMidSlotHeight()[(iGr - 1) / 2] / 2., grMidSlotWidth() / 2., grilleThick() / 2.));
2358  grMidSlotLog[(iGr - 1) / 2] = DDLogicalPart(mName, grMidSlotMat(), grMidSlotSolid);
2359  }
2360  cpv.position(grMidSlotLog[(iGr - 1) / 2],
2361  gName,
2362  ++midSlotCopy,
2363  DDTranslation(
2364  vecGrilleHeight()[iGr] / 2. - vecGrMidSlotHeight()[(iGr - 1) / 2] / 2., +grMidSlotXOff(), 0),
2365  DDRotation());
2366  cpv.position(grMidSlotLog[(iGr - 1) / 2],
2367  gName,
2368  ++midSlotCopy,
2369  DDTranslation(
2370  vecGrilleHeight()[iGr] / 2. - vecGrMidSlotHeight()[(iGr - 1) / 2] / 2., -grMidSlotXOff(), 0),
2371  DDRotation());
2372  }
2373 
2374  if (0 != grEdgeSlotHere() && 0 != iGr) {
2375  cpv.position(
2376  grEdgeSlotLog,
2377  gName,
2378  ++edgeSlotCopy,
2379  DDTranslation(
2380  vecGrilleHeight()[iGr] / 2. - grEdgeSlotHeight() / 2., backCoolWidth / 2 - grEdgeSlotWidth() / 2., 0),
2381  DDRotation());
2382  cpv.position(grEdgeSlotLog,
2383  gName,
2384  ++edgeSlotCopy,
2385  DDTranslation(vecGrilleHeight()[iGr] / 2. - grEdgeSlotHeight() / 2.,
2386  -backCoolWidth / 2 + grEdgeSlotWidth() / 2.,
2387  0),
2388  DDRotation());
2389  }
2390  if (0 != grilleHere())
2391  cpv.position(grilleLog, spmName(), iGr, gTra, DDRotation());
2392 
2393  if ((0 != iGr % 2) && (0 != mBManifHere())) {
2394  cpv.position(mBManifLog,
2395  spmName(),
2396  iGr,
2397  gTra - DDTranslation(-mBManifOutDiam() / 2. + vecGrilleHeight()[iGr] / 2.,
2398  manifCut,
2399  grilleThick() / 2. + 3 * mBManifOutDiam() / 2.),
2400  myrot(mBManifName().name() + "R1", CLHEP::HepRotationX(90 * deg)));
2401  cpv.position(mBManifLog,
2402  spmName(),
2403  iGr - 1,
2404  gTra - DDTranslation(-3 * mBManifOutDiam() / 2. + vecGrilleHeight()[iGr] / 2.,
2405  manifCut,
2406  grilleThick() / 2 + 3 * mBManifOutDiam() / 2.),
2407  myrot(mBManifName().name() + "R2", CLHEP::HepRotationX(90 * deg)));
2408  }
2409  }
2410 
2416 
2422 
2423  DDSolid backCoolBarSolid(DDSolidFactory::box(
2425  const DDLogicalPart backCoolBarLog(backCoolBarName(), backCoolBarMat(), backCoolBarSolid);
2426 
2427  DDSolid backCoolBarSSSolid(DDSolidFactory::box(
2429  const DDLogicalPart backCoolBarSSLog(backCoolBarSSName(), backCoolBarSSMat(), backCoolBarSSSolid);
2430  const DDTranslation backCoolBarSSTra(0, 0, 0);
2431  cpv.position(backCoolBarSSLog, backCoolBarName(), copyOne, backCoolBarSSTra, DDRotation());
2432 
2433  DDSolid backCoolBarWaSolid(DDSolidFactory::box(
2435  const DDLogicalPart backCoolBarWaLog(backCoolBarWaName(), backCoolBarWaMat(), backCoolBarWaSolid);
2436  const DDTranslation backCoolBarWaTra(0, 0, 0);
2437  cpv.position(backCoolBarWaLog, backCoolBarSSName(), copyOne, backCoolBarWaTra, DDRotation());
2438 
2444 
2450 
2451  double thickVFE(0);
2452  for (unsigned int iLyr(0); iLyr != vecBackVFELyrThick().size(); ++iLyr) {
2453  thickVFE += vecBackVFELyrThick()[iLyr];
2454  }
2455  DDSolid backVFESolid(
2456  DDSolidFactory::box(backVFEName(), backCoolBarHeight() / 2., backCoolBarWidth() / 2., thickVFE / 2.));
2457  const DDLogicalPart backVFELog(backVFEName(), backVFEMat(), backVFESolid);
2458  DDTranslation offTra(0, 0, -thickVFE / 2);
2459  for (unsigned int iLyr(0); iLyr != vecBackVFELyrThick().size(); ++iLyr) {
2460  DDSolid backVFELyrSolid(DDSolidFactory::box(ddname(vecBackVFELyrName()[iLyr]),
2461  backCoolBarHeight() / 2.,
2462  backCoolBarWidth() / 2.,
2463  vecBackVFELyrThick()[iLyr] / 2.));
2464  const DDLogicalPart backVFELyrLog(
2465  ddname(vecBackVFELyrName()[iLyr]), ddmat(vecBackVFELyrMat()[iLyr]), backVFELyrSolid);
2466  const DDTranslation backVFELyrTra(0, 0, vecBackVFELyrThick()[iLyr] / 2);
2467  cpv.position(backVFELyrLog, backVFEName(), copyOne, backVFELyrTra + offTra, DDRotation());
2468  offTra += 2 * backVFELyrTra;
2469  }
2470 
2476 
2482 
2483  const double halfZCoolVFE(thickVFE + backCoolBarThick() / 2.);
2484  DDSolid backCoolVFESolid(
2485  DDSolidFactory::box(backCoolVFEName(), backCoolBarHeight() / 2., backCoolBarWidth() / 2., halfZCoolVFE));
2486  const DDLogicalPart backCoolVFELog(backCoolVFEName(), backCoolVFEMat(), backCoolVFESolid);
2487  if (0 != backCoolBarHere())
2488  cpv.position(backCoolBarLog, backCoolVFEName(), copyOne, DDTranslation(), DDRotation());
2489  if (0 != backCoolVFEHere())
2490  cpv.position(backVFELog,
2491  backCoolVFEName(),
2492  copyOne,
2493  DDTranslation(0, 0, backCoolBarThick() / 2. + thickVFE / 2.),
2494  DDRotation());
2495  cpv.position(backVFELog,
2496  backCoolVFEName(),
2497  copyTwo,
2498  DDTranslation(0, 0, -backCoolBarThick() / 2. - thickVFE / 2.),
2499  myrot(backVFEName().name() + "Flip", CLHEP::HepRotationX(180 * deg)));
2500 
2506 
2512  unsigned int iCVFECopy(1);
2513  unsigned int iSep(0);
2514  unsigned int iNSec(0);
2515  const unsigned int nMisc(vecBackMiscThick().size() / 4);
2516  for (unsigned int iMod(0); iMod != 4; ++iMod) {
2517  const double pipeLength(vecGrilleZOff()[2 * iMod + 1] - vecGrilleZOff()[2 * iMod] - grilleThick() - 3 * mm);
2518 
2519  const double pipeZPos(vecGrilleZOff()[2 * iMod + 1] - pipeLength / 2 - 1.5 * mm);
2520 
2521  // accumulate total height of parent volume
2522 
2523  double backCoolHeight(backCoolBarHeight() + mBCoolTubeOutDiam());
2524  for (unsigned int iMisc(0); iMisc != nMisc; ++iMisc) {
2525  backCoolHeight += vecBackMiscThick()[iMod * nMisc + iMisc];
2526  }
2527  double bottomThick(mBCoolTubeOutDiam());
2528  for (unsigned int iMB(0); iMB != vecMBLyrThick().size(); ++iMB) {
2529  backCoolHeight += vecMBLyrThick()[iMB];
2530  bottomThick += vecMBLyrThick()[iMB];
2531  }
2532 
2533  DDName backCName(ddname(vecBackCoolName()[iMod]));
2534  const double halfZBCool((pipeLength - 2 * mBManifOutDiam() - grilleZSpace()) / 2);
2535  DDSolid backCoolSolid(DDSolidFactory::box(backCName, backCoolHeight / 2., backCoolWidth / 2., halfZBCool));
2536  const DDLogicalPart backCoolLog(backCName, spmMat(), backCoolSolid);
2537 
2538  const DDTranslation bCoolTra(
2539  -realBPthick / 2 + backCoolHeight / 2 - vecGrilleHeight()[2 * iMod],
2540  deltaY,
2541  vecGrilleZOff()[2 * iMod] + grilleThick() + grilleZSpace() + halfZBCool - backSideLength() / 2);
2542  if (0 != backCoolHere())
2543  cpv.position(backCoolLog, spmName(), iMod + 1, outtra + backPlateTra + bCoolTra, DDRotation());
2544 
2545  //===
2546  const double backCoolTankHeight(backCoolBarHeight()); // - backBracketHeight() ) ;
2547 
2548  const double halfZTank(halfZBCool - 5 * cm);
2549 
2550  DDName bTankName(ddname(backCoolTankName() + std::to_string(iMod + 1)));
2551  DDSolid backCoolTankSolid(
2552  DDSolidFactory::box(bTankName, backCoolTankHeight / 2., backCoolTankWidth() / 2., halfZTank));
2553  const DDLogicalPart backCoolTankLog(bTankName, backCoolTankMat(), backCoolTankSolid);
2554  if (0 != backCoolTankHere())
2555  cpv.position(backCoolTankLog,
2556  backCName,
2557  copyOne,
2558  DDTranslation(-backCoolHeight / 2 + backCoolTankHeight / 2. + bottomThick,
2559  backCoolBarWidth() / 2. + backCoolTankWidth() / 2.,
2560  0),
2561  DDRotation());
2562 
2563  DDName bTankWaName(ddname(backCoolTankWaName() + std::to_string(iMod + 1)));
2564  DDSolid backCoolTankWaSolid(DDSolidFactory::box(bTankWaName,
2565  backCoolTankHeight / 2. - backCoolTankThick() / 2.,
2566  backCoolTankWaWidth() / 2.,
2567  halfZTank - backCoolTankThick() / 2.));
2568  const DDLogicalPart backCoolTankWaLog(bTankWaName, backCoolTankWaMat(), backCoolTankWaSolid);
2569  cpv.position(backCoolTankWaLog, bTankName, copyOne, DDTranslation(0, 0, 0), DDRotation());
2570 
2571  DDName bBracketName(ddname(backBracketName() + std::to_string(iMod + 1)));
2572  DDSolid backBracketSolid(
2573  DDSolidFactory::box(bBracketName, backBracketHeight() / 2., backCoolTankWidth() / 2., halfZTank));
2574  const DDLogicalPart backBracketLog(bBracketName, backBracketMat(), backBracketSolid);
2575  if (0 != backCoolTankHere())
2576  cpv.position(backBracketLog,
2577  backCName,
2578  copyOne,
2579  DDTranslation(backCoolBarHeight() - backCoolHeight / 2. - backBracketHeight() / 2. + bottomThick,
2580  -backCoolBarWidth() / 2. - backCoolTankWidth() / 2.,
2581  0),
2582  DDRotation());
2583 
2584  /* cpv.position( backBracketLog,
2585  backCName,
2586  copyTwo,
2587  DDTranslation( backCoolBarHeight() - backCoolHeight/2. - backBracketHeight()/2.,
2588  backCoolBarWidth()/2. + backCoolTankWidth()/2., 0),
2589  DDRotation() ) ;*/
2590 
2591  //===
2592 
2593  DDTranslation bSumTra(backCoolBarHeight() - backCoolHeight / 2. + bottomThick, 0, 0);
2594  for (unsigned int j(0); j != nMisc; ++j) // loop over miscellaneous layers
2595  {
2596  const DDName bName(ddname(vecBackMiscName()[iMod * nMisc + j]));
2597 
2598  DDSolid bSolid(DDSolidFactory::box(bName,
2599  vecBackMiscThick()[iMod * nMisc + j] / 2,
2601  halfZBCool));
2602 
2603  const DDLogicalPart bLog(bName, ddmat(vecBackMiscMat()[iMod * nMisc + j]), bSolid);
2604 
2605  const DDTranslation bTra(vecBackMiscThick()[iMod * nMisc + j] / 2, 0 * mm, 0 * mm);
2606 
2607  if (0 != backMiscHere())
2608  cpv.position(bLog, backCName, copyOne, bSumTra + bTra, DDRotation());
2609 
2610  bSumTra += 2 * bTra;
2611  }
2612 
2613  const double bHalfWidth(backCoolBarWidth() / 2. + backCoolTankWidth());
2614 
2615  if (0 != mBLyrHere()) {
2616  DDTranslation mTra(-backCoolHeight / 2. + mBCoolTubeOutDiam(), 0, 0);
2617  for (unsigned int j(0); j != vecMBLyrThick().size(); ++j) // loop over MB layers
2618  {
2619  const DDName mName(ddname(vecMBLyrName()[j] + "_" + std::to_string(iMod + 1)));
2620 
2621  DDSolid mSolid(DDSolidFactory::box(mName, vecMBLyrThick()[j] / 2, bHalfWidth, halfZBCool));
2622 
2623  const DDLogicalPart mLog(mName, ddmat(vecMBLyrMat()[j]), mSolid);
2624 
2625  mTra += DDTranslation(vecMBLyrThick()[j] / 2.0, 0 * mm, 0 * mm);
2626  cpv.position(mLog, backCName, copyOne, mTra, DDRotation());
2627  mTra += DDTranslation(vecMBLyrThick()[j] / 2.0, 0 * mm, 0 * mm);
2628  }
2629  }
2630 
2631  if (0 != mBCoolTubeHere()) {
2632  const DDName mBName(ddname(mBCoolTubeName() + "_" + std::to_string(iMod + 1)));
2633 
2634  DDSolid mBCoolTubeSolid(
2635  DDSolidFactory::tubs(mBName, halfZBCool, 0, mBCoolTubeOutDiam() / 2, 0 * deg, 360 * deg));
2636  const DDLogicalPart mBLog(mBName, mBCoolTubeMat(), mBCoolTubeSolid);
2637 
2638  const DDName mBWaName(ddname(mBCoolTubeName() + "Wa_" + std::to_string(iMod + 1)));
2639  DDSolid mBCoolTubeWaSolid(
2640  DDSolidFactory::tubs(mBWaName, halfZBCool, 0, mBCoolTubeInnDiam() / 2, 0 * deg, 360 * deg));
2641  const DDLogicalPart mBWaLog(mBWaName, backPipeWaterMat(), mBCoolTubeWaSolid);
2642  cpv.position(mBWaLog, mBName, copyOne, DDTranslation(0, 0, 0), DDRotation());
2643 
2644  for (unsigned int j(0); j != mBCoolTubeNum(); ++j) // loop over all MB cooling circuits
2645  {
2646  cpv.position(
2647  mBLog,
2648  backCName,
2649  2 * j + 1,
2650  DDTranslation(
2651  -backCoolHeight / 2.0 + mBCoolTubeOutDiam() / 2., -bHalfWidth + (j + 1) * bHalfWidth / 5, 0),
2652  DDRotation());
2653  }
2654  }
2655 
2661  if (0 != backPipeHere() && 0 != iMod) {
2662  DDName bPipeName(ddname(backPipeName() + "_" + std::to_string(iMod + 1)));
2663  DDName bInnerName(ddname(backPipeName() + "_H2O_" + std::to_string(iMod + 1)));
2664 
2665  DDSolid backPipeSolid(
2666  DDSolidFactory::tubs(bPipeName, pipeLength / 2, 0 * mm, vecBackPipeDiam()[iMod] / 2, 0 * deg, 360 * deg));
2667 
2668  DDSolid backInnerSolid(DDSolidFactory::tubs(bInnerName,
2669  pipeLength / 2,
2670  0 * mm,
2671  vecBackPipeDiam()[iMod] / 2 - vecBackPipeThick()[iMod],
2672  0 * deg,
2673  360 * deg));
2674 
2675  const DDLogicalPart backPipeLog(bPipeName, backPipeMat(), backPipeSolid);
2676 
2677  const DDLogicalPart backInnerLog(bInnerName, backPipeWaterMat(), backInnerSolid);
2678 
2679  const DDTranslation bPipeTra1(
2680  backXOff() + backSideHeight() - 0.7 * vecBackPipeDiam()[iMod],
2681  backYOff() + backPlateWidth() / 2 - backSideWidth() - 0.7 * vecBackPipeDiam()[iMod],
2682  pipeZPos);
2683 
2684  cpv.position(backPipeLog, spmName(), copyOne, bPipeTra1, DDRotation());
2685 
2686  const DDTranslation bPipeTra2(bPipeTra1.x(),
2687  backYOff() - backPlateWidth() / 2 + backSideWidth() + vecBackPipeDiam()[iMod],
2688  bPipeTra1.z());
2689 
2690  cpv.position(backPipeLog, spmName(), copyTwo, bPipeTra2, DDRotation());
2691 
2692  cpv.position(backInnerLog, bPipeName, copyOne, DDTranslation(), DDRotation());
2693  }
2699 
2700  //=================================================
2701 
2702  if (0 != dryAirTubeHere()) {
2703  DDName dryAirTubName(ddname(dryAirTubeName() + std::to_string(iMod + 1)));
2704 
2705  DDSolid dryAirTubeSolid(DDSolidFactory::tubs(
2706  dryAirTubName, pipeLength / 2, dryAirTubeInnDiam() / 2, dryAirTubeOutDiam() / 2, 0 * deg, 360 * deg));
2707 
2708  const DDLogicalPart dryAirTubeLog(dryAirTubName, dryAirTubeMat(), dryAirTubeSolid);
2709 
2710  const DDTranslation dryAirTubeTra1(
2711  backXOff() + backSideHeight() - 0.7 * dryAirTubeOutDiam() - vecBackPipeDiam()[iMod],
2712  backYOff() + backPlateWidth() / 2 - backSideWidth() - 1.2 * dryAirTubeOutDiam(),
2713  pipeZPos);
2714 
2715  cpv.position(dryAirTubeLog, spmName(), copyOne, dryAirTubeTra1, DDRotation());
2716 
2717  const DDTranslation dryAirTubeTra2(
2718  dryAirTubeTra1.x(),
2719  backYOff() - backPlateWidth() / 2 + backSideWidth() + 0.7 * dryAirTubeOutDiam(),
2720  dryAirTubeTra1.z());
2721 
2722  cpv.position(dryAirTubeLog, spmName(), copyTwo, dryAirTubeTra2, DDRotation());
2723  }
2724  //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2725 
2731 
2732  DDTranslation cTra(backCoolBarHeight() / 2. - backCoolHeight / 2. + bottomThick, 0, -halfZTank + halfZCoolVFE);
2733  const unsigned int numSec(static_cast<unsigned int>(vecBackCoolNSec()[iMod]));
2734  for (unsigned int jSec(0); jSec != numSec; ++jSec) {
2735  const unsigned int nMax(static_cast<unsigned int>(vecBackCoolNPerSec()[iNSec++]));
2736  for (unsigned int iBar(0); iBar != nMax; ++iBar) {
2737  cpv.position(backCoolVFELog, backCName, iCVFECopy++, cTra, DDRotation());
2738  cTra += DDTranslation(0, 0, backCBStdSep());
2739  }
2740  cTra -= DDTranslation(0, 0, backCBStdSep()); // backspace to previous
2741  if (jSec != numSec - 1)
2742  cTra += DDTranslation(0, 0, vecBackCoolSecSep()[iSep++]); // now take atypical step
2743  }
2749  }
2750 
2756 
2762 
2763  double patchHeight(0);
2764  for (unsigned int iPatch(0); iPatch != vecPatchPanelThick().size(); ++iPatch) {
2765  patchHeight += vecPatchPanelThick()[iPatch];
2766  }
2767 
2769  patchHeight / 2.,
2770  backCoolBarWidth() / 2.,
2771  (vecSpmZPts().back() - vecGrilleZOff().back() - grilleThick()) / 2));
2772 
2773  const std::vector<double>& patchParms(patchSolid.parameters());
2774 
2775  const DDLogicalPart patchLog(patchPanelName(), spmMat(), patchSolid);
2776 
2777  const DDTranslation patchTra(backXOff() + 4 * mm, 0 * mm, vecGrilleZOff().back() + grilleThick() + patchParms[2]);
2778  if (0 != patchPanelHere())
2779  cpv.position(patchLog, spmName(), copyOne, patchTra, DDRotation());
2780 
2781  DDTranslation pTra(-patchParms[0], 0, 0);
2782 
2783  for (unsigned int j(0); j != vecPatchPanelNames().size(); ++j) {
2784  const DDName pName(ddname(vecPatchPanelNames()[j]));
2785 
2786  DDSolid pSolid(DDSolidFactory::box(pName, vecPatchPanelThick()[j] / 2., patchParms[1], patchParms[2]));
2787 
2788  const DDLogicalPart pLog(pName, ddmat(vecPatchPanelMat()[j]), pSolid);
2789 
2790  pTra += DDTranslation(vecPatchPanelThick()[j] / 2, 0 * mm, 0 * mm);
2791 
2792  cpv.position(pLog, patchPanelName(), copyOne, pTra, DDRotation());
2793 
2794  pTra += DDTranslation(vecPatchPanelThick()[j] / 2, 0 * mm, 0 * mm);
2795  }
2801 
2807 
2808  if (0 != pincerRodHere()) {
2809  // Make hierarchy of rods, envelopes, blocks, shims, and cutouts
2810 
2811  DDSolid rodSolid(
2812  DDSolidFactory::box(pincerRodName(), pincerEnvWidth() / 2., pincerEnvHeight() / 2., ilyLength / 2));
2813  const DDLogicalPart rodLog(pincerRodName(), pincerRodMat(), rodSolid);
2814 
2815  DDSolid envSolid(
2817  const DDLogicalPart envLog(pincerEnvName(), pincerEnvMat(), envSolid);
2818  const std::vector<double>& envParms(envSolid.parameters());
2819 
2820  DDSolid blkSolid(
2822  const DDLogicalPart blkLog(pincerBlkName(), pincerBlkMat(), blkSolid);
2823  const std::vector<double>& blkParms(blkSolid.parameters());
2824  cpv.position(blkLog,
2825  pincerEnvName(),
2826  copyOne,
2827  DDTranslation(0, 0, pincerEnvLength() / 2 - pincerBlkLength() / 2),
2828  DDRotation());
2829 
2830  DDSolid cutSolid(
2832  const DDLogicalPart cutLog(pincerCutName(), pincerCutMat(), cutSolid);
2833  const std::vector<double>& cutParms(cutSolid.parameters());
2834  cpv.position(
2835  cutLog,
2836  pincerBlkName(),
2837  copyOne,
2838  DDTranslation(
2839  +blkParms[0] - cutParms[0] - pincerShim1Width() + pincerShim2Width(), -blkParms[1] + cutParms[1], 0),
2840  DDRotation());
2841 
2842  DDSolid shim2Solid(DDSolidFactory::box(
2844  const DDLogicalPart shim2Log(pincerShim2Name(), pincerShimMat(), shim2Solid);
2845  const std::vector<double>& shim2Parms(shim2Solid.parameters());
2846  cpv.position(shim2Log,
2847  pincerCutName(),
2848  copyOne,
2849  DDTranslation(+cutParms[0] - shim2Parms[0], -cutParms[1] + shim2Parms[1], 0),
2850  DDRotation());
2851 
2853  pincerShim1Width() / 2.,
2854  pincerShimHeight() / 2.,
2855  (pincerEnvLength() - pincerBlkLength()) / 2));
2856 
2857  const DDLogicalPart shim1Log(pincerShim1Name(), pincerShimMat(), shim1Solid);
2858  const std::vector<double>& shim1Parms(shim1Solid.parameters());
2859  cpv.position(
2860  shim1Log,
2861  pincerEnvName(),
2862  copyOne,
2863  DDTranslation(+envParms[0] - shim1Parms[0], -envParms[1] + shim1Parms[1], -envParms[2] + shim1Parms[2]),
2864  DDRotation());
2865 
2866  for (unsigned int iEnv(0); iEnv != vecPincerEnvZOff().size(); ++iEnv) {
2867  cpv.position(envLog,
2868  pincerRodName(),
2869  1 + iEnv,
2870  DDTranslation(0, 0, -ilyLength / 2. + vecPincerEnvZOff()[iEnv] - pincerEnvLength() / 2.),
2871  DDRotation());
2872  }
2873 
2874  // Place the rods
2875  // const double radius ( fawRadOff() - pincerEnvHeight()/2 -1*mm ) ;
2876  const double radius(ilyRMin - pincerEnvHeight() / 2 - 1 * mm);
2877 
2878  const DDName xilyName(ddname(ilyName() + std::to_string(vecIlyMat().size() - 1)));
2879 
2880  for (unsigned int iRod(0); iRod != vecPincerRodAzimuth().size(); ++iRod) {
2881  const DDTranslation rodTra(
2882  radius * cos(vecPincerRodAzimuth()[iRod]), radius * sin(vecPincerRodAzimuth()[iRod]), 0);
2883 
2884  cpv.position(rodLog,
2885  xilyName,
2886  1 + iRod,
2887  rodTra,
2888  myrot(pincerRodName().name() + std::to_string(iRod),
2889  CLHEP::HepRotationZ(90 * deg + vecPincerRodAzimuth()[iRod])));
2890  }
2891  }
2897  }
2898  }
2899 
2900  LogDebug("EcalGeom") << "******** DDEcalBarrelAlgo test: end it...";
2901 }
2902 
2904 DDRotation DDEcalBarrelAlgo::myrot(const std::string& s, const CLHEP::HepRotation& r) const {
2905  return DDrot(
2906  ddname(m_idNameSpace + ":" + s),
2907  std::make_unique<DDRotationMatrix>(r.xx(), r.xy(), r.xz(), r.yx(), r.yy(), r.yz(), r.zx(), r.zy(), r.zz()));
2908 }
2909 
2911 
2913  const pair<std::string, std::string> temp(DDSplit(s));
2914  if (temp.second.empty()) {
2915  return DDName(temp.first, m_idNameSpace);
2916  } else {
2917  return DDName(temp.first, temp.second);
2918  }
2919 }
2920 
2922  return DDSolidFactory::trap(
2923  ddname(s), t.dz(), t.theta(), t.phi(), t.h1(), t.bl1(), t.tl1(), t.alp1(), t.h2(), t.bl2(), t.tl2(), t.alp2());
2924 }
2925 
2926 void DDEcalBarrelAlgo::web(unsigned int iWeb,
2927  double bWeb,
2928  double BWeb,
2929  double LWeb,
2930  double theta,
2931  const HepGeom::Point3D<double>& corner,
2932  const DDLogicalPart& logPar,
2933  double& zee,
2934  double side,
2935  double front,
2936  double delta,
2937  DDCompactView& cpv) {
2938  const unsigned int copyOne(1);
2939 
2940  const double LWebx(vecWebLength()[iWeb]);
2941 
2942  const double BWebx(bWeb + (BWeb - bWeb) * LWebx / LWeb);
2943 
2944  const double thick(vecWebPlTh()[iWeb] + vecWebClrTh()[iWeb]);
2945  const Trap trapWebClr(BWebx / 2, // A/2
2946  bWeb / 2, // a/2
2947  bWeb / 2, // b/2
2948  thick / 2, // H/2
2949  thick / 2, // h/2
2950  LWebx / 2, // L/2
2951  90 * deg, // alfa1
2952  bWeb - BWebx, // x15
2953  0 // y15
2954  );
2955  const DDName webClrDDName(webClrName() + std::to_string(iWeb));
2956  const DDSolid webClrSolid(mytrap(webClrDDName.name(), trapWebClr));
2957  const DDLogicalPart webClrLog(webClrDDName, webClrMat(), webClrSolid);
2958 
2959  const Trap trapWebPl(trapWebClr.A() / 2, // A/2
2960  trapWebClr.a() / 2, // a/2
2961  trapWebClr.b() / 2, // b/2
2962  vecWebPlTh()[iWeb] / 2, // H/2
2963  vecWebPlTh()[iWeb] / 2, // h/2
2964  trapWebClr.L() / 2., // L/2
2965  90 * deg, // alfa1
2966  trapWebClr.b() - trapWebClr.B(), // x15
2967  0 // y15
2968  );
2969  const DDName webPlDDName(webPlName() + std::to_string(iWeb));
2970  const DDSolid webPlSolid(mytrap(webPlDDName.fullname(), trapWebPl));
2971  const DDLogicalPart webPlLog(webPlDDName, webPlMat(), webPlSolid);
2972 
2973  cpv.position(webPlLog, // place plate inside clearance volume
2974  webClrDDName,
2975  copyOne,
2976  DDTranslation(0, 0, 0),
2977  DDRotation());
2978 
2979  const Trap::VertexList vWeb(trapWebClr.vertexList());
2980 
2981  zee += trapWebClr.h() / sin(theta);
2982 
2983  const double beta(theta + delta);
2984 
2985  const double zWeb(zee - front * cos(beta) + side * sin(beta));
2986  const double yWeb(front * sin(beta) + side * cos(beta));
2987 
2988  const Pt3D wedge3(corner + Pt3D(0, -yWeb, zWeb));
2989  const Pt3D wedge2(wedge3 + Pt3D(0, trapWebClr.h() * cos(theta), -trapWebClr.h() * sin(theta)));
2990  const Pt3D wedge1(wedge3 + Pt3D(trapWebClr.a(), 0, 0));
2991 
2992  LogDebug("EcalGeom") << "trap1=" << vWeb[0] << ", trap2=" << vWeb[2] << ", trap3=" << vWeb[3];
2993 
2994  LogDebug("EcalGeom") << "wedge1=" << wedge1 << ", wedge2=" << wedge2 << ", wedge3=" << wedge3;
2995 
2996  const Tf3D tForm(vWeb[0], vWeb[2], vWeb[3], wedge1, wedge2, wedge3);
2997 
2998  if (0 != webHere())
2999  cpv.position(webClrLog,
3000  logPar,
3001  copyOne,
3002  DDTranslation(tForm.getTranslation().x(), tForm.getTranslation().y(), tForm.getTranslation().z()),
3003  myrot(webClrLog.name().name() + std::to_string(iWeb), tForm.getRotation()));
3004 }
3005 
3007 
3008 DEFINE_EDM_PLUGIN(DDAlgorithmFactory, DDEcalBarrelAlgo, "ecal:DDEcalBarrelAlgo");
std::vector< double > m_vecSpmBRota
double grMidSlotXOff() const
const std::vector< std::string > & vecBackMiscName() const
unsigned int spmNPerHalf() const
double patchPanelHere() const
std::string m_IlyBndlMat
const std::string & backCoolTankName() const
double backCoolTankWaWidth() const
DDMaterial ilyBndlMat() const
unsigned int m_MBCoolTubeNum
std::string m_BackCoolTankMat
const std::vector< double > & vecSpmTran() const
const std::vector< std::string > & vecMBLyrName() const
std::string m_GridName
std::string m_SpmSideMat
unsigned int m_SpmNPerHalf
HepGeom::Transform3D Tf3D
const std::vector< double > & vecSpmRMin() const
const std::string & clrName() const
double ilyFEMWidth() const
double backHere() const
const std::vector< double > & parameters(void) const
Give the parameters of the solid.
Definition: DDSolid.cc:125
~DDEcalBarrelAlgo() override
const std::vector< double > & vecBackCoolNSec() const
DDMaterial ilyDiffMat() const
DDMaterial backSideMat() const
DDName fawName() const
std::string m_WebPlName
double backPlate2Thick() const
DDMaterial mBManifMat() const
const std::string & backPipeName() const
const std::vector< double > & vecIlyPipeLength() const
double pincerEnvLength() const
double grilleZSpace() const
std::string m_BackVFEName
DDMaterial ilyFEMMat() const
double ilyDelPhi() const
double backPlateThick() const
void execute(DDCompactView &cpv) override
double apdX1() const
const N & name() const
Definition: DDBase.h:59
DDName mBManifName() const
CLHEP::HepRotation Rota
std::string m_BackCoolTankWaName
std::vector< double > m_vecIlyPipeLength
double backPlateHere() const
std::string m_BackPipeMat
std::vector< double > m_vecIlyFanOutPhi
const std::vector< double > & vecBackCoolSecSep() const
double grEdgeSlotHere() const
EcalTrapezoidParameters Trap
double hawRCutDelY() const
double pincerBlkLength() const
const std::vector< double > & vecNomCryDimBR() const
void position(const DDLogicalPart &self, const DDLogicalPart &parent, const std::string &copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=nullptr)
double apdX2() const
double fawPhiRot() const
double wallThAlv() const
std::string m_IlyDiffName
double spmCutThick() const
std::string m_IlyFanOutName
DDName pincerRodName() const
std::vector< double > m_vecWebLength
double ilyDiffLength() const
std::string m_DryAirTubeMat
DDMaterial webPlMat() const
double spmCutRM() const
double wrapReAlv() const
unsigned int nCryPerAlvEta() const
double fawRadOff() const
DDMaterial spmSideMat() const
double backMiscHere() const
double underCF() const
DDMaterial is used to define and access material information.
Definition: DDMaterial.h:45
DDMaterial grEdgeSlotMat() const
DDMaterial backCoolTankMat() const
double wrapFrAlv() const
double apdHere() const
const std::vector< std::string > & vecBackVFELyrName() const
const std::string & mBCoolTubeName() const
double underLZ() const
std::string m_BackCoolBarSSName
const std::string & backCoolTankWaName() const
std::vector< double > m_vecSpmZPts
DDRotation myrot(const std::string &s, const CLHEP::HepRotation &r) const
Create a DDRotation from a string converted to DDName and CLHEP::HepRotation converted to DDRotationM...
double backSideYOff2() const
double grilleHere() const
double ilyPhiLow() const
static DDSolid polycone(const DDName &name, double startPhi, double deltaPhi, const std::vector< double > &z, const std::vector< double > &rmin, const std::vector< double > &rmax)
Creates a polycone (refere to Geant3 or Geant4 documentation)
Definition: DDSolid.cc:551
double hawRhsml() const
std::vector< std::string > m_vecPatchPanelMat
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
DDMaterial ddmat(const std::string &s) const
std::vector< double > m_vecBarZPts
double backCoolBarHeight() const
std::vector< double > m_vecBackMiscThick
double backSideHere() const
double ilyBndlLength() const
double wallFrAlv() const
DDMaterial grilleMat() const
Geom::Theta< T > theta() const
DDMaterial backCoolBarSSMat() const
double backCoolVFEHere() const
const std::vector< double > & vecSpmRMax() const
double backPipeHere() const
std::string m_PincerShim2Name
double grilleWidth() const
DDName barName() const
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:17
std::vector< double > m_vecSpmRMin
const std::vector< double > & vecBarRota3() const
#define M_PI_2
std::vector< double > m_vecGrilleZOff
double hawRCutZ() const
double wrapThAlv() const
std::string m_BackPipeWaterMat
std::string m_PincerShim1Name
DDMaterial backCoolTankWaMat() const
std::vector< double > m_vecGrilleHeight
std::string m_SpmSideName
std::vector< std::string > m_vecBackVFELyrMat
std::vector< double > m_vecIlyFEMPhi
static std::string & ns()
DDName backCoolBarSSName() const
std::string m_BackSideName
double backYOff() const
DDName gridName() const
std::string m_WrapName
double backSideLength() const
DDMaterial barMat() const
DDMaterial apdMat() const
DDName pincerEnvName() const
std::string m_WallName
DDMaterial backVFEMat() const
double pincerRodHere() const
DDName backVFEName() const
std::string m_WebPlMat
double mBManifOutDiam() const
double ilyFanOutHere() const
const std::vector< double > & vecNomCryDimBF() const
std::string m_IlyFEMMat
const std::vector< std::string > & vecPatchPanelNames() const
Compact representation of the geometrical detector hierarchy.
Definition: DDCompactView.h:81
DDName backPlate2Name() const
DDName grEdgeSlotName() const
std::string m_PincerRodMat
std::vector< double > m_vecBarRMax
std::string m_PincerCutMat
DDMaterial mBCoolTubeMat() const
A DDSolid represents the shape of a part.
Definition: DDSolid.h:39
std::string m_GrEdgeSlotMat
DDName backSideName() const
double mBCoolTubeNum() const
double backPlateLength() const
std::vector< double > m_vecSpmTran
HepGeom::Point3D< double > Pt3D
double apdZ() const
const std::string & grilleName() const
std::vector< double > m_vecIlyPTMZ
const std::vector< double > & vecIlyPTMZ() const
std::string m_BackPlate2Name
unsigned int m_NFawPerSupm
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:57
std::vector< double > m_vecBarRota2
std::string m_BackPipeName
double nomCryDimLZ() const
const std::vector< double > & vecSpmBTran() const
std::string m_idNameSpace
DDName ilyFEMName() const
double ilyPTMHere() const
std::string m_IlyFanOutMat
std::string m_PincerShimMat
std::vector< double > m_vecBackCoolNPerSec
double fawPhiOff() const
std::vector< double > m_vecSpmCutTM
const std::vector< double > & vecMBLyrThick() const
DDSolid mytrap(const std::string &s, const Trap &t) const
std::vector< double > m_vecWebClrTh
DDMaterial backPipeMat() const
double pincerShim2Width() const
double backSideAngle() const
double ilyPipeHere() const
std::string m_GrMidSlotMat
double mBManifInnDiam() const
unsigned int m_NCryPerAlvEta
std::vector< double > m_vecBarRota
std::vector< double > m_vecBackCoolNSec
double ilyDiffOff() const
double backCoolBarWaThick() const
std::vector< double > m_vecNomCryDimCR
double backSideWidth() const
double spmSideYOffM() const
double ilyFanOutHeight() const
double hawYOffCry() const
unsigned int nCryTypes() const
std::vector< double > m_vecPatchPanelThick
std::string m_BackPlate2Mat
const std::string & webClrName() const
double grilleThick() const
std::string m_IlyDiffMat
DDMaterial pincerCutMat() const
std::vector< double > m_vecNomCryDimAR
HepGeom::RotateZ3D RoZ3D
const std::vector< std::string > & vecBackCoolName() const
unsigned int m_NCryTypes
std::vector< std::string > m_vecIlyMat
DDMaterial webClrMat() const
std::string m_IlyPTMMat
std::vector< double > m_vecBackPipeThick
double pincerCutWidth() const
std::string m_IlyPipeName
DDMaterial backCoolBarWaMat() const
DDName ilyBndlName() const
const std::string & backBracketName() const
const std::vector< double > & vecBackCoolNPerSec() const
const std::string & ilyPipeName() const
T sqrt(T t)
Definition: SSEVec.h:19
double grMidSlotHere() const
double mBCoolTubeInnDiam() const
double underBR() const
double spmExpYOff() const
double mBCoolTubeHere() const
double backCoolTankHere() const
DDMaterial backPlateMat() const
DDName pincerShim1Name() const
double backSideYOff1() const
std::string m_MBCoolTubeMat
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
std::string m_IlyPTMName
std::vector< double > m_vecPincerRodAzimuth
void initialize(const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs) override
const std::vector< double > & vecBackPipeDiam() const
double hawRCutY() const
CLHEP::Hep3Vector Vec3
std::string m_IlyFEMName
const std::vector< std::string > & vecBackVFELyrMat() const
double pincerEnvWidth() const
double mBCoolTubeOutDiam() const
const std::vector< double > & vecIlyFanOutPhi() const
std::vector< std::string > m_vecMBLyrMat
double webHere() const
const std::vector< double > & vecBarTran() const
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:93
DDRotation DDrot(const DDName &name, std::unique_ptr< DDRotationMatrix > rot)
Definition of a uniquely identifiable rotation matrix named by DDName name.
Definition: DDRotation.cc:67
const std::vector< double > & vecSpmCutTM() const
double ilyPipeOD() const
static DDSolid tubs(const DDName &name, double zhalf, double rIn, double rOut, double startPhi, double deltaPhi)
Definition: DDSolid.cc:667
double underBF() const
const std::vector< double > & vecNomCryDimCR() const
double grMidSlotWidth() const
double ilyFEMHeight() const
DDMaterial ilyFanOutMat() const
double backXOff() const
std::vector< double > m_vecIlyThick
const std::vector< double > & vecIlyPTMPhi() const
unsigned int nFawPerSupm() const
DDMaterial backBracketMat() const
double nomCryDimAF() const
std::vector< double > m_vecIlyPipePhi
double spmExpWide() const
double dryAirTubeInnDiam() const
const std::vector< double > & vecBarRota() const
DDName ilyPTMName() const
double fawDelPhi() const
static DDSolid trap(const DDName &name, double pDz, double pTheta, double pPhi, double pDy1, double pDx1, double pDx2, double pAlp1, double pDy2, double pDx3, double pDx4, double pAlp2)
Definition: DDSolid.cc:609
double spmExpThick() const
double apdSide() const
std::string m_BackPlateMat
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
std::string m_PincerCutName
const std::vector< double > & vecBackPipeThick() const
DDMaterial pincerEnvMat() const
HepGeom::RotateX3D RoX3D
std::string m_MBCoolTubeName
double ilyFanOutLength() const
std::string m_BackCoolVFEName
std::vector< std::string > m_vecBackVFELyrName
double hawRHBIG() const
double grEdgeSlotWidth() const
std::vector< double > m_vecPincerEnvZOff
const std::string & webPlName() const
const std::string & idNameSpace() const
double barPhiHi() const
const std::vector< double > & vecSpmHere() const
std::string m_PincerEnvName
double fawHere() const
const std::vector< double > & vecNomCryDimCF() const
std::vector< double > m_vecBackVFELyrThick
std::string m_BackCoolTankWaMat
std::vector< double > m_vecBackCoolSecSep
const std::string & wrapName() const
double grEdgeSlotHeight() const
const std::vector< double > & vecBarRMax() const
std::vector< double > m_vecNomCryDimBF
CaloCellGeometry::Pt3D Pt3D
const std::string & wallName() const
std::string m_BackBracketName
std::string m_BackCoolMat
DDName backCoolBarWaName() const
double barPhiLo() const
std::string m_PincerRodName
std::string m_GrilleMat
double backSideHeight() const
double ilyFEMLength() const
std::string m_BackCoolTankName
const std::vector< double > & vecBarRota2() const
DDMaterial ilyPTMMat() const
const std::string & grMidSlotName() const
DDMaterial backCoolBarMat() const
const std::vector< std::string > & vecIlyMat() const
std::string m_BackCoolBarSSMat
double mBManifHere() const
std::string m_BackCoolBarName
std::vector< double > m_vecBarRMin
double ilyHere() const
std::string m_GrilleName
DDMaterial wrapMat() const
double underCR() const
std::vector< double > m_vecNomCryDimBR
const std::vector< double > & vecIlyPipeZ() const
DDName hawRName() const
std::vector< double > m_vecNomCryDimCF
std::vector< std::string > m_vecBackMiscMat
std::vector< std::string > m_vecMBLyrName
DDName apdName() const
std::vector< double > m_vecIlyFanOutZ
const std::vector< double > & vecBarRMin() const
const std::string & dryAirTubeName() const
DDMaterial wallMat() const
std::vector< double > m_vecIlyPipeZ
const std::vector< double > & vecBackMiscThick() const
double backCoolBarHere() const
static DDSolid subtraction(const DDName &name, const DDSolid &a, const DDSolid &b, const DDTranslation &t, const DDRotation &r)
Definition: DDSolid.cc:599
const std::vector< double > & vecSpmZPts() const
const std::vector< double > & vecIlyFEMZ() const
std::vector< double > m_vecSpmCutTP
DDMaterial gridMat() const
const std::vector< double > & vecSpmCutTP() const
const std::string & ilyName() const
double spmLowPhi() const
DDMaterial grMidSlotMat() const
std::string m_PincerBlkMat
const std::vector< double > & vecSpmRota() const
std::vector< std::string > m_vecPatchPanelNames
const std::string & cryName() const
HepGeom::RotateY3D RoY3D
double ilyPTMHeight() const
const std::vector< double > & vecNomCryDimAR() const
std::vector< double > m_vecSpmRMax
double pincerShimHeight() const
double clrFrAlv() const
std::vector< double > m_vecSpmBTran
double underAF() const
double spmSideYOffP() const
std::string m_SpmCutName
DDName backPlateName() const
std::vector< double > m_vecIlyPTMPhi
double spmCutRP() const
std::string m_GrEdgeSlotName
double barHere() const
const std::vector< std::string > & vecPatchPanelMat() const
DDName backCoolVFEName() const
DDName spmSideName() const
std::string m_PincerBlkName
std::string m_BackCoolBarWaMat
DDMaterial backPlate2Mat() const
HepGeom::ReflectZ3D RfZ3D
double gridHere() const
std::string m_IlyBndlName
DDMaterial backCoolMat() const
std::string m_BackPlateName
double backCoolBarSSThick() const
std::vector< double > m_vecIlyPipeType
double wallReAlv() const
const std::vector< std::string > & vecBackMiscMat() const
std::vector< double > m_vecGapAlvEta
std::string m_HawRName
DDMaterial dryAirTubeMat() const
double ilyPipeID() const
std::string m_PincerEnvMat
DDMaterial spmMat() const
std::vector< double > m_vecWebPlTh
DDName ddname(const std::string &s) const
double backCBStdSep() const
double clrReAlv() const
double dryAirTubeHere() const
std::string m_BackCoolVFEMat
std::string m_WebClrName
const std::vector< double > & vecIlyPipeType() const
std::vector< double > m_vecMBLyrThick
DDMaterial pincerShimMat() const
std::string m_MBManifMat
std::vector< double > m_vecGrMidSlotHeight
std::string m_BackVFEMat
std::string m_BackCoolBarMat
std::string m_BackSideMat
const std::vector< double > & vecWebClrTh() const
double underAR() const
std::vector< double > vecPincerRodAzimuth() const
DDMaterial pincerBlkMat() const
std::vector< double > m_vecIlyFEMZ
double backBracketHeight() const
#define DEFINE_EDM_PLUGIN(factory, type, name)
std::string m_MBManifName
const std::vector< double > & vecBackVFELyrThick() const
std::string m_GrMidSlotName
double backCoolTankWidth() const
const std::vector< double > & vecGapAlvEta() const
const std::vector< double > & vecSpmBRota() const
const std::vector< double > & vecWebLength() const
double backCoolTankThick() const
static constexpr float b2
double backCoolHere() const
DDMaterial cryMat() const
DDName pincerCutName() const
double ilyBndlOff() const
DDName pincerBlkName() const
const std::vector< double > & vecIlyFanOutZ() const
const std::vector< double > & vecGrilleHeight() const
const std::vector< double > & vecGrMidSlotHeight() const
double spmSideHigh() const
double pincerShim1Width() const
std::vector< double > vecPincerEnvZOff() const
DDMaterial backCoolVFEMat() const
std::vector< std::string > m_vecBackMiscName
std::string m_PatchPanelName
std::string m_DryAirTubeName
const std::vector< std::string > & vecMBLyrMat() const
double backPlateWidth() const
double spmDelPhi() const
double gridThick() const
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = &#39;:&#39;
Definition: DDSplit.cc:3
DDName spmName() const
DDMaterial clrMat() const
std::string m_BackCoolBarWaName
DDMaterial ilyPipeMat() const
double backCoolBarWidth() const
int spmCutShow() const
const std::vector< double > & vecBarZPts() const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
const std::vector< double > & vecIlyThick() const
HepGeom::Rotate3D Ro3D
DDName spmCutName() const
std::vector< double > m_vecSpmRota
DDName backCoolBarName() const
double dryAirTubeOutDiam() const
double pincerCutHeight() const
std::vector< double > m_vecBackPipeDiam
CaloCellGeometry::Pt3DVec VertexList
const std::vector< double > & vecGrilleZOff() const
const std::string & name() const
Returns the name.
Definition: DDName.cc:41
tuple size
Write out results.
double apdThick() const
const std::vector< double > & vecIlyPipePhi() const
double ilyPTMLength() const
double backCoolBarThick() const
DDName ilyDiffName() const
std::vector< double > m_vecSpmHere
double spmPhiOff() const
HepGeom::Translate3D Tl3D
DDName ilyFanOutName() const
void web(unsigned int iWeb, double bWeb, double BWeb, double LWeb, double theta, const Pt3D &corner, const DDLogicalPart &logPar, double &zee, double side, double front, double delta, DDCompactView &cpv)
double pincerEnvHeight() const
double clrThAlv() const
double ilyFanOutWidth() const
std::string m_BackBracketMat
static constexpr float b1
std::vector< double > m_vecBarRota3
DDName pincerShim2Name() const
std::vector< double > m_vecBarTran
DDName patchPanelName() const
const std::vector< double > & vecPatchPanelThick() const
double ilyPTMWidth() const
double mBLyrHere() const
const std::vector< double > & vecWebPlTh() const
DDMaterial backPipeWaterMat() const
double spmSideThick() const
#define LogDebug(id)
const std::vector< double > & vecIlyFEMPhi() const
DDMaterial pincerRodMat() const
std::string m_IlyPipeMat
std::vector< std::string > m_vecBackCoolName
std::string m_WebClrMat