CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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 ( 0 ),
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 // edm::LogInfo("EcalGeom") << "DDEcalEndcapAlgo info: end initialize" ;
141 }
142 
144 // DDEcalEndcapAlgo methods...
146 
147 
150  const DDRotationMatrix& r ) const
151 {
152  return DDrot( ddname( m_idNameSpace + ":" + s ), new DDRotationMatrix( r ) ) ;
153 }
154 /*
155 DDRotation
156 DDEcalBarrelAlgo::myrot( const std::string& s,
157  const CLHEP::HepRotation& r ) const
158 {
159  return DDrot( ddname( m_idNameSpace + ":" + s ), new DDRotationMatrix( r.xx(), r.xy(), r.xz(), r.yx(), r.yy(), r.yz(), r.zx(), r.zy(), r.zz() ) ) ;
160 }*/
161 
164 {
165  return DDMaterial( ddname( s ) ) ;
166 }
167 
168 DDName
170 {
171  const pair<std::string,std::string> temp ( DDSplit(s) ) ;
172  if ( temp.second == "" ) {
173  return DDName( temp.first,
174  m_idNameSpace ) ;
175  } else {
176  return DDName( temp.first, temp.second );
177  }
178 }
179 
180 //-------------------- Endcap SC geometry methods ---------------------
181 
182 void
184 {
185 // Position supercrystals in EE Quadrant
186 // Version: 1.00
187 // Created: 30 July 2007
188 // Last Mod:
189 //---------------------------------------------------------------------
190 
191 //********************************* cutbox for trimming edge SCs
192  const double cutWid ( eeSCERear()/sqrt(2.) ) ;
193  const DDSolid eeCutBox ( DDSolidFactory::box(
194  cutBoxName(),
195  cutWid,
196  cutWid,
197  eeSCELength()/sqrt(2.) ) ) ;
198  m_cutParms = &eeCutBox.parameters() ;
199 //**************************************************************
200 
201  const double zFix ( m_zFront - 3172*mm ) ; // fix for changing z offset
202 
203 //** fill supercrystal front and rear center positions from xml input
204  for( unsigned int iC ( 0 ) ; iC != (unsigned int) eenSCquad() ; ++iC )
205  {
206  const unsigned int iOff ( 8*iC ) ;
207  const unsigned int ix ( (unsigned int) eevecEESCCtrs()[ iOff + 0 ] ) ;
208  const unsigned int iy ( (unsigned int) eevecEESCCtrs()[ iOff + 1 ] ) ;
209 
210  assert( ix > 0 && ix < 11 && iy >0 && iy < 11 ) ;
211 
212  m_scrFCtr[ ix - 1 ][ iy - 1 ] = DDTranslation( eevecEESCCtrs()[ iOff + 2 ] ,
213  eevecEESCCtrs()[ iOff + 4 ] ,
214  eevecEESCCtrs()[ iOff + 6 ] + zFix ) ;
215 
216  m_scrRCtr[ ix - 1 ][ iy - 1 ] = DDTranslation( eevecEESCCtrs()[ iOff + 3 ] ,
217  eevecEESCCtrs()[ iOff + 5 ] ,
218  eevecEESCCtrs()[ iOff + 7 ] + zFix ) ;
219  }
220 
221 //** fill crystal front and rear center positions from xml input
222  for( unsigned int iC ( 0 ) ; iC != 25 ; ++iC )
223  {
224  const unsigned int iOff ( 8*iC ) ;
225  const unsigned int ix ( (unsigned int) eevecEECRCtrs()[ iOff + 0 ] ) ;
226  const unsigned int iy ( (unsigned int) eevecEECRCtrs()[ iOff + 1 ] ) ;
227 
228  assert( ix > 0 && ix < 6 && iy >0 && iy < 6 ) ;
229 
230  m_cryFCtr[ ix - 1 ][ iy - 1 ] = DDTranslation( eevecEECRCtrs()[ iOff + 2 ] ,
231  eevecEECRCtrs()[ iOff + 4 ] ,
232  eevecEECRCtrs()[ iOff + 6 ] ) ;
233 
234  m_cryRCtr[ ix - 1 ][ iy - 1 ] = DDTranslation( eevecEECRCtrs()[ iOff + 3 ] ,
235  eevecEECRCtrs()[ iOff + 5 ] ,
236  eevecEECRCtrs()[ iOff + 7 ] ) ;
237  }
238 
239  EECreateCR() ; // make a single crystal just once here
240 
241  for( unsigned int isc ( 0 ); isc<eenSCTypes() ; ++isc )
242  {
243  EECreateSC( isc+1, cpv );
244  }
245 
246  const std::vector<double>& colLimits ( eevecEEShape() );
247 //** Loop over endcap columns
248  for( int icol = 1; icol<=int(eenColumns()); icol++ )
249  {
250 //** Loop over SCs in column, using limits from xml input
251  for( int irow = int(colLimits[2*icol-2]);
252  irow <= int(colLimits[2*icol-1]) ; ++irow )
253  {
254  if( vecEESCLims()[0] <= icol &&
255  vecEESCLims()[1] >= icol &&
256  vecEESCLims()[2] <= irow &&
257  vecEESCLims()[3] >= irow )
258  {
259  // Find SC type (complete or partial) for this location
260  const unsigned int isctype ( EEGetSCType( icol, irow ) );
261 
262  // Create SC as a DDEcalEndcapTrap object and calculate rotation and
263  // translation required to position it in the endcap.
264  DDEcalEndcapTrap scrys( 1, eeSCEFront(), eeSCERear(), eeSCELength() ) ;
265 
266  scrys.moveto( scrFCtr( icol, irow ),
267  scrRCtr( icol, irow ) );
268  scrys.translate( DDTranslation( 0., 0., -eezOff() ) ) ;
269 
270  DDName rname ( envName( isctype ).name()
271  + int_to_string( icol ) + "R" + int_to_string( irow ) ) ;
272 /*
273  edm::LogInfo("EcalGeom") << "Quadrant, SC col/row "
274  << eeQuaName() << " " << icol << " / " << irow << std::endl
275  << " Limits " << int(colLimits[2*icol-2]) << "->" << int(colLimits[2*icol-1]) << std::endl
276  << " SC type = " << isctype << std::endl
277  << " Zoff, Scz = " << eezOff() << " " << sc1.z() << std::endl
278  << " Rotation " << rname << " " << scrys.rotation() << std::endl
279  << " Position " << sccentre << std::endl;
280 */
281  // Position SC in endcap
282  cpv.position( envName( isctype ),
283  eeQuaName(),
284  100*isctype + 10*(icol-1) + (irow-1),
285  scrys.centrePos(),
286  myrot( rname.fullname(), scrys.rotation() ) ) ;
287  }
288  }
289  }
290 }
291 
292 
293 void
294 DDEcalEndcapAlgo::EECreateSC( const unsigned int iSCType ,
295  DDCompactView& cpv )
296 { // EECreateSCType Create SC logical volume of the given type
297 
298  DDRotation noRot ;
299 
300  DDLogicalPart eeSCELog;
301  DDLogicalPart eeSCALog;
302  DDLogicalPart eeSCILog;
303 
304 // edm::LogInfo("EcalGeom") << "EECreateSC: Creating SC envelope" << std::endl;
305 
306  const string anum ( int_to_string(iSCType) ) ;
307 
308  const double eFront ( 0.5*eeSCEFront() ) ;
309  const double eRear ( 0.5*eeSCERear() ) ;
310  const double eAng ( atan((eeSCERear()-eeSCEFront())/(sqrt(2.)*eeSCELength())) ) ;
311  const double ffived ( 45*deg ) ;
312  const double zerod ( 0*deg ) ;
313  DDSolid eeSCEnv ( DDSolidFactory::trap(
314  ( 1 == iSCType ? envName( iSCType ) : addTmp( envName( iSCType ) ) ),
315  0.5*eeSCELength(),
316  eAng,
317  ffived,
318  eFront,
319  eFront,
320  eFront,
321  zerod,
322  eRear,
323  eRear,
324  eRear,
325  zerod ) );
326 
327  const double aFront ( 0.5*eeSCAFront() ) ;
328  const double aRear ( 0.5*eeSCARear() ) ;
329  const double aAng ( atan((eeSCARear()-eeSCAFront())/(sqrt(2.)*eeSCALength())) ) ;
330  const DDSolid eeSCAlv ( DDSolidFactory::trap(
331  ( 1== iSCType ? alvName( iSCType ) : addTmp( alvName( iSCType ) ) ),
332  0.5*eeSCALength(),
333  aAng,
334  ffived,
335  aFront,
336  aFront,
337  aFront,
338  zerod,
339  aRear,
340  aRear,
341  aRear,
342  zerod ) );
343 
344  const double dwall ( eeSCAWall() ) ;
345  const double iFront ( aFront - dwall ) ;
346  const double iRear ( iFront ) ; //aRear - dwall ) ;
347  const double iLen ( iLength() ) ; //0.075*eeSCALength() ) ;
348  const DDSolid eeSCInt ( DDSolidFactory::trap(
349  ( 1==iSCType ? intName( iSCType ) : addTmp( intName( iSCType ) ) ),
350  iLen/2.,
351  atan((eeSCARear()-eeSCAFront())/(sqrt(2.)*eeSCALength())),
352  ffived,
353  iFront,
354  iFront,
355  iFront,
356  zerod,
357  iRear,
358  iRear,
359  iRear,
360  zerod ) );
361 
362  const double dz ( -0.5*( eeSCELength() - eeSCALength() ) ) ;
363  const double dxy ( 0.5* dz * (eeSCERear() - eeSCEFront())/eeSCELength() ) ;
364  const double zIOff ( -( eeSCALength() - iLen )/2. ) ;
365  const double xyIOff ( iXYOff() ) ;
366 
367  if( 1 == iSCType ) // standard SC in this block
368  {
369  eeSCELog = DDLogicalPart( envName( iSCType ), eeMat(), eeSCEnv );
370  eeSCALog = DDLogicalPart( alvName( iSCType ), eeWallMat(), eeSCAlv );
371  eeSCILog = DDLogicalPart( intName( iSCType ), eeMat(), eeSCInt );
372  }
373  else // partial SCs this block: create subtraction volumes as appropriate
374  {
375  const double half ( (*m_cutParms)[0] - eePFHalf() *eeCrysRear() ) ;
376  const double fifth ( (*m_cutParms)[0] + eePFFifth()*eeCrysRear() ) ;
377  const double fac ( eePF45() ) ;
378 
379  const double zmm ( 0*mm ) ;
380 
381  DDTranslation cutTra ( 2 == iSCType ? DDTranslation( zmm, half, zmm ) :
382  ( 3 == iSCType ? DDTranslation( half, zmm, zmm ) :
383  ( 4 == iSCType ? DDTranslation( zmm, -fifth, zmm ) :
384  ( 5 == iSCType ? DDTranslation( -half*fac, -half*fac, zmm ) :
385  DDTranslation( -fifth, zmm, zmm ) ) ) ) ) ;
386 
387  const CLHEP::HepRotationZ cutm ( ffived ) ;
388 
389  DDRotation cutRot ( 5 != iSCType ? noRot : myrot( "EECry5Rot",
390  DDRotationMatrix( cutm.xx(), cutm.xy(), cutm.xz(),
391  cutm.yx(), cutm.yy(), cutm.yz(),
392  cutm.zx(), cutm.zy(), cutm.zz() ) ) ) ;
393 
394  DDSolid eeCutEnv ( DDSolidFactory::subtraction( envName( iSCType ),
395  addTmp( envName( iSCType ) ),
396  cutBoxName(),
397  cutTra,
398  cutRot ) ) ;
399 
400  const DDTranslation extra ( dxy, dxy, dz ) ;
401 
402  DDSolid eeCutAlv ( DDSolidFactory::subtraction( alvName( iSCType ),
403  addTmp( alvName( iSCType ) ),
404  cutBoxName(),
405  cutTra - extra,
406  cutRot ) ) ;
407 
408  const double mySign ( iSCType < 4 ? +1. : -1. ) ;
409 
410  const DDTranslation extraI ( xyIOff + mySign*2*mm,
411  xyIOff + mySign*2*mm, zIOff ) ;
412 
413  DDSolid eeCutInt ( DDSolidFactory::subtraction( intName( iSCType ),
414  addTmp( intName( iSCType ) ),
415  cutBoxName(),
416  cutTra - extraI,
417  cutRot ) ) ;
418 
419  eeSCELog = DDLogicalPart( envName( iSCType ), eeMat() , eeCutEnv ) ;
420  eeSCALog = DDLogicalPart( alvName( iSCType ), eeWallMat(), eeCutAlv ) ;
421  eeSCILog = DDLogicalPart( intName( iSCType ), eeMat() , eeCutInt ) ;
422  }
423 
424 
425  cpv.position( eeSCALog, envName( iSCType ), iSCType*100 + 1, DDTranslation( dxy, dxy, dz ), noRot );
426  cpv.position( eeSCILog, alvName( iSCType ), iSCType*100 + 1, DDTranslation( xyIOff, xyIOff, zIOff), noRot );
427 
428  DDTranslation croffset( 0., 0., 0.) ;
429  EEPositionCRs( alvName( iSCType ), croffset, iSCType, cpv ) ;
430 
431 }
432 
433 unsigned int
434 DDEcalEndcapAlgo::EEGetSCType( const unsigned int iCol,
435  const unsigned int iRow )
436 {
437  unsigned int iType = 1;
438  for( unsigned int ii = 0; ii < (unsigned int)( eenSCCutaway() ) ; ++ii )
439  {
440  if( ( eevecEESCCutaway()[ 3*ii ] == iCol ) &&
441  ( eevecEESCCutaway()[ 3*ii + 1 ] == iRow ) )
442  {
443  iType = int(eevecEESCCutaway()[3*ii+2]);
444 // edm::LogInfo("EcalGeom") << "EEGetSCType: col, row, type = "
445 // << iCol << " " << iRow << " " << iType << std::endl;
446  }
447  }
448  return iType;
449 }
450 
451 void
453 {
454  // EECreateCR Create endcap crystal logical volume
455 
456 // edm::LogInfo("EcalGeom") << "EECreateCR: = " << std::endl;
457 
458  DDSolid EECRSolid (DDSolidFactory::trap(
459  cryName(),
460  0.5*eeCrysLength(),
461  atan((eeCrysRear()-eeCrysFront())/(sqrt(2.)*eeCrysLength())),
462  45.*deg,
463  0.5*eeCrysFront(),0.5*eeCrysFront(),0.5*eeCrysFront(),0.*deg,
464  0.5*eeCrysRear(), 0.5*eeCrysRear(), 0.5*eeCrysRear(),0.*deg ) );
465 
466  DDLogicalPart part ( cryName(), eeCrysMat(), EECRSolid ) ;
467 }
468 
469 void
471  const DDTranslation& /*offset*/,
472  const int iSCType,
473  DDCompactView& cpv )
474 {
475  // EEPositionCRs Position crystals within parent supercrystal interior volume
476 
477 // edm::LogInfo("EcalGeom") << "EEPositionCRs called " << std::endl;
478 
479  static const unsigned int ncol ( 5 ) ;
480 
481  if( iSCType > 0 &&
482  iSCType <= eenSCTypes() )
483  {
484  const unsigned int icoffset ( ( iSCType - 1 )*ncol - 1 ) ;
485 
486  // Loop over columns of SC
487  for( unsigned int icol ( 1 ); icol <= ncol ; ++icol )
488  {
489  // Get column limits for this SC type from xml input
490  const int ncrcol ( (int) eevecEESCProf()[ icoffset + icol ] ) ;
491 
492  const int imin ( 0 < ncrcol ? 1 : ( 0 > ncrcol ? ncol + ncrcol + 1 : 0 ) ) ;
493  const int imax ( 0 < ncrcol ? ncrcol : ( 0 > ncrcol ? ncol : 0 ) ) ;
494 
495  if( imax>0 )
496  {
497  // Loop over crystals in this row
498  for( int irow ( imin ); irow <= imax ; ++irow )
499  {
500 // edm::LogInfo("EcalGeom") << " type, col, row " << iSCType
501 // << " " << icol << " " << irow << std::endl;
502 
503  // Create crystal as a DDEcalEndcapTrap object and calculate rotation and
504  // translation required to position it in the SC.
505  DDEcalEndcapTrap crystal( 1, eeCrysFront(), eeCrysRear(), eeCrysLength() ) ;
506 
507  crystal.moveto( cryFCtr( icol, irow ) ,
508  cryRCtr( icol, irow ) );
509 
510  DDName rname ( "EECrRoC" + int_to_string( icol ) + "R" + int_to_string( irow ) ) ;
511 
512  cpv.position( cryName(),
513  pName,
514  100*iSCType + 10*( icol - 1 ) + ( irow - 1 ),
515  crystal.centrePos() - DDTranslation(0,0,m_cryZOff),
516  myrot( rname.fullname(), crystal.rotation() ) ) ;
517  }
518  }
519  }
520  }
521 }
522 
#define LogDebug(id)
const std::vector< double > & parameters(void) const
Give the parameters of the solid.
Definition: DDSolid.cc:150
DDName cutBoxName() const
DDTranslation m_cryFCtr[5][5]
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:41
double eeSCEFront() const
void EEPositionCRs(const DDName &pName, const DDTranslation &offset, const int iSCType, DDCompactView &cpv)
assert(m_qm.get())
DDTranslation m_scrRCtr[10][10]
DDName envName(unsigned int i) const
void position(const DDLogicalPart &self, const DDLogicalPart &parent, std::string copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=NULL)
unsigned int EEGetSCType(const unsigned int iCol, const unsigned int iRow)
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:14
std::string m_intName
DDName eeQuaName() const
double iLength() const
static std::string & ns()
void execute(DDCompactView &cpv)
void moveto(const DDTranslation &frontCentre, const DDTranslation &rearCentre)
int ii
Definition: cuy.py:588
type of data representation of DDCompactView
Definition: DDCompactView.h:77
double eeSCELength() const
double eeSCALength() const
std::string m_EEQuaMat
A DDSolid represents the shape of a part.
Definition: DDSolid.h:35
DDRotation myrot(const std::string &s, const DDRotationMatrix &r) const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
double eenSCCutaway() const
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:66
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
const std::vector< double > & eevecEESCProf() const
DDMaterial eeWallMat() const
std::string int_to_string(const int &in)
Definition: DDutils.cc:16
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:51
DDTranslation m_scrFCtr[10][10]
DDName ddname(const std::string &s) const
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:88
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:723
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:519
const DDTranslation & cryFCtr(unsigned int iRow, unsigned int iCol) const
DDMaterial eeCrysMat() const
DDRotation DDrot(const DDName &name, DDRotationMatrix *rot)
Definition of a uniquely identifiable rotation matrix named by DDName name.
Definition: DDRotation.cc:90
const std::vector< double > & eevecEECRCtrs() const
DDMaterial eeMat() const
double eezOff() const
std::vector< double > m_vecEEShape
DDTranslation m_cryRCtr[5][5]
void initialize(const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs)
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:705
double eePFHalf() const
std::vector< double > m_vecEESCCtrs
double eePFFifth() const
double eenColumns() const
double eeSCAFront() const
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
virtual ~DDEcalEndcapAlgo()
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = &#39;:&#39;
Definition: DDSplit.cc:4
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
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
double eeSCAWall() const
double eeSCERear() const
double iXYOff() const
std::vector< double > m_vecEESCProf