11#include <GeoModelKernel/GeoPhysVol.h>
14#include "GeoModelRead/ReadGeoModel.h"
21 const std::string &name,
22 const IInterface *parent)
34 ATH_CHECK(detStore()->retrieve(theExpt,
"ATLAS"));
35 const SCT_ID *idHelper =
nullptr;
36 ATH_CHECK(detStore()->retrieve(idHelper,
"SCT_ID"));
38 m_commonItems = std::make_unique<InDetDD::SiCommonItems>(idHelper);
43 std::string
node{
"SCT"};
44 std::string table{
"ITKXDD"};
51 node =
"InnerDetector";
54 ATH_MSG_ERROR(
"No ITk Strip geometry found. ITk Strip can not be built.");
55 return StatusCode::FAILURE;
73 const GeoVPhysVol* topVolume =
createTopVolume(world, gmxInterface,
node, table,
"",
"",sqlreader);
86 return StatusCode::FAILURE;
100 return StatusCode::SUCCESS;
111 return StatusCode::SUCCESS;
119 bool barrelDone =
false;
120 for (
int b = -1; b <= 1; ++b) {
122 msg(MSG::INFO) <<
" Found barrel with index " << b << std::endl;
126 msg(MSG::INFO) <<
" Number of barrel layers = " << n.numLayers() << std::endl;
128 n.setNumEtaModulesForLayer(l->first, l->second.nEtaModules());
130 n.setNumPhiModulesForLayer(l->first, l->second.begin()->second.nPhiModules());
131 msg(MSG::INFO) <<
" layer = " << l->first <<
" has " << n.numEtaModulesForLayer(l->first)
132 <<
" etaModules each with " << n.numPhiModulesForLayer(l->first) <<
" phi modules" << std::endl;
140 bool endcapDone =
false;
141 for (
int ec = -2; ec <= 2; ec += 4) {
143 msg(MSG::INFO) <<
" Found endcap with index " << ec << std::endl;
147 msg(MSG::INFO) <<
" Number of endcap wheels = " << n.numDisks() << std::endl;
149 n.setNumRingsForDisk(l->first, l->second.nEtaModules());
150 msg(MSG::INFO) <<
" Wheel " << l->first <<
" has " << n.numRingsForDisk(l->first) <<
" rings" << std::endl;
151 for (EtaModule::iterator
eta = l->second.begin();
eta != l->second.end(); ++
eta) {
152 n.setNumPhiModulesForDiskRing(l->first,
eta->first,
eta->second.nPhiModules());
153 msg(MSG::INFO) <<
" Ring " <<
eta->first <<
" has "
154 << n.numPhiModulesForDiskRing(l->first,
eta->first) <<
" phi modules" << std::endl;
166 for (LayerDisk::iterator ld = bec->second.begin(); ld != bec->second.end(); ++ld) {
167 for (EtaModule::iterator
eta = ld->second.begin();
eta != ld->second.end(); ++
eta) {
168 for (PhiModule::iterator
phi =
eta->second.begin();
phi !=
eta->second.end(); ++
phi) {
169 for (Side::iterator side =
phi->second.begin(); side !=
phi->second.end(); ++side) {
176 ATH_MSG_INFO(
"Total number of wafers added is " << totalWafers);
183 n.setMaxNumEtaCells(1);
184 for (
int d = 0; d <
manager->numDesigns(); ++d) {
185 n.setMaxNumPhiCells(
manager->getSCT_Design(d)->cells());
187 ATH_MSG_INFO(
"Max. eta cells is " << n.maxNumEtaCells());
188 ATH_MSG_INFO(
"Max. phi cells is " << n.maxNumPhiCells());
189 ATH_MSG_INFO(
"Max. no. strips is " << n.maxNumStrips());
201 const std::string barrelBase(
"/SCTB");
202 const std::string endcapBase(
"/SCTE");
203 std::string baseName(
"");
212 manager->addAlignFolderType(alignFolderType);
214 switch (alignFolderType) {
219 switch (bec->first) {
221 baseName = topFolder + endcapBase +
"C";
224 baseName = topFolder + barrelBase;
227 baseName = topFolder + endcapBase +
"A";
230 ATH_MSG_FATAL(
"Unknown SCT part with bec-ID " << bec->first <<
" encountered.");
231 throw std::runtime_error(
"Unknown ITkStrip part for alignment.");
233 for (LayerDisk::iterator ld = bec->second.begin(); ld != bec->second.end(); ++ld) {
234 std::ostringstream layer;
235 layer << ld->first + 1;
242 ATH_MSG_FATAL(
"Alignment requested for unknown alignment folder type in StripDetectorFactory.");
243 throw std::runtime_error(
"Wrong alignment folder type for StripDetectorFactory in StripGeoModelXml.");
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
GeoPhysVol * getPhysVol()
Destructor.
void addManager(const GeoVDetectorManager *)
void buildReadoutGeometryFromSqlite(IRDBAccessSvc *rdbAccessSvc, GeoModelIO::ReadGeoModel *sqlreader)
Dedicated detector manager extending the functionality of the SiDetectorManager with dedicated SCT in...
Base class for Pixel and SCT Detector managers.
Class to extract numerology for Pixel and SCT.
This is an Identifier helper class for the SCT subdetector.
size_type wafer_hash_max() const
static constexpr CLID ID()