8 #include "GeoModelKernel/GeoVDetectorManager.h"
9 #include "GeoModelKernel/GeoShapeUnion.h"
10 #include "GeoModelKernel/GeoShapeShift.h"
11 #include "GeoModelKernel/GeoMaterial.h"
12 #include "GeoModelKernel/GeoLogVol.h"
13 #include "GeoModelKernel/GeoPhysVol.h"
14 #include "GeoModelKernel/GeoTransform.h"
23 #include "G4ReflectionFactory.hh"
24 #include "G4LogicalBorderSurface.hh"
25 #include "G4OpticalSurface.hh"
26 #include "GeoModelKernel/throwExcept.h"
34 , m_detectorName(detectorName)
35 , m_motherTransform(GeoTrf::
Transform3D::Identity())
38 THROW_EXCEPTION(
"ERROR: Geo2G4Builder for detector "<< detectorName <<
" could not access the detector store.");
50 for(
unsigned int i=0;
i<theManager->getNumTreeTops(); ++
i) {
62 if(theMaterialManager) {
70 if (
m_g2gSvc.retrieve().isFailure()) {
79 <<
"\n Use 'DefaultBuilder' property of Geo2G4Svc or"
80 <<
"\n 'GetVolumeBuilder' method of Geo2G4Builder");
87 G4LogicalVolume*
result =
nullptr;
94 if(
sc.isSuccess() && surface_container->size()>0) {
108 const GeoShape* shResult = &shFirst;
115 GeoPhysVol* pvEnvelope =
new GeoPhysVol(lvEnvelope);
120 PVConstLink world =
m_treeTops[0]->getParent();
126 Query<unsigned int> childIndx = world->indexOf(
pv);
133 Query<int> Qint = world->getIdOfChildVol(childIndx);
134 if(Qint.isValid())
id = Qint;
137 std::string nameTT = world->getNameOfChildVol(childIndx);
138 if (nameTT ==
"ANON") nameTT =
pv->getLogVol()->getName();
142 G4ReflectionFactory::Instance()->Place(theG4Position,
153 if(optical_volumes) {
154 if(optical_volumes->size()>0) {
158 ATH_MSG_WARNING(
"Optical volumes apparently requested, but none found! Deleting temps");
160 delete optical_volumes;
181 G4OpticalSurface* g4OptSurface = surfaceFactory.
Build(border_surface.getOptSurface());
183 G4VPhysicalVolume* g4PV1 = 0;
184 G4VPhysicalVolume* g4PV2 = 0;
185 OpticalVolumesMap::const_iterator volIt;
188 volIt = optical_volumes->find(border_surface.getPV1());
189 if(volIt == optical_volumes->end())
191 ATH_MSG_WARNING(
"Unable to find " << border_surface.getPV1()->getLogVol()->getName() <<
" in Optical Volumes map");
194 g4PV1 = volIt.operator->()->second;
197 volIt = optical_volumes->find(border_surface.getPV2());
198 if(volIt == optical_volumes->end())
200 ATH_MSG_WARNING(
"Unable to find " << border_surface.getPV2()->getLogVol()->getName() <<
" in Optical Volumes map");
203 g4PV2 = volIt.operator->()->second;
206 G4LogicalBorderSurface* g4BorderSurface
__attribute__((
unused)) =
new G4LogicalBorderSurface(border_surface.getName(),g4PV1,g4PV2,g4OptSurface);