From e31d6ea27c737e1aeb8f17bf38655fc0629819dc Mon Sep 17 00:00:00 2001 From: Alexandru Bercuci <abercuci@niham.nipne.ro> Date: Fri, 19 Aug 2022 13:10:12 +0300 Subject: [PATCH] replace "push_back" call with "emplace_back" for increased performance --- .../trd/unpack/CbmTrdUnpackFaspAlgo.cxx | 37 +++++++++---------- .../trd/unpack/CbmTrdUnpackFaspAlgo.h | 33 +++++++++-------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.cxx b/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.cxx index 2186db2829..56afd94e85 100644 --- a/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.cxx +++ b/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.cxx @@ -32,12 +32,19 @@ #define VERBOSE 0 using namespace std; +CbmTrdUnpackFaspAlgo::CbmTrdFaspMessage::CbmTrdFaspMessage(uint8_t c, uint8_t typ, uint8_t t, uint16_t d, uint8_t rob, + uint8_t asic) + : ch(c) + , type(typ) + , tlab(t) + , data(d) + , crob(rob) + , fasp(asic) +{ +} CbmTrdUnpackFaspAlgo::CbmTrdUnpackFaspAlgo() : CbmRecoUnpackAlgo("CbmTrdUnpackFaspAlgo") - , fTime(0) - , fModuleId() - , fAsicPar() { } @@ -170,7 +177,7 @@ CbmTrdUnpackFaspAlgo::CbmTrdFaspMessageType CbmTrdUnpackFaspAlgo::mess_type(uint } //_________________________________________________________________________________ -void CbmTrdUnpackFaspAlgo::mess_readDW(uint32_t w, CbmTrdFaspContent* mess) +void CbmTrdUnpackFaspAlgo::mess_readDW(uint32_t w, CbmTrdFaspMessage* mess) { uint32_t wd(w), shift(0); mess->ch = wd & 0xf; @@ -188,7 +195,7 @@ void CbmTrdUnpackFaspAlgo::mess_readDW(uint32_t w, CbmTrdFaspContent* mess) } //_________________________________________________________________________________ -void CbmTrdUnpackFaspAlgo::mess_readEW(uint32_t w, CbmTrdFaspContent* mess) +void CbmTrdUnpackFaspAlgo::mess_readEW(uint32_t w, CbmTrdFaspMessage* mess) { uint32_t wd(w), shift(0); mess->ch = wd & 0xf; @@ -203,7 +210,7 @@ void CbmTrdUnpackFaspAlgo::mess_readEW(uint32_t w, CbmTrdFaspContent* mess) } //_________________________________________________________________________________ -void CbmTrdUnpackFaspAlgo::mess_prt(CbmTrdFaspContent* mess) +void CbmTrdUnpackFaspAlgo::mess_prt(CbmTrdFaspMessage* mess) { if (mess->type == kData) cout << boost::format(" DATA : fasp_id=%02d ch_id=%02d tclk=%03d data=%4d\n") @@ -215,7 +222,7 @@ void CbmTrdUnpackFaspAlgo::mess_prt(CbmTrdFaspContent* mess) } //_________________________________________________________________________________ -bool CbmTrdUnpackFaspAlgo::pushDigis(std::vector<CbmTrdUnpackFaspAlgo::CbmTrdFaspContent> messes) +bool CbmTrdUnpackFaspAlgo::pushDigis(std::vector<CbmTrdUnpackFaspAlgo::CbmTrdFaspMessage> messes) { UChar_t lFasp(0xff); UShort_t lchR, lchT; @@ -282,9 +289,8 @@ bool CbmTrdUnpackFaspAlgo::pushDigis(std::vector<CbmTrdUnpackFaspAlgo::CbmTrdFas // build digi for message when update failed if (!use) { - CbmTrdDigi digi(pad, lchT, lchR, lTime); - digi.SetAddressModule(fMod); - fDigiBuffer[fCrob][pad].push_back(digi); + fDigiBuffer[fCrob][pad].emplace_back(pad, lchT, lchR, lTime); + fDigiBuffer[fCrob][pad].back().SetAddressModule(fMod); id = fDigiBuffer[fCrob][pad].rbegin(); } @@ -426,8 +432,7 @@ bool CbmTrdUnpackFaspAlgo::unpack(const fles::Timeslice* ts, std::uint16_t icomp UChar_t lFaspOld(0xff); - vector<CbmTrdFaspContent> vMess; - CbmTrdFaspContent mess; + vector<CbmTrdFaspMessage> vMess; for (uint64_t j = 0; j < nwords; j++, wd++) { // // Select the appropriate conversion type of the word according to the message type // switch(mess_type(*wd)){ @@ -484,13 +489,7 @@ bool CbmTrdUnpackFaspAlgo::unpack(const fles::Timeslice* ts, std::uint16_t icomp LOG(debug) << GetName() << "::unpack - Self-triggered data."; data &= 0x1fff; } - mess.ch = ch_id; - mess.type = kData; - mess.tlab = slice; - mess.data = data >> 1; - mess.fasp = lFaspOld; - mess.crob = crob_id; - vMess.push_back(mess); + vMess.emplace_back(ch_id, kData, slice, data >> 1, crob_id, lFaspOld); } //prt_wd(*wd); } diff --git a/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.h b/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.h index 65a91e04e8..41adc040e0 100644 --- a/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.h +++ b/reco/detectors/trd/unpack/CbmTrdUnpackFaspAlgo.h @@ -60,7 +60,7 @@ public: * a - word type (0) * c - channel id */ - enum CbmTrdFaspMessage + enum CbmTrdFaspMessageLength { kMessCh = 4, kMessType = 1, @@ -89,15 +89,16 @@ public: /** @brief Data structure for unpacking the FASP word */ - struct CbmTrdFaspContent { - uint8_t ch; ///< ch id in the FASP - uint8_t type; ///< message type 0 = epoch, 1 = data (not used for the moment) - uint8_t tlab; ///< time of the digi inside the epoch - uint16_t data; ///< ADC value - uint32_t epoch; ///< epoch id (not used for the moment) - uint32_t mod; ///< full module address according to CbmTrdAddress - uint8_t crob; ///< CROB id in the module - uint8_t fasp; ///< FASP id in the module + struct CbmTrdFaspMessage { + CbmTrdFaspMessage(uint8_t c, uint8_t typ, uint8_t t, uint16_t d, uint8_t rob, uint8_t asic); + uint8_t ch = 0; ///< ch id in the FASP + uint8_t type = 0; ///< message type 0 = epoch, 1 = data (not used for the moment) + uint8_t tlab = 0; ///< time of the digi inside the epoch + uint16_t data = 0; ///< ADC value + uint32_t epoch = 0; ///< epoch id (not used for the moment) + uint32_t mod = 0; ///< full module address according to CbmTrdAddress + uint8_t crob = 0; ///< CROB id in the module + uint8_t fasp = 0; ///< FASP id in the module }; /** @@ -128,18 +129,18 @@ protected: /** @brief Get message type from the FASP word */ CbmTrdFaspMessageType mess_type(uint32_t wd); /** @brief Convert the FASP word into a DATA message */ - void mess_readDW(uint32_t wd, CbmTrdFaspContent* mess); + void mess_readDW(uint32_t wd, CbmTrdFaspMessage* mess); /** @brief Convert the FASP word into a EPOCH message */ - void mess_readEW(uint32_t wd, CbmTrdFaspContent* mess); + void mess_readEW(uint32_t wd, CbmTrdFaspMessage* mess); /** @brief Print FASP message */ - void mess_prt(CbmTrdFaspContent* mess); - bool pushDigis(std::vector<CbmTrdUnpackFaspAlgo::CbmTrdFaspContent> messages); + void mess_prt(CbmTrdFaspMessage* mess); + bool pushDigis(std::vector<CbmTrdUnpackFaspAlgo::CbmTrdFaspMessage> messages); /** @brief Time offset for digi wrt the TS start, expressed in 80 MHz clks. It contains: * - relative offset of the MS wrt the TS * - FASP epoch offset for current CROB * - TRD2D system offset wrt to experiment time (e.g. T0) */ - ULong64_t fTime; + ULong64_t fTime = 0; /** @brief Finish function for this algorithm base clase */ void finish() @@ -209,7 +210,7 @@ private: std::shared_ptr<CbmTrdUnpackFaspMonitor> fMonitor = nullptr; uint16_t fCrob = 0xffff; //! current crob being processed uint16_t fMod = 0xffff; //! current module being processed - std::vector<uint16_t> fModuleId; ///> list of modules for which there is are calibration parameters + std::vector<uint16_t> fModuleId = {}; ///> list of modules for which there is are calibration parameters CbmTrdParSetAsic fAsicPar; CbmTrdParSetDigi* fDigiSet = nullptr; -- GitLab