diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/CMakeLists.txt b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/CMakeLists.txt index a7326de26b30738f05dd18ae2736b44aa7c223d6..1520ab8603c3c1279a747e946b60028788ca0019 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 0000000000000000000000000000000000000000..c018c37b2831b347a8032bb4dbccaa9f90646bcc --- /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 0000000000000000000000000000000000000000..029574df18d1e7735ff785a3e50f1607e8f2cfe2 --- /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 41c776165adf959a3b1076ead4e4b17d5be8ec71..16e44d37d9570e75c58709c098d9913c6557bedb 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 0000000000000000000000000000000000000000..3cdeb894cb773efc7563476ecfa5af8d1a06c151 --- /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 0000000000000000000000000000000000000000..7eceb61fd75684d0d674bb54e1092585e0d80666 --- /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 0000000000000000000000000000000000000000..b8ec17bb9946eb8c646e41ca7ae62aed15d90920 --- /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 0000000000000000000000000000000000000000..b144916cc921e2c718f52011b9ee5809d831309b --- /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 0000000000000000000000000000000000000000..680b15c5c91a645993c70f471d91e1f45ff01708 --- /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 f397d911e286baa235dc59a31b68b369453af2c2..0a193c15770fac10ec0786a9948c7ff3390d60bc 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 0000000000000000000000000000000000000000..dbdabaf93476a8ec96b80a2c9d3761ccd742029f --- /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 0000000000000000000000000000000000000000..790f62ac43f1f5344918f3f2e29f868d39a16bdc --- /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 0000000000000000000000000000000000000000..30ecd4c3572368128324c23a4694ee5d8c7d71cc --- /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 0000000000000000000000000000000000000000..ac296b6f6a0e07db6ea4703a8fa0c12ebeeff5ad --- /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 0000000000000000000000000000000000000000..647ca467ccc8442ff93c6258803cf1554b65e07c --- /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 0000000000000000000000000000000000000000..99fc260c411a8fcaa2770a79b8a1804a252a5e18 --- /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 0000000000000000000000000000000000000000..76ac5d98437bfc3b2e49f1b769e5ed74976578af --- /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 0000000000000000000000000000000000000000..a3480b82830f9307ce6e90b2507f7d40b8d9fea0 --- /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