24 constexpr double MAX_R = 1100;
33 virtual const char*
what()
const throw() {
return m_str.c_str(); }
43 const double zouter = dzdr*MAX_R + z0;
45 auto contains_internal = [zouter, z0](
const IRoiDescriptor& rd ) {
46 return ( z0<=rd.zedPlus() && z0>=rd.zedMinus() &&
47 zouter<=rd.zedOuterPlus() && zouter>=rd.zedOuterMinus() );
52 if ( contains_internal( *rd ) )
return true;
56 else return contains_internal( roi );
61 const double zouter = dzdr*MAX_R + z0;
63 auto contains_internal = [zouter, z0, zmin, zmax](
const IRoiDescriptor& rd ) {
64 return ( z0<=zmax && z0>=zmin &&
65 zouter<=rd.zedOuterPlus() && zouter>=rd.zedOuterMinus() );
70 if ( contains_internal( *rd ) )
return true;
74 else return contains_internal( roi );
105 return (
z>=zminus &&
z<=zplus );
127 throw range_error( (std::string(
"phi out of range: ")+std::to_string(
phi)).c_str() );
134 if ( !(
eta>-100 &&
eta<100) ) {
135 throw range_error( (std::string(
"eta out of range: ")+std::to_string(
eta)).c_str() );
142 if ( !(zed>-100000 && zed<100000 ) ) {
143 throw range_error( (std::string(
"zed out of range: ")+std::to_string(zed)).c_str() );
152 if ( &roi0 == &roi1 )
return true;
165 if ( std::fabs(roi0.
zed() -roi1.
zed() )>1e-7 )
return false;
166 if ( std::fabs(roi0.
zedPlus() -roi1.
zedPlus() )>1e-7 )
return false;
169 if ( std::fabs(roi0.
eta() -roi1.
eta() )>1e-7 )
return false;
170 if ( std::fabs(roi0.
etaPlus() -roi1.
etaPlus() )>1e-7 )
return false;
175 if ( std::fabs(roi0.
phi() -roi1.
phi() ) >1e-7 )
return false;
176 if ( std::fabs(roi0.
phiPlus() -roi1.
phiPlus()) >1e-7 )
return false;
181 if ( roi0.
size() != roi1.
size() )
return false;
182 for (
unsigned i=roi0.
size() ; i-- ; )
if ( !( *roi0.
at(i) == *roi1.
at(i) ) )
return false;
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
bool operator==(const IRoiDescriptor &roi0, const IRoiDescriptor &roi1)
bool operator!=(const IRoiDescriptor &roi0, const IRoiDescriptor &roi1)
Describes the API of the Region of Ineterest geometry.
virtual bool isFullscan() const =0
is this a full detector RoI?
virtual double eta() const =0
virtual double phiPlus() const =0
extreme phi values
virtual double zedPlus() const =0
the zed and eta values at the most forward and most rear ends of the RoI
virtual double dzdrMinus() const =0
return the gradients
virtual double phiMinus() const =0
virtual double phi() const =0
Methods to retrieve data members.
virtual double zedMinus() const =0
virtual double zed() const =0
virtual double dzdrPlus() const =0
virtual const IRoiDescriptor * at(int i) const =0
find an RoiDescriptor constituent
virtual unsigned size() const =0
number of constituents
virtual double etaMinus() const =0
virtual double etaPlus() const =0
virtual bool composite() const =0
Super RoI access methods.
range_error(const char *s)
virtual const char * what() const
double zedcheck(double zed)
double etacheck(double eta)
bool contains_zrange(const IRoiDescriptor &roi, double z0, double dzdr, double zmin, double zmax)
double phicheck(double phi)
basic range checkers
bool containsPhi(const IRoiDescriptor &roi, double phi)
test whether a stub is contained within the roi
bool contains(const IRoiDescriptor &roi, double z0, double dzdr)
see whether a segment is contained within the roi in r-z
bool containsZed(const IRoiDescriptor &roi, double z, double r)