From 83b1682148351815b09f90cc6aa7b39bd1923e0a Mon Sep 17 00:00:00 2001 From: Mark Sutton <mark.sutton@cern.ch> Date: Thu, 3 Nov 2016 15:58:04 +0100 Subject: [PATCH] add roi comparison operators (RoiDescriptor-00-01-04) * RoiDescriptor-00-01-04 * add roi comparison operators 2016-11-03 sutt < sutt @ cern.ch > * RoiDescriptor-00-01-03 * fix roi comparison operators 2016-11-03 sutt < sutt @ cern.ch > * RoiDescriptor-00-01-02 * add roi comparison operators Former-commit-id: 2f9b9ef765762e2e6d29bb2fbba792ba78b64d68 --- .../RoiDescriptor/RoiDescriptor.h | 1 + .../RoiDescriptor/Root/RoiUtil.cxx | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/DetectorDescription/RoiDescriptor/RoiDescriptor/RoiDescriptor.h b/DetectorDescription/RoiDescriptor/RoiDescriptor/RoiDescriptor.h index 79d99efe040..56de195d208 100644 --- a/DetectorDescription/RoiDescriptor/RoiDescriptor/RoiDescriptor.h +++ b/DetectorDescription/RoiDescriptor/RoiDescriptor/RoiDescriptor.h @@ -17,6 +17,7 @@ #include <iostream> #include "IRegionSelector/IRoiDescriptor.h" +#include "IRegionSelector/RoiUtil.h" /** diff --git a/DetectorDescription/RoiDescriptor/Root/RoiUtil.cxx b/DetectorDescription/RoiDescriptor/Root/RoiUtil.cxx index 716428607ce..e465b815ad1 100644 --- a/DetectorDescription/RoiDescriptor/Root/RoiUtil.cxx +++ b/DetectorDescription/RoiDescriptor/Root/RoiUtil.cxx @@ -11,6 +11,7 @@ // $Id: RoiUtil.cxx, v0.0 Sat 31 Oct 2015 09:54:33 CET sutt $ +#include "IRegionSelector/IRoiDescriptor.h" #include "IRegionSelector/RoiUtil.h" #include <cmath> @@ -143,3 +144,47 @@ double RoiUtil::zedcheck(double zed ) { } return zed; } + + +bool operator==( const IRoiDescriptor& roi0, const IRoiDescriptor& roi1 ) { + + /// trivial self comparison + if ( &roi0 == &roi1 ) return true; + + /// same compositness ? + if ( roi0.composite() != roi1.composite() ) return false; + + if ( !roi0.composite() ) { + /// not composite + + /// check full scan - all non-composite full scan rois are equivalent + if ( roi0.isFullscan() != roi1.isFullscan() ) return false; + if ( roi0.isFullscan() ) return true; + + /// check geometry + if ( std::fabs(roi0.zed() -roi1.zed() )>1e-7 ) return false; + if ( std::fabs(roi0.zedPlus() -roi1.zedPlus() )>1e-7 ) return false; + if ( std::fabs(roi0.zedMinus()-roi1.zedMinus())<1e-7 ) return false; + + if ( std::fabs(roi0.eta() -roi1.eta() )>1e-7 ) return false; + if ( std::fabs(roi0.etaPlus() -roi1.etaPlus() )>1e-7 ) return false; + if ( std::fabs(roi0.etaMinus()-roi1.etaMinus())>1e-7 ) return false; + + /// Fixme: naive phi differwnce - should test for the phi=pi boundary + /// for the case of very close angles but wrapped differently + if ( std::fabs(roi0.phi() -roi1.phi() ) >1e-7 ) return false; + if ( std::fabs(roi0.phiPlus() -roi1.phiPlus()) >1e-7 ) return false; + if ( std::fabs(roi0.phiMinus()-roi1.phiMinus())>1e-7 ) return false; + } + else { + /// check constituents + if ( roi0.size() != roi1.size() ) return false; + for ( unsigned i=roi0.size() ; i-- ; ) if ( !( *roi0.at(i) == *roi1.at(i) ) ) return false; + } + + return true; +} + + + +bool operator!=( const IRoiDescriptor& roi0, const IRoiDescriptor& roi1 ) { return !(roi0==roi1); } -- GitLab