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;
95 return StatusCode::SUCCESS;
106 return StatusCode::SUCCESS;
114 bool barrelDone =
false;
115 for (
int b = -1; b <= 1; ++b) {
117 msg(MSG::DEBUG) <<
" Found barrel with index " << b << std::endl;
121 msg(MSG::DEBUG) <<
" Number of barrel layers = " << n.numLayers() << std::endl;
123 n.setNumEtaModulesForLayer(l->first, l->second.nEtaModules());
125 n.setNumPhiModulesForLayer(l->first, l->second.begin()->second.nPhiModules());
126 msg(MSG::DEBUG) <<
" layer = " << l->first <<
" has " << n.numEtaModulesForLayer(l->first)
127 <<
" etaModules each with " << n.numPhiModulesForLayer(l->first) <<
" phi modules" << std::endl;
135 bool endcapDone =
false;
136 for (
int ec = -2; ec <= 2; ec += 4) {
138 msg(MSG::DEBUG) <<
" Found endcap with index " << ec << std::endl;
142 msg(MSG::DEBUG) <<
" Number of endcap wheels = " << n.numDisks() << std::endl;
144 n.setNumRingsForDisk(l->first, l->second.nEtaModules());
145 msg(MSG::DEBUG) <<
" Wheel " << l->first <<
" has " << n.numRingsForDisk(l->first) <<
" rings" << std::endl;
146 for (EtaModule::iterator
eta = l->second.begin();
eta != l->second.end(); ++
eta) {
147 n.setNumPhiModulesForDiskRing(l->first,
eta->first,
eta->second.nPhiModules());
148 msg(MSG::DEBUG) <<
" Ring " <<
eta->first <<
" has "
149 << n.numPhiModulesForDiskRing(l->first,
eta->first) <<
" phi modules" << std::endl;
161 for (LayerDisk::iterator ld = bec->second.begin(); ld != bec->second.end(); ++ld) {
162 for (EtaModule::iterator
eta = ld->second.begin();
eta != ld->second.end(); ++
eta) {
163 for (PhiModule::iterator
phi =
eta->second.begin();
phi !=
eta->second.end(); ++
phi) {
164 for (Side::iterator side =
phi->second.begin(); side !=
phi->second.end(); ++side) {
171 ATH_MSG_INFO(
"Total number of wafers added is " << totalWafers);
178 n.setMaxNumEtaCells(1);
179 for (
int d = 0; d <
manager->numDesigns(); ++d) {
180 n.setMaxNumPhiCells(
manager->getSCT_Design(d)->cells());
182 ATH_MSG_INFO(
"Max. eta cells is " << n.maxNumEtaCells());
183 ATH_MSG_INFO(
"Max. phi cells is " << n.maxNumPhiCells());
184 ATH_MSG_INFO(
"Max. no. strips is " << n.maxNumStrips());
186 manager->numerology() = std::move(n);
196 const std::string barrelBase(
"/SCTB");
197 const std::string endcapBase(
"/SCTE");
198 std::string baseName(
"");
207 manager->addAlignFolderType(alignFolderType);
209 switch (alignFolderType) {
214 switch (bec->first) {
216 baseName = topFolder + endcapBase +
"C";
219 baseName = topFolder + barrelBase;
222 baseName = topFolder + endcapBase +
"A";
225 ATH_MSG_FATAL(
"Unknown SCT part with bec-ID " << bec->first <<
" encountered.");
226 throw std::runtime_error(
"Unknown ITkStrip part for alignment.");
228 for (LayerDisk::iterator ld = bec->second.begin(); ld != bec->second.end(); ++ld) {
229 std::ostringstream layer;
230 layer << ld->first + 1;
237 ATH_MSG_FATAL(
"Alignment requested for unknown alignment folder type in StripDetectorFactory.");
238 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.
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_INFO(x,...)
#define ATH_MSG_FATAL(x,...)
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...
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()