CMS 3D CMS Logo

DDEcalEndcapAlgo.cc
Go to the documentation of this file.
1 
3 // File: DDEcalEndcapAlgo.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/Transform3D.h>
18 
19 // Header files for endcap supercrystal geometry
21 
22 
23 namespace std{} using namespace std;
24 
26  m_idNameSpace ( "" ),
27  m_EEMat ( "" ),
28  m_EEzOff ( 0 ),
29  m_EEQuaName ( "" ),
30  m_EEQuaMat ( "" ),
31  m_EECrysMat ( "" ),
32  m_EEWallMat ( "" ),
33  m_EECrysLength ( 0 ) ,
34  m_EECrysRear ( 0 ) ,
35  m_EECrysFront ( 0 ) ,
36  m_EESCELength ( 0 ) ,
37  m_EESCERear ( 0 ) ,
38  m_EESCEFront ( 0 ) ,
39  m_EESCALength ( 0 ) ,
40  m_EESCARear ( 0 ) ,
41  m_EESCAFront ( 0 ) ,
42  m_EESCAWall ( 0 ) ,
43  m_EESCHLength ( 0 ) ,
44  m_EESCHSide ( 0 ) ,
45  m_EEnSCTypes ( 0 ) ,
46  m_vecEESCProf (),
47  m_EEnColumns ( 0 ),
48  m_vecEEShape (),
49  m_EEnSCCutaway ( 0 ) ,
50  m_vecEESCCutaway (),
51  m_EEnSCquad ( 0 ) ,
52  m_vecEESCCtrs(),
53  m_EEnCRSC ( 0 ) ,
54  m_vecEECRCtrs(),
55  m_cutParms ( nullptr ),
56  m_cutBoxName ( "" ),
57  m_envName ( "" ),
58  m_alvName ( "" ),
59  m_intName ( "" ),
60  m_cryName ( "" ),
61  m_PFhalf ( 0 ) ,
62  m_PFfifth ( 0 ) ,
63  m_PF45 ( 0 ) ,
64  m_vecEESCLims (),
65  m_iLength ( 0 ) ,
66  m_iXYOff ( 0 ) ,
67  m_cryZOff ( 0 ) ,
68  m_zFront ( 0 )
69 {
70  LogDebug("EcalGeom") << "DDEcalEndcapAlgo info: Creating an instance" ;
71 }
72 
74 
75 
76 
77 
79  const DDVectorArguments & vArgs,
80  const DDMapArguments & /*mArgs*/,
81  const DDStringArguments & sArgs,
82  const DDStringVectorArguments & /*vsArgs*/) {
83 
84 // edm::LogInfo("EcalGeom") << "DDEcalEndcapAlgo info: Initialize" ;
86  // TRICK!
87  m_idNameSpace = parent().name().ns();
88  // barrel parent volume
89  m_EEMat = sArgs["EEMat" ] ;
90  m_EEzOff = nArgs["EEzOff" ] ;
91 
92  m_EEQuaName = sArgs["EEQuaName" ] ;
93  m_EEQuaMat = sArgs["EEQuaMat" ] ;
94  m_EECrysMat = sArgs["EECrysMat" ] ;
95  m_EEWallMat = sArgs["EEWallMat" ] ;
96  m_EECrysLength = nArgs["EECrysLength" ] ;
97  m_EECrysRear = nArgs["EECrysRear" ] ;
98  m_EECrysFront = nArgs["EECrysFront" ] ;
99  m_EESCELength = nArgs["EESCELength" ] ;
100  m_EESCERear = nArgs["EESCERear" ] ;
101  m_EESCEFront = nArgs["EESCEFront" ] ;
102  m_EESCALength = nArgs["EESCALength" ] ;
103  m_EESCARear = nArgs["EESCARear" ] ;
104  m_EESCAFront = nArgs["EESCAFront" ] ;
105  m_EESCAWall = nArgs["EESCAWall" ] ;
106  m_EESCHLength = nArgs["EESCHLength" ] ;
107  m_EESCHSide = nArgs["EESCHSide" ] ;
108  m_EEnSCTypes = nArgs["EEnSCTypes"];
109  m_EEnColumns = nArgs["EEnColumns"];
110  m_EEnSCCutaway = nArgs["EEnSCCutaway"];
111  m_EEnSCquad = nArgs["EEnSCquad"];
112  m_EEnCRSC = nArgs["EEnCRSC"];
113  m_vecEESCProf = vArgs["EESCProf"];
114  m_vecEEShape = vArgs["EEShape"];
115  m_vecEESCCutaway = vArgs["EESCCutaway"];
116  m_vecEESCCtrs = vArgs["EESCCtrs"];
117  m_vecEECRCtrs = vArgs["EECRCtrs"];
118 
119  m_cutBoxName = sArgs["EECutBoxName" ] ;
120 
121  m_envName = sArgs["EEEnvName" ] ;
122  m_alvName = sArgs["EEAlvName" ] ;
123  m_intName = sArgs["EEIntName" ] ;
124  m_cryName = sArgs["EECryName" ] ;
125 
126  m_PFhalf = nArgs["EEPFHalf" ] ;
127  m_PFfifth = nArgs["EEPFFifth" ] ;
128  m_PF45 = nArgs["EEPF45" ] ;
129 
130  m_vecEESCLims = vArgs["EESCLims"];
131 
132  m_iLength = nArgs["EEiLength" ] ;
133 
134  m_iXYOff = nArgs["EEiXYOff" ] ;
135 
136  m_cryZOff = nArgs["EECryZOff"] ;
137 
138  m_zFront = nArgs["EEzFront"] ;
139 }
140 
142 // DDEcalEndcapAlgo methods...
144 
145 
148  const DDRotationMatrix& r ) const
149 {
150  return DDrot( ddname( m_idNameSpace + ":" + s ), std::make_unique<DDRotationMatrix>( r ) ) ;
151 }
152 
155 {
156  return DDMaterial( ddname( s ) ) ;
157 }
158 
159 DDName
161 {
162  const pair<std::string,std::string> temp ( DDSplit(s) ) ;
163  if ( temp.second.empty() ) {
164  return DDName( temp.first,
165  m_idNameSpace ) ;
166  } else {
167  return DDName( temp.first, temp.second );
168  }
169 }
170 
171 //-------------------- Endcap SC geometry methods ---------------------
172 
173 void
175 {
176 // Position supercrystals in EE Quadrant
177 // Version: 1.00
178 // Created: 30 July 2007
179 // Last Mod:
180 //---------------------------------------------------------------------
181 
182 //********************************* cutbox for trimming edge SCs
183  const double cutWid ( eeSCERear()/sqrt(2.) ) ;
184  const DDSolid eeCutBox ( DDSolidFactory::box(
185  cutBoxName(),
186  cutWid,
187  cutWid,
188  eeSCELength()/sqrt(2.) ) ) ;
189  m_cutParms = &eeCutBox.parameters() ;
190 //**************************************************************
191 
192  const double zFix ( m_zFront - 3172*mm ) ; // fix for changing z offset
193 
194 //** fill supercrystal front and rear center positions from xml input
195  for( unsigned int iC ( 0 ) ; iC != (unsigned int) eenSCquad() ; ++iC )
196  {
197  const unsigned int iOff ( 8*iC ) ;
198  const unsigned int ix ( (unsigned int) eevecEESCCtrs()[ iOff + 0 ] ) ;
199  const unsigned int iy ( (unsigned int) eevecEESCCtrs()[ iOff + 1 ] ) ;
200 
201  assert( ix > 0 && ix < 11 && iy >0 && iy < 11 ) ;
202 
203  m_scrFCtr[ ix - 1 ][ iy - 1 ] = DDTranslation( eevecEESCCtrs()[ iOff + 2 ] ,
204  eevecEESCCtrs()[ iOff + 4 ] ,
205  eevecEESCCtrs()[ iOff + 6 ] + zFix ) ;
206 
207  m_scrRCtr[ ix - 1 ][ iy - 1 ] = DDTranslation( eevecEESCCtrs()[ iOff + 3 ] ,
208  eevecEESCCtrs()[ iOff + 5 ] ,
209  eevecEESCCtrs()[ iOff + 7 ] + zFix ) ;
210  }
211 
212 //** fill crystal front and rear center positions from xml input
213  for( unsigned int iC ( 0 ) ; iC != 25 ; ++iC )
214  {
215  const unsigned int iOff ( 8*iC ) ;
216  const unsigned int ix ( (unsigned int) eevecEECRCtrs()[ iOff + 0 ] ) ;
217  const unsigned int iy ( (unsigned int) eevecEECRCtrs()[ iOff + 1 ] ) ;
218 
219  assert( ix > 0 && ix < 6 && iy >0 && iy < 6 ) ;
220 
221  m_cryFCtr[ ix - 1 ][ iy - 1 ] = DDTranslation( eevecEECRCtrs()[ iOff + 2 ] ,
222  eevecEECRCtrs()[ iOff + 4 ] ,
223  eevecEECRCtrs()[ iOff + 6 ] ) ;
224 
225  m_cryRCtr[ ix - 1 ][ iy - 1 ] = DDTranslation( eevecEECRCtrs()[ iOff + 3 ] ,
226  eevecEECRCtrs()[ iOff + 5 ] ,
227  eevecEECRCtrs()[ iOff + 7 ] ) ;
228  }
229 
230  EECreateCR() ; // make a single crystal just once here
231 
232  for( unsigned int isc ( 0 ); isc<eenSCTypes() ; ++isc )
233  {
234  EECreateSC( isc+1, cpv );
235  }
236 
237  const std::vector<double>& colLimits ( eevecEEShape() );
238 //** Loop over endcap columns
239  for( int icol = 1; icol<=int(eenColumns()); icol++ )
240  {
241 //** Loop over SCs in column, using limits from xml input
242  for( int irow = int(colLimits[2*icol-2]);
243  irow <= int(colLimits[2*icol-1]) ; ++irow )
244  {
245  if( vecEESCLims()[0] <= icol &&
246  vecEESCLims()[1] >= icol &&
247  vecEESCLims()[2] <= irow &&
248  vecEESCLims()[3] >= irow )
249  {
250  // Find SC type (complete or partial) for this location
251  const unsigned int isctype ( EEGetSCType( icol, irow ) );
252 
253  // Create SC as a DDEcalEndcapTrap object and calculate rotation and
254  // translation required to position it in the endcap.
255  DDEcalEndcapTrap scrys( 1, eeSCEFront(), eeSCERear(), eeSCELength() ) ;
256 
257  scrys.moveto( scrFCtr( icol, irow ),
258  scrRCtr( icol, irow ) );
259  scrys.translate( DDTranslation( 0., 0., -eezOff() ) ) ;
260 
261  DDName rname ( envName( isctype ).name()
262  + std::to_string( icol ) + "R" + std::to_string( irow ) ) ;
263 /*
264  edm::LogInfo("EcalGeom") << "Quadrant, SC col/row "
265  << eeQuaName() << " " << icol << " / " << irow << std::endl
266  << " Limits " << int(colLimits[2*icol-2]) << "->" << int(colLimits[2*icol-1]) << std::endl
267  << " SC type = " << isctype << std::endl
268  << " Zoff, Scz = " << eezOff() << " " << sc1.z() << std::endl
269  << " Rotation " << rname << " " << scrys.rotation() << std::endl
270  << " Position " << sccentre << std::endl;
271 */
272  // Position SC in endcap
273  cpv.position( envName( isctype ),
274  eeQuaName(),
275  100*isctype + 10*(icol-1) + (irow-1),
276  scrys.centrePos(),
277  myrot( rname.fullname(), scrys.rotation() ) ) ;
278  }
279  }
280  }
281 }
282 
283 
284 void
285 DDEcalEndcapAlgo::EECreateSC( const unsigned int iSCType ,
286  DDCompactView& cpv )
287 { // EECreateSCType Create SC logical volume of the given type
288 
289  DDRotation noRot ;
290 
291  DDLogicalPart eeSCELog;
292  DDLogicalPart eeSCALog;
293  DDLogicalPart eeSCILog;
294 
295 // edm::LogInfo("EcalGeom") << "EECreateSC: Creating SC envelope" << std::endl;
296 
297  const string anum ( std::to_string(iSCType) ) ;
298 
299  const double eFront ( 0.5*eeSCEFront() ) ;
300  const double eRear ( 0.5*eeSCERear() ) ;
301  const double eAng ( atan((eeSCERear()-eeSCEFront())/(sqrt(2.)*eeSCELength())) ) ;
302  const double ffived ( 45*deg ) ;
303  const double zerod ( 0*deg ) ;
304  DDSolid eeSCEnv ( DDSolidFactory::trap(
305  ( 1 == iSCType ? envName( iSCType ) : addTmp( envName( iSCType ) ) ),
306  0.5*eeSCELength(),
307  eAng,
308  ffived,
309  eFront,
310  eFront,
311  eFront,
312  zerod,
313  eRear,
314  eRear,
315  eRear,
316  zerod ) );
317 
318  const double aFront ( 0.5*eeSCAFront() ) ;
319  const double aRear ( 0.5*eeSCARear() ) ;
320  const double aAng ( atan((eeSCARear()-eeSCAFront())/(sqrt(2.)*eeSCALength())) ) ;
321  const DDSolid eeSCAlv ( DDSolidFactory::trap(
322  ( 1== iSCType ? alvName( iSCType ) : addTmp( alvName( iSCType ) ) ),
323  0.5*eeSCALength(),
324  aAng,
325  ffived,
326  aFront,
327  aFront,
328  aFront,
329  zerod,
330  aRear,
331  aRear,
332  aRear,
333  zerod ) );
334 
335  const double dwall ( eeSCAWall() ) ;
336  const double iFront ( aFront - dwall ) ;
337  const double iRear ( iFront ) ; //aRear - dwall ) ;
338  const double iLen ( iLength() ) ; //0.075*eeSCALength() ) ;
339  const DDSolid eeSCInt ( DDSolidFactory::trap(
340  ( 1==iSCType ? intName( iSCType ) : addTmp( intName( iSCType ) ) ),
341  iLen/2.,
342  atan((eeSCARear()-eeSCAFront())/(sqrt(2.)*eeSCALength())),
343  ffived,
344  iFront,
345  iFront,
346  iFront,
347  zerod,
348  iRear,
349  iRear,
350  iRear,
351  zerod ) );
352 
353  const double dz ( -0.5*( eeSCELength() - eeSCALength() ) ) ;
354  const double dxy ( 0.5* dz * (eeSCERear() - eeSCEFront())/eeSCELength() ) ;
355  const double zIOff ( -( eeSCALength() - iLen )/2. ) ;
356  const double xyIOff ( iXYOff() ) ;
357 
358  if( 1 == iSCType ) // standard SC in this block
359  {
360  eeSCELog = DDLogicalPart( envName( iSCType ), eeMat(), eeSCEnv );
361  eeSCALog = DDLogicalPart( alvName( iSCType ), eeWallMat(), eeSCAlv );
362  eeSCILog = DDLogicalPart( intName( iSCType ), eeMat(), eeSCInt );
363  }
364  else // partial SCs this block: create subtraction volumes as appropriate
365  {
366  const double half ( (*m_cutParms)[0] - eePFHalf() *eeCrysRear() ) ;
367  const double fifth ( (*m_cutParms)[0] + eePFFifth()*eeCrysRear() ) ;
368  const double fac ( eePF45() ) ;
369 
370  const double zmm ( 0*mm ) ;
371 
372  DDTranslation cutTra ( 2 == iSCType ? DDTranslation( zmm, half, zmm ) :
373  ( 3 == iSCType ? DDTranslation( half, zmm, zmm ) :
374  ( 4 == iSCType ? DDTranslation( zmm, -fifth, zmm ) :
375  ( 5 == iSCType ? DDTranslation( -half*fac, -half*fac, zmm ) :
376  DDTranslation( -fifth, zmm, zmm ) ) ) ) ) ;
377 
378  const CLHEP::HepRotationZ cutm ( ffived ) ;
379 
380  DDRotation cutRot ( 5 != iSCType ? noRot : myrot( "EECry5Rot",
381  DDRotationMatrix( cutm.xx(), cutm.xy(), cutm.xz(),
382  cutm.yx(), cutm.yy(), cutm.yz(),
383  cutm.zx(), cutm.zy(), cutm.zz() ) ) ) ;
384 
385  DDSolid eeCutEnv ( DDSolidFactory::subtraction( envName( iSCType ),
386  addTmp( envName( iSCType ) ),
387  cutBoxName(),
388  cutTra,
389  cutRot ) ) ;
390 
391  const DDTranslation extra ( dxy, dxy, dz ) ;
392 
393  DDSolid eeCutAlv ( DDSolidFactory::subtraction( alvName( iSCType ),
394  addTmp( alvName( iSCType ) ),
395  cutBoxName(),
396  cutTra - extra,
397  cutRot ) ) ;
398 
399  const double mySign ( iSCType < 4 ? +1. : -1. ) ;
400 
401  const DDTranslation extraI ( xyIOff + mySign*2*mm,
402  xyIOff + mySign*2*mm, zIOff ) ;
403 
404  DDSolid eeCutInt ( DDSolidFactory::subtraction( intName( iSCType ),
405  addTmp( intName( iSCType ) ),
406  cutBoxName(),
407  cutTra - extraI,
408  cutRot ) ) ;
409 
410  eeSCELog = DDLogicalPart( envName( iSCType ), eeMat() , eeCutEnv ) ;
411  eeSCALog = DDLogicalPart( alvName( iSCType ), eeWallMat(), eeCutAlv ) ;
412  eeSCILog = DDLogicalPart( intName( iSCType ), eeMat() , eeCutInt ) ;
413  }
414 
415 
416  cpv.position( eeSCALog, envName( iSCType ), iSCType*100 + 1, DDTranslation( dxy, dxy, dz ), noRot );
417  cpv.position( eeSCILog, alvName( iSCType ), iSCType*100 + 1, DDTranslation( xyIOff, xyIOff, zIOff), noRot );
418 
419  DDTranslation croffset( 0., 0., 0.) ;
420  EEPositionCRs( alvName( iSCType ), croffset, iSCType, cpv ) ;
421 
422 }
423 
424 unsigned int
425 DDEcalEndcapAlgo::EEGetSCType( const unsigned int iCol,
426  const unsigned int iRow )
427 {
428  unsigned int iType = 1;
429  for( unsigned int ii = 0; ii < (unsigned int)( eenSCCutaway() ) ; ++ii )
430  {
431  if( ( eevecEESCCutaway()[ 3*ii ] == iCol ) &&
432  ( eevecEESCCutaway()[ 3*ii + 1 ] == iRow ) )
433  {
434  iType = int(eevecEESCCutaway()[3*ii+2]);
435 // edm::LogInfo("EcalGeom") << "EEGetSCType: col, row, type = "
436 // << iCol << " " << iRow << " " << iType << std::endl;
437  }
438  }
439  return iType;
440 }
441 
442 void
444 {
445  // EECreateCR Create endcap crystal logical volume
446 
447 // edm::LogInfo("EcalGeom") << "EECreateCR: = " << std::endl;
448 
449  DDSolid EECRSolid (DDSolidFactory::trap(
450  cryName(),
451  0.5*eeCrysLength(),
452  atan((eeCrysRear()-eeCrysFront())/(sqrt(2.)*eeCrysLength())),
453  45.*deg,
454  0.5*eeCrysFront(),0.5*eeCrysFront(),0.5*eeCrysFront(),0.*deg,
455  0.5*eeCrysRear(), 0.5*eeCrysRear(), 0.5*eeCrysRear(),0.*deg ) );
456 
457  DDLogicalPart part ( cryName(), eeCrysMat(), EECRSolid ) ;
458 }
459 
460 void
462  const DDTranslation& /*offset*/,
463  const int iSCType,
464  DDCompactView& cpv )
465 {
466  // EEPositionCRs Position crystals within parent supercrystal interior volume
467 
468 // edm::LogInfo("EcalGeom") << "EEPositionCRs called " << std::endl;
469 
470  static const unsigned int ncol ( 5 ) ;
471 
472  if( iSCType > 0 &&
473  iSCType <= eenSCTypes() )
474  {
475  const unsigned int icoffset ( ( iSCType - 1 )*ncol - 1 ) ;
476 
477  // Loop over columns of SC
478  for( unsigned int icol ( 1 ); icol <= ncol ; ++icol )
479  {
480  // Get column limits for this SC type from xml input
481  const int ncrcol ( (int) eevecEESCProf()[ icoffset + icol ] ) ;
482 
483  const int imin ( 0 < ncrcol ? 1 : ( 0 > ncrcol ? ncol + ncrcol + 1 : 0 ) ) ;
484  const int imax ( 0 < ncrcol ? ncrcol : ( 0 > ncrcol ? ncol : 0 ) ) ;
485 
486  if( imax>0 )
487  {
488  // Loop over crystals in this row
489  for( int irow ( imin ); irow <= imax ; ++irow )
490  {
491 // edm::LogInfo("EcalGeom") << " type, col, row " << iSCType
492 // << " " << icol << " " << irow << std::endl;
493 
494  // Create crystal as a DDEcalEndcapTrap object and calculate rotation and
495  // translation required to position it in the SC.
496  DDEcalEndcapTrap crystal( 1, eeCrysFront(), eeCrysRear(), eeCrysLength() ) ;
497 
498  crystal.moveto( cryFCtr( icol, irow ) ,
499  cryRCtr( icol, irow ) );
500 
501  DDName rname ( "EECrRoC" + std::to_string( icol ) + "R" + std::to_string( irow ) ) ;
502 
503  cpv.position( cryName(),
504  pName,
505  100*iSCType + 10*( icol - 1 ) + ( irow - 1 ),
506  crystal.centrePos() - DDTranslation(0,0,m_cryZOff),
507  myrot( rname.fullname(), crystal.rotation() ) ) ;
508  }
509  }
510  }
511  }
512 }
513 
#define LogDebug(id)
const std::vector< double > & parameters(void) const
Give the parameters of the solid.
Definition: DDSolid.cc:144
DDName cutBoxName() const
DDTranslation m_cryFCtr[5][5]
void execute(DDCompactView &cpv) override
const DDTranslation & scrRCtr(unsigned int iRow, unsigned int iCol) const
DDMaterial ddmat(const std::string &s) const
const std::vector< double > & eevecEESCCtrs() const
std::string m_cutBoxName
DDName addTmp(DDName aName) const
DDMaterial is used to define and access material information.
Definition: DDMaterial.h:43
double eeSCEFront() const
void EEPositionCRs(const DDName &pName, const DDTranslation &offset, const int iSCType, DDCompactView &cpv)
DDTranslation m_scrRCtr[10][10]
#define nullptr
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
DDName envName(unsigned int i) const
unsigned int EEGetSCType(const unsigned int iCol, const unsigned int iRow)
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:15
std::string m_intName
DDName eeQuaName() const
double iLength() const
static std::string & ns()
void moveto(const DDTranslation &frontCentre, const DDTranslation &rearCentre)
Compact representation of the geometrical detector hierarchy.
Definition: DDCompactView.h:80
double eeSCELength() const
double eeSCALength() const
std::string m_EEQuaMat
A DDSolid represents the shape of a part.
Definition: DDSolid.h:39
DDRotation myrot(const std::string &s, const DDRotationMatrix &r) const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
void initialize(const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs) override
double eenSCCutaway() const
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:68
std::string m_idNameSpace
std::vector< double > m_vecEESCLims
DDName cryName() const
const std::vector< double > & vecEESCLims() const
std::string m_EECrysMat
std::string m_envName
double eeCrysLength() const
~DDEcalEndcapAlgo() override
const std::vector< double > & eevecEESCProf() const
DDMaterial eeWallMat() const
double eeCrysRear() const
T sqrt(T t)
Definition: SSEVec.h:18
double eePF45() const
std::string m_EEQuaName
std::string m_cryName
const std::string fullname() const
Definition: DDName.h:43
DDTranslation m_scrFCtr[10][10]
DDName ddname(const std::string &s) 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:80
double eeCrysFront() const
const DDTranslation & cryRCtr(unsigned int iRow, unsigned int iCol) 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:792
double eenSCquad() const
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:704
const DDTranslation & cryFCtr(unsigned int iRow, unsigned int iCol) const
DDMaterial eeCrysMat() const
ii
Definition: cuy.py:590
const std::vector< double > & eevecEECRCtrs() const
DDMaterial eeMat() const
double eezOff() const
std::vector< double > m_vecEEShape
DDTranslation m_cryRCtr[5][5]
part
Definition: HCALResponse.h:20
static DDSolid subtraction(const DDName &name, const DDSolid &a, const DDSolid &b, const DDTranslation &t, const DDRotation &r)
Definition: DDSolid.cc:774
double eePFHalf() const
std::vector< double > m_vecEESCCtrs
double eePFFifth() const
double eenColumns() const
double eeSCAFront() const
void position(const DDLogicalPart &self, const DDLogicalPart &parent, const std::string &copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=0)
std::vector< double > m_vecEECRCtrs
double eeSCARear() const
void translate(const DDTranslation &trans)
DDName intName(unsigned int i) const
const DDTranslation & scrFCtr(unsigned int iRow, unsigned int iCol) const
double eenSCTypes() const
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = &#39;:&#39;
Definition: DDSplit.cc:3
const std::vector< double > & eevecEESCCutaway() const
void EECreateSC(const unsigned int iSCType, DDCompactView &cpv)
std::string m_EEWallMat
std::string m_alvName
DDTranslation centrePos()
DDRotationMatrix rotation()
const std::vector< double > & eevecEEShape() const
const std::vector< double > * m_cutParms
DDName alvName(unsigned int i) const
std::vector< double > m_vecEESCCutaway
double eeSCAWall() const
double eeSCERear() const
double iXYOff() const
std::vector< double > m_vecEESCProf