5#ifndef ISF_SERVICES_GEOIDSVC_H
6#define ISF_SERVICES_GEOIDSVC_H 1
9#include "GaudiKernel/ServiceHandle.h"
33 {
return lhs.first<rhs.first;}
43 class GeoIDSvc :
public extends<AthService, ISF::IGeoIDSvc> {
46 GeoIDSvc(
const std::string& name,ISvcLocator* svc);
71 template <
typename T>
inline int sign(T val);
75 "The EnvelopeDefinitionService describing the AtlasRegion boundaries."};
79 "Estimated tolerance within which coordinates are considered being equal."};
95 return (T(0) < val) - (val < T(0));
ServiceHandle< IEnvelopeDefSvc > m_envDefSvc
service providing the envelope dimensions for the different sub-detectors
AtlasDetDescr::AtlasRegion identifyGeoID(const Amg::Vector3D &pos) const
A static filter that returns the SimGeoID of the given position.
std::unique_ptr< RZPairList > prepareRZPairs(AtlasDetDescr::AtlasRegion geoID)
ISF::InsideType inside(const Amg::Vector3D &pos, AtlasDetDescr::AtlasRegion geoID) const
Checks if the given position (or ISFParticle) is inside a given SimGeoID.
int sign(T val)
a branchless signum function
GeoIDSvc(const std::string &name, ISvcLocator *svc)
Constructor with parameters.
~GeoIDSvc()=default
Destructor.
AtlasDetDescr::AtlasRegion identifyNextGeoID(const Amg::Vector3D &pos, const Amg::Vector3D &dir) const
Find the SimGeoID that the particle will enter with its next infinitesimal step along the given direc...
bool checkSymmetric(RZPairList &positiveZ, RZPairList &negativeZ)
Check if given RZPairLists are symmetric around z==0 plane.
RadiusGeoIDPair * m_radiusBins
m_radiusBins[m_numZBins][numCurRadiusBins]
DoubleProperty m_tolerance
(estimated) tolerance within which coordinates are considered equal
Eigen::Matrix< double, 3, 1 > Vector3D
AtlasRegion
A simple enum of ATLAS regions and sub-detectors.
std::set< RadiusGeoIDPair, SortByRadius > RadiusGeoIDPairSet
std::pair< double, AtlasDetDescr::AtlasRegion > RadiusGeoIDPair
std::list< RZPair > RZPairList
bool operator()(const RadiusGeoIDPair &lhs, const RadiusGeoIDPair &rhs) const