10 namespace std{}
using namespace std;
19 #include "CLHEP/Units/GlobalPhysicalConstants.h"
20 #include "CLHEP/Units/GlobalSystemOfUnits.h"
23 theta(0),rmax(0),zoff(0),ttheta(0),layerId(0),layerLabel(0),layerMat(0),
24 layerWidth(0),layerD1(0),layerD2(0),layerAlpha(0),layerT1(0),layerT2(0),
25 layerAbsorb(0),layerGap(0),absorbName(0),absorbMat(0),absorbD(0),absorbT(0),
26 midName(0),midMat(0),midW(0),midT(0),sideMat(0),sideD(0),sideT(0),
27 sideAbsName(0),sideAbsMat(0),sideAbsW(0),detType(0),detdP1(0),detdP2(0),
28 detT11(0),detT12(0),detTsc(0),detT21(0),detT22(0),detWidth1(0),detWidth2(0),
30 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo info: Creating an instance";
45 nhalf = int (nArgs[
"NHalf"]);
48 rzones = int (nArgs[
"RZones"]);
50 rotns = sArgs[
"RotNameSpace"];
52 theta = vArgs[
"Theta"];
56 for (i = 0; i <
rzones; i++) {
62 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo debug: General material "
67 for (i = 0; i <
rzones; i++) {
68 LogDebug(
"HCalGeom") <<
"\tTheta[" << i <<
"] = " <<
theta[
i] <<
"\trmax["
69 << i <<
"] = " <<
rmax[
i] <<
"\tzoff[" << i <<
"] = "
74 nLayers = int(nArgs[
"NLayers"]);
111 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo debug: Middle material "
113 midName = vsArgs[
"MidAbsName"];
114 midMat = vsArgs[
"MidAbsMat"];
115 midW = vArgs[
"MidAbsW"];
116 midT = vArgs[
"MidAbsT"];
118 for (i = 0; i <
nMidAbs; i++) {
126 sideD = vArgs[
"SideD"];
127 sideT = vArgs[
"SideT"];
129 for (
int i = 0; i < nSide; i++) {
130 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo debug: Side material "
151 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo debug: Detector (" << nLayers
167 for (i = 0; i <
nLayers; i ++) {
176 idName = sArgs[
"MotherName"];
180 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo debug: Parent " << parentName
191 LogDebug(
"HCalGeom") <<
"==>> Constructing DDHCalBarrelAlgo...";
193 LogDebug(
"HCalGeom") <<
"<<== End of DDHCalBarrelAlgo construction ...";
200 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: General volume...";
212 int nf = ntot - nsec;
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);
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);
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);
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);
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);
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);
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);
319 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: "
322 <<
" sectors from " << -alpha/CLHEP::deg <<
" to "
323 << (-alpha+dphi)/CLHEP::deg <<
" and with " << nsec
325 for (i = 0; i <pgonZ.size(); i++) {
326 LogDebug(
"HCalGeom") <<
"\t" <<
"\tZ = " << pgonZ[
i] <<
"\tRmin = "
327 << pgonRmin[
i] <<
"\tRmax = " << pgonRmax[
i];
332 pgonRminHalf, pgonRmaxHalf);
333 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: "
336 <<
" sectors from " << -alpha/CLHEP::deg <<
" to "
337 << (-alpha+dphi)/CLHEP::deg <<
" and with " << nsec
339 for (i = 0; i < pgonZHalf.size(); i++) {
340 LogDebug(
"HCalGeom") <<
"\t" <<
"\tZ = " << pgonZHalf[
i] <<
"\tRmin = "
341 << pgonRminHalf[
i] <<
"\tRmax = " <<pgonRmaxHalf[
i];
353 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: "
355 <<
" in " << parentName <<
" at " << r0 <<
" with "<<
rot;
363 << -alpha/CLHEP::deg <<
" to "
364 << (-alpha+dphi)/CLHEP::deg <<
" and with " << nf
366 for (i = 0; i < pgonZHalf.size(); i++) {
367 LogDebug(
"HCalGeom") <<
"\t" <<
"\tZ = " << pgonZHalf[
i] <<
"\tRmin = "
368 << pgonRminHalf[
i] <<
"\tRmax = " << pgonRmaxHalf[
i];
373 pgonRminHalf, pgonRmaxHalf);
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;
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;
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];
401 1, -alpha, 2*alpha, pgonZHalf,
402 pgonRminHalf, pgonRmaxHalf);
407 double phideg = phi/CLHEP::deg;
410 string rotstr(
"NULL");
413 if (phideg < 100) rotstr =
"R0";
417 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: Creating a new rotat"
418 <<
"ion " << rotstr <<
"\t" << 90 <<
"," << phideg
419 <<
"," << 90 <<
"," << (phideg+90) <<
", 0, 0";
421 phideg*CLHEP::deg, 90*CLHEP::deg,
422 (90+phideg)*CLHEP::deg, 0*CLHEP::deg, 0*CLHEP::deg);
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 "
465 vector<double> pgonZ, pgonRmin, pgonRmax;
468 pgonRmin.push_back(rin);
469 pgonRmax.push_back(rout);
471 pgonZ.push_back(zout);
472 pgonRmin.push_back(rin);
473 pgonRmax.push_back(rout);
478 pgonRmin.push_back(pgonRmax[1]);
479 pgonRmax.push_back(pgonRmax[1]);
486 pgonZ.push_back(pgonZ[1] + deltaz);
487 pgonRmin.push_back(pgonRmin[1]);
488 pgonRmax.push_back(
getRmax(in));
491 pgonRmin.push_back(pgonRmin[2]);
492 pgonRmax.push_back(pgonRmax[2]);
497 pgonRmin.push_back(
getRmax(in));
498 pgonRmax.push_back(pgonRmax[1]);
502 pgonRmin.push_back(pgonRmin[2]);
503 pgonRmax.push_back(pgonRmax[2]);
508 pgonRmin.push_back(rout);
509 pgonRmax.push_back(rout);
516 double alpha1 =
alpha;
518 double rmid = 0.5*(rin+
rout);
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;
525 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << name <<
" (Layer "
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];
535 1, -alpha1, 2*alpha1,
536 pgonZ, pgonRmin, pgonRmax);
541 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << glog.
name()
542 <<
" number " <<
getLayerId(
i) <<
" positioned in "
543 << sector.
name() <<
" at (0,0,0) with no rotation";
555 string nm,
int id,
int nAbs,
556 double rin,
double d1,
557 double alpha1,
double d2,
558 double alpha2,
double t1,
561 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: \t\tInside layer " <<
id
568 string nam0 = nm +
"In";
575 double rsi, dx, dy, dz,
x,
y;
582 if (rsi >=
getRmax(i)) in = i+1;
585 dy = 0.5*rsi*(
tan(alpha1)-
tan(alpha2));
588 y = 0.5*rsi*(
tan(alpha1)+
tan(alpha2));
593 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
594 <<
" Box made of " <<
getDetMat() <<
" of dimensions "
595 << dx <<
", " << dy <<
", " << dz;
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;
621 if (rsi >=
getRmax(i)) in = i+1;
624 dy = 0.5*rsi*
tan(alpha2);
631 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
632 <<
" Box made of " <<
getDetMat() <<
" of dimensions "
633 << dx <<
", " << dy <<
", " << dz;
643 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << glog.
name() <<
" Number "
645 <<
" at " << r21 <<
" with no rotation\n"
646 <<
"DDHCalBarrelAlgo test: " << glog.
name() <<
" Number "
648 <<
" at " << r22 <<
" with " <<
rot;
656 double rin,
double alpha,
660 int k =
abs(nAbs) - 1;
661 string namek = nm +
"Side";
667 vector<double> pgonZ, pgonRmin, pgonRmax;
669 pgonZ.push_back(0.0);
670 pgonRmin.push_back(rsi);
671 pgonRmax.push_back(rsi+
getSideT(k));
674 pgonRmin.push_back(rsi);
675 pgonRmax.push_back(pgonRmax[0]);
678 pgonRmin.push_back(pgonRmax[1]);
679 pgonRmax.push_back(pgonRmax[1]);
681 -alpha, 2*alpha, pgonZ, pgonRmin,
683 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
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];
698 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << glog.
name()
699 <<
" Number 1 positioned in " << laylog.
name()
700 <<
" at (0,0,0) with no rotation";
704 double rmid = pgonRmax[0];
710 -alpha1, 2*alpha1, pgonZ, pgonRmin,
712 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
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];
728 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << log.
name()
729 <<
" Number 1 positioned in " << mother.
name()
730 <<
" at (0,0,0) with no rotation";
739 string nm,
double rin,
744 string name = nm +
"Mid";
752 vector<double> pgonZ, pgonRmin, pgonRmax;
754 pgonZ.push_back(0.0);
755 pgonRmin.push_back(rsi);
759 pgonRmin.push_back(rsi);
760 pgonRmax.push_back(pgonRmax[0]);
763 pgonRmin.push_back(pgonRmax[1]);
764 pgonRmax.push_back(pgonRmax[1]);
766 2*alpha, pgonZ, pgonRmin, pgonRmax);
767 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
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];
782 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << log.
name()
783 <<
" Number 1 positioned in " << laylog.
name()
784 <<
" at (0,0,0) with no rotation";
787 double rmin = pgonRmin[0];
788 double rmax = pgonRmax[0];
790 for (
int i=0;
i<1;
i++) {
794 -alpha1, 2*alpha1, pgonZ, pgonRmin,
796 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
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];
812 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << log.
name()
813 <<
" Number 1 positioned in " << mother.
name()
814 <<
" at (0,0,0) with no rotation";
820 pgonRmin[0] = rmid; pgonRmax[0] =
rmax;
825 -alpha1, 2*alpha1, pgonZ, pgonRmin,
827 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
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];
843 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << glog.
name()
844 <<
" Number 1 positioned in " << mother.
name()
845 <<
" at (0,0,0) with no rotation";
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);
856 -alpha1, 2*alpha1, pgonZ, pgonRmin,
858 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
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];
874 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << log.
name()
875 <<
" Number " <<
i <<
" positioned in "
876 << mother.
name() <<
" at (0,0,0) with no "
886 string name,
int id,
double dx,
887 double dy,
double dz,
890 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: \t\tInside detector " <<
id
898 string plname = detector.
name().
name()+
"Plastic_";
905 double dx1, dx2, shiftX;
921 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
922 <<
" Box made of " <<
getDetMatPl() <<
" of dimensions "
923 << dx1 <<
", " << wid <<
", " << dz;
926 double x = shiftX + dx1 - dx;
928 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << glog.
name()
929 <<
" Number 1 positioned in " << detector.
name()
930 <<
" at (" << x <<
"," << y <<
",0) with no rotation";
934 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
935 <<
" Box made of " <<
getDetMatSc() <<
" of dimensions "
936 << 0.5*
getDetTsc(
id) <<
", " << wid <<
", " << dz;
942 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << glog.
name() <<
" Number "
943 << copyNo <<
" positioned in " << detector.
name()
944 <<
" at (" << x <<
"," << y <<
",0) with no rotation";
947 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
948 <<
" Box made of " <<
getDetMatPl() <<
" of dimensions "
949 << dx2 <<
", " << wid <<
", " << dz;
954 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << glog.
name()
955 <<
" Number 1 positioned in " << detector.
name()
956 <<
" at (" << x <<
"," << y <<
",0) with no rotation";
std::vector< std::string > absorbMat
std::string getSideAbsName(unsigned int i) const
int getNsectortot() const
std::string getLayerLabel(unsigned i) const
void constructInsideDetectors(DDLogicalPart detector, std::string name, int id, double dx, double dy, double dz, int type, DDCompactView &cpv)
std::string getGenMaterial() const
std::vector< std::string > midMat
double getLayerD1(unsigned i) const
double getAbsorbT(unsigned int i) const
std::vector< double > sideAbsW
std::string getLayerMaterial(unsigned i) const
std::string getMidAbsName(unsigned int i) const
std::vector< std::string > layerLabel
double getRmax(unsigned int i) const
DDMaterial is used to define and access material information.
int getDetPosY(unsigned int i) const
double getLayerD2(unsigned i) const
double getSideAbsW(unsigned int i) const
std::vector< double > layerD2
Geom::Theta< T > theta() const
void position(const DDLogicalPart &self, const DDLogicalPart &parent, std::string copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=NULL)
std::vector< std::string > layerMat
DDName is used to identify DDD entities uniquely.
std::string getAbsorbMat(unsigned int i) const
double getLayerAlpha(unsigned i) const
void constructInsideSector(DDLogicalPart sector, DDCompactView &cpv)
std::vector< int > layerId
static std::string & ns()
std::string dbl_to_string(const double &in)
Converts only the integer part of a double to a string.
std::vector< double > rmax
std::string getDetMatPl() const
virtual ~DDHCalBarrelAlgo()
double getMidAbsT(unsigned int i) const
type of data representation of DDCompactView
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.
std::string getDetMat() const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Represents a uniquely identifyable rotation matrix.
double getZoff(unsigned int i) const
std::string getDetMatSc() const
U second(std::pair< T, U > const &p)
std::vector< int > dbl_to_int(const std::vector< double > &vecdbl)
Converts a std::vector of doubles to a std::vector of int.
std::vector< double > layerT1
std::vector< double > detdP2
std::vector< double > detWidth2
double getDetT22(unsigned int i) const
double getLayerGap(unsigned int i) const
std::vector< std::string > sideAbsName
std::vector< double > detdP1
std::vector< double > absorbT
std::vector< double > detWidth1
double getDetT11(unsigned int i) const
void constructGeneralVolume(DDCompactView &cpv)
int getLayerAbsorb(unsigned int i) const
double getLayerT2(unsigned i) const
int getDetType(unsigned int i) const
double getDetdP1(unsigned int i) const
double getLayerT1(unsigned i) const
int getSideAbsorber() const
double getSideD(unsigned int i) const
double getMidAbsW(unsigned int i) const
std::string getSideAbsMat(unsigned int i) const
std::vector< double > layerGap
Tan< T >::type tan(const T &t)
std::string getSideMat(unsigned int i) const
std::vector< double > layerAlpha
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
double getTanTheta(unsigned int i) const
std::vector< double > detT22
std::vector< int > layerAbsorb
std::vector< std::string > sideAbsMat
std::vector< double > sideT
std::vector< double > detTsc
DDLogicalPart constructSideLayer(DDLogicalPart laylog, std::string nm, int nAbs, double rin, double alpha, DDCompactView &cpv)
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.
void initialize(const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs)
int getLayerId(unsigned i) const
std::string getAbsorbName(unsigned int i) const
double getMiddleW() const
double getDetdP2(unsigned int i) const
std::vector< std::string > midName
void execute(DDCompactView &cpv)
std::vector< std::string > sideMat
std::vector< double > detT21
DDLogicalPart constructMidLayer(DDLogicalPart laylog, std::string nm, double rin, double alpha, DDCompactView &cpv)
std::vector< int > detPosY
double getLayerWidth(unsigned i) const
double getAbsorbD(unsigned int i) const
std::vector< int > detType
double getDetT21(unsigned int i) const
std::vector< double > zoff
std::vector< double > sideD
std::vector< double > detT11
double getMiddleD() const
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = ':'
std::vector< double > absorbD
std::vector< double > ttheta
double getDetWidth2(unsigned int i) const
std::vector< double > theta
int getMidAbsorber() const
std::vector< double > layerWidth
std::vector< std::string > absorbName
double getDetT12(unsigned int i) const
std::vector< double > midW
double getDetWidth1(unsigned int i) const
std::vector< double > layerD1
double getSideT(unsigned int i) const
std::vector< double > detT12
std::string getMiddleMat() const
const std::string & name() const
Returns the name.
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)
std::vector< double > midT
std::vector< double > layerT2
std::string getMidAbsMat(unsigned int i) const