|
ATLAS Offline Software
|
Go to the documentation of this file.
12 #include "GaudiKernel/Bootstrap.h"
13 #include "GaudiKernel/ISvcLocator.h"
23 #include "geomdefs.hh"
24 #include "G4Polycone.hh"
25 #include "G4UnionSolid.hh"
60 ATH_MSG_ERROR(
"Unable to create volume representation for geoID="<<geoID);
69 return StatusCode::SUCCESS;
79 G4VSolid *curVol = m_volume[geoID];
82 G4ThreeVector posG4(
pos.x(),
pos.y(),
pos.z() );
83 EInside g4Where = curVol->Inside( posG4 );
86 where = m_typeConverter[g4Where];
139 <<
"' (GeoID="<< geoID <<
").");
145 const double phimin = 0.;
151 const RZPairVector &rz = m_envDefSvc->getRZBoundary( geoID );
154 size_t curVolNumPoints = rz.size();
155 if ( !curVolNumPoints)
159 return StatusCode::FAILURE;
163 double *
z =
new double[curVolNumPoints];
164 double *
r =
new double[curVolNumPoints];
167 RZPairVector::const_iterator rzIt = rz.begin();
168 for (
size_t i=0;
i<curVolNumPoints; ++
i)
177 std::stringstream curName;
178 curName << volumeName;
180 m_volume[geoID] =
new G4Polycone( curName.str(), phimin, deltaphi, curVolNumPoints,
r,
z);
182 m_volume[geoID]->SetName( volumeName);
189 return StatusCode::SUCCESS;
AtlasDetDescr::AtlasRegion identifyNextGeoID(const Amg::Vector3D &pos, const Amg::Vector3D &dir) const
Find the AtlasRegion that the particle will enter with its next infinitesimal step along the given di...
~G4PolyconeGeoIDSvc()
Destructor.
StatusCode createVolume(AtlasDetDescr::AtlasRegion geoID)
Retrieve and fill in the dimensions for the different AtlasRegion.
AtlasDetDescr::AtlasRegion identifyGeoID(const Amg::Vector3D &pos) const
A static filter that returns the AtlasRegion of the given position.
std::vector< RZPair > RZPairVector
G4PolyconeGeoIDSvc(const std::string &name, ISvcLocator *svc)
Constructor with parameters.
#define ATH_MSG_VERBOSE(x)
static const char * getName(int region)
::StatusCode StatusCode
StatusCode definition for legacy code.
AthROOTErrorHandlerSvc * svc
ISF::InsideType inside(const Amg::Vector3D &pos, AtlasDetDescr::AtlasRegion geoID) const
Checks if the given position (ISFParticle) is inside a given AtlasRegion.
Eigen::Matrix< double, 3, 1 > Vector3D
#define assertAtlasRegion(region)
#define validAtlasRegion(region)