54{
56
57
58 ISvcLocator *svcLocator = Gaudi::svcLocator();
59 SmartIF<StoreGateSvc>
detStore{svcLocator->service(
"DetectorStore")};
61 throw std::runtime_error("Error in EndcapCryostatConstruction, cannot access DetectorStore");
62 }
63
64 StoredMaterialManager* materialManager = nullptr;
65 if (StatusCode::SUCCESS !=
detStore->retrieve(materialManager, std::string(
"MATERIALS")))
return nullptr;
66
67 const GeoMaterial *LAr = materialManager->
getMaterial(
"std::LiquidArgon");
68 if (!LAr) {
69 throw std::runtime_error("Error in EndcapCryostatConstruction, std::LiquidArgon is not found.");
70 }
71
72
73
74 SmartIF<IRDBAccessSvc> pAccessSvc{svcLocator->service("RDBAccessSvc")};
75 if (!pAccessSvc.isValid()) {
76 throw std::runtime_error ("Cannot locate RDBAccessSvc!!");
77 }
78
79 SmartIF<IGeoModelSvc> geoModel{svcLocator->service("GeoModelSvc")};
80 if (!geoModel.isValid()) {
81 throw std::runtime_error ("Cannot locate GeoModelSvc!!");
82 }
83
85 std::string LArVersion = geoModel->LAr_VersionOverride();
86
87 std::string detectorKey = LArVersion.empty() ?
AtlasVersion : LArVersion;
88 std::string detectorNode = LArVersion.empty() ? "ATLAS" : "LAr";
89
90
91
92 IRDBRecordset_ptr presamplerPosition = pAccessSvc->getRecordsetPtr(
"PresamplerPosition",AtlasVersion,
"ATLAS");
93
94
95
96
98
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;
103
104
105 std::string
name =
"LAr::Endcap::Presampler::LiquidArgon";
106
107 double phi_size = 360.*Gaudi::Units::deg;
108 double start_phi = 0.;
109
113 }
114
115 GeoTubs* endcapPresamplerSolid = new GeoTubs(Rmin, Rmax, HalfZ, start_phi, phi_size);
116
117 const GeoLogVol* endcapPresamplerLog = new GeoLogVol(name,endcapPresamplerSolid, LAr);
119
121}
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
virtual const GeoMaterial * getMaterial(const std::string &name)=0