CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Protected Member Functions | Private Attributes
DDHCalBarrelAlgo Class Reference

#include <DDHCalBarrelAlgo.h>

Inheritance diagram for DDHCalBarrelAlgo:

Public Member Functions

 DDHCalBarrelAlgo ()
 
void execute (DDCompactView &cpv)
 
double getAbsorbD (unsigned int i) const
 
int getAbsorberN () const
 
std::string getAbsorbMat (unsigned int i) const
 
std::string getAbsorbName (unsigned int i) const
 
double getAbsorbT (unsigned int i) const
 
double getDetdP1 (unsigned int i) const
 
double getDetdP2 (unsigned int i) const
 
std::string getDetMat () const
 
std::string getDetMatPl () const
 
std::string getDetMatSc () const
 
int getDetPosY (unsigned int i) const
 
double getDetT11 (unsigned int i) const
 
double getDetT12 (unsigned int i) const
 
double getDetT21 (unsigned int i) const
 
double getDetT22 (unsigned int i) const
 
double getDetTsc (unsigned int i) const
 
int getDetType (unsigned int i) const
 
double getDetWidth1 (unsigned int i) const
 
double getDetWidth2 (unsigned int i) const
 
std::string getGenMaterial () const
 
int getLayerAbsorb (unsigned int i) const
 
double getLayerAlpha (unsigned i) const
 
double getLayerD1 (unsigned i) const
 
double getLayerD2 (unsigned i) const
 
double getLayerGap (unsigned int i) const
 
int getLayerId (unsigned i) const
 
std::string getLayerLabel (unsigned i) const
 
std::string getLayerMaterial (unsigned i) const
 
double getLayerT1 (unsigned i) const
 
double getLayerT2 (unsigned i) const
 
double getLayerWidth (unsigned i) const
 
std::string getMidAbsMat (unsigned int i) const
 
std::string getMidAbsName (unsigned int i) const
 
int getMidAbsorber () const
 
double getMidAbsT (unsigned int i) const
 
double getMidAbsW (unsigned int i) const
 
double getMiddleD () const
 
std::string getMiddleMat () const
 
double getMiddleW () const
 
int getNhalf () const
 
int getNLayers () const
 
int getNsectors () const
 
int getNsectortot () const
 
double getRin () const
 
double getRmax (unsigned int i) const
 
double getRout () const
 
int getRzones () const
 
std::string getSideAbsMat (unsigned int i) const
 
std::string getSideAbsName (unsigned int i) const
 
int getSideAbsorber () const
 
double getSideAbsW (unsigned int i) const
 
double getSideD (unsigned int i) const
 
std::string getSideMat (unsigned int i) const
 
double getSideT (unsigned int i) const
 
double getTanTheta (unsigned int i) const
 
double getTheta (unsigned int i) const
 
double getZoff (unsigned int i) const
 
void initialize (const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs)
 
virtual ~DDHCalBarrelAlgo ()
 

Protected Member Functions

void constructGeneralVolume (DDCompactView &cpv)
 
void constructInsideDetectors (DDLogicalPart detector, std::string name, int id, double dx, double dy, double dz, int type, DDCompactView &cpv)
 
void constructInsideLayers (DDLogicalPart laylog, std::string name, int id, int nAbs, double rin, double d1, double alpha1, double d2, double alpha2, double t1, double t2, DDCompactView &cpv)
 
void constructInsideSector (DDLogicalPart sector, DDCompactView &cpv)
 
DDLogicalPart constructMidLayer (DDLogicalPart laylog, std::string nm, double rin, double alpha, DDCompactView &cpv)
 
DDLogicalPart constructSideLayer (DDLogicalPart laylog, std::string nm, int nAbs, double rin, double alpha, DDCompactView &cpv)
 

Private Attributes

std::vector< double > absorbD
 
std::vector< std::string > absorbMat
 
std::vector< std::string > absorbName
 
std::vector< double > absorbT
 
std::vector< double > detdP1
 
std::vector< double > detdP2
 
std::string detMat
 
std::string detMatPl
 
std::string detMatSc
 
std::vector< int > detPosY
 
std::string detRot
 
std::vector< double > detT11
 
std::vector< double > detT12
 
std::vector< double > detT21
 
std::vector< double > detT22
 
std::vector< double > detTsc
 
std::vector< int > detType
 
std::vector< double > detWidth1
 
std::vector< double > detWidth2
 
std::string genMaterial
 
std::string idName
 
std::string idNameSpace
 
int idOffset
 
std::vector< int > layerAbsorb
 
std::vector< double > layerAlpha
 
std::vector< double > layerD1
 
std::vector< double > layerD2
 
std::vector< double > layerGap
 
std::vector< int > layerId
 
std::vector< std::string > layerLabel
 
std::vector< std::string > layerMat
 
std::vector< double > layerT1
 
std::vector< double > layerT2
 
std::vector< double > layerWidth
 
double middleD
 
std::string middleMat
 
double middleW
 
std::vector< std::string > midMat
 
std::vector< std::string > midName
 
std::vector< double > midT
 
std::vector< double > midW
 
int nAbsorber
 
int nhalf
 
int nLayers
 
int nMidAbs
 
int nsectors
 
int nsectortot
 
int nSideAbs
 
double rin
 
std::vector< double > rmax
 
std::string rotHalf
 
std::string rotns
 
double rout
 
int rzones
 
std::vector< std::string > sideAbsMat
 
std::vector< std::string > sideAbsName
 
std::vector< double > sideAbsW
 
std::vector< double > sideD
 
std::vector< std::string > sideMat
 
std::vector< double > sideT
 
std::vector< double > theta
 
std::vector< double > ttheta
 
std::vector< double > zoff
 

Detailed Description

Definition at line 10 of file DDHCalBarrelAlgo.h.

Constructor & Destructor Documentation

DDHCalBarrelAlgo::DDHCalBarrelAlgo ( )

Definition at line 22 of file DDHCalBarrelAlgo.cc.

References LogDebug.

22  :
23  theta(0),rmax(0),zoff(0),ttheta(0),layerId(0),layerLabel(0),layerMat(0),
26  midName(0),midMat(0),midW(0),midT(0),sideMat(0),sideD(0),sideT(0),
28  detT11(0),detT12(0),detTsc(0),detT21(0),detT22(0),detWidth1(0),detWidth2(0),
29  detPosY(0) {
30  LogDebug("HCalGeom") << "DDHCalBarrelAlgo info: Creating an instance";
31 }
#define LogDebug(id)
std::vector< std::string > absorbMat
std::vector< std::string > midMat
std::vector< double > sideAbsW
std::vector< std::string > layerLabel
std::vector< double > layerD2
std::vector< std::string > layerMat
std::vector< int > layerId
std::vector< double > rmax
std::vector< double > layerT1
std::vector< double > detdP2
std::vector< double > detWidth2
std::vector< std::string > sideAbsName
std::vector< double > detdP1
std::vector< double > absorbT
std::vector< double > detWidth1
std::vector< double > layerGap
std::vector< double > layerAlpha
std::vector< double > detT22
std::vector< int > layerAbsorb
std::vector< std::string > sideAbsMat
std::vector< double > sideT
std::vector< double > detTsc
std::vector< std::string > midName
std::vector< std::string > sideMat
std::vector< double > detT21
std::vector< int > detPosY
std::vector< int > detType
std::vector< double > zoff
std::vector< double > sideD
std::vector< double > detT11
std::vector< double > absorbD
std::vector< double > ttheta
std::vector< double > theta
std::vector< double > layerWidth
std::vector< std::string > absorbName
std::vector< double > midW
std::vector< double > layerD1
std::vector< double > detT12
std::vector< double > midT
std::vector< double > layerT2
DDHCalBarrelAlgo::~DDHCalBarrelAlgo ( )
virtual

Definition at line 33 of file DDHCalBarrelAlgo.cc.

33 {}

Member Function Documentation

void DDHCalBarrelAlgo::constructGeneralVolume ( DDCompactView cpv)
protected

Definition at line 198 of file DDHCalBarrelAlgo.cc.

References alpha, constructInsideSector(), dbl_to_string(), DDrot(), DDSplit(), plotBeamSpotDB::first, getGenMaterial(), getNhalf(), getNsectors(), getNsectortot(), getRin(), getRmax(), getRout(), getTanTheta(), getZoff(), i, idName, idNameSpace, cuy::ii, LogDebug, mergeVDriftHistosByStation::name, DDBase< N, C >::name(), dbtoconf::parent, phi, pi, DDSolidFactory::polyhedra(), DDCompactView::position(), rin, makeMuonMisalignmentScenario::rot, idealTransformation::rotation, rotHalf, rotns, rout, edm::second(), and SiStripMonitorClusterAlca_cfi::zmax.

Referenced by execute().

198  {
199 
200  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: General volume...";
201  unsigned int i=0;
202 
204 
205  double alpha = CLHEP::pi/getNsectors();
206  double dphi = getNsectortot()*CLHEP::twopi/getNsectors();
207  int nsec, ntot=15;
208  if (getNhalf() == 1)
209  nsec = 8;
210  else
211  nsec = 15;
212  int nf = ntot - nsec;
213 
214  //Calculate zmin... see HCalBarrel.hh picture. For polyhedra
215  //Rmin and Rmax are distances to vertex
216  double zmax = getZoff(3);
217  double zstep5 = getZoff(4);
218  double zstep4 =(getZoff(1) + getRmax(1)*getTanTheta(1));
219  if ((getZoff(2)+getRmax(1)*getTanTheta(2)) > zstep4)
220  zstep4 = (getZoff(2)+getRmax(1)*getTanTheta(2));
221  double zstep3 =(getZoff(1) + getRmax(0)*getTanTheta(1));
222  double zstep2 =(getZoff(0) + getRmax(0)*getTanTheta(0));
223  double zstep1 =(getZoff(0) + getRin() *getTanTheta(0));
224  double rout = getRout();
225  double rout1 = getRmax(3);
226  double rin = getRin();
227  double rmid1 = getRmax(0);
228  double rmid2 = getRmax(1);
229  double rmid3 =(getZoff(4) - getZoff(2))/getTanTheta(2);
230  double rmid4 = getRmax(2);
231 
232  vector<double> pgonZ;
233  pgonZ.push_back( -zmax);
234  pgonZ.push_back( -zstep5);
235  pgonZ.push_back( -zstep5);
236  pgonZ.push_back( -zstep4);
237  pgonZ.push_back( -zstep3);
238  pgonZ.push_back( -zstep2);
239  pgonZ.push_back( -zstep1);
240  pgonZ.push_back( 0);
241  pgonZ.push_back( zstep1);
242  pgonZ.push_back( zstep2);
243  pgonZ.push_back( zstep3);
244  pgonZ.push_back( zstep4);
245  pgonZ.push_back( zstep5);
246  pgonZ.push_back( zstep5);
247  pgonZ.push_back( zmax);
248 
249  vector<double> pgonRmin;
250  pgonRmin.push_back( rmid4);
251  pgonRmin.push_back( rmid3);
252  pgonRmin.push_back( rmid3);
253  pgonRmin.push_back( rmid2);
254  pgonRmin.push_back( rmid1);
255  pgonRmin.push_back( rmid1);
256  pgonRmin.push_back( rin);
257  pgonRmin.push_back( rin);
258  pgonRmin.push_back( rin);
259  pgonRmin.push_back( rmid1);
260  pgonRmin.push_back( rmid1);
261  pgonRmin.push_back( rmid2);
262  pgonRmin.push_back( rmid3);
263  pgonRmin.push_back( rmid3);
264  pgonRmin.push_back( rmid4);
265 
266  vector<double> pgonRmax;
267  pgonRmax.push_back( rout1);
268  pgonRmax.push_back( rout1);
269  pgonRmax.push_back( rout);
270  pgonRmax.push_back( rout);
271  pgonRmax.push_back( rout);
272  pgonRmax.push_back( rout);
273  pgonRmax.push_back( rout);
274  pgonRmax.push_back( rout);
275  pgonRmax.push_back( rout);
276  pgonRmax.push_back( rout);
277  pgonRmax.push_back( rout);
278  pgonRmax.push_back( rout);
279  pgonRmax.push_back( rout);
280  pgonRmax.push_back( rout1);
281  pgonRmax.push_back( rout1);
282 
283  vector<double> pgonZHalf;
284  pgonZHalf.push_back( 0);
285  pgonZHalf.push_back( zstep1);
286  pgonZHalf.push_back( zstep2);
287  pgonZHalf.push_back( zstep3);
288  pgonZHalf.push_back( zstep4);
289  pgonZHalf.push_back( zstep5);
290  pgonZHalf.push_back( zstep5);
291  pgonZHalf.push_back( zmax);
292 
293  vector<double> pgonRminHalf;
294  pgonRminHalf.push_back( rin);
295  pgonRminHalf.push_back( rin);
296  pgonRminHalf.push_back( rmid1);
297  pgonRminHalf.push_back( rmid1);
298  pgonRminHalf.push_back( rmid2);
299  pgonRminHalf.push_back( rmid3);
300  pgonRminHalf.push_back( rmid3);
301  pgonRminHalf.push_back( rmid4);
302 
303  vector<double> pgonRmaxHalf;
304  pgonRmaxHalf.push_back( rout);
305  pgonRmaxHalf.push_back( rout);
306  pgonRmaxHalf.push_back( rout);
307  pgonRmaxHalf.push_back( rout);
308  pgonRmaxHalf.push_back( rout);
309  pgonRmaxHalf.push_back( rout);
310  pgonRmaxHalf.push_back( rout1);
311  pgonRmaxHalf.push_back( rout1);
312 
313  string name("Null");
314  DDSolid solid;
315  if (nf == 0) {
317  getNsectortot(), -alpha, dphi, pgonZ,
318  pgonRmin, pgonRmax);
319  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: "
320  << DDName(idName, idNameSpace) <<" Polyhedra made of "
321  << getGenMaterial() << " with " << getNsectortot()
322  << " sectors from " << -alpha/CLHEP::deg <<" to "
323  << (-alpha+dphi)/CLHEP::deg << " and with " << nsec
324  << " sections ";
325  for (i = 0; i <pgonZ.size(); i++) {
326  LogDebug("HCalGeom") << "\t" << "\tZ = " << pgonZ[i] << "\tRmin = "
327  << pgonRmin[i] << "\tRmax = " << pgonRmax[i];
328  }
329  } else {
331  getNsectortot(), -alpha, dphi, pgonZHalf,
332  pgonRminHalf, pgonRmaxHalf);
333  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: "
334  << DDName(idName, idNameSpace) <<" Polyhedra made of "
335  << getGenMaterial() << " with " << getNsectortot()
336  << " sectors from " << -alpha/CLHEP::deg << " to "
337  << (-alpha+dphi)/CLHEP::deg << " and with " << nsec
338  << " sections ";
339  for (i = 0; i < pgonZHalf.size(); i++) {
340  LogDebug("HCalGeom") << "\t" << "\tZ = " << pgonZHalf[i] << "\tRmin = "
341  << pgonRminHalf[i] << "\tRmax = " <<pgonRmaxHalf[i];
342  }
343  }
344 
345 
347  DDMaterial matter(matname);
348  DDLogicalPart genlogic(DDName(idName, idNameSpace), matter, solid);
349 
350  DDName parentName = parent().name();
351  DDTranslation r0(0,0,0);
352  cpv.position(DDName(idName, idNameSpace), parentName, 1, r0, rot);
353  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: "
354  << DDName(idName, idNameSpace) << " number 1 positioned"
355  << " in " << parentName << " at " << r0 <<" with "<<rot;
356 
357  //Forward and backwards halfs
358  name = idName + "Half";
359  nf = (ntot+1)/2;
360  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << DDName(name,idNameSpace)
361  << " Polyhedra made of " << getGenMaterial() << " with "
362  << getNsectortot() << " sectors from "
363  << -alpha/CLHEP::deg << " to "
364  << (-alpha+dphi)/CLHEP::deg << " and with " << nf
365  << " sections ";
366  for (i = 0; i < pgonZHalf.size(); i++) {
367  LogDebug("HCalGeom") << "\t" << "\tZ = " << pgonZHalf[i] << "\tRmin = "
368  << pgonRminHalf[i] << "\tRmax = " << pgonRmaxHalf[i];
369  }
370 
372  getNsectortot(), -alpha, dphi, pgonZHalf,
373  pgonRminHalf, pgonRmaxHalf);
374  DDLogicalPart genlogich(DDName(name, idNameSpace), matter, solid);
375 
376  cpv.position(genlogich, genlogic, 1, r0, rot);
377  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << genlogich.name()
378  << " number 1 positioned in " << genlogic.name()
379  << " at " << r0 << " with " << rot;
380 
381  if (getNhalf() != 1) {
382  rot = DDRotation(DDName(rotHalf, rotns));
383  cpv.position(genlogich, genlogic, 2, r0, rot);
384  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << genlogich.name()
385  << " number 2 positioned in " << genlogic.name()
386  << " at " << r0 << " with " << rot;
387  } //end if (getNhalf...
388 
389  //Construct sector (from -alpha to +alpha)
390  name = idName + "Module";
391  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << DDName(name,idNameSpace)
392  << " Polyhedra made of " << getGenMaterial()
393  << " with 1 sector from " << -alpha/CLHEP::deg << " to "
394  << alpha/CLHEP::deg << " and with " << nf <<" sections";
395  for (i = 0; i < pgonZHalf.size(); i++) {
396  LogDebug("HCalGeom") << "\t" << "\tZ = " << pgonZHalf[i] << "\tRmin = "
397  << pgonRminHalf[i] << "\tRmax = " << pgonRmaxHalf[i];
398  }
399 
401  1, -alpha, 2*alpha, pgonZHalf,
402  pgonRminHalf, pgonRmaxHalf);
403  DDLogicalPart seclogic(DDName(name, idNameSpace), matter, solid);
404 
405  for (int ii=0; ii<getNsectortot(); ii++) {
406  double phi = ii*2*alpha;
407  double phideg = phi/CLHEP::deg;
408 
410  string rotstr("NULL");
411  if (phideg != 0) {
412  rotstr = "R";
413  if (phideg < 100) rotstr = "R0";
414  rotstr = rotstr + dbl_to_string(phideg);
415  rotation = DDRotation(DDName(rotstr, rotns));
416  if (!rotation) {
417  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: Creating a new rotat"
418  << "ion " << rotstr << "\t" << 90 << "," << phideg
419  << "," << 90 << "," << (phideg+90) << ", 0, 0";
420  rotation = DDrot(DDName(rotstr, rotns), 90*CLHEP::deg,
421  phideg*CLHEP::deg, 90*CLHEP::deg,
422  (90+phideg)*CLHEP::deg, 0*CLHEP::deg, 0*CLHEP::deg);
423  } //if !rotation
424  } //if phideg!=0
425 
426  cpv.position(seclogic, genlogich, ii+1, r0, rotation);
427  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << seclogic.name()
428  << " number " << ii+1 << " positioned in "
429  << genlogich.name() << " at " << r0 << " with "
430  << rotation;
431  }
432 
433  //Construct the things inside the sector
434  constructInsideSector(seclogic, cpv);
435 }
#define LogDebug(id)
int getNsectortot() const
int i
Definition: DBlmapReader.cc:9
float alpha
Definition: AMPTWrapper.h:95
double getRin() const
std::string getGenMaterial() const
list parent
Definition: dbtoconf.py:74
int getNhalf() const
double getRmax(unsigned int i) const
DDMaterial is used to define and access material information.
Definition: DDMaterial.h:41
std::string idNameSpace
void position(const DDLogicalPart &self, const DDLogicalPart &parent, std::string copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=NULL)
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:18
void constructInsideSector(DDLogicalPart sector, DDCompactView &cpv)
std::string dbl_to_string(const double &in)
Converts only the integer part of a double to a string.
Definition: DDutils.cc:12
int ii
Definition: cuy.py:588
A DDSolid represents the shape of a part.
Definition: DDSolid.h:35
double getRout() const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
const Double_t pi
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:66
double getZoff(unsigned int i) const
U second(std::pair< T, U > const &p)
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:88
double getTanTheta(unsigned int i) const
int getNsectors() const
DDRotation DDrot(const DDName &name, DDRotationMatrix *rot)
Definition of a uniquely identifiable rotation matrix named by DDName name.
Definition: DDRotation.cc:90
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = &#39;:&#39;
Definition: DDSplit.cc:4
static DDSolid polyhedra(const DDName &name, int sides, double startPhi, double deltaPhi, const std::vector< double > &z, const std::vector< double > &rmin, const std::vector< double > &rmax)
Creates a polyhedra (refere to Geant3 or Geant4 documentation)
Definition: DDSolid.cc:673
void DDHCalBarrelAlgo::constructInsideDetectors ( DDLogicalPart  detector,
std::string  name,
int  id,
double  dx,
double  dy,
double  dz,
int  type,
DDCompactView cpv 
)
protected

Definition at line 885 of file DDHCalBarrelAlgo.cc.

References DDSolidFactory::box(), DDBase< N, C >::ddname(), DDSplit(), plotBeamSpotDB::first, getDetdP1(), getDetdP2(), getDetMatPl(), getDetMatSc(), getDetPosY(), getDetT11(), getDetT12(), getDetT21(), getDetT22(), getDetTsc(), getDetType(), getDetWidth1(), getDetWidth2(), idName, idNameSpace, LogDebug, DDName::name(), mergeVDriftHistosByStation::name, DDBase< N, C >::name(), DDCompactView::position(), edm::second(), x, and y.

Referenced by constructInsideLayers().

888  {
889 
890  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: \t\tInside detector " << id
891  << "...";
892 
894  DDMaterial plmatter(plmatname);
896  DDMaterial scmatter(scmatname);
897 
898  string plname = detector.name().name()+"Plastic_";
899  string scname = idName+"Scintillator"+name;
900 
901  id--;
902  DDSolid solid;
903  DDLogicalPart glog;
904  double wid, y=0;
905  double dx1, dx2, shiftX;
906 
907  if (type == 1) {
908  wid = 0.5*getDetWidth1(id);
909  if (getDetPosY(id)>0) y =-dy+wid;
910  dx1 = 0.5*getDetT11(id);
911  dx2 = 0.5*getDetT21(id);
912  shiftX = getDetdP1(id);
913  } else {
914  wid = 0.5*getDetWidth2(id);
915  dx1 = 0.5*getDetT12(id);
916  dx2 = 0.5*getDetT22(id);
917  shiftX = getDetdP2(id);
918  }
919 
920  solid = DDSolidFactory::box(DDName(plname+"1", idNameSpace), dx1, wid, dz);
921  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << solid.name()
922  << " Box made of " << getDetMatPl() << " of dimensions "
923  << dx1 <<", " << wid << ", " << dz;
924  glog = DDLogicalPart(solid.ddname(), plmatter, solid);
925 
926  double x = shiftX + dx1 - dx;
927  cpv.position(glog, detector, 1, DDTranslation(x,y,0), DDRotation());
928  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << glog.name()
929  << " Number 1 positioned in " << detector.name()
930  << " at (" << x << "," << y << ",0) with no rotation";
931 
932  solid = DDSolidFactory::box(DDName(scname, idNameSpace),
933  0.5*getDetTsc(id), wid, dz);
934  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << solid.name()
935  << " Box made of " << getDetMatSc() << " of dimensions "
936  << 0.5*getDetTsc(id) << ", " << wid << ", " << dz;
937  glog = DDLogicalPart(solid.ddname(), scmatter, solid);
938 
939  x += dx1 + 0.5*getDetTsc(id);
940  int copyNo = id*10 + getDetType(id);
941  cpv.position(glog, detector, copyNo, DDTranslation(x, y, 0), DDRotation());
942  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << glog.name() <<" Number "
943  << copyNo << " positioned in " << detector.name()
944  << " at (" << x << "," << y << ",0) with no rotation";
945 
946  solid = DDSolidFactory::box(DDName(plname+"2", idNameSpace), dx2, wid, dz);
947  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << solid.name()
948  << " Box made of " << getDetMatPl() << " of dimensions "
949  << dx2 <<", " << wid << ", " << dz;
950  glog = DDLogicalPart(solid.ddname(), plmatter, solid);
951 
952  x+=0.5*getDetTsc(id) + dx2;
953  cpv.position(glog, detector, 1, DDTranslation(x, y, 0), DDRotation());
954  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << glog.name()
955  << " Number 1 positioned in " << detector.name()
956  << " at (" << x << "," << y << ",0) with no rotation";
957 
958 }
#define LogDebug(id)
type
Definition: HCALResponse.h:21
const N & name() const
Definition: DDBase.h:78
DDMaterial is used to define and access material information.
Definition: DDMaterial.h:41
int getDetPosY(unsigned int i) const
std::string idNameSpace
void position(const DDLogicalPart &self, const DDLogicalPart &parent, std::string copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=NULL)
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:18
std::string getDetMatPl() const
A DDSolid represents the shape of a part.
Definition: DDSolid.h:35
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:66
std::string getDetMatSc() const
U second(std::pair< T, U > const &p)
double getDetT22(unsigned int i) const
double getDetT11(unsigned int i) const
int getDetType(unsigned int i) const
double getDetdP1(unsigned int i) const
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:88
double getDetTsc(unsigned int i) 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
double getDetdP2(unsigned int i) const
double getDetT21(unsigned int i) const
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = &#39;:&#39;
Definition: DDSplit.cc:4
double getDetWidth2(unsigned int i) const
double getDetT12(unsigned int i) const
double getDetWidth1(unsigned int i) const
const std::string & name() const
Returns the name.
Definition: DDName.cc:87
const N & ddname() const
Definition: DDBase.h:80
void DDHCalBarrelAlgo::constructInsideLayers ( DDLogicalPart  laylog,
std::string  name,
int  id,
int  nAbs,
double  rin,
double  d1,
double  alpha1,
double  d2,
double  alpha2,
double  t1,
double  t2,
DDCompactView cpv 
)
protected

Definition at line 554 of file DDHCalBarrelAlgo.cc.

References DDSolidFactory::box(), constructInsideDetectors(), constructMidLayer(), constructSideLayer(), DDBase< N, C >::ddname(), DDSplit(), detRot, plotBeamSpotDB::first, getDetMat(), getRmax(), getRzones(), getTanTheta(), getZoff(), i, idName, idNameSpace, idOffset, recoMuon::in, LogDebug, mergeVDriftHistosByStation::name, DDBase< N, C >::name(), DDCompactView::position(), makeMuonMisalignmentScenario::rot, rotns, edm::second(), funct::tan(), x, and y.

Referenced by constructInsideSector().

559  {
560 
561  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: \t\tInside layer " << id
562  << "...";
563 
565  //Pointers to the Rotation Matrices and to the Materials
567 
568  string nam0 = nm + "In";
569  string name = idName + nam0;
571  DDMaterial matter (matName);
572 
573  DDSolid solid;
574  DDLogicalPart glog, mother;
575  double rsi, dx, dy, dz, x, y;
576  int i, in;
577  //Two lower volumes
578  if (alpha1 > 0) {
579  rsi = rin + d1;
580  in = 0;
581  for (i = 0; i < getRzones()-1; i++) {
582  if (rsi >= getRmax(i)) in = i+1;
583  }
584  dx = 0.5*t1;
585  dy = 0.5*rsi*(tan(alpha1)-tan(alpha2));
586  dz = 0.5*(getZoff(in) + rsi*getTanTheta(in));
587  x = rsi + dx;
588  y = 0.5*rsi*(tan(alpha1)+tan(alpha2));
589  DDTranslation r11(x, y, dz);
590  DDTranslation r12(x, -y, dz);
591 
592  solid = DDSolidFactory::box(DDName(name+"1", idNameSpace), dx, dy, dz);
593  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << solid.name()
594  <<" Box made of " << getDetMat() << " of dimensions "
595  << dx << ", " << dy << ", " << dz;
596  glog = DDLogicalPart(solid.ddname(), matter, solid);
597 
598  if (nAbs != 0) {
599  mother = constructSideLayer(laylog, name, nAbs, rin, alpha1, cpv);
600  } else {
601  mother = laylog;
602  }
603  cpv.position(glog, mother, idOffset+1, r11, DDRotation());
604  cpv.position(glog, mother, idOffset+2, r12, rot);
605  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << glog.name()
606  << " Number " << idOffset+1 << " positioned in "
607  << mother.name() << " at " << r11
608  << " with no rotation\n"
609  << "DDHCalBarrelAlgo test: " << glog.name()
610  << " Number " << idOffset+2 << " positioned in "
611  << mother.name() << " at " << r12 << " with " << rot;
612 
613  //Constructin the plastics and scintillators inside
614  constructInsideDetectors(glog, nam0+"1", id, dx, dy, dz, 1, cpv);
615  }
616 
617  //Upper volume
618  rsi = rin + d2;
619  in = 0;
620  for (i = 0; i < getRzones()-1; i++) {
621  if (rsi >= getRmax(i)) in = i+1;
622  }
623  dx = 0.5*t2;
624  dy = 0.5*rsi*tan(alpha2);
625  dz = 0.5*(getZoff(in) + rsi*getTanTheta(in));
626  x = rsi + dx;
627  DDTranslation r21(x, dy, dz);
628  DDTranslation r22(x, -dy, dz);
629 
630  solid = DDSolidFactory::box(DDName(name+"2", idNameSpace), dx, dy, dz);
631  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << solid.name()
632  << " Box made of " << getDetMat() << " of dimensions "
633  << dx << ", " << dy << ", " << dz;
634  glog = DDLogicalPart(solid.ddname(), matter, solid);
635 
636  if (nAbs < 0) {
637  mother = constructMidLayer(laylog, name, rin, alpha1, cpv);
638  } else {
639  mother = laylog;
640  }
641  cpv.position(glog, mother, idOffset+3, r21, DDRotation());
642  cpv.position(glog, mother, idOffset+4, r22, rot);
643  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << glog.name() <<" Number "
644  << idOffset+3 << " positioned in " << mother.name()
645  << " at " << r21 << " with no rotation\n"
646  << "DDHCalBarrelAlgo test: " << glog.name() <<" Number "
647  << idOffset+4 << " positioned in " << mother.name()
648  << " at " << r22 << " with " << rot;
649 
650  //Constructin the plastics and scintillators inside
651  constructInsideDetectors(glog, nam0+"2", id, dx, dy, dz, 2, cpv);
652 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
void constructInsideDetectors(DDLogicalPart detector, std::string name, int id, double dx, double dy, double dz, int type, DDCompactView &cpv)
const N & name() const
Definition: DDBase.h:78
double getRmax(unsigned int i) const
DDMaterial is used to define and access material information.
Definition: DDMaterial.h:41
std::string idNameSpace
void position(const DDLogicalPart &self, const DDLogicalPart &parent, std::string copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=NULL)
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:18
int getRzones() const
A DDSolid represents the shape of a part.
Definition: DDSolid.h:35
std::string getDetMat() const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:66
double getZoff(unsigned int i) const
U second(std::pair< T, U > const &p)
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:88
double getTanTheta(unsigned int i) const
DDLogicalPart constructSideLayer(DDLogicalPart laylog, std::string nm, int nAbs, double rin, double alpha, DDCompactView &cpv)
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
DDLogicalPart constructMidLayer(DDLogicalPart laylog, std::string nm, double rin, double alpha, DDCompactView &cpv)
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = &#39;:&#39;
Definition: DDSplit.cc:4
const N & ddname() const
Definition: DDBase.h:80
void DDHCalBarrelAlgo::constructInsideSector ( DDLogicalPart  sector,
DDCompactView cpv 
)
protected

!!!!!!!!!!!!!!!!Should be zero. And removed as soon as

Definition at line 438 of file DDHCalBarrelAlgo.cc.

References alpha, constructInsideLayers(), DDSplit(), alignCSCRings::e, plotBeamSpotDB::first, getLayerAbsorb(), getLayerAlpha(), getLayerD1(), getLayerD2(), getLayerGap(), getLayerId(), getLayerLabel(), getLayerMaterial(), getLayerT1(), getLayerT2(), getLayerWidth(), getNLayers(), getNsectors(), getRin(), getRmax(), getRzones(), getTanTheta(), getZoff(), i, idName, idNameSpace, recoMuon::in, j, relval_steps::k, LogDebug, mergeVDriftHistosByStation::name, DDBase< N, C >::name(), dbtoconf::out, pi, DDSolidFactory::polyhedra(), DDCompactView::position(), rin, rout, edm::second(), funct::tan(), and create_public_lumi_plots::width.

Referenced by constructGeneralVolume().

438  {
439 
440  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: Layers (" << getNLayers()
441  << ") ...";
442 
443  double alpha = CLHEP::pi/getNsectors();
444  double rin = getRin();
445  for (int i = 0; i < getNLayers(); i++) {
446  string name = idName + getLayerLabel(i);
448  DDSplit(getLayerMaterial(i)).second); //idNameSpace);
449  DDMaterial matter(matname);
450 
451  double width = getLayerWidth(i);
452  double rout = rin + width;
453 
454  int in = 0, out = 0;
455  for (int j = 0; j < getRzones()-1; j++) {
456  if (rin >= getRmax(j)) in = j+1;
457  if (rout> getRmax(j)) out= j+1;
458  }
459  double zout = getZoff(in) + rin*getTanTheta(in);
460 
462  //vertical walls are allowed in SolidPolyhedra
463  double deltaz = 0;
464  int nsec=2;
465  vector<double> pgonZ, pgonRmin, pgonRmax;
466  // index 0
467  pgonZ.push_back(0);
468  pgonRmin.push_back(rin);
469  pgonRmax.push_back(rout);
470  // index 1
471  pgonZ.push_back(zout);
472  pgonRmin.push_back(rin);
473  pgonRmax.push_back(rout);
474  if (in == out) {
475  if (in <= 3) {
476  //index 2
477  pgonZ.push_back(getZoff(in) + rout*getTanTheta(in));
478  pgonRmin.push_back(pgonRmax[1]);
479  pgonRmax.push_back(pgonRmax[1]);
480  nsec++;
481  }
482  } else {
483  if (in == 3) {
484  //redo index 1, add index 2
485  pgonZ[1] =(getZoff(out) + getRmax(out)*getTanTheta(out));
486  pgonZ.push_back(pgonZ[1] + deltaz);
487  pgonRmin.push_back(pgonRmin[1]);
488  pgonRmax.push_back(getRmax(in));
489  //index 3
490  pgonZ.push_back(getZoff(in) + getRmax(in)*getTanTheta(in));
491  pgonRmin.push_back(pgonRmin[2]);
492  pgonRmax.push_back(pgonRmax[2]);
493  nsec += 2;
494  } else {
495  //index 2
496  pgonZ.push_back(getZoff(in) + getRmax(in)*getTanTheta(in));
497  pgonRmin.push_back(getRmax(in));
498  pgonRmax.push_back(pgonRmax[1]);
499  nsec++;
500  if (in == 0) {
501  pgonZ.push_back(getZoff(out) + getRmax(in)*getTanTheta(out));
502  pgonRmin.push_back(pgonRmin[2]);
503  pgonRmax.push_back(pgonRmax[2]);
504  nsec++;
505  }
506  if (in <= 1) {
507  pgonZ.push_back(getZoff(out) + rout*getTanTheta(out));
508  pgonRmin.push_back(rout);
509  pgonRmax.push_back(rout);
510  nsec++;
511  }
512  }
513  }
514  //Solid & volume
515  DDSolid solid;
516  double alpha1 = alpha;
517  if (getLayerGap(i)>1.e-6) {
518  double rmid = 0.5*(rin+rout);
519  double width = rmid*tan(alpha) - getLayerGap(i);
520  alpha1 = atan(width/rmid);
521  LogDebug("HCalGeom") << "\t" << "Alpha_1 modified from "
522  << alpha/CLHEP::deg << " to " << alpha1/CLHEP::deg
523  << " Rmid " << rmid << " Reduced width " << width;
524  }
525  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << name << " (Layer "
526  << i << ") Polyhedra made of " << getLayerMaterial(i)
527  << " with 1 sector from " << -alpha1/CLHEP::deg
528  << " to " << alpha1/CLHEP::deg << " and with "
529  << nsec << " sections";
530  for (unsigned int k=0; k<pgonZ.size(); k++) {
531  LogDebug("HCalGeom") << "\t" << "\t" << pgonZ[k] << "\t" << pgonRmin[k]
532  << "\t" << pgonRmax[k];
533  }
535  1, -alpha1, 2*alpha1,
536  pgonZ, pgonRmin, pgonRmax);
537  DDLogicalPart glog(DDName(name, idNameSpace), matter, solid);
538 
539  cpv.position(glog, sector, getLayerId(i), DDTranslation(0.0, 0.0, 0.0),
540  DDRotation());
541  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << glog.name()
542  << " number " << getLayerId(i) << " positioned in "
543  << sector.name() << " at (0,0,0) with no rotation";
544 
546  getLayerAbsorb(i), rin, getLayerD1(i), alpha1,
548  getLayerT2(i), cpv);
549  rin = rout;
550  }
551 
552 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
float alpha
Definition: AMPTWrapper.h:95
std::string getLayerLabel(unsigned i) const
double getRin() const
const N & name() const
Definition: DDBase.h:78
double getLayerD1(unsigned i) const
std::string getLayerMaterial(unsigned i) const
double getRmax(unsigned int i) const
DDMaterial is used to define and access material information.
Definition: DDMaterial.h:41
double getLayerD2(unsigned i) const
std::string idNameSpace
void position(const DDLogicalPart &self, const DDLogicalPart &parent, std::string copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=NULL)
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:18
double getLayerAlpha(unsigned i) const
int getRzones() const
void constructInsideLayers(DDLogicalPart laylog, std::string name, int id, int nAbs, double rin, double d1, double alpha1, double d2, double alpha2, double t1, double t2, DDCompactView &cpv)
A DDSolid represents the shape of a part.
Definition: DDSolid.h:35
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
const Double_t pi
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:66
double getZoff(unsigned int i) const
U second(std::pair< T, U > const &p)
double getLayerGap(unsigned int i) const
int getNLayers() const
int getLayerAbsorb(unsigned int i) const
double getLayerT2(unsigned i) const
double getLayerT1(unsigned i) const
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
int j
Definition: DBlmapReader.cc:9
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:88
double getTanTheta(unsigned int i) const
int getNsectors() const
int getLayerId(unsigned i) const
tuple out
Definition: dbtoconf.py:99
double getLayerWidth(unsigned i) const
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = &#39;:&#39;
Definition: DDSplit.cc:4
static DDSolid polyhedra(const DDName &name, int sides, double startPhi, double deltaPhi, const std::vector< double > &z, const std::vector< double > &rmin, const std::vector< double > &rmax)
Creates a polyhedra (refere to Geant3 or Geant4 documentation)
Definition: DDSolid.cc:673
DDLogicalPart DDHCalBarrelAlgo::constructMidLayer ( DDLogicalPart  laylog,
std::string  nm,
double  rin,
double  alpha,
DDCompactView cpv 
)
protected

Definition at line 738 of file DDHCalBarrelAlgo.cc.

References DDBase< N, C >::ddname(), DDSplit(), plotBeamSpotDB::first, getAbsorbD(), getAbsorberN(), getAbsorbMat(), getAbsorbName(), getAbsorbT(), getMidAbsMat(), getMidAbsName(), getMidAbsorber(), getMidAbsT(), getMidAbsW(), getMiddleD(), getMiddleMat(), getMiddleW(), getRmax(), getRzones(), getTanTheta(), getZoff(), i, idNameSpace, cuy::ii, recoMuon::in, relval_steps::k, create_public_lumi_plots::log, LogDebug, mergeVDriftHistosByStation::name, DDBase< N, C >::name(), DDSolidFactory::polyhedra(), DDCompactView::position(), rmax, and edm::second().

Referenced by constructInsideLayers().

740  {
741 
742  DDSolid solid;
743  DDLogicalPart log, glog;
744  string name = nm + "Mid";
745  for (int k=0; k < getAbsorberN(); k++) {
746  string namek = name + getAbsorbName(k);
747  double rsi = rin + getAbsorbD(k);
748  int in = 0;
749  for (int i = 0; i < getRzones()-1; i++) {
750  if (rsi >= getRmax(i)) in = i+1;
751  }
752  vector<double> pgonZ, pgonRmin, pgonRmax;
753  // index 0
754  pgonZ.push_back(0.0);
755  pgonRmin.push_back(rsi);
756  pgonRmax.push_back(rsi+getAbsorbT(k));
757  // index 1
758  pgonZ.push_back(getZoff(in) + rsi*getTanTheta(in));
759  pgonRmin.push_back(rsi);
760  pgonRmax.push_back(pgonRmax[0]);
761  // index 2
762  pgonZ.push_back(getZoff(in) + pgonRmax[0]*getTanTheta(in));
763  pgonRmin.push_back(pgonRmax[1]);
764  pgonRmax.push_back(pgonRmax[1]);
765  solid = DDSolidFactory::polyhedra(DDName(namek, idNameSpace), 1, -alpha,
766  2*alpha, pgonZ, pgonRmin, pgonRmax);
767  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << solid.name()
768  << " Polyhedra made of " << getAbsorbMat(k)
769  << " with 1 sector from " << -alpha/CLHEP::deg
770  << " to " << alpha/CLHEP::deg << " and with "
771  << pgonZ.size() << " sections";
772  for (unsigned int ii=0; ii<pgonZ.size(); ii++) {
773  LogDebug("HCalGeom") << "\t\tZ = " << pgonZ[ii] << "\tRmin = "
774  << pgonRmin[ii] << "\tRmax = " << pgonRmax[ii];
775  }
776 
778  DDMaterial matter(matName);
779  log = DDLogicalPart(solid.ddname(), matter, solid);
780 
781  cpv.position(log, laylog, 1, DDTranslation(), DDRotation());
782  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << log.name()
783  << " Number 1 positioned in " << laylog.name()
784  << " at (0,0,0) with no rotation";
785 
786  if (k==0) {
787  double rmin = pgonRmin[0];
788  double rmax = pgonRmax[0];
789  DDLogicalPart mother = log;
790  for (int i=0; i<1; i++) {
791  double alpha1 = atan(getMidAbsW(i)/rmin);
792  string namek = name + getMidAbsName(i);
793  solid = DDSolidFactory::polyhedra(DDName(namek, idNameSpace), 1,
794  -alpha1, 2*alpha1, pgonZ, pgonRmin,
795  pgonRmax);
796  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << solid.name()
797  << " Polyhedra made of " << getMidAbsMat(i)
798  << " with 1 sector from " << -alpha1/CLHEP::deg
799  << " to " << alpha1/CLHEP::deg << " and with "
800  << pgonZ.size() << " sections";
801  for (unsigned int ii=0; ii<pgonZ.size(); ii++) {
802  LogDebug("HCalGeom") << "\t\tZ = " << pgonZ[ii] << "\tRmin = "
803  << pgonRmin[ii] << "\tRmax = " << pgonRmax[ii];
804  }
805 
806  DDName matNam1(DDSplit(getMidAbsMat(i)).first,
808  DDMaterial matter1(matNam1);
809  log = DDLogicalPart(solid.ddname(), matter1, solid);
810 
811  cpv.position(log, mother, 1, DDTranslation(), DDRotation());
812  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << log.name()
813  << " Number 1 positioned in " << mother.name()
814  << " at (0,0,0) with no rotation";
815  mother = log;
816  }
817 
818  // Now the layer with detectors
819  double rmid = rmin + getMiddleD();
820  pgonRmin[0] = rmid; pgonRmax[0] = rmax;
821  pgonRmin[1] = rmid; pgonRmax[1] = rmax; pgonZ[1] = getZoff(in) + rmid*getTanTheta(in);
822  pgonRmin[2] = rmax; pgonRmax[2] = rmax; pgonZ[2] = getZoff(in) + rmax*getTanTheta(in);
823  double alpha1 = atan(getMiddleW()/rmin);
824  solid = DDSolidFactory::polyhedra(DDName(name, idNameSpace), 1,
825  -alpha1, 2*alpha1, pgonZ, pgonRmin,
826  pgonRmax);
827  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << solid.name()
828  << " Polyhedra made of " << getMiddleMat()
829  << " with 1 sector from " << -alpha1/CLHEP::deg
830  << " to " << alpha1/CLHEP::deg << " and with "
831  << pgonZ.size() << " sections";
832  for (unsigned int ii=0; ii<pgonZ.size(); ii++) {
833  LogDebug("HCalGeom") << "\t\tZ = " << pgonZ[ii] << "\tRmin = "
834  << pgonRmin[ii] << "\tRmax = " << pgonRmax[ii];
835  }
836 
837  DDName matNam1(DDSplit(getMiddleMat()).first,
839  DDMaterial matter1(matNam1);
840  glog = DDLogicalPart(solid.ddname(), matter1, solid);
841 
842  cpv.position(glog, mother, 1, DDTranslation(), DDRotation());
843  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << glog.name()
844  << " Number 1 positioned in " << mother.name()
845  << " at (0,0,0) with no rotation";
846 
847  // Now the remaining absorber layers
848  for (int i = 1; i < getMidAbsorber(); i++) {
849  namek = name + getMidAbsName(i);
850  rmid = rmin + getMidAbsT(i);
851  pgonRmin[0] = rmin; pgonRmax[0] = rmid;
852  pgonRmin[1] = rmin; pgonRmax[1] = rmid; pgonZ[1] = getZoff(in) + rmin*getTanTheta(in);
853  pgonRmin[2] = rmid; pgonRmax[2] = rmid; pgonZ[2] = getZoff(in) + rmid*getTanTheta(in);
854  alpha1 = atan(getMidAbsW(i)/rmin);
855  solid = DDSolidFactory::polyhedra(DDName(namek, idNameSpace), 1,
856  -alpha1, 2*alpha1, pgonZ, pgonRmin,
857  pgonRmax);
858  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << solid.name()
859  << " Polyhedra made of " << getMidAbsMat(i)
860  << " with 1 sector from " << -alpha1/CLHEP::deg
861  << " to " << alpha1/CLHEP::deg << " and with "
862  << pgonZ.size() << " sections";
863  for (unsigned int ii=0; ii<pgonZ.size(); ii++) {
864  LogDebug("HCalGeom") << "\t\tZ = " << pgonZ[ii] << "\tRmin = "
865  << pgonRmin[ii] << "\tRmax = " << pgonRmax[ii];
866  }
867 
868  DDName matName2(DDSplit(getMidAbsMat(i)).first,
870  DDMaterial matter2(matName2);
871  log = DDLogicalPart(solid.ddname(), matter2, solid);
872 
873  cpv.position(log, mother, i, DDTranslation(), DDRotation());
874  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << log.name()
875  << " Number " << i << " positioned in "
876  << mother.name() << " at (0,0,0) with no "
877  << "rotation";
878  mother = log;
879  }
880  }
881  }
882  return glog;
883 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
float alpha
Definition: AMPTWrapper.h:95
const N & name() const
Definition: DDBase.h:78
double getAbsorbT(unsigned int i) const
std::string getMidAbsName(unsigned int i) const
double getRmax(unsigned int i) const
DDMaterial is used to define and access material information.
Definition: DDMaterial.h:41
std::string idNameSpace
void position(const DDLogicalPart &self, const DDLogicalPart &parent, std::string copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=NULL)
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:18
std::string getAbsorbMat(unsigned int i) const
std::vector< double > rmax
int getRzones() const
int ii
Definition: cuy.py:588
double getMidAbsT(unsigned int i) const
A DDSolid represents the shape of a part.
Definition: DDSolid.h:35
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:66
double getZoff(unsigned int i) const
U second(std::pair< T, U > const &p)
int getAbsorberN() const
double getMidAbsW(unsigned int i) const
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:88
double getTanTheta(unsigned int i) const
std::string getAbsorbName(unsigned int i) const
double getMiddleW() const
double getAbsorbD(unsigned int i) const
double getMiddleD() const
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = &#39;:&#39;
Definition: DDSplit.cc:4
int getMidAbsorber() const
std::string getMiddleMat() const
static DDSolid polyhedra(const DDName &name, int sides, double startPhi, double deltaPhi, const std::vector< double > &z, const std::vector< double > &rmin, const std::vector< double > &rmax)
Creates a polyhedra (refere to Geant3 or Geant4 documentation)
Definition: DDSolid.cc:673
std::string getMidAbsMat(unsigned int i) const
const N & ddname() const
Definition: DDBase.h:80
DDLogicalPart DDHCalBarrelAlgo::constructSideLayer ( DDLogicalPart  laylog,
std::string  nm,
int  nAbs,
double  rin,
double  alpha,
DDCompactView cpv 
)
protected

Definition at line 654 of file DDHCalBarrelAlgo.cc.

References funct::abs(), DDBase< N, C >::ddname(), DDSplit(), plotBeamSpotDB::first, getRmax(), getRzones(), getSideAbsMat(), getSideAbsName(), getSideAbsorber(), getSideAbsW(), getSideD(), getSideMat(), getSideT(), getTanTheta(), getZoff(), i, idNameSpace, cuy::ii, recoMuon::in, relval_steps::k, create_public_lumi_plots::log, LogDebug, mergeVDriftHistosByStation::name, DDBase< N, C >::name(), DDSolidFactory::polyhedra(), DDCompactView::position(), and edm::second().

Referenced by constructInsideLayers().

657  {
658 
659  //Extra absorber layer
660  int k = abs(nAbs) - 1;
661  string namek = nm + "Side";
662  double rsi = rin + getSideD(k);
663  int in = 0;
664  for (int i = 0; i < getRzones()-1; i++) {
665  if (rsi >= getRmax(i)) in = i+1;
666  }
667  vector<double> pgonZ, pgonRmin, pgonRmax;
668  // index 0
669  pgonZ.push_back(0.0);
670  pgonRmin.push_back(rsi);
671  pgonRmax.push_back(rsi+getSideT(k));
672  // index 1
673  pgonZ.push_back(getZoff(in) + rsi*getTanTheta(in));
674  pgonRmin.push_back(rsi);
675  pgonRmax.push_back(pgonRmax[0]);
676  // index 2
677  pgonZ.push_back(getZoff(in) + pgonRmax[0]*getTanTheta(in));
678  pgonRmin.push_back(pgonRmax[1]);
679  pgonRmax.push_back(pgonRmax[1]);
681  -alpha, 2*alpha, pgonZ, pgonRmin,
682  pgonRmax);
683  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << solid.name()
684  << " Polyhedra made of " << getSideMat(k)
685  << " with 1 sector from " << -alpha/CLHEP::deg
686  << " to " << alpha/CLHEP::deg << " and with "
687  << pgonZ.size() << " sections";
688  for (unsigned int ii=0; ii<pgonZ.size(); ii++) {
689  LogDebug("HCalGeom") << "\t\tZ = " << pgonZ[ii] << "\tRmin = "
690  << pgonRmin[ii] << "\tRmax = " << pgonRmax[ii];
691  }
692 
694  DDMaterial matter(matName);
695  DDLogicalPart glog = DDLogicalPart(solid.ddname(), matter, solid);
696 
697  cpv.position(glog, laylog, 1, DDTranslation(), DDRotation());
698  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << glog.name()
699  << " Number 1 positioned in " << laylog.name()
700  << " at (0,0,0) with no rotation";
701 
702  if (nAbs < 0) {
703  DDLogicalPart mother = glog;
704  double rmid = pgonRmax[0];
705  for (int i = 0; i < getSideAbsorber(); i++) {
706  double alpha1 = atan(getSideAbsW(i)/rmid);
707  if (alpha1 > 0) {
708  string name = namek + getSideAbsName(i);
709  solid = DDSolidFactory::polyhedra(DDName(name, idNameSpace), 1,
710  -alpha1, 2*alpha1, pgonZ, pgonRmin,
711  pgonRmax);
712  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << solid.name()
713  << " Polyhedra made of " << getSideAbsMat(i)
714  << " with 1 sector from " << -alpha1/CLHEP::deg
715  << " to " << alpha1/CLHEP::deg << " and with "
716  << pgonZ.size() << " sections";
717  for (unsigned int ii=0; ii<pgonZ.size(); ii++) {
718  LogDebug("HCalGeom") << "\t\tZ = " << pgonZ[ii] << "\tRmin = "
719  << pgonRmin[ii] << "\tRmax = " << pgonRmax[ii];
720  }
721 
722  DDName matName(DDSplit(getSideAbsMat(i)).first,
724  DDMaterial matter(matName);
725  DDLogicalPart log = DDLogicalPart(solid.ddname(), matter, solid);
726 
727  cpv.position(log, mother, 1, DDTranslation(), DDRotation());
728  LogDebug("HCalGeom") << "DDHCalBarrelAlgo test: " << log.name()
729  << " Number 1 positioned in " << mother.name()
730  << " at (0,0,0) with no rotation";
731  mother = log;
732  }
733  }
734  }
735  return glog;
736 }
#define LogDebug(id)
std::string getSideAbsName(unsigned int i) const
int i
Definition: DBlmapReader.cc:9
float alpha
Definition: AMPTWrapper.h:95
const N & name() const
Definition: DDBase.h:78
double getRmax(unsigned int i) const
DDMaterial is used to define and access material information.
Definition: DDMaterial.h:41
double getSideAbsW(unsigned int i) const
std::string idNameSpace
void position(const DDLogicalPart &self, const DDLogicalPart &parent, std::string copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=NULL)
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:18
int getRzones() const
int ii
Definition: cuy.py:588
A DDSolid represents the shape of a part.
Definition: DDSolid.h:35
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:66
double getZoff(unsigned int i) const
U second(std::pair< T, U > const &p)
int getSideAbsorber() const
double getSideD(unsigned int i) const
std::string getSideAbsMat(unsigned int i) const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::string getSideMat(unsigned int i) const
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:88
double getTanTheta(unsigned int i) const
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = &#39;:&#39;
Definition: DDSplit.cc:4
double getSideT(unsigned int i) const
static DDSolid polyhedra(const DDName &name, int sides, double startPhi, double deltaPhi, const std::vector< double > &z, const std::vector< double > &rmin, const std::vector< double > &rmax)
Creates a polyhedra (refere to Geant3 or Geant4 documentation)
Definition: DDSolid.cc:673
const N & ddname() const
Definition: DDBase.h:80
void DDHCalBarrelAlgo::execute ( DDCompactView cpv)

Definition at line 189 of file DDHCalBarrelAlgo.cc.

References constructGeneralVolume(), and LogDebug.

189  {
190 
191  LogDebug("HCalGeom") << "==>> Constructing DDHCalBarrelAlgo...";
193  LogDebug("HCalGeom") << "<<== End of DDHCalBarrelAlgo construction ...";
194 }
#define LogDebug(id)
void constructGeneralVolume(DDCompactView &cpv)
double DDHCalBarrelAlgo::getAbsorbD ( unsigned int  i) const
inline

Definition at line 53 of file DDHCalBarrelAlgo.h.

References absorbD, and i.

Referenced by constructMidLayer().

53 {return absorbD[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > absorbD
int DDHCalBarrelAlgo::getAbsorberN ( ) const
inline

Definition at line 50 of file DDHCalBarrelAlgo.h.

References nAbsorber.

Referenced by constructMidLayer().

50 {return nAbsorber;}
std::string DDHCalBarrelAlgo::getAbsorbMat ( unsigned int  i) const
inline

Definition at line 52 of file DDHCalBarrelAlgo.h.

References absorbMat, and i.

Referenced by constructMidLayer().

52 {return absorbMat[i];}
std::vector< std::string > absorbMat
int i
Definition: DBlmapReader.cc:9
std::string DDHCalBarrelAlgo::getAbsorbName ( unsigned int  i) const
inline

Definition at line 51 of file DDHCalBarrelAlgo.h.

References absorbName, and i.

Referenced by constructMidLayer().

51 {return absorbName[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< std::string > absorbName
double DDHCalBarrelAlgo::getAbsorbT ( unsigned int  i) const
inline

Definition at line 54 of file DDHCalBarrelAlgo.h.

References absorbT, and i.

Referenced by constructMidLayer().

54 {return absorbT[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > absorbT
double DDHCalBarrelAlgo::getDetdP1 ( unsigned int  i) const
inline

Definition at line 68 of file DDHCalBarrelAlgo.h.

References detdP1, and i.

Referenced by constructInsideDetectors().

68 {return detdP1[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > detdP1
double DDHCalBarrelAlgo::getDetdP2 ( unsigned int  i) const
inline

Definition at line 69 of file DDHCalBarrelAlgo.h.

References detdP2, and i.

Referenced by constructInsideDetectors().

69 {return detdP2[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > detdP2
std::string DDHCalBarrelAlgo::getDetMat ( ) const
inline

Definition at line 64 of file DDHCalBarrelAlgo.h.

References detMat.

Referenced by constructInsideLayers().

64 {return detMat;}
std::string DDHCalBarrelAlgo::getDetMatPl ( ) const
inline

Definition at line 65 of file DDHCalBarrelAlgo.h.

References detMatPl.

Referenced by constructInsideDetectors().

65 {return detMatPl;}
std::string detMatPl
std::string DDHCalBarrelAlgo::getDetMatSc ( ) const
inline

Definition at line 66 of file DDHCalBarrelAlgo.h.

References detMatSc.

Referenced by constructInsideDetectors().

66 {return detMatSc;}
std::string detMatSc
int DDHCalBarrelAlgo::getDetPosY ( unsigned int  i) const
inline

Definition at line 77 of file DDHCalBarrelAlgo.h.

References detPosY, and i.

Referenced by constructInsideDetectors().

77 {return detPosY[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< int > detPosY
double DDHCalBarrelAlgo::getDetT11 ( unsigned int  i) const
inline

Definition at line 70 of file DDHCalBarrelAlgo.h.

References detT11, and i.

Referenced by constructInsideDetectors().

70 {return detT11[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > detT11
double DDHCalBarrelAlgo::getDetT12 ( unsigned int  i) const
inline

Definition at line 71 of file DDHCalBarrelAlgo.h.

References detT12, and i.

Referenced by constructInsideDetectors().

71 {return detT12[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > detT12
double DDHCalBarrelAlgo::getDetT21 ( unsigned int  i) const
inline

Definition at line 73 of file DDHCalBarrelAlgo.h.

References detT21, and i.

Referenced by constructInsideDetectors().

73 {return detT21[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > detT21
double DDHCalBarrelAlgo::getDetT22 ( unsigned int  i) const
inline

Definition at line 74 of file DDHCalBarrelAlgo.h.

References detT22, and i.

Referenced by constructInsideDetectors().

74 {return detT22[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > detT22
double DDHCalBarrelAlgo::getDetTsc ( unsigned int  i) const
inline

Definition at line 72 of file DDHCalBarrelAlgo.h.

References detTsc, and i.

Referenced by constructInsideDetectors().

72 {return detTsc[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > detTsc
int DDHCalBarrelAlgo::getDetType ( unsigned int  i) const
inline

Definition at line 67 of file DDHCalBarrelAlgo.h.

References detType, and i.

Referenced by constructInsideDetectors().

67 {return detType[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< int > detType
double DDHCalBarrelAlgo::getDetWidth1 ( unsigned int  i) const
inline

Definition at line 75 of file DDHCalBarrelAlgo.h.

References detWidth1, and i.

Referenced by constructInsideDetectors().

75 {return detWidth1[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > detWidth1
double DDHCalBarrelAlgo::getDetWidth2 ( unsigned int  i) const
inline

Definition at line 76 of file DDHCalBarrelAlgo.h.

References detWidth2, and i.

Referenced by constructInsideDetectors().

76 {return detWidth2[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > detWidth2
std::string DDHCalBarrelAlgo::getGenMaterial ( ) const
inline

Definition at line 17 of file DDHCalBarrelAlgo.h.

References genMaterial.

Referenced by constructGeneralVolume().

17 {return genMaterial;}
std::string genMaterial
int DDHCalBarrelAlgo::getLayerAbsorb ( unsigned int  i) const
inline

Definition at line 39 of file DDHCalBarrelAlgo.h.

References i, and layerAbsorb.

Referenced by constructInsideSector().

39 {return layerAbsorb[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< int > layerAbsorb
double DDHCalBarrelAlgo::getLayerAlpha ( unsigned  i) const
inline

Definition at line 36 of file DDHCalBarrelAlgo.h.

References i, and layerAlpha.

Referenced by constructInsideSector().

36 {return layerAlpha[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > layerAlpha
double DDHCalBarrelAlgo::getLayerD1 ( unsigned  i) const
inline

Definition at line 34 of file DDHCalBarrelAlgo.h.

References i, and layerD1.

Referenced by constructInsideSector().

34 {return layerD1[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > layerD1
double DDHCalBarrelAlgo::getLayerD2 ( unsigned  i) const
inline

Definition at line 35 of file DDHCalBarrelAlgo.h.

References i, and layerD2.

Referenced by constructInsideSector().

35 {return layerD2[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > layerD2
double DDHCalBarrelAlgo::getLayerGap ( unsigned int  i) const
inline

Definition at line 40 of file DDHCalBarrelAlgo.h.

References i, and layerGap.

Referenced by constructInsideSector().

40 {return layerGap[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > layerGap
int DDHCalBarrelAlgo::getLayerId ( unsigned  i) const
inline

Definition at line 30 of file DDHCalBarrelAlgo.h.

References i, and layerId.

Referenced by constructInsideSector().

30 {return layerId[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< int > layerId
std::string DDHCalBarrelAlgo::getLayerLabel ( unsigned  i) const
inline

Definition at line 31 of file DDHCalBarrelAlgo.h.

References i, and layerLabel.

Referenced by constructInsideSector().

31 {return layerLabel[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< std::string > layerLabel
std::string DDHCalBarrelAlgo::getLayerMaterial ( unsigned  i) const
inline

Definition at line 32 of file DDHCalBarrelAlgo.h.

References i, and layerMat.

Referenced by constructInsideSector().

32 {return layerMat[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< std::string > layerMat
double DDHCalBarrelAlgo::getLayerT1 ( unsigned  i) const
inline

Definition at line 37 of file DDHCalBarrelAlgo.h.

References i, and layerT1.

Referenced by constructInsideSector().

37 {return layerT1[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > layerT1
double DDHCalBarrelAlgo::getLayerT2 ( unsigned  i) const
inline

Definition at line 38 of file DDHCalBarrelAlgo.h.

References i, and layerT2.

Referenced by constructInsideSector().

38 {return layerT2[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > layerT2
double DDHCalBarrelAlgo::getLayerWidth ( unsigned  i) const
inline

Definition at line 33 of file DDHCalBarrelAlgo.h.

References i, and layerWidth.

Referenced by constructInsideSector().

33 {return layerWidth[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > layerWidth
std::string DDHCalBarrelAlgo::getMidAbsMat ( unsigned int  i) const
inline

Definition at line 60 of file DDHCalBarrelAlgo.h.

References i, and midMat.

Referenced by constructMidLayer().

60 {return midMat[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< std::string > midMat
std::string DDHCalBarrelAlgo::getMidAbsName ( unsigned int  i) const
inline

Definition at line 59 of file DDHCalBarrelAlgo.h.

References i, and midName.

Referenced by constructMidLayer().

59 {return midName[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< std::string > midName
int DDHCalBarrelAlgo::getMidAbsorber ( ) const
inline

Definition at line 58 of file DDHCalBarrelAlgo.h.

References nMidAbs.

Referenced by constructMidLayer().

58 {return nMidAbs;}
double DDHCalBarrelAlgo::getMidAbsT ( unsigned int  i) const
inline

Definition at line 62 of file DDHCalBarrelAlgo.h.

References i, and midT.

Referenced by constructMidLayer().

62 {return midT[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > midT
double DDHCalBarrelAlgo::getMidAbsW ( unsigned int  i) const
inline

Definition at line 61 of file DDHCalBarrelAlgo.h.

References i, and midW.

Referenced by constructMidLayer().

61 {return midW[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > midW
double DDHCalBarrelAlgo::getMiddleD ( ) const
inline

Definition at line 56 of file DDHCalBarrelAlgo.h.

References middleD.

Referenced by constructMidLayer().

56 {return middleD;}
std::string DDHCalBarrelAlgo::getMiddleMat ( ) const
inline

Definition at line 55 of file DDHCalBarrelAlgo.h.

References middleMat.

Referenced by constructMidLayer().

55 {return middleMat;}
std::string middleMat
double DDHCalBarrelAlgo::getMiddleW ( ) const
inline

Definition at line 57 of file DDHCalBarrelAlgo.h.

References middleW.

Referenced by constructMidLayer().

57 {return middleW;}
int DDHCalBarrelAlgo::getNhalf ( ) const
inline

Definition at line 20 of file DDHCalBarrelAlgo.h.

References nhalf.

Referenced by constructGeneralVolume().

20 {return nhalf;}
int DDHCalBarrelAlgo::getNLayers ( ) const
inline

Definition at line 29 of file DDHCalBarrelAlgo.h.

References nLayers.

Referenced by constructInsideSector().

29 {return nLayers;}
int DDHCalBarrelAlgo::getNsectors ( ) const
inline

Definition at line 18 of file DDHCalBarrelAlgo.h.

References nsectors.

Referenced by constructGeneralVolume(), and constructInsideSector().

18 {return nsectors;}
int DDHCalBarrelAlgo::getNsectortot ( ) const
inline

Definition at line 19 of file DDHCalBarrelAlgo.h.

References nsectortot.

Referenced by constructGeneralVolume().

19 {return nsectortot;}
double DDHCalBarrelAlgo::getRin ( ) const
inline

Definition at line 21 of file DDHCalBarrelAlgo.h.

References rin.

Referenced by constructGeneralVolume(), and constructInsideSector().

21 {return rin;}
double DDHCalBarrelAlgo::getRmax ( unsigned int  i) const
inline

Definition at line 26 of file DDHCalBarrelAlgo.h.

References i, and rmax.

Referenced by constructGeneralVolume(), constructInsideLayers(), constructInsideSector(), constructMidLayer(), and constructSideLayer().

26 {return rmax[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > rmax
double DDHCalBarrelAlgo::getRout ( ) const
inline

Definition at line 22 of file DDHCalBarrelAlgo.h.

References rout.

Referenced by constructGeneralVolume().

22 {return rout;}
int DDHCalBarrelAlgo::getRzones ( ) const
inline
std::string DDHCalBarrelAlgo::getSideAbsMat ( unsigned int  i) const
inline

Definition at line 47 of file DDHCalBarrelAlgo.h.

References i, and sideAbsMat.

Referenced by constructSideLayer().

47 {return sideAbsMat[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< std::string > sideAbsMat
std::string DDHCalBarrelAlgo::getSideAbsName ( unsigned int  i) const
inline

Definition at line 46 of file DDHCalBarrelAlgo.h.

References i, and sideAbsName.

Referenced by constructSideLayer().

46 {return sideAbsName[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< std::string > sideAbsName
int DDHCalBarrelAlgo::getSideAbsorber ( ) const
inline

Definition at line 45 of file DDHCalBarrelAlgo.h.

References nSideAbs.

Referenced by constructSideLayer().

45 {return nSideAbs;}
double DDHCalBarrelAlgo::getSideAbsW ( unsigned int  i) const
inline

Definition at line 48 of file DDHCalBarrelAlgo.h.

References i, and sideAbsW.

Referenced by constructSideLayer().

48 {return sideAbsW[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > sideAbsW
double DDHCalBarrelAlgo::getSideD ( unsigned int  i) const
inline

Definition at line 43 of file DDHCalBarrelAlgo.h.

References i, and sideD.

Referenced by constructSideLayer().

43 {return sideD[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > sideD
std::string DDHCalBarrelAlgo::getSideMat ( unsigned int  i) const
inline

Definition at line 42 of file DDHCalBarrelAlgo.h.

References i, and sideMat.

Referenced by constructSideLayer().

42 {return sideMat[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< std::string > sideMat
double DDHCalBarrelAlgo::getSideT ( unsigned int  i) const
inline

Definition at line 44 of file DDHCalBarrelAlgo.h.

References i, and sideT.

Referenced by constructSideLayer().

44 {return sideT[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > sideT
double DDHCalBarrelAlgo::getTanTheta ( unsigned int  i) const
inline

Definition at line 24 of file DDHCalBarrelAlgo.h.

References i, and ttheta.

Referenced by constructGeneralVolume(), constructInsideLayers(), constructInsideSector(), constructMidLayer(), and constructSideLayer().

24 {return ttheta[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > ttheta
double DDHCalBarrelAlgo::getTheta ( unsigned int  i) const
inline

Definition at line 25 of file DDHCalBarrelAlgo.h.

References i, and theta.

25 {return theta[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > theta
double DDHCalBarrelAlgo::getZoff ( unsigned int  i) const
inline

Definition at line 27 of file DDHCalBarrelAlgo.h.

References i, and zoff.

Referenced by constructGeneralVolume(), constructInsideLayers(), constructInsideSector(), constructMidLayer(), and constructSideLayer().

27 {return zoff[i];}
int i
Definition: DBlmapReader.cc:9
std::vector< double > zoff
void DDHCalBarrelAlgo::initialize ( const DDNumericArguments nArgs,
const DDVectorArguments vArgs,
const DDMapArguments mArgs,
const DDStringArguments sArgs,
const DDStringVectorArguments vsArgs 
)

Definition at line 36 of file DDHCalBarrelAlgo.cc.

References absorbD, absorbMat, absorbName, absorbT, dbl_to_int(), detdP1, detdP2, detMat, detMatPl, detMatSc, detPosY, detRot, detT11, detT12, detT21, detT22, detTsc, detType, detWidth1, detWidth2, genMaterial, i, idName, idNameSpace, idOffset, layerAbsorb, layerAlpha, layerD1, layerD2, layerGap, layerId, layerLabel, layerMat, layerT1, layerT2, layerWidth, LogDebug, middleD, middleMat, middleW, midMat, midName, midT, midW, nAbsorber, nhalf, nLayers, nMidAbs, DDCurrentNamespace::ns(), nsectors, nsectortot, nSideAbs, dbtoconf::parent, rin, rmax, rotHalf, rotns, rout, rzones, sideAbsMat, sideAbsName, sideAbsW, sideD, sideMat, sideT, funct::tan(), theta, ttheta, and zoff.

40  {
41 
42  genMaterial = sArgs["MaterialName"];
43  nsectors = int (nArgs["NSector"]);
44  nsectortot = int (nArgs["NSectorTot"]);
45  nhalf = int (nArgs["NHalf"]);
46  rin = nArgs["RIn"];
47  rout = nArgs["ROut"];
48  rzones = int (nArgs["RZones"]);
49  rotHalf = sArgs["RotHalf"];
50  rotns = sArgs["RotNameSpace"];
51 
52  theta = vArgs["Theta"];
53  rmax = vArgs["RMax"];
54  zoff = vArgs["ZOff"];
55  int i = 0;
56  for (i = 0; i < rzones; i++) {
57  ttheta.push_back(tan(theta[i])); //*deg already done in XML
58  }
59  if (rzones > 3)
60  rmax[2] = (zoff[3] - zoff[2]) / ttheta[2];
61 
62  LogDebug("HCalGeom") << "DDHCalBarrelAlgo debug: General material "
63  << genMaterial << "\tSectors " << nsectors << ", "
64  << nsectortot <<"\tHalves " << nhalf
65  << "\tRotation matrix " << rotns << ":" << rotHalf
66  << "\n\t\t" << rin << "\t" << rout << "\t" << rzones;
67  for (i = 0; i < rzones; i++) {
68  LogDebug("HCalGeom") << "\tTheta[" << i << "] = " << theta[i] << "\trmax["
69  << i << "] = " << rmax[i] << "\tzoff[" << i << "] = "
70  << zoff[i];
71  }
73  //Layers
74  nLayers = int(nArgs["NLayers"]);
75  LogDebug("HCalGeom") << "DDHCalBarrelAlgo debug: Layer\t" << nLayers;
76  layerId = dbl_to_int (vArgs["Id"]);
77  layerLabel = vsArgs["LayerLabel"];
78  layerMat = vsArgs["LayerMat"];
79  layerWidth = vArgs["LayerWidth"];
80  layerD1 = vArgs["D1"];
81  layerD2 = vArgs["D2"];
82  layerAlpha = vArgs["Alpha2"];
83  layerT1 = vArgs["T1"];
84  layerT2 = vArgs["T2"];
85  layerAbsorb = dbl_to_int(vArgs["AbsL"]);
86  layerGap = vArgs["Gap"];
87  for (i = 0; i < nLayers; i++) {
88  LogDebug("HCalGeom") << layerLabel[i] << "\t" << layerId[i] << "\t"
89  << layerMat[i] << "\t" << layerWidth[i] << "\t"
90  << layerD1[i] << "\t" << layerD2[i] << "\t"
91  << layerAlpha[i] << "\t" << layerT1[i] << "\t"
92  << layerT2[i] << "\t" << layerAbsorb[i] << "\t"
93  << layerGap[i];
94  }
95 
97  //Absorber Layers and middle part
98  absorbName = vsArgs["AbsorbName"];
99  absorbMat = vsArgs["AbsorbMat"];
100  absorbD = vArgs["AbsorbD"];
101  absorbT = vArgs["AbsorbT"];
102  nAbsorber = absorbName.size();
103  for (i = 0; i < nAbsorber; i++) {
104  LogDebug("HCalGeom") << "DDHCalBarrelAlgo debug: " << absorbName[i]
105  <<" Material " << absorbMat[i] << " d " << absorbD[i]
106  << " t " <<absorbT[i];
107  }
108  middleMat = sArgs["MiddleMat"];
109  middleD = nArgs["MiddleD"];
110  middleW = nArgs["MiddleW"];
111  LogDebug("HCalGeom") << "DDHCalBarrelAlgo debug: Middle material "
112  << middleMat << " d " << middleD << " w " << middleW;
113  midName = vsArgs["MidAbsName"];
114  midMat = vsArgs["MidAbsMat"];
115  midW = vArgs["MidAbsW"];
116  midT = vArgs["MidAbsT"];
117  nMidAbs = midName.size();
118  for (i = 0; i < nMidAbs; i++) {
119  LogDebug("HCalGeom") << "DDHCalBarrelAlgo debug: " << midName[i]
120  << " Material " << midMat[i] << " W " << midW[i]
121  << " T " << midT[i];
122  }
123 
124  //Absorber layers in the side part
125  sideMat = vsArgs["SideMat"];
126  sideD = vArgs["SideD"];
127  sideT = vArgs["SideT"];
128  int nSide = sideMat.size();
129  for (int i = 0; i < nSide; i++) {
130  LogDebug("HCalGeom") << "DDHCalBarrelAlgo debug: Side material "
131  << sideMat[i] << " d " << sideD[i] << " t "
132  << sideT[i];
133  }
134  sideAbsName = vsArgs["SideAbsName"];
135  sideAbsMat = vsArgs["SideAbsMat"];
136  sideAbsW = vArgs["SideAbsW"];
137  nSideAbs = sideAbsName.size();
138  for (i = 0; i < nSideAbs; i++) {
139  LogDebug("HCalGeom") << "DDHCalBarrelAlgo debug: " << sideAbsName[i]
140  <<" Material " << sideAbsMat[i] << " W "
141  << sideAbsW[i];
142  }
143 
145  // Detectors
146 
147  detMat = sArgs["DetMat"];
148  detRot = sArgs["DetRot"];
149  detMatPl = sArgs["DetMatPl"];
150  detMatSc = sArgs["DetMatSc"];
151  LogDebug("HCalGeom") << "DDHCalBarrelAlgo debug: Detector (" << nLayers
152  << ") Rotation matrix " << rotns << ":" << detRot
153  << "\n\t\t" << detMat << "\t" << detMatPl << "\t"
154  << detMatSc;
155 
156  detType = dbl_to_int(vArgs["DetType"]);
157  detdP1 = vArgs["DetdP1"];
158  detdP2 = vArgs["DetdP2"];
159  detT11 = vArgs["DetT11"];
160  detT12 = vArgs["DetT12"];
161  detTsc = vArgs["DetTsc"];
162  detT21 = vArgs["DetT21"];
163  detT22 = vArgs["DetT22"];
164  detWidth1 = vArgs["DetWidth1"];
165  detWidth2 = vArgs["DetWidth2"];
166  detPosY = dbl_to_int(vArgs["DetPosY"]);
167  for (i = 0; i < nLayers; i ++) {
168  LogDebug("HCalGeom") << i+1 << "\t" << detType[i] << "\t" << detdP1[i]
169  << ", " << detdP2[i] << "\t" << detT11[i] << ", "
170  << detT12[i] << "\t" << detTsc[i] << "\t" << detT21[i]
171  <<", " << detT22[i] << "\t" << detWidth1[i] << "\t"
172  << detWidth2[i] << "\t" << detPosY[i];
173  }
174 
175  // idName = parentName.name();
176  idName = sArgs["MotherName"];
178  idOffset = int (nArgs["IdOffset"]);
179  DDName parentName = parent().name();
180  LogDebug("HCalGeom") << "DDHCalBarrelAlgo debug: Parent " << parentName
181  <<" idName " << idName << " NameSpace " << idNameSpace
182  << " Offset " << idOffset;
183 }
#define LogDebug(id)
std::vector< std::string > absorbMat
int i
Definition: DBlmapReader.cc:9
std::vector< std::string > midMat
list parent
Definition: dbtoconf.py:74
std::vector< double > sideAbsW
std::vector< std::string > layerLabel
std::string idNameSpace
std::vector< double > layerD2
std::vector< std::string > layerMat
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:18
std::vector< int > layerId
static std::string & ns()
std::vector< double > rmax
std::string detMatSc
std::string genMaterial
std::vector< int > dbl_to_int(const std::vector< double > &vecdbl)
Converts a std::vector of doubles to a std::vector of int.
Definition: DDutils.cc:4
std::vector< double > layerT1
std::vector< double > detdP2
std::vector< double > detWidth2
std::vector< std::string > sideAbsName
std::vector< double > detdP1
std::vector< double > absorbT
std::vector< double > detWidth1
std::vector< double > layerGap
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
std::vector< double > layerAlpha
std::vector< double > detT22
std::vector< int > layerAbsorb
std::vector< std::string > sideAbsMat
std::vector< double > sideT
std::vector< double > detTsc
std::vector< std::string > midName
std::vector< std::string > sideMat
std::vector< double > detT21
std::vector< int > detPosY
std::vector< int > detType
std::string detMatPl
std::vector< double > zoff
std::vector< double > sideD
std::vector< double > detT11
std::vector< double > absorbD
std::vector< double > ttheta
std::vector< double > theta
std::string middleMat
std::vector< double > layerWidth
std::vector< std::string > absorbName
std::vector< double > midW
std::vector< double > layerD1
std::vector< double > detT12
std::vector< double > midT
std::vector< double > layerT2

Member Data Documentation

std::vector<double> DDHCalBarrelAlgo::absorbD
private

Definition at line 169 of file DDHCalBarrelAlgo.h.

Referenced by getAbsorbD(), and initialize().

std::vector<std::string> DDHCalBarrelAlgo::absorbMat
private

Definition at line 168 of file DDHCalBarrelAlgo.h.

Referenced by getAbsorbMat(), and initialize().

std::vector<std::string> DDHCalBarrelAlgo::absorbName
private

Definition at line 167 of file DDHCalBarrelAlgo.h.

Referenced by getAbsorbName(), and initialize().

std::vector<double> DDHCalBarrelAlgo::absorbT
private

Definition at line 170 of file DDHCalBarrelAlgo.h.

Referenced by getAbsorbT(), and initialize().

std::vector<double> DDHCalBarrelAlgo::detdP1
private

Definition at line 205 of file DDHCalBarrelAlgo.h.

Referenced by getDetdP1(), and initialize().

std::vector<double> DDHCalBarrelAlgo::detdP2
private

Definition at line 206 of file DDHCalBarrelAlgo.h.

Referenced by getDetdP2(), and initialize().

std::string DDHCalBarrelAlgo::detMat
private

Definition at line 200 of file DDHCalBarrelAlgo.h.

Referenced by getDetMat(), and initialize().

std::string DDHCalBarrelAlgo::detMatPl
private

Definition at line 202 of file DDHCalBarrelAlgo.h.

Referenced by getDetMatPl(), and initialize().

std::string DDHCalBarrelAlgo::detMatSc
private

Definition at line 203 of file DDHCalBarrelAlgo.h.

Referenced by getDetMatSc(), and initialize().

std::vector<int> DDHCalBarrelAlgo::detPosY
private

Definition at line 214 of file DDHCalBarrelAlgo.h.

Referenced by getDetPosY(), and initialize().

std::string DDHCalBarrelAlgo::detRot
private

Definition at line 201 of file DDHCalBarrelAlgo.h.

Referenced by constructInsideLayers(), and initialize().

std::vector<double> DDHCalBarrelAlgo::detT11
private

Definition at line 207 of file DDHCalBarrelAlgo.h.

Referenced by getDetT11(), and initialize().

std::vector<double> DDHCalBarrelAlgo::detT12
private

Definition at line 208 of file DDHCalBarrelAlgo.h.

Referenced by getDetT12(), and initialize().

std::vector<double> DDHCalBarrelAlgo::detT21
private

Definition at line 210 of file DDHCalBarrelAlgo.h.

Referenced by getDetT21(), and initialize().

std::vector<double> DDHCalBarrelAlgo::detT22
private

Definition at line 211 of file DDHCalBarrelAlgo.h.

Referenced by getDetT22(), and initialize().

std::vector<double> DDHCalBarrelAlgo::detTsc
private

Definition at line 209 of file DDHCalBarrelAlgo.h.

Referenced by getDetTsc(), and initialize().

std::vector<int> DDHCalBarrelAlgo::detType
private

Definition at line 204 of file DDHCalBarrelAlgo.h.

Referenced by getDetType(), and initialize().

std::vector<double> DDHCalBarrelAlgo::detWidth1
private

Definition at line 212 of file DDHCalBarrelAlgo.h.

Referenced by getDetWidth1(), and initialize().

std::vector<double> DDHCalBarrelAlgo::detWidth2
private

Definition at line 213 of file DDHCalBarrelAlgo.h.

Referenced by getDetWidth2(), and initialize().

std::string DDHCalBarrelAlgo::genMaterial
private

Definition at line 114 of file DDHCalBarrelAlgo.h.

Referenced by getGenMaterial(), and initialize().

std::string DDHCalBarrelAlgo::idName
private
std::string DDHCalBarrelAlgo::idNameSpace
private
int DDHCalBarrelAlgo::idOffset
private

Definition at line 218 of file DDHCalBarrelAlgo.h.

Referenced by constructInsideLayers(), and initialize().

std::vector<int> DDHCalBarrelAlgo::layerAbsorb
private

Definition at line 163 of file DDHCalBarrelAlgo.h.

Referenced by getLayerAbsorb(), and initialize().

std::vector<double> DDHCalBarrelAlgo::layerAlpha
private

Definition at line 160 of file DDHCalBarrelAlgo.h.

Referenced by getLayerAlpha(), and initialize().

std::vector<double> DDHCalBarrelAlgo::layerD1
private

Definition at line 158 of file DDHCalBarrelAlgo.h.

Referenced by getLayerD1(), and initialize().

std::vector<double> DDHCalBarrelAlgo::layerD2
private

Definition at line 159 of file DDHCalBarrelAlgo.h.

Referenced by getLayerD2(), and initialize().

std::vector<double> DDHCalBarrelAlgo::layerGap
private

Definition at line 164 of file DDHCalBarrelAlgo.h.

Referenced by getLayerGap(), and initialize().

std::vector<int> DDHCalBarrelAlgo::layerId
private

Definition at line 154 of file DDHCalBarrelAlgo.h.

Referenced by getLayerId(), and initialize().

std::vector<std::string> DDHCalBarrelAlgo::layerLabel
private

Definition at line 155 of file DDHCalBarrelAlgo.h.

Referenced by getLayerLabel(), and initialize().

std::vector<std::string> DDHCalBarrelAlgo::layerMat
private

Definition at line 156 of file DDHCalBarrelAlgo.h.

Referenced by getLayerMaterial(), and initialize().

std::vector<double> DDHCalBarrelAlgo::layerT1
private

Definition at line 161 of file DDHCalBarrelAlgo.h.

Referenced by getLayerT1(), and initialize().

std::vector<double> DDHCalBarrelAlgo::layerT2
private

Definition at line 162 of file DDHCalBarrelAlgo.h.

Referenced by getLayerT2(), and initialize().

std::vector<double> DDHCalBarrelAlgo::layerWidth
private

Definition at line 157 of file DDHCalBarrelAlgo.h.

Referenced by getLayerWidth(), and initialize().

double DDHCalBarrelAlgo::middleD
private

Definition at line 172 of file DDHCalBarrelAlgo.h.

Referenced by getMiddleD(), and initialize().

std::string DDHCalBarrelAlgo::middleMat
private

Definition at line 171 of file DDHCalBarrelAlgo.h.

Referenced by getMiddleMat(), and initialize().

double DDHCalBarrelAlgo::middleW
private

Definition at line 173 of file DDHCalBarrelAlgo.h.

Referenced by getMiddleW(), and initialize().

std::vector<std::string> DDHCalBarrelAlgo::midMat
private

Definition at line 176 of file DDHCalBarrelAlgo.h.

Referenced by getMidAbsMat(), and initialize().

std::vector<std::string> DDHCalBarrelAlgo::midName
private

Definition at line 175 of file DDHCalBarrelAlgo.h.

Referenced by getMidAbsName(), and initialize().

std::vector<double> DDHCalBarrelAlgo::midT
private

Definition at line 178 of file DDHCalBarrelAlgo.h.

Referenced by getMidAbsT(), and initialize().

std::vector<double> DDHCalBarrelAlgo::midW
private

Definition at line 177 of file DDHCalBarrelAlgo.h.

Referenced by getMidAbsW(), and initialize().

int DDHCalBarrelAlgo::nAbsorber
private

Definition at line 166 of file DDHCalBarrelAlgo.h.

Referenced by getAbsorberN(), and initialize().

int DDHCalBarrelAlgo::nhalf
private

Definition at line 117 of file DDHCalBarrelAlgo.h.

Referenced by getNhalf(), and initialize().

int DDHCalBarrelAlgo::nLayers
private

Definition at line 153 of file DDHCalBarrelAlgo.h.

Referenced by getNLayers(), and initialize().

int DDHCalBarrelAlgo::nMidAbs
private

Definition at line 174 of file DDHCalBarrelAlgo.h.

Referenced by getMidAbsorber(), and initialize().

int DDHCalBarrelAlgo::nsectors
private

Definition at line 115 of file DDHCalBarrelAlgo.h.

Referenced by getNsectors(), and initialize().

int DDHCalBarrelAlgo::nsectortot
private

Definition at line 116 of file DDHCalBarrelAlgo.h.

Referenced by getNsectortot(), and initialize().

int DDHCalBarrelAlgo::nSideAbs
private

Definition at line 183 of file DDHCalBarrelAlgo.h.

Referenced by getSideAbsorber(), and initialize().

double DDHCalBarrelAlgo::rin
private
std::vector<double> DDHCalBarrelAlgo::rmax
private

Definition at line 121 of file DDHCalBarrelAlgo.h.

Referenced by constructMidLayer(), getRmax(), and initialize().

std::string DDHCalBarrelAlgo::rotHalf
private

Definition at line 124 of file DDHCalBarrelAlgo.h.

Referenced by constructGeneralVolume(), and initialize().

std::string DDHCalBarrelAlgo::rotns
private

Definition at line 125 of file DDHCalBarrelAlgo.h.

Referenced by constructGeneralVolume(), constructInsideLayers(), and initialize().

double DDHCalBarrelAlgo::rout
private
int DDHCalBarrelAlgo::rzones
private

Definition at line 119 of file DDHCalBarrelAlgo.h.

Referenced by getRzones(), and initialize().

std::vector<std::string> DDHCalBarrelAlgo::sideAbsMat
private

Definition at line 185 of file DDHCalBarrelAlgo.h.

Referenced by getSideAbsMat(), and initialize().

std::vector<std::string> DDHCalBarrelAlgo::sideAbsName
private

Definition at line 184 of file DDHCalBarrelAlgo.h.

Referenced by getSideAbsName(), and initialize().

std::vector<double> DDHCalBarrelAlgo::sideAbsW
private

Definition at line 186 of file DDHCalBarrelAlgo.h.

Referenced by getSideAbsW(), and initialize().

std::vector<double> DDHCalBarrelAlgo::sideD
private

Definition at line 181 of file DDHCalBarrelAlgo.h.

Referenced by getSideD(), and initialize().

std::vector<std::string> DDHCalBarrelAlgo::sideMat
private

Definition at line 180 of file DDHCalBarrelAlgo.h.

Referenced by getSideMat(), and initialize().

std::vector<double> DDHCalBarrelAlgo::sideT
private

Definition at line 182 of file DDHCalBarrelAlgo.h.

Referenced by getSideT(), and initialize().

std::vector<double> DDHCalBarrelAlgo::theta
private

Definition at line 120 of file DDHCalBarrelAlgo.h.

Referenced by getTheta(), initialize(), and Tau.Tau::zImpact().

std::vector<double> DDHCalBarrelAlgo::ttheta
private

Definition at line 123 of file DDHCalBarrelAlgo.h.

Referenced by getTanTheta(), and initialize().

std::vector<double> DDHCalBarrelAlgo::zoff
private

Definition at line 122 of file DDHCalBarrelAlgo.h.

Referenced by getZoff(), and initialize().