From b1063cb158710757f7136a2c97a03b41a7b05e36 Mon Sep 17 00:00:00 2001 From: yzach <yuval.zach@cern.ch> Date: Fri, 29 Jan 2021 10:35:29 +0000 Subject: [PATCH] Add NSW pad trigger RDO (cherry pick 8420e2f9) --- .../MuonEventAthenaPool/CMakeLists.txt | 3 +- .../src/NSW_PadTriggerDataContainerCnv.cxx | 25 +++++++++ .../src/NSW_PadTriggerDataContainerCnv.h | 22 ++++++++ .../MuonEventTPCnv/MuonEventTPCnvDict.h | 10 ++++ .../NSW_PadTriggerDataContainerCnv_p1.h | 22 ++++++++ .../MuonRDO/NSW_PadTriggerDataContainer_p1.h | 13 +++++ .../MuonRDO/NSW_PadTriggerData_p1.h | 23 ++++++++ .../MuonRDO/NSW_PadTriggerSegmentCnv_p1.h | 21 ++++++++ .../MuonRDO/NSW_PadTriggerSegment_p1.h | 15 ++++++ .../MuonEventTPCnv/selection.xml | 6 +++ .../NSW_PadTriggerDataContainerCnv_p1.cxx | 54 +++++++++++++++++++ .../MuonRDO/NSW_PadTriggerSegmentCnv_p1.cxx | 21 ++++++++ .../MuonRDO/MuonRDO/NSW_PadTriggerData.h | 44 +++++++++++++++ .../MuonRDO/NSW_PadTriggerDataContainer.h | 32 +++++++++++ .../MuonRDO/MuonRDO/NSW_PadTriggerSegment.h | 33 ++++++++++++ .../MuonRDO/src/NSW_PadTriggerData.cxx | 51 ++++++++++++++++++ .../src/NSW_PadTriggerDataContainer.cxx | 35 ++++++++++++ .../MuonRDO/src/NSW_PadTriggerSegment.cxx | 35 ++++++++++++ 18 files changed, 464 insertions(+), 1 deletion(-) create mode 100644 MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/NSW_PadTriggerDataContainerCnv.cxx create mode 100644 MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/NSW_PadTriggerDataContainerCnv.h create mode 100644 MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerDataContainerCnv_p1.h create mode 100644 MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerDataContainer_p1.h create mode 100644 MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerData_p1.h create mode 100644 MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerSegmentCnv_p1.h create mode 100644 MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerSegment_p1.h create mode 100644 MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/NSW_PadTriggerDataContainerCnv_p1.cxx create mode 100644 MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/NSW_PadTriggerSegmentCnv_p1.cxx create mode 100644 MuonSpectrometer/MuonRDO/MuonRDO/NSW_PadTriggerData.h create mode 100644 MuonSpectrometer/MuonRDO/MuonRDO/NSW_PadTriggerDataContainer.h create mode 100644 MuonSpectrometer/MuonRDO/MuonRDO/NSW_PadTriggerSegment.h create mode 100644 MuonSpectrometer/MuonRDO/src/NSW_PadTriggerData.cxx create mode 100644 MuonSpectrometer/MuonRDO/src/NSW_PadTriggerDataContainer.cxx create mode 100644 MuonSpectrometer/MuonRDO/src/NSW_PadTriggerSegment.cxx diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/CMakeLists.txt b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/CMakeLists.txt index a7326de26b30..1520ab8603c3 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/CMakeLists.txt +++ b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/CMakeLists.txt @@ -42,13 +42,14 @@ atlas_add_poolcnv_library( MuonEventAthenaPoolPoolCnv MuonTrigCoinData/TgcCoinDataContainer.h MuonTrigCoinData/RpcCoinDataContainer.h MuonChamberT0s/ChamberT0s.h src/MuonMeasurements.h + MuonRDO/NSW_PadTriggerDataContainer.h TYPES_WITH_NAMESPACE Muon::STGC_RawDataContainer Muon::MM_RawDataContainer Muon::CscPrepDataContainer Muon::CscStripPrepRawDataContainer Muon::RpcPrepDataContainer Muon::TgcPrepDataContainer Muon::MdtPrepDataContainer Muon::MMPrepDataContainer Muon::sTgcPrepDataContainer Muon::TgcCoinDataContainer - Muon::ChamberT0s TPCnv::MuonMeasurements + Muon::ChamberT0s TPCnv::MuonMeasurements Muon::NSW_PadTriggerDataContainer INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} AthenaPoolUtilities AtlasSealCLHEP MuonRDO MuonRIO_OnTrack MuonSegment diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/NSW_PadTriggerDataContainerCnv.cxx b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/NSW_PadTriggerDataContainerCnv.cxx new file mode 100644 index 000000000000..c018c37b2831 --- /dev/null +++ b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/NSW_PadTriggerDataContainerCnv.cxx @@ -0,0 +1,25 @@ +#include "NSW_PadTriggerDataContainerCnv.h" + +NSW_PadTriggerDataContainerCnv::NSW_PadTriggerDataContainerCnv(ISvcLocator* svcLocator) + : NSW_PadTriggerDataContainerCnvBase(svcLocator) { } + +NSW_PadTriggerDataContainer_PERS* NSW_PadTriggerDataContainerCnv::createPersistent(Muon::NSW_PadTriggerDataContainer* transientContainer) { + MsgStream log{ msgSvc(), "NSW_PadTriggerDataContainerCnv" }; + log << MSG::VERBOSE << "NSW_PadTriggerDataContainerCnv::createPersistent(): converting container" << std::endl; + return m_TPConverter.createPersistent(transientContainer, log); +} + +Muon::NSW_PadTriggerDataContainer* NSW_PadTriggerDataContainerCnv::createTransient() { + MsgStream log(msgSvc(), "NSW_PadTriggerDataContainer"); + log << MSG::VERBOSE + << "NSW_PadTriggerDataContainerCnv::createTransient(): reading container from persistent storage" + << std::endl; + // UUID of of NSW_PadTriggerDataContainer_p1 + static pool::Guid p1_guid("2930850B-526A-4A6B-BDC6-C86D43B06C7C"); + if(compareClassGuid(p1_guid)) { + std::unique_ptr<Muon::NSW_PadTriggerDataContainer_p1> pContainer + { poolReadObject<Muon::NSW_PadTriggerDataContainer_p1>() }; + return m_TPConverter.createTransient(pContainer.get(), log); + } + throw std::runtime_error{ "No persistent version match for GUID on-disk" }; +} \ No newline at end of file diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/NSW_PadTriggerDataContainerCnv.h b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/NSW_PadTriggerDataContainerCnv.h new file mode 100644 index 000000000000..029574df18d1 --- /dev/null +++ b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/NSW_PadTriggerDataContainerCnv.h @@ -0,0 +1,22 @@ +#ifndef MUONEVENTATHENAPOOL_NSW_PADTRIGGERDATACONTAINERCNV_H +#define MUONEVENTATHENAPOOL_NSW_PADTRIGGERDATACONTAINERCNV_H + +#include "AthenaPoolCnvSvc/T_AthenaPoolCustomCnv.h" + +#include "MuonRDO/NSW_PadTriggerDataContainer.h" +#include "MuonEventTPCnv/MuonRDO/NSW_PadTriggerDataContainer_p1.h" +#include "MuonEventTPCnv/MuonRDO/NSW_PadTriggerDataContainerCnv_p1.h" + +using NSW_PadTriggerDataContainer_PERS = Muon::NSW_PadTriggerDataContainer_p1; +using NSW_PadTriggerDataContainerCnvBase = T_AthenaPoolCustomCnv<Muon::NSW_PadTriggerDataContainer, NSW_PadTriggerDataContainer_PERS>; + +class NSW_PadTriggerDataContainerCnv : public NSW_PadTriggerDataContainerCnvBase { +public: + NSW_PadTriggerDataContainerCnv(ISvcLocator* svcLocator); + NSW_PadTriggerDataContainer_PERS* createPersistent(Muon::NSW_PadTriggerDataContainer* transientContainer) final; + Muon::NSW_PadTriggerDataContainer* createTransient() final; +private: + Muon::NSW_PadTriggerDataContainerCnv_p1 m_TPConverter; +}; + +#endif // MUONEVENTATHENAPOOL_NSW_PADTRIGGERDATACONTAINERCNV_H \ No newline at end of file diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonEventTPCnvDict.h b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonEventTPCnvDict.h index 41c776165adf..16e44d37d957 100755 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonEventTPCnvDict.h +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonEventTPCnvDict.h @@ -39,5 +39,15 @@ #include "MuonEventTPCnv/MuonDigitContainer/CscSimDataCollection_p2.h" #include "MuonEventTPCnv/MuonRDO/STGC_RawDataContainer_p1.h" #include "MuonEventTPCnv/MuonRDO/MM_RawDataContainer_p1.h" +#include "MuonEventTPCnv/MuonRDO/NSW_PadTriggerDataContainer_p1.h" + +struct MuonEventTPCnvDict +{ + Muon::NSW_PadTriggerSegment_p1 m_v33; + Muon::NSW_PadTriggerData_p1 m_v34; + Muon::NSW_PadTriggerDataContainer_p1 m_v35; + std::vector<Muon::NSW_PadTriggerSegment_p1> m_v36; + std::vector<Muon::NSW_PadTriggerData_p1> m_v37; +}; #endif // MUONEVENTTPCNV_MUONEVENTTPCNVDICT_H diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerDataContainerCnv_p1.h b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerDataContainerCnv_p1.h new file mode 100644 index 000000000000..3cdeb894cb77 --- /dev/null +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerDataContainerCnv_p1.h @@ -0,0 +1,22 @@ +#ifndef MUONEVENTTPCNV_NSW_PADTRIGGERDATACONTAINERCNV_P1_H +#define MUONEVENTTPCNV_NSW_PADTRIGGERDATACONTAINERCNV_P1_H + +#include "MuonRDO/NSW_PadTriggerDataContainer.h" +#include "MuonEventTPCnv/MuonRDO/NSW_PadTriggerDataContainer_p1.h" +#include "MuonEventTPCnv/MuonRDO/NSW_PadTriggerSegmentCnv_p1.h" + +#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h" + +#include <array> + +namespace Muon { +class NSW_PadTriggerDataContainerCnv_p1 : public T_AthenaPoolTPCnvBase<NSW_PadTriggerDataContainer, NSW_PadTriggerDataContainer_p1> { +public: + void persToTrans(const NSW_PadTriggerDataContainer_p1* persistentObj, NSW_PadTriggerDataContainer* transientObj, MsgStream &log) final; + void transToPers(const NSW_PadTriggerDataContainer* transientObj, NSW_PadTriggerDataContainer_p1* persistentObj, MsgStream &log) final; +private: + NSW_PadTriggerSegmentCnv_p1 m_segmentConverter; +}; +} // namespace Muon + +#endif // MUONEVENTTPCNV_NSW_PADTRIGGERDATACONTAINERCNV_P1_H \ No newline at end of file diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerDataContainer_p1.h b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerDataContainer_p1.h new file mode 100644 index 000000000000..7eceb61fd756 --- /dev/null +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerDataContainer_p1.h @@ -0,0 +1,13 @@ +#ifndef MUONEVENTTPCNV_NSW_PADTRIGGERDATACONTAINER_P1_H +#define MUONEVENTTPCNV_NSW_PADTRIGGERDATACONTAINER_P1_H + +#include "MuonEventTPCnv/MuonRDO/NSW_PadTriggerData_p1.h" + +#include <vector> + +namespace Muon { +struct NSW_PadTriggerDataContainer_p1 : public std::vector<NSW_PadTriggerData_p1> + { }; +} // namespace Muon + +#endif // MUONEVENTTPCNV_NSW_PADTRIGGERDATACONTAINER_P1_H diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerData_p1.h b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerData_p1.h new file mode 100644 index 000000000000..b8ec17bb9946 --- /dev/null +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerData_p1.h @@ -0,0 +1,23 @@ +#ifndef MUONEVENTTPCNV_NSW_PADTRIGGERDATA_P1_H +#define MUONEVENTTPCNV_NSW_PADTRIGGERDATA_P1_H + +#include "MuonEventTPCnv/MuonRDO/NSW_PadTriggerSegment_p1.h" + +#include <vector> + +namespace Muon { +struct NSW_PadTriggerData_p1 : public std::vector<NSW_PadTriggerSegment_p1> { + unsigned int m_identifierHash; + uint8_t m_sectorID; + uint8_t m_sectorSize; + uint8_t m_endcap; + uint32_t m_BCID; + uint32_t m_L1ID; + // Hitlists from the BCs preceding, following, and at the time of the L1A + std::vector<uint16_t> m_precedingHitlist; + std::vector<uint16_t> m_currentHitlist; + std::vector<uint16_t> m_followingHitlist; +}; +} // namespace Muon + +#endif // MUONEVENTTPCNV_NSW_PADTRIGGERDATA_P1_H diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerSegmentCnv_p1.h b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerSegmentCnv_p1.h new file mode 100644 index 000000000000..b144916cc921 --- /dev/null +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerSegmentCnv_p1.h @@ -0,0 +1,21 @@ +#ifndef MUONEVENTTPCNV_NSW_PADTRIGGERSEGMENTCNV_P1_H +#define MUONEVENTTPCNV_NSW_PADTRIGGERSEGMENTCNV_P1_H + +#include "MuonRDO/NSW_PadTriggerSegment.h" +#include "MuonEventTPCnv/MuonRDO/NSW_PadTriggerSegment_p1.h" + +#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h" + +#include <algorithm> + +class MsgStream; + +namespace Muon { +class NSW_PadTriggerSegmentCnv_p1 : public T_AthenaPoolTPCnvBase<NSW_PadTriggerSegment, NSW_PadTriggerSegment_p1> { +public: + void persToTrans(const NSW_PadTriggerSegment_p1* persistentObj, NSW_PadTriggerSegment* transientObj, MsgStream &log) final; + void transToPers(const NSW_PadTriggerSegment* transientObj, NSW_PadTriggerSegment_p1* persistentObj, MsgStream &log) final; +}; +} // namespace Muon + +#endif // MUONEVENTTPCNV_NSW_PADTRIGGERSEGMENTCNV_P1_H \ No newline at end of file diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerSegment_p1.h b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerSegment_p1.h new file mode 100644 index 000000000000..680b15c5c91a --- /dev/null +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/NSW_PadTriggerSegment_p1.h @@ -0,0 +1,15 @@ +#ifndef MUONEVENTTPCNV_NSW_PADTRIGGERSEGMENT_P1_H +#define MUONEVENTTPCNV_NSW_PADTRIGGERSEGMENT_P1_H + +#include <cinttypes> + +namespace Muon { +struct NSW_PadTriggerSegment_p1 { + uint8_t m_bandID; + uint8_t m_phiID; + uint8_t m_innerActiveLayers; + uint8_t m_outerActiveLayers; +}; +} // namespace Muon + +#endif // MUONEVENTTPCNV_NSW_PADTRIGGERSEGMENT_P1_H \ No newline at end of file diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/selection.xml b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/selection.xml index f397d911e286..0a193c15770f 100755 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/selection.xml +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/selection.xml @@ -143,4 +143,10 @@ <class name="std::vector< std::pair<unsigned int, Muon::CscSimData_p2> >" /> <class name="Muon::CscSimDataCollection_p2" id="023993E1-BAAA-4F36-8CD4-8F03E3983E8D"/> + <class name="Muon::NSW_PadTriggerSegment_p1" /> + <class name="std::vector<Muon::NSW_PadTriggerSegment_p1>" /> + <class name="Muon::NSW_PadTriggerData_p1" /> + <class name="std::vector<Muon::NSW_PadTriggerData_p1>" /> + <class name="Muon::NSW_PadTriggerDataContainer_p1" id="2930850B-526A-4A6B-BDC6-C86D43B06C7C" /> + </lcgdict> diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/NSW_PadTriggerDataContainerCnv_p1.cxx b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/NSW_PadTriggerDataContainerCnv_p1.cxx new file mode 100644 index 000000000000..dbdabaf93476 --- /dev/null +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/NSW_PadTriggerDataContainerCnv_p1.cxx @@ -0,0 +1,54 @@ +#include "MuonEventTPCnv/MuonRDO/NSW_PadTriggerDataContainerCnv_p1.h" + +namespace Muon { +void NSW_PadTriggerDataContainerCnv_p1::persToTrans(const NSW_PadTriggerDataContainer_p1* persistentObj, NSW_PadTriggerDataContainer* transientObj, MsgStream &log) { + log << MSG::VERBOSE << "NSW_PadTriggerDataContainerCnv_p1::persToTrans() called" << std::endl; + for (const auto& pCollection : *persistentObj) { + std::array<std::vector<uint16_t>, 3> persistent_hitlists{ pCollection.m_precedingHitlist, pCollection.m_currentHitlist, pCollection.m_followingHitlist }; + // Can initialize here with std::move(persistent_hitlists) and modify the transient constructor accordingly + auto tCollection = std::make_unique<NSW_PadTriggerData>(pCollection.m_identifierHash, pCollection.m_sectorID, + pCollection.m_sectorSize, pCollection.m_endcap, pCollection.m_BCID, pCollection.m_L1ID, persistent_hitlists); + tCollection->reserve(pCollection.size()); + for (std::size_t i{}; i < pCollection.size(); i++) { + tCollection->push_back(m_segmentConverter.createTransient(&pCollection.at(i), log)); + } + + auto idHash = tCollection->identifierHash(); + if(transientObj->addCollection(tCollection.release(), idHash).isFailure()) { + throw std::runtime_error{ "Could not add collection to transient container!" }; + } + } +} + + +void NSW_PadTriggerDataContainerCnv_p1::transToPers(const NSW_PadTriggerDataContainer* transientObj, NSW_PadTriggerDataContainer_p1* persistentObj, MsgStream &log) { + log << MSG::VERBOSE << "NSW_PadTriggerDataContainerCnv_p1::transToPers() called" << std::endl; + + persistentObj->reserve(transientObj->size()); + // Iterate over collections + for (const auto& tCollection : *transientObj) { + NSW_PadTriggerData_p1 pCollection{}; + pCollection.reserve(tCollection->size()); + + pCollection.m_identifierHash = tCollection->identifierHash(); + pCollection.m_sectorID = tCollection->sectorID(); + pCollection.m_sectorSize = tCollection->sectorSize(); + pCollection.m_endcap = tCollection->endcap(); + pCollection.m_BCID = tCollection->BCID(); + pCollection.m_L1ID = tCollection->L1ID(); + + pCollection.m_precedingHitlist = tCollection->hitlists()[0]; + pCollection.m_currentHitlist = tCollection->hitlists()[1]; + pCollection.m_followingHitlist = tCollection->hitlists()[2]; + + // Convert each element in the transient collection to its persistent form + for (std::size_t i{}; i < tCollection->size(); i++) { + NSW_PadTriggerSegment_p1 pSegment{}; + m_segmentConverter.transToPers(tCollection->at(i), &pSegment, log); + pCollection.push_back(pSegment); + } + persistentObj->push_back(pCollection); + } +} + +} // namespace Muon diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/NSW_PadTriggerSegmentCnv_p1.cxx b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/NSW_PadTriggerSegmentCnv_p1.cxx new file mode 100644 index 000000000000..790f62ac43f1 --- /dev/null +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/NSW_PadTriggerSegmentCnv_p1.cxx @@ -0,0 +1,21 @@ +#include "MuonEventTPCnv/MuonRDO/NSW_PadTriggerSegmentCnv_p1.h" + + +namespace Muon { +void NSW_PadTriggerSegmentCnv_p1::persToTrans(const NSW_PadTriggerSegment_p1* persistentObj, NSW_PadTriggerSegment* transientObj, MsgStream &log) { + log << MSG::VERBOSE << "NSW_PadTriggerSegmentCnv_p1::persToTrans() called" << std::endl; + transientObj->m_phiID = persistentObj->m_phiID; + transientObj->m_bandID = persistentObj->m_bandID; + transientObj->m_activeLayers[0] = persistentObj->m_innerActiveLayers; + transientObj->m_activeLayers[1] = persistentObj->m_outerActiveLayers; +} + +void NSW_PadTriggerSegmentCnv_p1::transToPers(const NSW_PadTriggerSegment* transientObj, NSW_PadTriggerSegment_p1* persistentObj, MsgStream &log) { + log << MSG::VERBOSE << "NSW_PadTriggerSegmentCnv_p1::transToPers() called" << std::endl; + persistentObj->m_phiID = transientObj->m_phiID; + persistentObj->m_bandID = transientObj->m_bandID; + persistentObj->m_innerActiveLayers = transientObj->m_activeLayers[0]; + persistentObj->m_outerActiveLayers = transientObj->m_activeLayers[1]; +} + +} // namespace Muon diff --git a/MuonSpectrometer/MuonRDO/MuonRDO/NSW_PadTriggerData.h b/MuonSpectrometer/MuonRDO/MuonRDO/NSW_PadTriggerData.h new file mode 100644 index 000000000000..30ecd4c35723 --- /dev/null +++ b/MuonSpectrometer/MuonRDO/MuonRDO/NSW_PadTriggerData.h @@ -0,0 +1,44 @@ +#ifndef MUONRDO_NSW_PADTRIGGERDATA +#define MUONRDO_NSW_PADTRIGGERDATA + +#include "GaudiKernel/MsgStream.h" + +#include "AthContainers/DataVector.h" +#include "Identifier/IdentifierHash.h" + +#include "MuonRDO/NSW_PadTriggerSegment.h" + +#include <sstream> + +namespace Muon { +class NSW_PadTriggerData : public DataVector<NSW_PadTriggerSegment> { +using hitlist_t = std::vector<uint16_t>; +public: + NSW_PadTriggerData(IdentifierHash identifierHash, uint8_t sectorID, uint8_t sectorSize, uint8_t endcap, + uint32_t BCID, uint32_t L1ID, const std::array<hitlist_t, 3>& hitlists); + IdentifierHash identifierHash() const; + + std::string string() const; + + uint8_t sectorID() const noexcept; + uint8_t sectorSize() const noexcept; + uint8_t endcap() const noexcept; + uint32_t BCID() const noexcept; + uint32_t L1ID() const noexcept; + const std::array<hitlist_t, 3>& hitlists() const; + + friend std::ostream& operator<<(std::ostream& stream, const NSW_PadTriggerData& rhs); + friend MsgStream& operator<<(MsgStream& stream, const NSW_PadTriggerData& rhs); +private: + IdentifierHash m_identifierHash; + uint8_t m_sectorID; + uint8_t m_sectorSize; + uint8_t m_endcap; + uint32_t m_BCID; + uint32_t m_L1ID; + // List of pad hits, in a 3BC window around the L1A BC + std::array<hitlist_t, 3> m_hitlists; +}; +} // namespace Muon + +#endif // MUONRDO_NSW_PADTRIGGERDATA \ No newline at end of file diff --git a/MuonSpectrometer/MuonRDO/MuonRDO/NSW_PadTriggerDataContainer.h b/MuonSpectrometer/MuonRDO/MuonRDO/NSW_PadTriggerDataContainer.h new file mode 100644 index 000000000000..ac296b6f6a0e --- /dev/null +++ b/MuonSpectrometer/MuonRDO/MuonRDO/NSW_PadTriggerDataContainer.h @@ -0,0 +1,32 @@ +#ifndef MUONRDO_NSW_PADTRIGGERRAWDATACONTAINER +#define MUONRDO_NSW_PADTRIGGERRAWDATACONTAINER + +#include "GaudiKernel/MsgStream.h" + +#include "MuonRDO/NSW_PadTriggerData.h" + +#include "EventContainers/IdentifiableContainer.h" + +#include "AthenaKernel/CLASS_DEF.h" + +#include <sstream> + +namespace Muon { +class NSW_PadTriggerDataContainer : public IdentifiableContainer<NSW_PadTriggerData> { +public: + NSW_PadTriggerDataContainer(); + NSW_PadTriggerDataContainer(unsigned int hashMax); + + static const CLID& classID(); + const CLID& clID() const override; + + std::string string() const; + + friend std::ostream& operator<<(std::ostream& stream, const NSW_PadTriggerDataContainer& rhs); + friend MsgStream& operator<<(MsgStream& stream, const NSW_PadTriggerDataContainer& rhs); +}; +} // namespace Muon + +CLASS_DEF( Muon::NSW_PadTriggerDataContainer , 1176278125 , 1 ) + +#endif // MUONRDO_NSW_PADTRIGGERRAWDATACONTAINER \ No newline at end of file diff --git a/MuonSpectrometer/MuonRDO/MuonRDO/NSW_PadTriggerSegment.h b/MuonSpectrometer/MuonRDO/MuonRDO/NSW_PadTriggerSegment.h new file mode 100644 index 000000000000..647ca467ccc8 --- /dev/null +++ b/MuonSpectrometer/MuonRDO/MuonRDO/NSW_PadTriggerSegment.h @@ -0,0 +1,33 @@ +#ifndef MUONRDO_NSW_PADTRIGGERSEGMENT_H +#define MUONRDO_NSW_PADTRIGGERSEGMENT_H + +#include "GaudiKernel/MsgStream.h" + +#include <array> +#include <sstream> +#include <string> + +namespace Muon { +class NSW_PadTriggerSegment { +friend class NSW_PadTriggerSegmentCnv_p1; +public: + NSW_PadTriggerSegment() = default; + NSW_PadTriggerSegment(uint8_t bandID, uint8_t phiID, std::array<uint8_t, 2> activeLayers); + + uint8_t bandID() const noexcept; + uint8_t phiID() const noexcept; + std::array<uint8_t, 2> activeLayers() const noexcept; + + std::string string() const; + + friend MsgStream& operator<<(MsgStream& stream, const NSW_PadTriggerSegment& rhs); + friend std::ostream& operator<<(std::ostream& stream, const NSW_PadTriggerSegment& rhs); +private: + uint8_t m_bandID; + uint8_t m_phiID; + // aka "coincidences", active layer count in each wedge ([0] = inner, [1] = outer) + std::array<uint8_t, 2> m_activeLayers; +}; +} // namespace Muon + +#endif // MUONRDO_NSW_PADTRIGGERSEGMENT_H \ No newline at end of file diff --git a/MuonSpectrometer/MuonRDO/src/NSW_PadTriggerData.cxx b/MuonSpectrometer/MuonRDO/src/NSW_PadTriggerData.cxx new file mode 100644 index 000000000000..99fc260c411a --- /dev/null +++ b/MuonSpectrometer/MuonRDO/src/NSW_PadTriggerData.cxx @@ -0,0 +1,51 @@ +#include "MuonRDO/NSW_PadTriggerData.h" + +namespace Muon { +NSW_PadTriggerData::NSW_PadTriggerData(IdentifierHash identifierHash, uint8_t sectorID, uint8_t sectorSize, + uint8_t endcap, uint32_t BCID, uint32_t L1ID, const std::array<hitlist_t, 3>& hitlists) + : m_identifierHash(identifierHash), m_sectorID(sectorID), m_sectorSize(sectorSize), m_endcap(endcap), m_BCID(BCID), + m_L1ID(L1ID), m_hitlists(hitlists) { } + +IdentifierHash NSW_PadTriggerData::identifierHash() const { + return m_identifierHash; +} + +std::string NSW_PadTriggerData::string() const { + std::stringstream sstream{}; + sstream << "IdentifierHash: " << m_identifierHash << ", size: " << size(); + return sstream.str(); +} + +uint8_t NSW_PadTriggerData::sectorID() const noexcept { + return m_sectorID; +} + +uint8_t NSW_PadTriggerData::sectorSize() const noexcept { + return m_sectorSize; +} + +uint8_t NSW_PadTriggerData::endcap() const noexcept { + return m_endcap; +} + +uint32_t NSW_PadTriggerData::BCID() const noexcept { + return m_BCID; +} + +uint32_t NSW_PadTriggerData::L1ID() const noexcept { + return m_L1ID; +} + +const std::array<NSW_PadTriggerData::hitlist_t, 3>& NSW_PadTriggerData::hitlists() const { + return m_hitlists; +} + +std::ostream& operator<<(std::ostream& stream, const NSW_PadTriggerData& rhs) { + return stream << rhs.string(); +} + +MsgStream& operator<<(MsgStream& stream, const NSW_PadTriggerData& rhs) { + return stream << rhs.string(); +} + +} // namespace Muon \ No newline at end of file diff --git a/MuonSpectrometer/MuonRDO/src/NSW_PadTriggerDataContainer.cxx b/MuonSpectrometer/MuonRDO/src/NSW_PadTriggerDataContainer.cxx new file mode 100644 index 000000000000..76ac5d98437b --- /dev/null +++ b/MuonSpectrometer/MuonRDO/src/NSW_PadTriggerDataContainer.cxx @@ -0,0 +1,35 @@ +#include "MuonRDO/NSW_PadTriggerDataContainer.h" + +namespace Muon { + +NSW_PadTriggerDataContainer::NSW_PadTriggerDataContainer() + : IdentifiableContainer<NSW_PadTriggerData>(0) { } + +NSW_PadTriggerDataContainer::NSW_PadTriggerDataContainer(unsigned int hashMax) + : IdentifiableContainer<NSW_PadTriggerData>(hashMax) { } + +const CLID& NSW_PadTriggerDataContainer::classID() { + return ClassID_traits<NSW_PadTriggerDataContainer>::ID(); +} + +const CLID& NSW_PadTriggerDataContainer::clID() const { + return classID(); +} + +std::string NSW_PadTriggerDataContainer::string() const { + std::stringstream sstream{}; + sstream << "Number of collections: " << numberOfCollections() << ". Contains collections: \n" << std::endl; + for (const auto& collection : *this) { + sstream << collection->string() << std::endl; + } + return sstream.str(); +} + +std::ostream& operator<<(std::ostream& stream, const NSW_PadTriggerDataContainer& rhs) { + return stream << rhs.string(); +} + +MsgStream& operator<<(MsgStream& stream, const NSW_PadTriggerDataContainer& rhs) { + return stream << rhs.string(); +} +} // namespace Muon \ No newline at end of file diff --git a/MuonSpectrometer/MuonRDO/src/NSW_PadTriggerSegment.cxx b/MuonSpectrometer/MuonRDO/src/NSW_PadTriggerSegment.cxx new file mode 100644 index 000000000000..a3480b82830f --- /dev/null +++ b/MuonSpectrometer/MuonRDO/src/NSW_PadTriggerSegment.cxx @@ -0,0 +1,35 @@ +#include "MuonRDO/NSW_PadTriggerSegment.h" + +namespace Muon { +NSW_PadTriggerSegment::NSW_PadTriggerSegment(uint8_t bandID, uint8_t phiID, std::array<uint8_t, 2> activeLayers) + : m_bandID(bandID), m_phiID(phiID), m_activeLayers(activeLayers) { } + +uint8_t NSW_PadTriggerSegment::bandID() const noexcept { + return m_bandID; +} + +uint8_t NSW_PadTriggerSegment::phiID() const noexcept { + return m_phiID; +} + +std::array<uint8_t, 2> NSW_PadTriggerSegment::activeLayers() const noexcept { + return m_activeLayers; +} + +std::string NSW_PadTriggerSegment::string() const { + std::stringstream sstream{}; + sstream << "band ID: " << std::to_string(m_bandID) << ", phi ID: " << std::to_string(m_phiID) + << ", inner active layers: " << std::to_string(m_activeLayers[0]) << ", outer active layers: " + << std::to_string(m_activeLayers[1]); + return sstream.str(); +} + +MsgStream& operator<<(MsgStream& stream, const NSW_PadTriggerSegment& rhs) { + return stream << rhs.string(); +} + +std::ostream& operator<<(std::ostream& stream, const NSW_PadTriggerSegment& rhs) { + return stream << rhs.string(); +} + +} // namespace Muon \ No newline at end of file -- GitLab