diff --git a/Trigger/TrigT1/TrigT1Interfaces/CMakeLists.txt b/Trigger/TrigT1/TrigT1Interfaces/CMakeLists.txt index bae7f42f98d3e9f0299f8394ef6970021ae3362d..ee3aa5e7f115734299cda9c9a66be039b8e0128a 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/CMakeLists.txt +++ b/Trigger/TrigT1/TrigT1Interfaces/CMakeLists.txt @@ -12,7 +12,8 @@ atlas_depends_on_subdirs( PUBLIC Control/AthContainers GaudiKernel PRIVATE - Trigger/TrigConfiguration/TrigConfL1Data ) + Trigger/TrigConfiguration/TrigConfL1Data + AtlasTest/TestTools ) # External dependencies: find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) @@ -33,3 +34,12 @@ atlas_add_dictionary( TrigT1InterfacesDict INCLUDE_DIRS ${XERCESC_INCLUDE_DIRS} ${TDAQ-COMMON_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} LINK_LIBRARIES ${XERCESC_LIBRARIES} ${TDAQ-COMMON_LIBRARIES} ${ROOT_LIBRARIES} AthenaBaseComps AthContainers AthenaKernel GaudiKernel TrigConfL1Data TrigT1Interfaces ) + +atlas_add_test( CPRoIDecoder_test + SOURCES test/CPRoIDecoder_test.cxx + LINK_LIBRARIES TrigT1Interfaces ) + + +atlas_add_test( JEPRoIDecoder_test + SOURCES test/JEPRoIDecoder_test.cxx + LINK_LIBRARIES TrigT1Interfaces ) diff --git a/Trigger/TrigT1/TrigT1Interfaces/share/CPRoIDecoder_test.ref b/Trigger/TrigT1/TrigT1Interfaces/share/CPRoIDecoder_test.ref new file mode 100644 index 0000000000000000000000000000000000000000..867e87fc7efd1bb6daf89905f5482ec4fad3ba8f --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/share/CPRoIDecoder_test.ref @@ -0,0 +1,2 @@ +CPRoIDecoder_test +test1 diff --git a/Trigger/TrigT1/TrigT1Interfaces/share/JEPRoIDecoder_test.ref b/Trigger/TrigT1/TrigT1Interfaces/share/JEPRoIDecoder_test.ref new file mode 100644 index 0000000000000000000000000000000000000000..78e83dbbf873b5acd9e960b6b327bcbdac6ab3d5 --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/share/JEPRoIDecoder_test.ref @@ -0,0 +1,2 @@ +JEPRoIDecoder_test +test1 diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/JEPRoIDecoder.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/JEPRoIDecoder.cxx index 3db7a968c2a22378e0a5c0eabd751fed96594a0f..630f3ba0f19f69d46d42e52dcb0913474a61d1e3 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/src/JEPRoIDecoder.cxx +++ b/Trigger/TrigT1/TrigT1Interfaces/src/JEPRoIDecoder.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ /*************************************************************************** JEPRoIDecoder.cxx - description @@ -320,7 +320,7 @@ unsigned int LVL1::JEPRoIDecoder::jetRoIVersion( unsigned int word ) const { } } //endfor - return m_sumEtThreshPassedVec; + return m_mEtSigThreshPassedVec; } /** returns a vector containing the numbers of threshold passed i.e. if the vector contains 1,3,5 it diff --git a/Trigger/TrigT1/TrigT1Interfaces/test/CPRoIDecoder_test.cxx b/Trigger/TrigT1/TrigT1Interfaces/test/CPRoIDecoder_test.cxx new file mode 100644 index 0000000000000000000000000000000000000000..748f350f526e1ba549e4d595350f682086636652 --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/test/CPRoIDecoder_test.cxx @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + */ +/** + * @file TrigT1Interfaces/test/CPRoIDecoder_test.cxx + * @author scott snyder <snyder@bnl.gov> + * @date Mar, 2019 + * @brief Unit tests for CPRoIDecoder. + */ + + +#undef NDEBUG +#include "TrigT1Interfaces/CPRoIDecoder.h" +#include "TestTools/FLOATassert.h" +#include <iostream> +#include <cassert> + + +void test1() +{ + std::cout << "test1\n"; + + const double cratePhiSize = M_PI / 2.0; + const double fpgaPhiSize = M_PI / 16.0; + const double localCoordPhiSize = M_PI / 32.0; + const double cpmEtaSize = 0.4; + const double localCoordEtaSize = 0.1; + + LVL1::CPRoIDecoder d; + assert (d.roiType(0x22345678) == LVL1::TrigT1CaloDefs::CpRoIWordType); + assert (d.roiType(0xa2345678) == LVL1::TrigT1CaloDefs::EMRoIWordType); + assert (d.roiType(0xb2345678) == LVL1::TrigT1CaloDefs::TauRoIWordType); + assert (d.roiType(0xc2345678) == LVL1::TrigT1CaloDefs::RoIWordTypeError); + + // EMRoI, crate=2, module=11, chip=5, localcoord=3, et=0x48, isol=0x12 + unsigned int word1 = 0xaaeb1248; + assert (d.roiType(word1) == LVL1::TrigT1CaloDefs::EMRoIWordType); + assert (d.crate(word1) == 2); + assert (d.module(word1) == 11); + assert (d.chip(word1) == 5); + assert (d.localcoord(word1) == 3); + assert (d.thresholdsPassed(word1) == (std::vector<unsigned>{})); + assert (d.et(word1) == 0x48); + assert (d.isolationWord(word1) == 0x12); + LVL1::CoordinateRange cr1 = d.coordinate (word1); + double phi1 = 2*cratePhiSize + 5*fpgaPhiSize + 2*localCoordPhiSize; + double eta1 = 3*cpmEtaSize + 2*localCoordEtaSize; + FLOAT_EQassert (cr1.phi(), phi1); + FLOAT_EQassert (cr1.phiRange().min(), phi1-localCoordPhiSize); + FLOAT_EQassert (cr1.phiRange().max(), phi1+localCoordPhiSize); + FLOAT_EQassert (cr1.eta(), eta1); + FLOAT_EQassert (cr1.etaRange().min(), eta1-localCoordEtaSize); + FLOAT_EQassert (cr1.etaRange().max(), eta1+localCoordEtaSize); + + // CpRoI, crate=1, module=7, chip=2, localcoord=5, tp=4,7,10,13 + unsigned int word2 = 0x17541248; + assert (d.roiType(word2) == LVL1::TrigT1CaloDefs::CpRoIWordType); + assert (d.crate(word2) == 1); + assert (d.module(word2) == 7); + assert (d.chip(word2) == 2); + assert (d.localcoord(word2) == 5); + assert (d.thresholdsPassed(word2) == (std::vector<unsigned>{4,7,10,13})); + assert (d.et(word2) == 0); + assert (d.isolationWord(word2) == 0); + LVL1::CoordinateRange cr2 = d.coordinate (word2); + double phi2 = 1*cratePhiSize + 2*fpgaPhiSize + localCoordPhiSize; + double eta2 = (-1)*cpmEtaSize + 4*localCoordEtaSize; + FLOAT_EQassert (cr2.phi(), phi2); + FLOAT_EQassert (cr2.phiRange().min(), phi2-localCoordPhiSize); + FLOAT_EQassert (cr2.phiRange().max(), phi2+localCoordPhiSize); + FLOAT_EQassert (cr2.eta(), eta2); + FLOAT_EQassert (cr2.etaRange().min(), eta2-localCoordEtaSize); + FLOAT_EQassert (cr2.etaRange().max(), eta2+localCoordEtaSize); +} + + +int main() +{ + std::cout << "CPRoIDecoder_test\n"; + test1(); + return 0; +} diff --git a/Trigger/TrigT1/TrigT1Interfaces/test/JEPRoIDecoder_test.cxx b/Trigger/TrigT1/TrigT1Interfaces/test/JEPRoIDecoder_test.cxx new file mode 100644 index 0000000000000000000000000000000000000000..f55b08dae9308d8197a94e35a5a66f1e67372513 --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/test/JEPRoIDecoder_test.cxx @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + */ +/** + * @file TrigT1Interfaces/test/JEPRoIDecoder_test.cxx + * @author scott snyder <snyder@bnl.gov> + * @date Mar, 2019 + * @brief Unit tests for JEPRoIDecoder. + */ + + +#undef NDEBUG +#include "TrigT1Interfaces/JEPRoIDecoder.h" +#include "TestTools/FLOATassert.h" +#include <iostream> +#include <cassert> + + +void test1() +{ + std::cout << "test1\n"; + + const double jemPhiSize = M_PI / 2; + const double jePhiSize = M_PI / 16; + const double JEMEtaSize = 0.8; + const double jeEtaSize = 0.2; + + LVL1::JEPRoIDecoder d; + assert (d.roiType(0x82345678) == LVL1::TrigT1CaloDefs::JetRoIWordType); + assert (d.roiType(0x02345678) == LVL1::TrigT1CaloDefs::JetRoIWordType); + assert (d.roiType(0xa2345678) == LVL1::TrigT1CaloDefs::JetEtRoIWordType); + assert (d.roiType(0x42345678) == LVL1::TrigT1CaloDefs::EnergyRoIWordType0); + assert (d.roiType(0x52345678) == LVL1::TrigT1CaloDefs::EnergyRoIWordType2); + assert (d.roiType(0x62345678) == LVL1::TrigT1CaloDefs::EnergyRoIWordType1); + + assert (d.jetRoIVersion(0x82345678) == 1); + assert (d.jetRoIVersion(0x02345678) == 2); + assert (d.jetRoIVersion(0x32345678) == 999); + + // run1; crate=0; jem=13; col=2, row=5 [frame=6 rl=2]; th=4,7; fth=2 + unsigned int word1 = 0x8dd01248; + assert (d.crate(word1) == 0); + assert (d.module(word1) == 13); + assert (d.column(word1) == 2); + assert (d.row(word1) == 5); + assert (d.thresholdsPassed(word1) == (std::vector<unsigned>{4,7})); + assert (d.fwdThresholdsPassed(word1) == (std::vector<unsigned>{2})); + assert (d.etLarge(word1) == 0); + assert (d.etSmall(word1) == 0); + const double phi1 = 2*jemPhiSize + 6*jePhiSize; + const double eta1 = JEMEtaSize + 3*jeEtaSize; + LVL1::CoordinateRange cr1 = d.coordinate(word1); + FLOAT_EQassert (cr1.phi(), phi1); + FLOAT_EQassert (cr1.phiRange().min(), phi1-jePhiSize); + FLOAT_EQassert (cr1.phiRange().max(), phi1+jePhiSize); + FLOAT_EQassert (cr1.eta(), eta1); + FLOAT_EQassert (cr1.etaRange().min(), eta1-jeEtaSize); + FLOAT_EQassert (cr1.etaRange().max(), eta1+jeEtaSize); + + // run2; crate=1; jem=7; col=1, row=6 [frame=3 rl=1]; etLarge=0x0x248; etSmall=0x40 + unsigned int word2 = 0x17681248; + assert (d.crate(word2) == 1); + assert (d.module(word2) == 7); + assert (d.column(word2) == 1); + assert (d.row(word2) == 6); + assert (d.thresholdsPassed(word2) == (std::vector<unsigned>{})); + assert (d.fwdThresholdsPassed(word2) == (std::vector<unsigned>{})); + assert (d.etLarge(word2) == 0x248); + assert (d.etSmall(word2) == 0x04); + LVL1::CoordinateRange cr2 = d.coordinate(word2); + const double phi2 = jemPhiSize + 7*jePhiSize; + FLOAT_EQassert (cr2.phi(), phi2); + FLOAT_EQassert (cr2.phiRange().min(), phi2-jePhiSize); + FLOAT_EQassert (cr2.phiRange().max(), phi2+jePhiSize); + FLOAT_EQassert (cr2.etaRange().min(), 2.7); + FLOAT_EQassert (cr2.etaRange().max(), 3.2); + FLOAT_EQassert (cr2.eta(), 2.95); + + // run2; crate=1; jem=8; col=0, row=3 [frame=1 rl=2]; etLarge=0x0x321; etSmall=0x10 + unsigned int word3 = 0x18304321; + assert (d.crate(word3) == 1); + assert (d.module(word3) == 8); + assert (d.column(word3) == 0); + assert (d.row(word3) == 3); + assert (d.thresholdsPassed(word3) == (std::vector<unsigned>{})); + assert (d.fwdThresholdsPassed(word3) == (std::vector<unsigned>{})); + assert (d.etLarge(word3) == 0x321); + assert (d.etSmall(word3) == 0x10); + LVL1::CoordinateRange cr3 = d.coordinate(word3); + const double phi3 = 3*jemPhiSize + 4*jePhiSize; + FLOAT_EQassert (cr3.phi(), phi3); + FLOAT_EQassert (cr3.phiRange().min(), phi3-jePhiSize); + FLOAT_EQassert (cr3.phiRange().max(), phi3+jePhiSize); + FLOAT_EQassert (cr3.etaRange().min(), -4.9); + FLOAT_EQassert (cr3.etaRange().max(), -2.9); + FLOAT_EQassert (cr3.eta(), -3.9); + + unsigned int word10 = 0x40241234; + assert (d.energyX(word10) == 0x1234); + assert (d.energyY(word10) == 0); + assert (d.energyT(word10) == 0); + assert (d.energyOverflow(word10) == false); + assert (d.mEtSigThresholdsPassed(word10) == (std::vector<unsigned>{3,6})); + assert (d.mEtSigThresholdPassed(word10, 2) == true); + assert (d.mEtSigThresholdPassed(word10, 5) == true); + assert (d.mEtSigThresholdPassed(word10, 4) == false); + + unsigned int word11 = 0x6013d234; + assert (d.energyX(word11) == 0); + assert (d.energyY(word11) == -11724); + assert (d.energyT(word11) == 0); + assert (d.energyOverflow(word11) == true); + assert (d.etSumThresholdsPassed(word11) == (std::vector<unsigned>{1,2,5})); + assert (d.sumEtThresholdPassed(word11, 1) == true); + assert (d.sumEtThresholdPassed(word11, 2) == false); + + unsigned int word12 = 0x50c2a856; + assert (d.energyX(word12) == 0); + assert (d.energyY(word12) == 0); + assert (d.energyT(word12) == 0x2856); + assert (d.energyOverflow(word12) == true); + assert (d.etMissThresholdsPassed(word12) == (std::vector<unsigned>{2,7,8})); + assert (d.etMissThresholdPassed(word12, 5) == false); + assert (d.etMissThresholdPassed(word12, 6) == true); +} + + +int main() +{ + std::cout << "JEPRoIDecoder_test\n"; + test1(); + return 0; +}