58 ISvcLocator *svcLocator = Gaudi::svcLocator();
59 SmartIF<StoreGateSvc> detStore{svcLocator->service(
"DetectorStore")};
60 if (!detStore.isValid()) {
61 throw std::runtime_error(
"Error in EndcapCryostatConstruction, cannot access DetectorStore");
65 if (StatusCode::SUCCESS != detStore->retrieve(materialManager, std::string(
"MATERIALS")))
return nullptr;
67 const GeoMaterial *
LAr = materialManager->
getMaterial(
"std::LiquidArgon");
69 throw std::runtime_error(
"Error in EndcapCryostatConstruction, std::LiquidArgon is not found.");
74 SmartIF<IRDBAccessSvc> pAccessSvc{svcLocator->service(
"RDBAccessSvc")};
75 if (!pAccessSvc.isValid()) {
76 throw std::runtime_error (
"Cannot locate RDBAccessSvc!!");
79 SmartIF<IGeoModelSvc> geoModel{svcLocator->service(
"GeoModelSvc")};
80 if (!geoModel.isValid()) {
81 throw std::runtime_error (
"Cannot locate GeoModelSvc!!");
84 std::string AtlasVersion = geoModel->atlasVersion();
85 std::string LArVersion = geoModel->LAr_VersionOverride();
87 std::string detectorKey = LArVersion.empty() ? AtlasVersion : LArVersion;
88 std::string detectorNode = LArVersion.empty() ?
"ATLAS" :
"LAr";
92 IRDBRecordset_ptr presamplerPosition = pAccessSvc->getRecordsetPtr(
"PresamplerPosition",AtlasVersion,
"ATLAS");
100 double Rmin = 1231.74*Gaudi::Units::mm;
101 double Rmax = 1701.98*Gaudi::Units::mm;
102 double HalfZ = ((*presamplerPosition)[0]->getDouble(
"TCK")/2.)*Gaudi::Units::cm;
105 std::string name =
"LAr::Endcap::Presampler::LiquidArgon";
107 double phi_size = 360.*Gaudi::Units::deg;
108 double start_phi = 0.;
115 GeoTubs* endcapPresamplerSolid =
new GeoTubs(Rmin, Rmax, HalfZ, start_phi, phi_size);
117 const GeoLogVol* endcapPresamplerLog =
new GeoLogVol(name,endcapPresamplerSolid,
LAr);