diff --git a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/CMakeLists.txt index dc60da07323b97681a23c1fe29b8b6628a105a2b..a4391bfad7f2db59cab14f05a0761a49a1be0b0f 100644 --- a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/CMakeLists.txt @@ -12,12 +12,14 @@ atlas_depends_on_subdirs( ) atlas_depends_on_subdirs( PUBLIC Control/AthenaBaseComps Control/AthenaKernel + Control/CxxUtils GaudiKernel ) # External dependencies: find_package( CLHEP ) find_package( Eigen ) find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) +find_package( Boost COMPONENTS unit_test_framework ) # tag rootMathLibs was not recognized in automatic conversion in cmt2cmake @@ -30,3 +32,11 @@ atlas_add_component( InDetEtaDependentCuts # Install files from the package: atlas_install_headers( InDetEtaDependentCuts ) +atlas_install_joboptions( share/*.txt ) + +atlas_add_test( InDetEtaDependentCutsSvc_test + SOURCES test/InDetEtaDependentCutsSvc_test.cxx + INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} + LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} AthenaKernel AthenaBaseComps GaudiKernel TestTools CxxUtils InDetRecToolInterfaces + POST_EXEC_SCRIPT "nopost.sh" ) + diff --git a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/InDetEtaDependentCuts/InDetEtaDependentCutsSvc.h b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/InDetEtaDependentCuts/InDetEtaDependentCutsSvc.h index dd628f66ab0a1baf0c6720b78cc75e2b14ef341c..b9105c840ebd4b5466cebdc0196c6fbbd373a711 100644 --- a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/InDetEtaDependentCuts/InDetEtaDependentCutsSvc.h +++ b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/InDetEtaDependentCuts/InDetEtaDependentCutsSvc.h @@ -30,15 +30,15 @@ namespace InDet { InDetEtaDependentCutsSvc(const std::string& name, ISvcLocator* sl); /// Destructor: - virtual ~InDetEtaDependentCutsSvc(); + virtual ~InDetEtaDependentCutsSvc() override final; - virtual StatusCode queryInterface(const InterfaceID& riid, void** ppvIF); + virtual StatusCode queryInterface(const InterfaceID& riid, void** ppvIF) final; - StatusCode initialize(); - StatusCode finalize(); + StatusCode initialize() override final; + StatusCode finalize() override final; - void getValue(const InDet::CutName cutName, std::vector < double >& cut); - void getValue(const InDet::CutName cutName, std::vector < int >& cut); + void getValue(const InDet::CutName cutName, std::vector < double >& cut) override final; + void getValue(const InDet::CutName cutName, std::vector < int >& cut) override final; template <class T> T getValueAtEta(const std::vector< T > cuts, const double eta) const; @@ -46,18 +46,18 @@ namespace InDet { template <class T> void getValue(const InDet::CutName cutName, T& cut, const double eta); - double getMaxEta() const; - double getMinPtAtEta (const double eta) const; - double getMaxZImpactAtEta (const double eta) const; - double getMaxPrimaryImpactAtEta(const double eta) const; - int getMinSiHitsAtEta (const double eta) const; - int getMinSiNotSharedAtEta (const double eta) const; - int getMaxSharedAtEta (const double eta) const; - int getMinPixelHitsAtEta (const double eta) const; - int getMaxSiHolesAtEta (const double eta) const; - int getMaxPixelHolesAtEta (const double eta) const; - int getMaxSctHolesAtEta (const double eta) const; - int getMaxDoubleHolesAtEta (const double eta) const; + double getMaxEta() const override final; + double getMinPtAtEta (const double eta) const override final; + double getMaxZImpactAtEta (const double eta) const override final; + double getMaxPrimaryImpactAtEta(const double eta) const override final; + int getMinSiHitsAtEta (const double eta) const override final; + int getMinSiNotSharedAtEta (const double eta) const override final; + int getMaxSharedAtEta (const double eta) const override final; + int getMinPixelHitsAtEta (const double eta) const override final; + int getMaxSiHolesAtEta (const double eta) const override final; + int getMaxPixelHolesAtEta (const double eta) const override final; + int getMaxSctHolesAtEta (const double eta) const override final; + int getMaxDoubleHolesAtEta (const double eta) const override final; /////////////////////////////////////////////////////////////////// diff --git a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/share/InDetEtaDependentCutsTestJobOpts.txt b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/share/InDetEtaDependentCutsTestJobOpts.txt new file mode 100644 index 0000000000000000000000000000000000000000..a6c30adcc5e2d503810789f76e83f0b9728d1dce --- /dev/null +++ b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/share/InDetEtaDependentCutsTestJobOpts.txt @@ -0,0 +1,3 @@ +ApplicationMgr.OutputLevel = 5; +ApplicationMgr.CreateSvc += { "InDet::InDetEtaDependentCutsSvc" }; +MessageSvc.OutputLevel = 5; diff --git a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/src/InDetEtaDependentCutsSvc.cxx b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/src/InDetEtaDependentCutsSvc.cxx index 941bc8d3fcd51ea4428767fd9d1380b4e3b319c7..69fddc30421d0b8e729e9709f757706207a5afdb 100644 --- a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/src/InDetEtaDependentCutsSvc.cxx +++ b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/src/InDetEtaDependentCutsSvc.cxx @@ -47,13 +47,13 @@ namespace InDet { ATH_MSG_INFO ("Initializing " << name() << "..."); if ((m_etaBins.size()-1) <= 0) { - ATH_MSG_ERROR( "Wrong inizialisation of eta bins. Check the eta bin values in " << name() ); + ATH_MSG_ERROR( "Wrong initialisation of eta bins. Check the eta bin values in " << name() ); return StatusCode::FAILURE; } // expecting eta bins in ascending order if (not std::is_sorted(m_etaBins.value().begin(), m_etaBins.value().end())) { - ATH_MSG_ERROR( "Wrong inizialisation of eta bins in " << name() << ". Values are not sorted!" ); + ATH_MSG_ERROR( "Wrong initialisation of eta bins in " << name() << ". Values are not sorted!" ); return StatusCode::FAILURE; } @@ -140,14 +140,14 @@ namespace InDet { } int InDetEtaDependentCutsSvc::getIndexByEta(const double eta) const { - double absEta = std::abs(eta); + const double absEta = std::abs(eta); if (absEta > m_etaBins.value().back()) { ATH_MSG_ERROR("Requesting cut value for eta outside expected range!! "); return -1; } - auto pVal = std::lower_bound(m_etaBins.value().begin(), m_etaBins.value().end(), absEta); - int bin = std::distance(m_etaBins.value().begin(), pVal) - 1; + const auto pVal = std::lower_bound(m_etaBins.value().begin(), m_etaBins.value().end(), absEta); + const int bin = std::distance(m_etaBins.value().begin(), pVal) - 1; ATH_MSG_DEBUG("Checking (abs(eta)/bin) = (" << absEta << "," << bin << ")"); return bin; } diff --git a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/test/IDEDCSvc_GaudiFixtureBase.h b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/test/IDEDCSvc_GaudiFixtureBase.h new file mode 100644 index 0000000000000000000000000000000000000000..a8c869ef2bed94898c2aa42dc280af46753cc4a9 --- /dev/null +++ b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/test/IDEDCSvc_GaudiFixtureBase.h @@ -0,0 +1,37 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ +/* + */ +/** + * @file InDetEtaDependentCuts/test/IDEDC_GaudiFixtureBase.h + * @author Shaun Roe + * @date June 2020 + * @brief Base class for initialising Gaudi in fixtures + */ + +#ifndef InDetPhysValMonitoring_IDPVM_GaudiFixtureBase_h +#define InDetPhysValMonitoring_IDPVM_GaudiFixtureBase_h + + +#include "TestTools/initGaudi.h" +#include "TInterpreter.h" +#include "CxxUtils/ubsan_suppress.h" +#include <string> + +struct IDEDC_GaudiFixtureBase{ + ISvcLocator* svcLoc{}; + static bool gaudiIsInitialised; + const std::string jobOpts{}; + IDEDC_GaudiFixtureBase(const std::string & jobOptionFile = "InDetEtaDependentCutsTestJobOpts.txt"):jobOpts(jobOptionFile){ + CxxUtils::ubsan_suppress ([]() { TInterpreter::Instance(); } ); + if (not gaudiIsInitialised){ + std::string fullJobOptsName="InDetEtaDependentCuts/" + jobOpts; + gaudiIsInitialised=Athena_test::initGaudi(fullJobOptsName, svcLoc); + } + } +}; + +bool IDEDC_GaudiFixtureBase::gaudiIsInitialised=false; + +#endif \ No newline at end of file diff --git a/InnerDetector/InDetRecTools/InDetEtaDependentCuts/test/InDetEtaDependentCutsSvc_test.cxx b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/test/InDetEtaDependentCutsSvc_test.cxx new file mode 100644 index 0000000000000000000000000000000000000000..d5be3ed7b4f871c16c949f59936882b2c9d487fb --- /dev/null +++ b/InnerDetector/InDetRecTools/InDetEtaDependentCuts/test/InDetEtaDependentCutsSvc_test.cxx @@ -0,0 +1,54 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +/** + * @file InDetEtaDependentCuts/test/InDetEtaDependentCutsSvc_test.cxx + * @author Shaun Roe + * @date June, 2020 + * @brief Some tests for InDetEtaDependentCutsSvc + */ + +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MAIN +#define BOOST_TEST_MODULE TEST_ETADEPENDENTCUTSSVC + + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Woverloaded-virtual" +#include <boost/test/unit_test.hpp> +#pragma GCC diagnostic pop + +#include "IDEDCSvc_GaudiFixtureBase.h" +#include "../InDetEtaDependentCuts/InDetEtaDependentCutsSvc.h" + +static const std::string testJobOptionsFile("InDetEtaDependentCutsTestJobOpts.txt"); + +struct GaudiKernelFixture:public IDEDC_GaudiFixtureBase{ + GaudiKernelFixture(const std::string & joFilename):IDEDC_GaudiFixtureBase(joFilename){ + //nop, everything in base. + } +}; + +using namespace InDet; + +BOOST_AUTO_TEST_SUITE(EtaDependentCutsSvcTest) + GaudiKernelFixture g(testJobOptionsFile); + const auto & svcLoc=g.svcLoc; + ServiceHandle<IInDetEtaDependentCutsSvc> idEDCSvc ("InDet::InDetEtaDependentCutsSvc", "test"); + + BOOST_AUTO_TEST_CASE( sanityCheck ){ + const bool svcLocatorIsOk=(svcLoc != nullptr); + BOOST_TEST(svcLocatorIsOk); + } + BOOST_AUTO_TEST_CASE( retrieveSvc ){ + BOOST_TEST (idEDCSvc.retrieve().isSuccess()); + } + BOOST_AUTO_TEST_CASE( interfaceID ){ + InterfaceID testId("IInDetEtaDependentCutsSvc",1,0); + BOOST_TEST(idEDCSvc->interfaceID()==testId); + } + BOOST_AUTO_TEST_CASE(publicMethods){ + BOOST_TEST(idEDCSvc->getMaxEta() == 4.0); + } +BOOST_AUTO_TEST_SUITE_END()