diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/CMakeLists.txt b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/CMakeLists.txt index acf8af9189a124a49ced957162735f27a4d1ceb7..fbc740d78b832a58429bdade5187ef1c807178d2 100644 --- a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/CMakeLists.txt +++ b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/CMakeLists.txt @@ -40,8 +40,8 @@ find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) # Component(s) in the package: atlas_add_poolcnv_library( MuonEventAthenaPoolPoolCnv src/*.cxx - FILES MuonSimData/MuonSimDataCollection.h MuonSimData/CscSimDataCollection.h MuonRDO/MdtCsmContainer.h MuonRDO/RpcPadContainer.h MuonRDO/TgcRdoContainer.h MuonRDO/CscRawDataContainer.h MuonRDO/RpcSectorLogicContainer.h MuonRDO/STGC_RawDataContainer.h MuonRDO/MM_RawDataContainer.h MuonDigitContainer/MdtDigitContainer.h MuonDigitContainer/RpcDigitContainer.h MuonDigitContainer/TgcDigitContainer.h MuonDigitContainer/CscDigitContainer.h MuonDigitContainer/MmDigitContainer.h MuonDigitContainer/sTgcDigitContainer.h CscCalibEvent/CscCalibDataContainer.h MuonPrepRawData/CscPrepDataContainer.h MuonPrepRawData/CscStripPrepDataContainer.h MuonPrepRawData/RpcPrepDataContainer.h MuonPrepRawData/TgcPrepDataContainer.h MuonPrepRawData/MdtPrepDataContainer.h MuonPrepRawData/MMPrepDataContainer.h MuonPrepRawData/sTgcPrepDataContainer.h MuonTrigCoinData/TgcCoinDataContainer.h MuonTrigCoinData/RpcCoinDataContainer.h MuonChamberT0s/ChamberT0s.h src/MuonMeasurements.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 + FILES MuonSimData/MuonSimDataCollection.h MuonSimData/CscSimDataCollection.h MuonRDO/MdtCsmContainer.h MuonRDO/RpcPadContainer.h MuonRDO/TgcRdoContainer.h MuonRDO/CscRawDataContainer.h MuonRDO/RpcSectorLogicContainer.h MuonRDO/STGC_RawDataContainer.h MuonRDO/MM_RawDataContainer.h MuonRDO/NSW_PadTriggerDataContainer.h MuonDigitContainer/MdtDigitContainer.h MuonDigitContainer/RpcDigitContainer.h MuonDigitContainer/TgcDigitContainer.h MuonDigitContainer/CscDigitContainer.h MuonDigitContainer/MmDigitContainer.h MuonDigitContainer/sTgcDigitContainer.h CscCalibEvent/CscCalibDataContainer.h MuonPrepRawData/CscPrepDataContainer.h MuonPrepRawData/CscStripPrepDataContainer.h MuonPrepRawData/RpcPrepDataContainer.h MuonPrepRawData/TgcPrepDataContainer.h MuonPrepRawData/MdtPrepDataContainer.h MuonPrepRawData/MMPrepDataContainer.h MuonPrepRawData/sTgcPrepDataContainer.h MuonTrigCoinData/TgcCoinDataContainer.h MuonTrigCoinData/RpcCoinDataContainer.h MuonChamberT0s/ChamberT0s.h src/MuonMeasurements.h + TYPES_WITH_NAMESPACE Muon::STGC_RawDataContainer Muon::MM_RawDataContainer Muon::NSW_PadTriggerDataContainer Muon::CscPrepDataContainer Muon::CscStripPrepRawDataContainer Muon::RpcPrepDataContainer Muon::TgcPrepDataContainer Muon::MdtPrepDataContainer Muon::MMPrepDataContainer Muon::sTgcPrepDataContainer Muon::TgcCoinDataContainer Muon::ChamberT0s TPCnv::MuonMeasurements INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} AthenaPoolUtilities AtlasSealCLHEP MuonRDO MuonRIO_OnTrack MuonSegment DataModel SGTools StoreGateLib SGtests AthenaPoolCnvSvcLib Identifier GaudiKernel RPCcablingInterfaceLib CscCalibEvent MuonEventTPCnv MuonReadoutGeometry MuonDigitContainer MuonIdHelpersLib MuonChamberT0s MuonPrepRawData MuonTrigCoinData MuonSimData ) 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 pContainer + { poolReadObject() }; + 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; + +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 97935fc5f830a9426fa81a905350df256382ef79..2c802425bdb019b4a4e293d1094ac97082210770 100755 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonEventTPCnvDict.h +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonEventTPCnvDict.h @@ -39,6 +39,7 @@ #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 { @@ -84,6 +85,11 @@ struct MuonEventTPCnvDict Muon::MM_RawDataContainer_p1 m_v30; Muon::MM_RawDataCollection_p1 m_v31; std::vector< Muon::MM_RawData_p1 > m_v32; + Muon::NSW_PadTriggerSegment_p1 m_v33; + Muon::NSW_PadTriggerData_p1 m_v34; + Muon::NSW_PadTriggerDataContainer_p1 m_v35; + std::vector m_v36; + std::vector 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 + +namespace Muon { +class NSW_PadTriggerDataContainerCnv_p1 : public T_AthenaPoolTPCnvBase { +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 + +namespace Muon { +struct NSW_PadTriggerDataContainer_p1 : public std::vector + { }; +} // 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 + +namespace Muon { +struct NSW_PadTriggerData_p1 : public std::vector { + 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 m_precedingHitlist; + std::vector m_currentHitlist; + std::vector 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 + +class MsgStream; + +namespace Muon { +class NSW_PadTriggerSegmentCnv_p1 : public T_AthenaPoolTPCnvBase { +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 + +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 af69268d331b02c296178a5c455090183c334a71..3a340f1bc6956d0f48eabd0dcb8582f9833d21b1 100755 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/selection.xml +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/selection.xml @@ -143,4 +143,10 @@ + + + + + + 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, 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(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..c4f457010d981dbd659c84be7520c22d31c44041 --- /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 "DataModel/DataVector.h" +#include "Identifier/IdentifierHash.h" + +#include "MuonRDO/NSW_PadTriggerSegment.h" + +#include + +namespace Muon { +class NSW_PadTriggerData : public DataVector { +using hitlist_t = std::vector; +public: + NSW_PadTriggerData(IdentifierHash identifierHash, uint8_t sectorID, uint8_t sectorSize, uint8_t endcap, + uint32_t BCID, uint32_t L1ID, const std::array& 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& 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 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..b1fb67381a7951dcc90dc0b8137ebf0f07eb6f8d --- /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 "SGTools/CLASS_DEF.h" + +#include + +namespace Muon { +class NSW_PadTriggerDataContainer : public IdentifiableContainer { +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 +#include +#include + +namespace Muon { +class NSW_PadTriggerSegment { +friend class NSW_PadTriggerSegmentCnv_p1; +public: + NSW_PadTriggerSegment() = default; + NSW_PadTriggerSegment(uint8_t bandID, uint8_t phiID, std::array activeLayers); + + uint8_t bandID() const noexcept; + uint8_t phiID() const noexcept; + std::array 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 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& 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::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(0) { } + +NSW_PadTriggerDataContainer::NSW_PadTriggerDataContainer(unsigned int hashMax) + : IdentifiableContainer(hashMax) { } + +const CLID& NSW_PadTriggerDataContainer::classID() { + return ClassID_traits::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 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 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