10 namespace std{}
using namespace std;
20 #include "CLHEP/Units/GlobalPhysicalConstants.h" 21 #include "CLHEP/Units/GlobalSystemOfUnits.h" 24 theta(0),rmax(0),zoff(0),ttheta(0),layerId(0),layerLabel(0),layerMat(0),
25 layerWidth(0),layerD1(0),layerD2(0),layerAlpha(0),layerT1(0),layerT2(0),
26 layerAbsorb(0),layerGap(0),absorbName(0),absorbMat(0),absorbD(0),absorbT(0),
27 midName(0),midMat(0),midW(0),midT(0),sideMat(0),sideD(0),sideT(0),
28 sideAbsName(0),sideAbsMat(0),sideAbsW(0),detType(0),detdP1(0),detdP2(0),
29 detT11(0),detT12(0),detTsc(0),detT21(0),detT22(0),detWidth1(0),detWidth2(0),
31 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo info: Creating an instance";
51 rotns = sArgs[
"RotNameSpace"];
53 theta = vArgs[
"Theta"];
57 for (i = 0; i <
rzones; i++) {
63 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo debug: General material " 68 for (i = 0; i <
rzones; i++) {
69 LogDebug(
"HCalGeom") <<
"\tTheta[" << i <<
"] = " <<
theta[
i] <<
"\trmax[" 70 << i <<
"] = " <<
rmax[
i] <<
"\tzoff[" << i <<
"] = " 112 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo debug: Middle material " 114 midName = vsArgs[
"MidAbsName"];
115 midMat = vsArgs[
"MidAbsMat"];
116 midW = vArgs[
"MidAbsW"];
117 midT = vArgs[
"MidAbsT"];
119 for (i = 0; i <
nMidAbs; i++) {
127 sideD = vArgs[
"SideD"];
128 sideT = vArgs[
"SideT"];
130 for (
int i = 0; i < nSide; i++) {
131 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo debug: Side material " 152 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo debug: Detector (" << nLayers
168 for (i = 0; i <
nLayers; i ++) {
177 idName = sArgs[
"MotherName"];
181 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo debug: Parent " << parentName
192 LogDebug(
"HCalGeom") <<
"==>> Constructing DDHCalBarrelAlgo...";
194 LogDebug(
"HCalGeom") <<
"<<== End of DDHCalBarrelAlgo construction ...";
201 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: General volume...";
213 int nf = ntot - nsec;
233 vector<double> pgonZ;
234 pgonZ.emplace_back( -zmax);
235 pgonZ.emplace_back( -zstep5);
236 pgonZ.emplace_back( -zstep5);
237 pgonZ.emplace_back( -zstep4);
238 pgonZ.emplace_back( -zstep3);
239 pgonZ.emplace_back( -zstep2);
240 pgonZ.emplace_back( -zstep1);
241 pgonZ.emplace_back( 0);
242 pgonZ.emplace_back( zstep1);
243 pgonZ.emplace_back( zstep2);
244 pgonZ.emplace_back( zstep3);
245 pgonZ.emplace_back( zstep4);
246 pgonZ.emplace_back( zstep5);
247 pgonZ.emplace_back( zstep5);
248 pgonZ.emplace_back( zmax);
250 vector<double> pgonRmin;
251 pgonRmin.emplace_back( rmid4);
252 pgonRmin.emplace_back( rmid3);
253 pgonRmin.emplace_back( rmid3);
254 pgonRmin.emplace_back( rmid2);
255 pgonRmin.emplace_back( rmid1);
256 pgonRmin.emplace_back( rmid1);
257 pgonRmin.emplace_back( rin);
258 pgonRmin.emplace_back( rin);
259 pgonRmin.emplace_back( rin);
260 pgonRmin.emplace_back( rmid1);
261 pgonRmin.emplace_back( rmid1);
262 pgonRmin.emplace_back( rmid2);
263 pgonRmin.emplace_back( rmid3);
264 pgonRmin.emplace_back( rmid3);
265 pgonRmin.emplace_back( rmid4);
267 vector<double> pgonRmax;
268 pgonRmax.emplace_back( rout1);
269 pgonRmax.emplace_back( rout1);
270 pgonRmax.emplace_back( rout);
271 pgonRmax.emplace_back( rout);
272 pgonRmax.emplace_back( rout);
273 pgonRmax.emplace_back( rout);
274 pgonRmax.emplace_back( rout);
275 pgonRmax.emplace_back( rout);
276 pgonRmax.emplace_back( rout);
277 pgonRmax.emplace_back( rout);
278 pgonRmax.emplace_back( rout);
279 pgonRmax.emplace_back( rout);
280 pgonRmax.emplace_back( rout);
281 pgonRmax.emplace_back( rout1);
282 pgonRmax.emplace_back( rout1);
284 vector<double> pgonZHalf;
285 pgonZHalf.emplace_back( 0);
286 pgonZHalf.emplace_back( zstep1);
287 pgonZHalf.emplace_back( zstep2);
288 pgonZHalf.emplace_back( zstep3);
289 pgonZHalf.emplace_back( zstep4);
290 pgonZHalf.emplace_back( zstep5);
291 pgonZHalf.emplace_back( zstep5);
292 pgonZHalf.emplace_back( zmax);
294 vector<double> pgonRminHalf;
295 pgonRminHalf.emplace_back( rin);
296 pgonRminHalf.emplace_back( rin);
297 pgonRminHalf.emplace_back( rmid1);
298 pgonRminHalf.emplace_back( rmid1);
299 pgonRminHalf.emplace_back( rmid2);
300 pgonRminHalf.emplace_back( rmid3);
301 pgonRminHalf.emplace_back( rmid3);
302 pgonRminHalf.emplace_back( rmid4);
304 vector<double> pgonRmaxHalf;
305 pgonRmaxHalf.emplace_back( rout);
306 pgonRmaxHalf.emplace_back( rout);
307 pgonRmaxHalf.emplace_back( rout);
308 pgonRmaxHalf.emplace_back( rout);
309 pgonRmaxHalf.emplace_back( rout);
310 pgonRmaxHalf.emplace_back( rout);
311 pgonRmaxHalf.emplace_back( rout1);
312 pgonRmaxHalf.emplace_back( rout1);
320 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " 323 <<
" sectors from " << -alpha/CLHEP::deg <<
" to " 324 << (-alpha+dphi)/CLHEP::deg <<
" and with " << nsec
326 for (i = 0; i <pgonZ.size(); i++) {
327 LogDebug(
"HCalGeom") <<
"\t" <<
"\tZ = " << pgonZ[
i] <<
"\tRmin = " 328 << pgonRmin[
i] <<
"\tRmax = " << pgonRmax[
i];
333 pgonRminHalf, pgonRmaxHalf);
334 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " 337 <<
" sectors from " << -alpha/CLHEP::deg <<
" to " 338 << (-alpha+dphi)/CLHEP::deg <<
" and with " << nsec
340 for (i = 0; i < pgonZHalf.size(); i++) {
341 LogDebug(
"HCalGeom") <<
"\t" <<
"\tZ = " << pgonZHalf[
i] <<
"\tRmin = " 342 << pgonRminHalf[
i] <<
"\tRmax = " <<pgonRmaxHalf[
i];
354 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " 356 <<
" in " << parentName <<
" at " << r0 <<
" with "<<
rot;
364 << -alpha/CLHEP::deg <<
" to " 365 << (-alpha+dphi)/CLHEP::deg <<
" and with " << nf
367 for (i = 0; i < pgonZHalf.size(); i++) {
368 LogDebug(
"HCalGeom") <<
"\t" <<
"\tZ = " << pgonZHalf[
i] <<
"\tRmin = " 369 << pgonRminHalf[
i] <<
"\tRmax = " << pgonRmaxHalf[
i];
374 pgonRminHalf, pgonRmaxHalf);
377 cpv.
position(genlogich, genlogic, 1, r0, rot);
378 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << genlogich.
name()
379 <<
" number 1 positioned in " << genlogic.
name()
380 <<
" at " << r0 <<
" with " <<
rot;
384 cpv.
position(genlogich, genlogic, 2, r0, rot);
385 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << genlogich.
name()
386 <<
" number 2 positioned in " << genlogic.
name()
387 <<
" at " << r0 <<
" with " <<
rot;
394 <<
" with 1 sector from " << -alpha/CLHEP::deg <<
" to " 395 << alpha/CLHEP::deg <<
" and with " << nf <<
" sections";
396 for (i = 0; i < pgonZHalf.size(); i++) {
397 LogDebug(
"HCalGeom") <<
"\t" <<
"\tZ = " << pgonZHalf[
i] <<
"\tRmin = " 398 << pgonRminHalf[
i] <<
"\tRmax = " << pgonRmaxHalf[
i];
402 1, -alpha, 2*alpha, pgonZHalf,
403 pgonRminHalf, pgonRmaxHalf);
408 double phideg = phi/CLHEP::deg;
411 string rotstr(
"NULL");
414 if (phideg < 100) rotstr =
"R0";
415 rotstr = rotstr + std::to_string(phideg);
418 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: Creating a new rotat" 419 <<
"ion " << rotstr <<
"\t" << 90 <<
"," << phideg
420 <<
"," << 90 <<
"," << (phideg+90) <<
", 0, 0";
422 phideg*CLHEP::deg, 90*CLHEP::deg,
423 (90+phideg)*CLHEP::deg, 0*CLHEP::deg, 0*CLHEP::deg);
427 cpv.
position(seclogic, genlogich,
ii+1, r0, rotation);
428 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << seclogic.
name()
429 <<
" number " <<
ii+1 <<
" positioned in " 430 << genlogich.
name() <<
" at " << r0 <<
" with " 456 for (
int j = 0; j <
getRzones()-1; j++) {
457 if (rin >=
getRmax(j)) in = j+1;
466 vector<double> pgonZ, pgonRmin, pgonRmax;
468 pgonZ.emplace_back(0);
469 pgonRmin.emplace_back(rin);
470 pgonRmax.emplace_back(rout);
472 pgonZ.emplace_back(zout);
473 pgonRmin.emplace_back(rin);
474 pgonRmax.emplace_back(rout);
479 pgonRmin.emplace_back(pgonRmax[1]);
480 pgonRmax.emplace_back(pgonRmax[1]);
487 pgonZ.emplace_back(pgonZ[1] + deltaz);
488 pgonRmin.emplace_back(pgonRmin[1]);
489 pgonRmax.emplace_back(
getRmax(in));
492 pgonRmin.emplace_back(pgonRmin[2]);
493 pgonRmax.emplace_back(pgonRmax[2]);
498 pgonRmin.emplace_back(
getRmax(in));
499 pgonRmax.emplace_back(pgonRmax[1]);
503 pgonRmin.emplace_back(pgonRmin[2]);
504 pgonRmax.emplace_back(pgonRmax[2]);
509 pgonRmin.emplace_back(rout);
510 pgonRmax.emplace_back(rout);
517 double alpha1 =
alpha;
519 double rmid = 0.5*(rin+
rout);
521 alpha1 = atan(width/rmid);
522 LogDebug(
"HCalGeom") <<
"\t" <<
"Alpha_1 modified from " 523 << alpha/CLHEP::deg <<
" to " << alpha1/CLHEP::deg
524 <<
" Rmid " << rmid <<
" Reduced width " <<
width;
526 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << name <<
" (Layer " 528 <<
" with 1 sector from " << -alpha1/CLHEP::deg
529 <<
" to " << alpha1/CLHEP::deg <<
" and with " 530 << nsec <<
" sections";
531 for (
unsigned int k=0;
k<pgonZ.size();
k++) {
532 LogDebug(
"HCalGeom") <<
"\t" <<
"\t" << pgonZ[
k] <<
"\t" << pgonRmin[
k]
533 <<
"\t" << pgonRmax[
k];
536 1, -alpha1, 2*alpha1,
537 pgonZ, pgonRmin, pgonRmax);
542 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << glog.
name()
543 <<
" number " <<
getLayerId(
i) <<
" positioned in " 544 << sector.
name() <<
" at (0,0,0) with no rotation";
556 const string& nm,
int id,
int nAbs,
557 double rin,
double d1,
558 double alpha1,
double d2,
559 double alpha2,
double t1,
562 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: \t\tInside layer " <<
id 569 string nam0 = nm +
"In";
583 if (rsi >=
getRmax(i)) in = i+1;
586 dy = 0.5*rsi*(
tan(alpha1)-
tan(alpha2));
589 y = 0.5*rsi*(
tan(alpha1)+
tan(alpha2));
594 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
595 <<
" Box made of " <<
getDetMat() <<
" of dimensions " 596 << dx <<
", " << dy <<
", " <<
dz;
606 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << glog.
name()
607 <<
" Number " <<
idOffset+1 <<
" positioned in " 608 << mother.
name() <<
" at " << r11
609 <<
" with no rotation\n" 610 <<
"DDHCalBarrelAlgo test: " << glog.
name()
611 <<
" Number " <<
idOffset+2 <<
" positioned in " 612 << mother.
name() <<
" at " << r12 <<
" with " <<
rot;
622 if (rsi >=
getRmax(i)) in = i+1;
625 dy = 0.5*rsi*
tan(alpha2);
632 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
633 <<
" Box made of " <<
getDetMat() <<
" of dimensions " 634 << dx <<
", " << dy <<
", " <<
dz;
644 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << glog.
name() <<
" Number " 646 <<
" at " << r21 <<
" with no rotation\n" 647 <<
"DDHCalBarrelAlgo test: " << glog.
name() <<
" Number " 649 <<
" at " << r22 <<
" with " <<
rot;
656 const string& nm,
int nAbs,
661 int k =
abs(nAbs) - 1;
662 string namek = nm +
"Side";
668 vector<double> pgonZ, pgonRmin, pgonRmax;
670 pgonZ.emplace_back(0.0);
671 pgonRmin.emplace_back(rsi);
672 pgonRmax.emplace_back(rsi+
getSideT(k));
675 pgonRmin.emplace_back(rsi);
676 pgonRmax.emplace_back(pgonRmax[0]);
679 pgonRmin.emplace_back(pgonRmax[1]);
680 pgonRmax.emplace_back(pgonRmax[1]);
682 -alpha, 2*alpha, pgonZ, pgonRmin,
684 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
686 <<
" with 1 sector from " << -alpha/CLHEP::deg
687 <<
" to " << alpha/CLHEP::deg <<
" and with " 688 << pgonZ.size() <<
" sections";
689 for (
unsigned int ii=0;
ii<pgonZ.size();
ii++) {
690 LogDebug(
"HCalGeom") <<
"\t\tZ = " << pgonZ[
ii] <<
"\tRmin = " 691 << pgonRmin[
ii] <<
"\tRmax = " << pgonRmax[
ii];
699 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << glog.
name()
700 <<
" Number 1 positioned in " << laylog.
name()
701 <<
" at (0,0,0) with no rotation";
705 double rmid = pgonRmax[0];
711 -alpha1, 2*alpha1, pgonZ, pgonRmin,
713 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
715 <<
" with 1 sector from " << -alpha1/CLHEP::deg
716 <<
" to " << alpha1/CLHEP::deg <<
" and with " 717 << pgonZ.size() <<
" sections";
718 for (
unsigned int ii=0;
ii<pgonZ.size();
ii++) {
719 LogDebug(
"HCalGeom") <<
"\t\tZ = " << pgonZ[
ii] <<
"\tRmin = " 720 << pgonRmin[
ii] <<
"\tRmax = " << pgonRmax[
ii];
729 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << log.
name()
730 <<
" Number 1 positioned in " << mother.
name()
731 <<
" at (0,0,0) with no rotation";
740 const string& nm,
double rin,
745 string name = nm +
"Mid";
753 vector<double> pgonZ, pgonRmin, pgonRmax;
755 pgonZ.emplace_back(0.0);
756 pgonRmin.emplace_back(rsi);
760 pgonRmin.emplace_back(rsi);
761 pgonRmax.emplace_back(pgonRmax[0]);
764 pgonRmin.emplace_back(pgonRmax[1]);
765 pgonRmax.emplace_back(pgonRmax[1]);
767 2*alpha, pgonZ, pgonRmin, pgonRmax);
768 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
770 <<
" with 1 sector from " << -alpha/CLHEP::deg
771 <<
" to " << alpha/CLHEP::deg <<
" and with " 772 << pgonZ.size() <<
" sections";
773 for (
unsigned int ii=0;
ii<pgonZ.size();
ii++) {
774 LogDebug(
"HCalGeom") <<
"\t\tZ = " << pgonZ[
ii] <<
"\tRmin = " 775 << pgonRmin[
ii] <<
"\tRmax = " << pgonRmax[
ii];
783 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << log.
name()
784 <<
" Number 1 positioned in " << laylog.
name()
785 <<
" at (0,0,0) with no rotation";
788 double rmin = pgonRmin[0];
789 double rmax = pgonRmax[0];
791 for (
int i=0;
i<1;
i++) {
795 -alpha1, 2*alpha1, pgonZ, pgonRmin,
797 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
799 <<
" with 1 sector from " << -alpha1/CLHEP::deg
800 <<
" to " << alpha1/CLHEP::deg <<
" and with " 801 << pgonZ.size() <<
" sections";
802 for (
unsigned int ii=0;
ii<pgonZ.size();
ii++) {
803 LogDebug(
"HCalGeom") <<
"\t\tZ = " << pgonZ[
ii] <<
"\tRmin = " 804 << pgonRmin[
ii] <<
"\tRmax = " << pgonRmax[
ii];
813 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << log.
name()
814 <<
" Number 1 positioned in " << mother.
name()
815 <<
" at (0,0,0) with no rotation";
821 pgonRmin[0] = rmid; pgonRmax[0] =
rmax;
826 -alpha1, 2*alpha1, pgonZ, pgonRmin,
828 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
830 <<
" with 1 sector from " << -alpha1/CLHEP::deg
831 <<
" to " << alpha1/CLHEP::deg <<
" and with " 832 << pgonZ.size() <<
" sections";
833 for (
unsigned int ii=0;
ii<pgonZ.size();
ii++) {
834 LogDebug(
"HCalGeom") <<
"\t\tZ = " << pgonZ[
ii] <<
"\tRmin = " 835 << pgonRmin[
ii] <<
"\tRmax = " << pgonRmax[
ii];
844 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << glog.
name()
845 <<
" Number 1 positioned in " << mother.
name()
846 <<
" at (0,0,0) with no rotation";
852 pgonRmin[0] = rmin; pgonRmax[0] = rmid;
853 pgonRmin[1] = rmin; pgonRmax[1] = rmid; pgonZ[1] =
getZoff(in) + rmin*
getTanTheta(in);
854 pgonRmin[2] = rmid; pgonRmax[2] = rmid; pgonZ[2] =
getZoff(in) + rmid*
getTanTheta(in);
857 -alpha1, 2*alpha1, pgonZ, pgonRmin,
859 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
861 <<
" with 1 sector from " << -alpha1/CLHEP::deg
862 <<
" to " << alpha1/CLHEP::deg <<
" and with " 863 << pgonZ.size() <<
" sections";
864 for (
unsigned int ii=0;
ii<pgonZ.size();
ii++) {
865 LogDebug(
"HCalGeom") <<
"\t\tZ = " << pgonZ[
ii] <<
"\tRmin = " 866 << pgonRmin[
ii] <<
"\tRmax = " << pgonRmax[
ii];
875 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << log.
name()
876 <<
" Number " <<
i <<
" positioned in " 877 << mother.
name() <<
" at (0,0,0) with no " 887 const string&
name,
int id,
double dx,
888 double dy,
double dz,
891 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: \t\tInside detector " <<
id 899 string plname = detector.
name().
name()+
"Plastic_";
906 double dx1, dx2, shiftX;
922 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
923 <<
" Box made of " <<
getDetMatPl() <<
" of dimensions " 924 << dx1 <<
", " << wid <<
", " <<
dz;
927 double x = shiftX + dx1 -
dx;
929 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << glog.
name()
930 <<
" Number 1 positioned in " << detector.
name()
931 <<
" at (" << x <<
"," << y <<
",0) with no rotation";
935 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
936 <<
" Box made of " <<
getDetMatSc() <<
" of dimensions " 943 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << glog.
name() <<
" Number " 944 << copyNo <<
" positioned in " << detector.
name()
945 <<
" at (" << x <<
"," << y <<
",0) with no rotation";
948 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << solid.
name()
949 <<
" Box made of " <<
getDetMatPl() <<
" of dimensions " 950 << dx2 <<
", " << wid <<
", " <<
dz;
955 LogDebug(
"HCalGeom") <<
"DDHCalBarrelAlgo test: " << glog.
name()
956 <<
" Number 1 positioned in " << detector.
name()
957 <<
" 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
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
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
std::vector< int > layerId
static std::string & ns()
std::vector< double > rmax
void constructInsideDetectors(const DDLogicalPart &detector, const std::string &name, int id, double dx, double dy, double dz, int type, DDCompactView &cpv)
std::string getDetMatPl() const
double getMidAbsT(unsigned int i) const
Compact representation of the geometrical detector hierarchy.
A DDSolid represents the shape of a part.
void constructInsideSector(const DDLogicalPart §or, DDCompactView &cpv)
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
void execute(DDCompactView &cpv) override
std::vector< double > detWidth1
DDLogicalPart constructSideLayer(const DDLogicalPart &laylog, const std::string &nm, int nAbs, double rin, double alpha, DDCompactView &cpv)
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)
Abs< T >::type abs(const T &t)
std::string getSideMat(unsigned int i) const
std::vector< double > layerAlpha
void constructInsideLayers(const DDLogicalPart &laylog, const std::string &name, int id, int nAbs, double rin, double d1, double alpha1, double d2, double alpha2, double t1, double t2, DDCompactView &cpv)
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
~DDHCalBarrelAlgo() override
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.
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
std::vector< std::string > sideMat
std::vector< double > detT21
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
void position(const DDLogicalPart &self, const DDLogicalPart &parent, const std::string ©no, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=0)
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
DDLogicalPart constructMidLayer(const DDLogicalPart &laylog, const std::string &nm, double rin, double alpha, DDCompactView &cpv)
void initialize(const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs) override
std::string getMidAbsMat(unsigned int i) const