|
ATLAS Offline Software
|
Go to the documentation of this file.
20 #include "GeoModelKernel/GeoAlignableTransform.h"
21 #include "GeoModelKernel/GeoBox.h"
22 #include "GeoModelKernel/GeoFullPhysVol.h"
23 #include "GeoModelKernel/GeoIdentifierTag.h"
24 #include "GeoModelKernel/GeoLogVol.h"
25 #include "GeoModelKernel/GeoMaterial.h"
26 #include "GeoModelKernel/GeoNameTag.h"
27 #include "GeoModelKernel/GeoPhysVol.h"
28 #include "GeoModelKernel/GeoTransform.h"
29 #include "GeoModelKernel/GeoTube.h"
30 #include "GeoModelKernel/GeoTubs.h"
31 #include "GaudiKernel/PhysicalConstants.h"
34 #include "Identifier/Identifier.h"
36 #include "GaudiKernel/Bootstrap.h"
37 #include "GaudiKernel/ISvcLocator.h"
63 const GeoTube* barrelTube =
new GeoTube(rmin,rmax,halflength);
64 const GeoLogVol* barrelLog =
new GeoLogVol(
"barrelLog",barrelTube,air);
65 GeoPhysVol* barrelPhys =
new GeoPhysVol(barrelLog);
75 lname[0] =
"InnerLayer";
76 lname[1] =
"CenterLayer";
77 lname[2] =
"OuterLayer";
82 GeoAlignableTransform * xform =
new GeoAlignableTransform(GeoTrf::Transform3D::Identity());
83 GeoVPhysVol* layerphys =
layer.Build();
84 GeoNameTag *
tag =
new GeoNameTag(lname[ii]);
86 barrelPhys->add(
new GeoIdentifierTag(ii));
87 barrelPhys->add(xform);
88 barrelPhys->add(layerphys);
102 for(
int ii =0; ii< brlsvc.
NCylinders(); ii++) {
104 GeoNameTag*
tag =
new GeoNameTag(
"Outside Barrel Service");
105 GeoTrf::Translate3D
pos(0.,0.,brlsvc.
ZPos() );
106 GeoTransform* xform =
new GeoTransform(
pos);
107 barrelPhys->add(
tag);
108 barrelPhys->add(xform);
109 barrelPhys->add(brlsvc.
Build() );
131 const GeoBox* cableBox =
new GeoBox(thickness/2.,
width/2.,
length/2.);
133 GeoLogVol* theCable =
new GeoLogVol(logName,cableBox,cable);
134 GeoPhysVol* cablePhys =
new GeoPhysVol(theCable);
198 std::string LogName =
"chipBrlLog";
204 LogName =
"chipECLog";
208 const GeoBox* chipBox =
new GeoBox(thickness/2.,
width/2.,
length/2.);
209 GeoLogVol* theChip =
new GeoLogVol(LogName,chipBox,chipMat);
210 GeoPhysVol* chipPhys =
new GeoPhysVol(theChip);
233 double rmin =
RMin();
234 double rmax =
RMax();
237 const GeoTube* diskTube =
new GeoTube(rmin,rmax,halflength);
238 m_theDisk =
new GeoLogVol(
"diskLog",diskTube,air);
245 GeoFullPhysVol* diskPhys =
new GeoFullPhysVol(
m_theDisk);
265 GeoVPhysVol * modulePhys = psd.
Build();
266 GeoNameTag*
tag =
new GeoNameTag(
"DiskSector");
268 diskPhys->add(
new GeoIdentifierTag(
getPhiId() ) );
269 diskPhys->add(xform);
270 diskPhys->add(modulePhys);
283 GeoTrf::RotateZ3D rm((ii+1)*
angle);
285 GeoVPhysVol * modulePhys = psd.
Build();
286 GeoNameTag*
tag =
new GeoNameTag(
"DiskSector");
288 diskPhys->add(
new GeoIdentifierTag(
getPhiId() ) );
289 diskPhys->add(xform);
290 diskPhys->add(modulePhys);
302 GeoTrf::Translate3D
pos(0.,0.,pds.
ZPos() );
303 GeoNameTag*
tag =
new GeoNameTag(
"DiskSupport");
304 GeoTransform* xform =
new GeoTransform(
pos);
306 diskPhys->add(xform);
307 diskPhys->add(pds.
Build() );
378 std::string ele[3] = {
"Inner",
"Central",
"Outer"};
379 for (
int ii =0; ii<3; ii++) {
403 const GeoTube* supportTube =
new GeoTube(rmin,rmax,halflength);
405 GeoLogVol* theSupport =
new GeoLogVol(logName,supportTube,supportMat);
406 GeoPhysVol* supportPhys =
new GeoPhysVol(theSupport);
432 const GeoTube* cableTube =
new GeoTube(rmin,rmax,thickness*0.5);
433 m_theECCable =
new GeoLogVol(
"ECCableLog",cableTube,cableMat);
458 const GeoTube* ecTube =
new GeoTube(rmin,rmax,halflength);
459 const GeoLogVol* ecLog =
new GeoLogVol(
"EndCapLog",ecTube,air);
460 GeoPhysVol* ecPhys =
new GeoPhysVol(ecLog);
481 GeoTrf::Translate3D
pos(0.,0.,zdisk);
482 GeoNameTag*
tag =
new GeoNameTag(
"Disk");
483 GeoAlignableTransform* xform =
new GeoAlignableTransform(
pos);
484 GeoVPhysVol * diskPhys =
pd.Build();
486 ecPhys->add(
new GeoIdentifierTag(ii));
488 ecPhys->add(diskPhys);
499 pos = GeoTrf::Translate3D(0.,0.,zdisk+dz);
500 tag =
new GeoNameTag(
"ECCables");
501 GeoTransform * xformCablesPlus =
new GeoTransform(
pos);
503 ecPhys->add(xformCablesPlus);
504 ecPhys->add(pecc.
Build() );
505 pos = GeoTrf::Translate3D(0.,0.,zdisk-dz);
506 tag =
new GeoNameTag(
"ECCables");
507 GeoTransform * xformCablesMinus =
new GeoTransform(
pos);
509 ecPhys->add(xformCablesMinus);
510 ecPhys->add(pecc.
Build() );
521 for(
int ii =0; ii< ecsvc.
NCylinders(); ii++) {
523 GeoNameTag*
tag =
new GeoNameTag(
"Outside Endcap Service");
524 GeoTrf::Translate3D
pos(0.,0.,ecsvc.
ZPos() );
525 GeoTransform* xform =
new GeoTransform(
pos);
528 ecPhys->add(ecsvc.
Build() );
550 const GeoTube* envelopeTube =
new GeoTube(rmin,rmax,halflength);
551 const GeoLogVol* envelopeLog =
new GeoLogVol(
"Pixel",envelopeTube,air);
552 GeoFullPhysVol* envelopePhys =
new GeoFullPhysVol(envelopeLog);
559 GeoNameTag*
tag =
new GeoNameTag(
"Barrel");
560 GeoVPhysVol* barrelPhys = brl.
Build() ;
561 envelopePhys->add(
tag);
562 envelopePhys->add(
new GeoIdentifierTag(0));
563 envelopePhys->add(barrelPhys );
569 for(
int ii =0; ii< brlsvc.
NCylinders(); ii++) {
571 GeoNameTag*
tag =
new GeoNameTag(
"Outside Barrel Service");
572 GeoTrf::Translate3D
pos(0.,0.,brlsvc.
ZPos() );
573 GeoTransform* xform =
new GeoTransform(
pos);
574 envelopePhys->add(
tag);
575 envelopePhys->add(
new GeoIdentifierTag(ii) );
576 envelopePhys->add(xform);
577 envelopePhys->add(brlsvc.
Build() );
589 GeoTrf::Translate3D
pos(0.,0.,zpos);
590 GeoTransform* xform =
new GeoTransform(
pos);
591 tag =
new GeoNameTag(
"EndCap 1");
592 envelopePhys->add(
tag);
593 envelopePhys->add(
new GeoIdentifierTag(2));
594 envelopePhys->add(xform);
595 envelopePhys->add(pec.
Build() );
599 tag =
new GeoNameTag(
"EndCap 2");
600 envelopePhys->add(
tag);
601 envelopePhys->add(
new GeoIdentifierTag(-2));
602 envelopePhys->add(xform);
603 envelopePhys->add(pec.
Build() );
609 for(
int ii =0; ii< ecsvc.
NCylinders(); ii++) {
611 GeoNameTag*
tag =
new GeoNameTag(
"Outside Endcap Service");
612 GeoTrf::Translate3D
pos(0.,0.,ecsvc.
ZPos() );
613 GeoTransform* xform =
new GeoTransform(
pos);
614 envelopePhys->add(
tag);
615 envelopePhys->add(xform);
616 envelopePhys->add(
new GeoIdentifierTag(ii) );
617 envelopePhys->add(ecsvc.
Build() );
658 const GeoBox* hybridBox =
new GeoBox(thickness/2.,
width/2.,
length/2.);
659 std::string logName =
"hybridECLog";
661 GeoLogVol* theHybrid =
new GeoLogVol(logName,hybridBox,hybridMat);
662 GeoPhysVol* hybridPhys =
new GeoPhysVol(theHybrid);
677 m_theSensor(theSensor)
701 const GeoBox* ladderBox =
new GeoBox(thickness*0.5,
width*0.5,halflength);
702 m_theLadder =
new GeoLogVol(
"ladderLog",ladderBox,air);
706 GeoPhysVol* ladderPhys =
new GeoPhysVol(
m_theLadder);
717 int jj = ii-HalfNModule;
742 GeoVPhysVol* modulephys = pm.
Build() ;
743 GeoNameTag *
tag =
new GeoNameTag(
"Module");
744 GeoAlignableTransform* xform;
752 ladderPhys->add(
tag);
753 ladderPhys->add(
new GeoIdentifierTag(
m_gmt_mgr->
Eta() ) );
754 ladderPhys->add(xform);
755 ladderPhys->add(modulephys );
806 const GeoBox* ladderStructBox =
new GeoBox(thickness/2.,
width/2.,halflength);
807 const GeoLogVol* ladderStructLog =
new GeoLogVol(
"ladderStructLog",ladderStructBox,ladderMat);
808 GeoPhysVol* ladderStructPhys =
new GeoPhysVol(ladderStructLog);
809 return ladderStructPhys;
825 bool isBLayer =
false;
839 std::string lname[3];
840 lname[0] =
"InnerLayerLog";
841 lname[1] =
"CenterLayerLog";
842 lname[2] =
"OuterLayerLog";
843 const GeoTube* layerTube =
new GeoTube(rmin,rmax,halflength);
844 const GeoLogVol* layerLog =
new GeoLogVol(lname[
m_gmt_mgr->
GetLD()],layerTube,air);
845 GeoFullPhysVol* layerPhys =
new GeoFullPhysVol(layerLog);
856 posladder = GeoTrf::RotateZ3D(
angle/2.)*posladder;
858 postubecables = GeoTrf::RotateZ3D(
angle/2.)*postubecables;
867 for(
int ii = 0; ii < nsectors; ii++) {
876 GeoNameTag *
tag =
new GeoNameTag(
"Ladder");
877 GeoTransform* xform =
new GeoTransform(GeoTrf::Translate3D(posladder.x(),posladder.y(),posladder.z())*rm);
879 layerPhys->add(
new GeoIdentifierTag(ii) );
880 layerPhys->add(xform);
881 GeoVPhysVol* ladderphys = pl.
Build() ;
882 layerPhys->add(ladderphys );
883 posladder = GeoTrf::RotateZ3D(
angle)*posladder;
888 tag =
new GeoNameTag(
"TubesAndCables");
889 xform =
new GeoTransform(GeoTrf::Translate3D(postubecables.x(),postubecables.y(),postubecables.z())*rm);
891 layerPhys->add(xform);
892 GeoVPhysVol* TCphys = ptc.
Build() ;
893 layerPhys->add(TCphys );
894 postubecables = GeoTrf::RotateZ3D(
angle)*postubecables;
912 m_theSensor(theSensor)
924 const GeoBox* moduleBox =
new GeoBox(thickness*0.5,
width*0.5,
length*0.5);
925 m_theModule =
new GeoLogVol(
"moduleLog",moduleBox,air);
930 GeoFullPhysVol* modulePhys =
new GeoFullPhysVol(
m_theModule);
936 GeoNameTag *
tag =
new GeoNameTag(
"Si Crystal");
937 GeoTransform *xformsi =
new GeoTransform(GeoTrf::Transform3D::Identity());
938 modulePhys->add(
tag);
939 modulePhys->add(
new GeoIdentifierTag(100) );
940 modulePhys->add(xformsi);
941 modulePhys->add(theSi );
947 GeoTrf::Translate3D hybpos(xpos,0.,0.);
948 GeoTransform* xform =
new GeoTransform(hybpos);
949 tag =
new GeoNameTag(
"Hybrid");
950 modulePhys->add(
tag);
951 modulePhys->add(xform);
952 modulePhys->add(ph.
Build() );
958 GeoTrf::Translate3D chippos(xpos,0.,0.);
959 xform =
new GeoTransform(chippos);
960 tag =
new GeoNameTag(
"Chip");
961 modulePhys->add(
tag);
962 modulePhys->add(xform);
963 modulePhys->add(
pc.Build() );
1042 const std::string&
root)
1049 if(
root ==
"/Pixel") {
1052 }
else if (
root ==
"/Pixel/PixelBarrel" ||
root ==
"/Pixel/PixelEndcap" ) {
1056 std::cerr <<
"Services can not be placed in this volume!!!! " <<
root << std::endl;
1071 for(
int ii = 0; ii<NServices ; ii++) {
1082 double zpos,halflength;
1096 if(fabs(
z[0]) < 0.000001) {
1109 twovolumes = zpos > 0.00001 &&
r[0] >0.;
1141 const GeoTube* serviceTube =
new GeoTube(rmin,rmax,halflength);
1142 std::string logName;
1144 else logName =
m_zone+
"EC";
1146 GeoLogVol* theService =
new GeoLogVol(logName,serviceTube,serviceMat);
1147 GeoPhysVol* servicePhys =
new GeoPhysVol(theService);
1198 std::shared_ptr<const PixelDiodeMatrix> normalCell = PixelDiodeMatrix::construct(phiPitch, etaPitch);
1199 std::shared_ptr<const PixelDiodeMatrix> bigCell = PixelDiodeMatrix::construct(phiPitch, bigEtaPitch);
1201 std::shared_ptr<const PixelDiodeMatrix> singleChipRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
1203 std::move(normalCell),
1207 std::shared_ptr<const PixelDiodeMatrix> singleRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
1208 nullptr, std::move(singleChipRow), CircPerRow,
nullptr);
1210 std::shared_ptr<const PixelDiodeMatrix> fullMatrix = PixelDiodeMatrix::construct(PixelDiodeMatrix::phiDir,
1211 nullptr, std::move(singleRow), DiodeRowPerCirc,
nullptr);
1213 std::unique_ptr<PixelModuleDesign> p_barrelDesign2 = std::make_unique<PixelModuleDesign>(thickness,
1226 int maxRow = minRow;
1236 std::vector <int> connections(maxRow-minRow+1);
1239 for (
unsigned int iRow = 0; iRow < connections.size(); iRow++){
1240 connections[iRow] = iRow + minRow;
1258 std::cout <<
"GeoPixelSiCrystal: Warning - No ganged pixels" << std::endl;
1273 const GeoBox* siBox =
new GeoBox(thickness/2.,
width/2.,
length/2.);
1277 GeoLogVol* theSi =
new GeoLogVol(
logname,siBox,siMat);
1278 GeoFullPhysVol* siPhys =
new GeoFullPhysVol(theSi);
1338 m_theSensor(theSensor)
1347 double rmin =
RMin();
1348 double rmax =
RMax();
1358 GeoFullPhysVol* SDPhys =
new GeoFullPhysVol(
m_theSubDisk);
1363 GeoNameTag*
tag =
new GeoNameTag(
"SiCrystal");
1368 SDPhys->add(
new GeoIdentifierTag(200) );
1369 SDPhys->add(xformsi);
1375 tag =
new GeoNameTag(
"Hybrid");
1381 SDPhys->add(ph.
Build() );
1386 tag =
new GeoNameTag(
"Chip");
1392 SDPhys->add(
pc.Build() );
1444 const GeoBox* solBox =
new GeoBox(thickness*0.5,
width*0.5,halflength+
m_epsilon);
1445 m_theBox =
new GeoLogVol(
"TubeCablesLog",solBox,air);
1451 GeoPhysVol* TCPhys =
new GeoPhysVol(
m_theBox);
1457 GeoNameTag*
tag =
new GeoNameTag(
"LadderStructure");
1458 GeoVPhysVol* ladderstructPhys = pls.
Build() ;
1460 GeoTrf::Translate3D
pos(xpos,0.,0.);
1461 GeoTransform* xform =
new GeoTransform(
pos);
1464 TCPhys->add(ladderstructPhys);
1473 double xcabshift = 0.;
1475 pc.SetModuleNumber(ii);
1477 xcabshift +=
pc.Thickness()/2.;
1487 xcabshift +=
pc.Thickness()/2.;
1488 GeoTrf::Translate3D cablepos(xcabpos,0.,zcabpos);
1489 GeoTransform* xform =
new GeoTransform(cablepos);
1490 GeoNameTag *
tag =
new GeoNameTag(
"Cable");
1494 GeoVPhysVol *cablePhys1 =
pc.Build();
1498 TCPhys->add(cablePhys1);
1502 GeoVPhysVol *cablePhys2 =
pc.Build();
1503 cablepos = GeoTrf::Translate3D(xcabpos,0.,-zcabpos);
1504 xform =
new GeoTransform(cablepos);
1508 TCPhys->add(cablePhys2);
1539 m_mat_mgr (m_gmt_mgr->getMaterialManager()),
1559 using namespace std;
1568 m_g3CompatibleDigits(false),
1569 m_initialLayout(false),
1570 m_dc1Geometry(false),
1572 m_commonItems(nullptr),
1579 ISvcLocator* svcLocator = Gaudi::svcLocator();
1584 SmartIF<StoreGateSvc>
detStore{svcLocator->service(
"DetectorStore")};
1588 SmartIF<IRDBAccessSvc> rdbSvc{svcLocator->service(
"RDBAccessSvc")};
1589 if (!rdbSvc.isValid())
ATH_MSG_FATAL(
"Could not locate RDBAccessSvc");
1594 const std::string& detectorKey = versionKey.
tag();
1595 const std::string& detectorNode = versionKey.
node();
1606 ATH_MSG_INFO(
"Retrieving Record Sets from database ...");
1609 m_atls = rdbSvc->getRecordsetPtr(
"AtlasMother",versionKeyAtlas.
tag(), versionKeyAtlas.
node());
1610 m_PixelBarrelGeneral = rdbSvc->getRecordsetPtr(
"PixelBarrelGeneral", detectorKey, detectorNode);
1611 m_PixelBarrelService = rdbSvc->getRecordsetPtr(
"PixelBarrelService", detectorKey, detectorNode);
1612 m_PixelCommon = rdbSvc->getRecordsetPtr(
"PixelCommon", detectorKey, detectorNode);
1613 m_PixelDisk = rdbSvc->getRecordsetPtr(
"PixelDisk", detectorKey, detectorNode);
1614 m_PixelEndcapGeneral = rdbSvc->getRecordsetPtr(
"PixelEndcapGeneral", detectorKey, detectorNode);
1615 m_PixelEndcapService = rdbSvc->getRecordsetPtr(
"PixelEndcapService", detectorKey, detectorNode);
1616 m_PixelLayer = rdbSvc->getRecordsetPtr(
"PixelLayer", detectorKey, detectorNode);
1617 m_PixelModule = rdbSvc->getRecordsetPtr(
"PixelModule", detectorKey, detectorNode);
1618 m_PixelStave = rdbSvc->getRecordsetPtr(
"PixelStave", detectorKey, detectorNode);
1622 m_pxbi = rdbSvc->getRecordsetPtr(
"PXBI", detectorKey, detectorNode);
1623 m_pxei = rdbSvc->getRecordsetPtr(
"PXEI", detectorKey, detectorNode);
1624 m_pdch = rdbSvc->getRecordsetPtr(
"PDCH", detectorKey, detectorNode);
1625 m_pxbd = rdbSvc->getRecordsetPtr(
"PXBD", detectorKey, detectorNode);
1626 m_plor = rdbSvc->getRecordsetPtr(
"PLOR", detectorKey, detectorNode);
1627 m_plrn = rdbSvc->getRecordsetPtr(
"PLRN", detectorKey, detectorNode);
1639 if (StatusCode::SUCCESS ==
m_pDetStore->retrieve(materialManager, std::string(
"MATERIALS"))) {
1667 cout <<
"Layer set out of bounds, defaulting it to 0" << endl;
1669 std::cout<<
" Current layer set to "<<
i<<std::endl;
1676 cout <<
"Disk set out of bounds, defaulting it to 0" << endl;
1678 std::cout<<
" Current disk set to "<<
i<<std::endl;
1702 const std::string uscore(
"_");
1732 double rl = material->getRadLength();
1733 return -1.*
rl*tck/100.;
1790 thick =(*m_PixelModule)[
m_currentLD]->getDouble(
"HYBRIDTHICK");
1791 mat =
"pix::Hybrid";
1794 thick =(*m_PixelModule)[
m_currentLD+3]->getDouble(
"HYBRIDTHICK");
1795 mat =
"std::Silicon";
1832 thick =(*m_PixelModule)[
m_currentLD]->getDouble(
"CHIPTHICK");
1836 thick =(*m_PixelModule)[
m_currentLD+3]->getDouble(
"CHIPTHICK");
1837 mat =
"std::Silicon";
1855 }
else if (
a ==
"Central") {
1864 }
else if (
a ==
"Central") {
1874 string mat[4] = {
"std::Berillia",
"std::Carbon",
"pix::ECSevices",
"pix::Disk"} ;
1876 tck = (*m_PixelDisk)[
m_currentLD]->getDouble(
"SUP1THICK");
1877 imat =(*m_PixelDisk)[
m_currentLD]->getInt(
"SUP1MAT")-1;
1878 }
else if (
a ==
"Central") {
1879 tck = (*m_PixelDisk)[
m_currentLD]->getDouble(
"SUP2THICK");
1880 imat =(*m_PixelDisk)[
m_currentLD]->getInt(
"SUP2MAT")-1;
1882 tck = (*m_PixelDisk)[
m_currentLD]->getDouble(
"SUP3THICK");
1883 imat =(*m_PixelDisk)[
m_currentLD]->getInt(
"SUP3MAT")-1;
1891 string mat[4] = {
"std::Berillia",
"std::Carbon",
"pix::ECSevices",
"pix::Disk"} ;
1894 imat = (*m_PixelDisk)[
m_currentLD]->getInt(
"SUP1MAT")-1;
1895 }
else if (
a ==
"Central") {
1896 imat = (*m_PixelDisk)[
m_currentLD]->getInt(
"SUP2MAT")-1;
1898 imat = (*m_PixelDisk)[
m_currentLD]->getInt(
"SUP3MAT")-1;
1936 double *
r =
new double[2];
1939 rmin = (*m_PixelBarrelService)[
n]->getDouble(
"RIN");
1940 rmax = (*m_PixelBarrelService)[
n]->getDouble(
"ROUT");
1949 rmin = (*m_PixelEndcapService)[
n]->getDouble(
"RIN");
1950 rmax = (*m_PixelEndcapService)[
n]->getDouble(
"ROUT");
1970 double*
z =
new double[2];
1973 z[0] = (*m_PixelBarrelService)[
n]->getDouble(
"ZIN");
1974 z[1] = (*m_PixelBarrelService)[
n]->getDouble(
"ZOUT");
1983 z[0] = (*m_PixelEndcapService)[
n]->getDouble(
"ZIN");
1984 z[1] = (*m_PixelEndcapService)[
n]->getDouble(
"ZOUT");
1992 if(
z[0]*(
z[1]) > -0.000000001) {
1999 double center = ((*m_PixelEndcapGeneral)[0]->getDouble(
"ZMAX")+(*m_PixelEndcapGeneral)[0]->getDouble(
"ZMIN"))/2.*
Gaudi::Units::cm;
2034 if(
a ==
"Inside") {imat = (*m_PixelBarrelService)[
n]->getInt(
"MATERIAL")-1;}
2035 else {imat = (*m_PixelBarrelService)[
n+
m_barrelInFrames]->getInt(
"MATERIAL")-1;}
2039 string mat[4] = {
"std::Berillia",
"std::Carbon",
"pix::ECServices",
"pix::Disk"};
2040 if(
a ==
"Inside") {imat = (*m_PixelEndcapService)[
n]->getInt(
"MATERIAL")-1;}
2073 if (
sc.isFailure()) {
2074 std::cout <<
"Cannot retrieve PixelDetectorManager" << std::endl;
2124 double tck = (*m_PixelStave)[0]->getDouble(
"SUPPORTTHICK");
2134 double tck = (*m_PixelDisk)[
m_currentLD]->getDouble(
"CABLETHICK");
2147 return static_cast<int>((ActiveArea - GapRP)/pitchRP + 0.5);
2156 return static_cast<int>((ActiveArea - GapZ*CPR)/(CPR*pitchZ) + 0.5);
2163 return static_cast<int>((ActiveArea)/pitchRP + 0.5);
2172 return static_cast<int>((ActiveArea - GapZ*CPR)/(CPR*pitchZ) + 0.5);
2178 return static_cast<int>((*m_pdch)[0]->getInt(
"NYCONNEC"));
2184 return static_cast<int>((*m_pdch)[0]->getInt(
"JYEMPTY"+
a)) - 1;
2190 return static_cast<int>((*m_pdch)[0]->getInt(
"JYCONNEC"+
a)) - 1;
2240 using namespace std;
virtual void SetEndcap() override
void setNumRingsForDisk(int disk, int nRings)
virtual bool DoServices()=0
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
virtual std::string GetDetElementName() override
virtual int NumberOfEmptyRows() override
virtual double PixelChipGap() override
virtual double PixelEndcapRMin()=0
virtual double PixelChipGap()=0
virtual double DesignGapRP() override
PixelGeometryManager * m_gmt_mgr
virtual int EmptyRows(int index)=0
virtual double PixelLadderThickness()=0
virtual int DesignCellColumnsPerCircuit(bool isBLayer)=0
virtual double PixelChipThickness() override
virtual int DesignCircuitsPerRow()=0
const SiNumerology & numerology() const
Access Numerology.
virtual bool isEndcap() override
InDetDD::PixelDetectorManager * m_DDmgr
IRDBRecordset_ptr m_PixelEndcapGeneral
virtual int EmptyRowConnections(int index) override
virtual int PixelServiceLD(std::string, int)=0
virtual std::string PixelECCarbonMaterial(std::string)=0
virtual std::string PixelServiceMaterial(std::string, int)=0
virtual double PixelModuleDrDistance()=0
virtual double PixelBoardThickness() override
virtual int EmptyRows(int index) override
virtual double PixelLadderHalfLength()=0
virtual GeoVPhysVol * Build() override
std::string m_endcapDesignName
GeoVPixelFactory(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
virtual int EmptyRowConnections(int index)=0
std::vector< std::string > m_material
const AtlasDetectorID * getIdHelper() const
void setNumLayers(int nLayers)
virtual double PixelModuleShiftFlag(int)=0
virtual StoredMaterialManager * getMaterialManager() override
std::vector< double > m_zpos
int PixelEndcapNDisk() override
virtual double PixelECCablesDistance()=0
virtual double PixelHybridLength()=0
virtual GeoVPhysVol * Build() override
virtual std::string GetDesignName() override
GeoPixelSiCrystal(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, bool isBLayer)
virtual int DesignCellColumnsPerCircuit(bool isBLayer) override
virtual double PixelChipWidth() override
GeoPixelSubDisk(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoPixelSiCrystal &theSensor)
StoredMaterialManager * m_mat_mgr
GeoIntrusivePtr< GeoLogVol > m_theDisk
virtual int PixelBarrelNLayer() override
virtual void SetPhi(int phi)=0
const SiDetectorDesign * addDesign(std::unique_ptr< const SiDetectorDesign > &&)
Access to module design; returns an observer pointer.
virtual double PixelHybridWidth()=0
virtual void SetDesignName(std::string) override
GeoPixelModule(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoPixelSiCrystal &theSensor)
const std::string & node() const
Return the version node.
virtual GeoVPhysVol * Build() override
virtual double DesignPitchRP(bool isBLayer) override
virtual double PixelECCablesRMin()=0
virtual int PixelEndcapNDisk()=0
virtual double PixelLadderTilt()=0
IRDBRecordset_ptr m_PixelEndcapService
virtual bool isBarrel() override
GeoPixelDisk(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
virtual double * PixelServiceR(std::string, int)=0
virtual bool DC1Geometry() const override
virtual ~PixelGeometryManager()
virtual double PixelBarrelRMin()=0
const InDetDD::SiDetectorDesign * m_design
virtual int PixelServiceNFrame(std::string) override
virtual InDetDD::SiCommonItems * commonItems()=0
virtual GeoVPhysVol * Build() override
virtual bool isEndcap()=0
IRDBRecordset_ptr m_PixelBarrelService
virtual GeoVPhysVol * Build() override
virtual void SetCurrentLD(int i)=0
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
bool m_g3CompatibleDigits
virtual double DesignPitchRP(bool isBLayer)=0
virtual double PixelECCarbonRMin(std::string) override
virtual std::string GetLayer0ModuleName() override
std::vector< double > m_rmax
virtual double PixelECSiDz1()=0
virtual double * PixelServiceZ(std::string, int)=0
virtual double PixelBoardWidth() override
virtual double Temperature(bool isBLayer) override
virtual bool isLDPresent()=0
virtual double PixelBarrelRMax()=0
const PixelID * getIdHelper() override
virtual double PixelCableWidth()=0
virtual double PixelBarrelHalfLength()=0
IRDBRecordset_ptr m_PixelStave
IRDBRecordset_ptr m_PixelCommon
virtual double PixelBoardLength()=0
virtual int DesignCircuitsPerRow() override
virtual void SetEndcapModuleName(std::string) override
virtual double PixelBoardWidth()=0
virtual void SetLayer0ModuleName(std::string) override
virtual double DesignRPActiveArea() override
bool msgLvl(const MSG::Level lvl) const
Test the output level.
GeoPixelSiCrystal & m_theSensor
virtual double DesignGapZ()=0
virtual int DesignCellRowsPerCircuit(bool isBLayer) override
virtual double PixelHybridWidth() override
def phimod(flags, cells_name, *args, **kw)
virtual int DesignDiodeRowsPerCircuit(bool isBLayer) override
virtual double PixelECCablesThickness() override
std::vector< std::string > m_material
std::vector< double > m_halflength
::StatusCode StatusCode
StatusCode definition for legacy code.
virtual const PixelID * getIdHelper()=0
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
virtual GeoVPhysVol * Build() override
virtual double PixelECCablesRMax()=0
This is a helper class to query the version tags from GeoModelSvc and determine the appropriate tag a...
virtual double PixelDiskRMin()=0
virtual void SetBarrel()=0
virtual std::string GetEndcapModuleName() override
Eigen::Affine3d Transform3D
virtual void SetDetElementName(std::string) override
virtual int DesignCircuitsPerColumn()=0
virtual std::string PixelECCarbonMaterial(std::string) override
virtual void SetEndcap()=0
GeoIntrusivePtr< GeoLogVol > m_theECCable
const std::string & tag() const
Return version tag.
virtual double PixelModuleAngleSign(int)=0
virtual GeoVPhysVol * Build() override
std::string m_designsObjectName
Class to provide easy MsgStream access and capabilities.
virtual GeoVPhysVol * Build() override
virtual double PixelECCarbonRMax(std::string) override
virtual double PixelHybridLength() override
IRDBRecordset_ptr m_PixelLayer
StoredMaterialManager * m_pMatMgr
virtual double PixelECCarbonRMin(std::string)=0
GeoPixelServices(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, const std::string &)
virtual double * PixelServiceZ(std::string, int) override
virtual double PixelECCarbonRMax(std::string)=0
virtual double PixelModulePosition(int)=0
virtual double PixelEndcapZMin()=0
IRDBRecordset_ptr m_PixelBarrelGeneral
virtual int DesignCellRowsPerCircuit(bool isBLayer)=0
virtual std::string PixelServiceMaterial(std::string, int) override
MsgStream & msg() const
The standard message stream.
std::vector< double > m_zpos
virtual GeoVPhysVol * Build() override
virtual void addAlignableTransform(int level, const Identifier &id, GeoAlignableTransform *xf, const GeoVFullPhysVol *child)
Add alignable transforms.
GeoPixelSiCrystal & m_theSensor
virtual int DesignDiodeColumnsPerCircuit(bool isBLayer) override
IRDBRecordset_ptr m_PixelDisk
GeoPixelECCable(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
void setNumDisks(int nDisks)
virtual double PixelECCarbonThickness(std::string)=0
virtual int NPixelSectors()=0
virtual int PixelServiceLD(std::string, int) override
virtual double DesignGapZ() override
virtual GeoVPhysVol * Build() override
virtual GeoVPhysVol * Build() override
virtual bool DoServices() override
void setNumPhiModulesForDiskRing(int disk, int ring, int nPhiModules)
virtual void SetCurrentLD(int i) override
std::string to_string(const DetectorType &type)
void setNumEtaModulesForLayer(int layer, int nEtaModules)
virtual GeoVPhysVol * Build() override
virtual InDetDD::SiCommonItems * commonItems() override
virtual double PixelRMax()=0
virtual GeoVPhysVol * Build() override
virtual double PixelECCablesThickness()=0
virtual double PixelCableZMin()=0
virtual double PixelModuleAngle()=0
std::vector< double > m_halflength
virtual double PixelLadderWidth()=0
virtual bool isLDPresent() override
GeoPixelDiskSupports(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
virtual double PixelECCarbonThickness(std::string) override
virtual int PixelServiceNFrame(std::string)=0
Eigen::Matrix< double, 3, 1 > Vector3D
virtual int DesignDiodeRowsPerCircuit(bool isBLayer)=0
virtual double PixelBoardActiveLen()=0
std::string m_barrelDesignName
virtual int PixelBarrelNLayer()=0
GeoPixelSiCrystal & m_theSensor
virtual int NumberOfEmptyRows()=0
virtual double PixelChipThickness()=0
virtual double Voltage(bool isBLayer) override
virtual double PixelLadderThickness() override
GeoPixelTubeCables(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
virtual int PixelECNSectors1()=0
virtual double PixelBoardThickness()=0
std::string m_elementsObjectName
virtual double PixelHybridThickness()=0
virtual InDetDD::PixelDetectorManager * GetPixelDDManager() override
virtual double PixelHybridThickness() override
double CalculateThickness(double, const std::string &)
virtual GeoVPhysVol * Build() override
StoreGateSvc * m_pDetStore
virtual double PixelChipLength()=0
virtual double PixelCableDeltaZ()=0
GeoIntrusivePtr< GeoLogVol > m_theBox
Eigen::Translation< double, 3 > Translation3D
virtual double PixelChipWidth()=0
virtual std::string GetBarrelModuleName() override
virtual const GeoMaterial * getMaterial(const std::string &name)=0
virtual bool isBarrel()=0
void addMultipleRowConnection(const int lowerRow, const std::vector< int > &connections)
Add a new multiple connection for rows: lower diode row for which the connection scheme is given vect...
This class holds one or more material managers and makes them storeable, under StoreGate.
virtual double PixelLayerRadius()=0
GeoIntrusivePtr< GeoLogVol > m_theLadder
virtual double DesignPitchZ(bool isBLayer) override
virtual double PixelEndcapZMax()=0
virtual double * PixelServiceR(std::string, int) override
virtual double PixelBoardActiveLen() override
void initialize(const std::string &)
virtual double DesignZActiveArea() override
GeoPixelLadder(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoPixelSiCrystal &theSensor)
std::vector< double > m_rmax
virtual bool G3CompatibleDigits() const override
virtual double PixelCableZMax()=0
virtual double PixelECSiDz2()=0
virtual GeoVPhysVol * Build() override
virtual bool InitialLayout() const override
GeoIntrusivePtr< GeoLogVol > m_theModule
virtual void SetBarrel() override
virtual GeoVPhysVol * Build() override
constexpr int pow(int base, int exp) noexcept
IRDBRecordset_ptr m_PixelModule
virtual ~GeoVPixelFactory()
virtual bool Alignable() const override
void setNumPhiModulesForLayer(int layer, int nPhiModules)
std::string m_blayerDesignName
virtual int PixelNModule()=0
virtual double PixelChipLength() override
virtual double PixelHalfLength()=0
virtual int DesignDiodeColumnsPerCircuit(bool isBLayer)=0
std::vector< double > m_rmin
virtual double PixelRMin()=0
virtual void setCommonItems(InDetDD::SiCommonItems *commonItems) override
virtual double PixelDiskPosition()=0
virtual void addDetectorElement(SiDetectorElement *element) override
Add elememts.
virtual void SetEta(int eta)=0
virtual double PixelBalcony()=0
std::vector< double > m_rmin
GeoIntrusivePtr< GeoLogVol > m_theSubDisk
virtual double PixelBoardLength() override
virtual GeoVPhysVol * Build() override
virtual double DesignPitchZ(bool isBLayer)=0
InDetDD::SiCommonItems * m_commonItems
virtual double PixelEndcapRMax()=0
virtual double PixelCableThickness()=0
InDetDD::PixelDetectorManager * m_pDDmgr
virtual void SetBarrelModuleName(std::string) override