diff --git a/MuonSpectrometer/MuonCnv/MuonMDT_CnvTools/src/MdtROD_Decoder.cxx b/MuonSpectrometer/MuonCnv/MuonMDT_CnvTools/src/MdtROD_Decoder.cxx index 8ae3ae94313574a7638de27830c301af13d8bec1..ac1c809ee292ce78cef57f3a33025144b8671b65 100755 --- a/MuonSpectrometer/MuonCnv/MuonMDT_CnvTools/src/MdtROD_Decoder.cxx +++ b/MuonSpectrometer/MuonCnv/MuonMDT_CnvTools/src/MdtROD_Decoder.cxx @@ -18,8 +18,7 @@ static const InterfaceID IID_IMdtROD_Decoder MdtROD_Decoder::MdtROD_Decoder ( const std::string& type, const std::string& name,const IInterface* parent ) : AthAlgTool(type,name,parent), - m_hid2re(0), m_rodReadOut(0), m_csmReadOut(0), - m_amtReadOut(0), m_hptdcReadOut(0), m_BMEpresent(false), m_BMGpresent(false), m_BMEid(-1), m_BMGid(-1) + m_hid2re(0), m_BMEpresent(false), m_BMGpresent(false), m_BMEid(-1), m_BMGid(-1) { declareInterface< MdtROD_Decoder >( this ); @@ -37,12 +36,6 @@ StatusCode MdtROD_Decoder::initialize() { m_hid2re=new MDT_Hid2RESrcID(); ATH_CHECK(m_hid2re->set(&m_idHelperSvc->mdtIdHelper())); - // Initialize decoding classes - m_rodReadOut = new MdtRODReadOut(); - m_csmReadOut = new MdtCsmReadOut(); - m_amtReadOut = new MdtAmtReadOut(); - m_hptdcReadOut = new MdtHptdcReadOut(); - // check if the layout includes elevator chambers m_BMEpresent = m_idHelperSvc->mdtIdHelper().stationNameIndex("BME") != -1; if(m_BMEpresent){ @@ -62,11 +55,6 @@ StatusCode MdtROD_Decoder::initialize() { StatusCode MdtROD_Decoder::finalize() { - delete m_rodReadOut; - delete m_csmReadOut; - delete m_amtReadOut; - delete m_hptdcReadOut; - if (m_hid2re) delete m_hid2re; if(m_nCache>0 || m_nNotCache>0) { @@ -83,6 +71,11 @@ StatusCode MdtROD_Decoder::fillCollections(const OFFLINE_FRAGMENTS_NAMESPACE::RO { // m_debug = (m_log.level() <= MSG::DEBUG); // use to control if output debug info. + // decoding classes + MdtCsmReadOut csmReadOut; + MdtAmtReadOut amtReadOut; + MdtHptdcReadOut hptdcReadOut; + ATH_MSG_DEBUG("fillCollection: starting"); uint32_t wordPos = 0; @@ -151,11 +144,6 @@ StatusCode MdtROD_Decoder::fillCollections(const OFFLINE_FRAGMENTS_NAMESPACE::RO leading_amt_map leadingHitMap = leading_amt_map(); - // Decode the ROD Header - //m_rodReadOut->decodeHeader(p); - //uint16_t subdetId = m_rodReadOut->subdetId(); - //uint16_t mrodId = m_rodReadOut->mrodId(); - // Decode the SourceId from the ROD Header SourceIdentifier sid(robFrag.rod_source_id()); @@ -180,13 +168,13 @@ StatusCode MdtROD_Decoder::fillCollections(const OFFLINE_FRAGMENTS_NAMESPACE::RO } - m_csmReadOut->decodeWord(vint[wordPos]); + csmReadOut.decodeWord(vint[wordPos]); - if (m_csmReadOut->is_BOB()) + if (csmReadOut.is_BOB()) { ATH_MSG_DEBUG ("Found the beginning of buffer "); // Check that Lvl1d matches the one from the ROD header - ATH_MSG_DEBUG ("Level 1 Id : " << m_csmReadOut->lvl1Id()); + ATH_MSG_DEBUG ("Level 1 Id : " << csmReadOut.lvl1Id()); } else { @@ -195,39 +183,29 @@ StatusCode MdtROD_Decoder::fillCollections(const OFFLINE_FRAGMENTS_NAMESPACE::RO << MSG::dec << ", 0x" << mrodId << MSG::dec); } -///////////////////////// -// This part was needed only for the data with duplicated ROD-header -// -// if (m_csmReadOut->lvl1Id() != m_rodReadOut->lvl1Id()) { -//#ifndef NDEBUG -// m_log << MSG::ERROR << " LVL1 ID from ROD Header and BOB don't match " << endmsg; -//#endif -// } -///////////////////////// - - while (!m_csmReadOut->is_EOB()) { + while (!csmReadOut.is_EOB()) { - while ((!m_csmReadOut->is_BOL()) && (!m_csmReadOut->is_EOB())) { + while ((!csmReadOut.is_BOL()) && (!csmReadOut.is_EOB())) { wordPos += 1; if (wordPos >= size) { ATH_MSG_DEBUG("Error: data corrupted"); return StatusCode::FAILURE; } - m_csmReadOut->decodeWord(vint[wordPos]); + csmReadOut.decodeWord(vint[wordPos]); } - if (m_csmReadOut->is_BOL()) { + if (csmReadOut.is_BOL()) { ATH_MSG_DEBUG("Found the Beginnning of Link "); } - else if (m_csmReadOut->is_EOB()) { + else if (csmReadOut.is_EOB()) { ATH_MSG_DEBUG ("Error: collection not found "); return StatusCode::FAILURE; } //uint16_t subdetId = 0x61; - //uint16_t mrodId = m_csmReadOut->mrodId(); + //uint16_t mrodId = csmReadOut.mrodId(); - uint16_t csmId = m_csmReadOut->csmId(); + uint16_t csmId = csmReadOut.csmId(); // Get the offline identifier from the MDT cabling service // TDC and Tube identifier are dummy, only the chamber map is needed here @@ -335,8 +313,8 @@ StatusCode MdtROD_Decoder::fillCollections(const OFFLINE_FRAGMENTS_NAMESPACE::RO ATH_MSG_DEBUG("Error: data corrupted"); return StatusCode::FAILURE; } - m_csmReadOut->decodeWord(vint[wordPos]); - if (!m_csmReadOut->is_TLP()) { + csmReadOut.decodeWord(vint[wordPos]); + if (!csmReadOut.is_TLP()) { ATH_MSG_DEBUG("Error: TDC Link Present not found "); } @@ -346,13 +324,13 @@ StatusCode MdtROD_Decoder::fillCollections(const OFFLINE_FRAGMENTS_NAMESPACE::RO ATH_MSG_DEBUG("Error: data corrupted"); return StatusCode::FAILURE; } - StationName == m_BMGid ? m_hptdcReadOut->decodeWord(vint[wordPos]) - : m_amtReadOut->decodeWord(vint[wordPos]); - m_csmReadOut->decodeWord(vint[wordPos]); - while (!m_csmReadOut->is_TWC()) { + StationName == m_BMGid ? hptdcReadOut.decodeWord(vint[wordPos]) + : amtReadOut.decodeWord(vint[wordPos]); + csmReadOut.decodeWord(vint[wordPos]); + while (!csmReadOut.is_TWC()) { - uint16_t tdcNum = StationName == m_BMGid ? m_hptdcReadOut->tdcId() - : m_amtReadOut->tdcId(); + uint16_t tdcNum = StationName == m_BMGid ? hptdcReadOut.tdcId() + : amtReadOut.tdcId(); ATH_MSG_DEBUG(" Decoding data from TDC number : " << tdcNum); @@ -363,19 +341,19 @@ StatusCode MdtROD_Decoder::fillCollections(const OFFLINE_FRAGMENTS_NAMESPACE::RO return StatusCode::FAILURE; } - StationName == m_BMGid ? m_hptdcReadOut->decodeWord(vint[wordPos]) - : m_amtReadOut->decodeWord(vint[wordPos]); + StationName == m_BMGid ? hptdcReadOut.decodeWord(vint[wordPos]) + : amtReadOut.decodeWord(vint[wordPos]); MdtAmtHit* amtHit; // Loop on the TDC data words and create the corresponding // RDO's - while (!( (StationName == m_BMGid ? m_hptdcReadOut->is_EOT() : m_amtReadOut->is_EOT()) - || (StationName == m_BMGid ? m_hptdcReadOut->is_BOT() : m_amtReadOut->is_BOT()) - || (StationName == m_BMGid ? m_csmReadOut->is_TWC() : m_amtReadOut->is_TWC()) + while (!( (StationName == m_BMGid ? hptdcReadOut.is_EOT() : amtReadOut.is_EOT()) + || (StationName == m_BMGid ? hptdcReadOut.is_BOT() : amtReadOut.is_BOT()) + || (StationName == m_BMGid ? csmReadOut.is_TWC() : amtReadOut.is_TWC()) ) ) { - StationName == m_BMGid ? m_hptdcReadOut->decodeWord(vint[wordPos]) - : m_amtReadOut->decodeWord(vint[wordPos]); + StationName == m_BMGid ? hptdcReadOut.decodeWord(vint[wordPos]) + : amtReadOut.decodeWord(vint[wordPos]); int tdcCounts; uint16_t chanNum; // decode the tdc channel number @@ -383,16 +361,16 @@ StatusCode MdtROD_Decoder::fillCollections(const OFFLINE_FRAGMENTS_NAMESPACE::RO // Check whether this channel has already been // created for this CSM - if ( (StationName == m_BMGid ? m_hptdcReadOut->is_TSM() : m_amtReadOut->is_TSM()) - && (StationName == m_BMGid ? m_hptdcReadOut->isLeading() : m_amtReadOut->isLeading()) + if ( (StationName == m_BMGid ? hptdcReadOut.is_TSM() : amtReadOut.is_TSM()) + && (StationName == m_BMGid ? hptdcReadOut.isLeading() : amtReadOut.isLeading()) && collection ) { - chanNum = StationName == m_BMGid ? m_hptdcReadOut->channel() - : m_amtReadOut->channel(); + chanNum = StationName == m_BMGid ? hptdcReadOut.channel() + : amtReadOut.channel(); amtHit = new MdtAmtHit(tdcNum, chanNum); - amtHit->setValues((StationName == m_BMGid ? m_hptdcReadOut->coarse() : m_amtReadOut->coarse()), - (StationName == m_BMGid ? m_hptdcReadOut->fine() : m_amtReadOut->fine()), + amtHit->setValues((StationName == m_BMGid ? hptdcReadOut.coarse() : amtReadOut.coarse()), + (StationName == m_BMGid ? hptdcReadOut.fine() : amtReadOut.fine()), 0); amtHit->addData(vint[wordPos]); std::pair <leading_amt_map::iterator,bool> ins = @@ -406,12 +384,12 @@ StatusCode MdtROD_Decoder::fillCollections(const OFFLINE_FRAGMENTS_NAMESPACE::RO } //leadingHitMap[chanNum] = amtHit; } - else if ( (StationName == m_BMGid ? m_hptdcReadOut->is_TSM() : m_amtReadOut->is_TSM()) - && !(StationName == m_BMGid ? m_hptdcReadOut->isLeading() : m_amtReadOut->isLeading()) + else if ( (StationName == m_BMGid ? hptdcReadOut.is_TSM() : amtReadOut.is_TSM()) + && !(StationName == m_BMGid ? hptdcReadOut.isLeading() : amtReadOut.isLeading()) && collection ) { - chanNum = StationName == m_BMGid ? m_hptdcReadOut->channel() - : m_amtReadOut->channel(); + chanNum = StationName == m_BMGid ? hptdcReadOut.channel() + : amtReadOut.channel(); leading_amt_map::iterator chanPosition = leadingHitMap.find(chanNum); if (chanPosition != leadingHitMap.end() ) { @@ -422,8 +400,8 @@ StatusCode MdtROD_Decoder::fillCollections(const OFFLINE_FRAGMENTS_NAMESPACE::RO int tdcCountsFirst = coarse*32+fine; // get the tdc counts of the current data word - tdcCounts = StationName == m_BMGid ? m_hptdcReadOut->coarse()*32+m_hptdcReadOut->fine() - : m_amtReadOut->coarse()*32+m_amtReadOut->fine(); + tdcCounts = StationName == m_BMGid ? hptdcReadOut.coarse()*32+hptdcReadOut.fine() + : amtReadOut.coarse()*32+amtReadOut.fine(); int width = tdcCounts-tdcCountsFirst; amtHit->setValues(coarse,fine,width); @@ -439,15 +417,15 @@ StatusCode MdtROD_Decoder::fillCollections(const OFFLINE_FRAGMENTS_NAMESPACE::RO } } - else if ((StationName == m_BMGid ? m_hptdcReadOut->is_TCM() : m_amtReadOut->is_TCM()) + else if ((StationName == m_BMGid ? hptdcReadOut.is_TCM() : amtReadOut.is_TCM()) && collection ) { - uint16_t chanNum = StationName == m_BMGid ? m_hptdcReadOut->channel() - : m_amtReadOut->channel(); + uint16_t chanNum = StationName == m_BMGid ? hptdcReadOut.channel() + : amtReadOut.channel(); amtHit = new MdtAmtHit(tdcNum, chanNum); - amtHit->setValues((StationName == m_BMGid ? m_hptdcReadOut->coarse() : m_amtReadOut->coarse()), - (StationName == m_BMGid ? m_hptdcReadOut->fine() : m_amtReadOut->fine()), - (StationName == m_BMGid ? m_hptdcReadOut->width() : m_amtReadOut->width())); + amtHit->setValues((StationName == m_BMGid ? hptdcReadOut.coarse() : amtReadOut.coarse()), + (StationName == m_BMGid ? hptdcReadOut.fine() : amtReadOut.fine()), + (StationName == m_BMGid ? hptdcReadOut.width() : amtReadOut.width())); amtHit->addData(vint[wordPos]); collection->push_back(amtHit); } @@ -459,10 +437,10 @@ StatusCode MdtROD_Decoder::fillCollections(const OFFLINE_FRAGMENTS_NAMESPACE::RO return StatusCode::FAILURE; } - StationName == m_BMGid ? m_hptdcReadOut->decodeWord(vint[wordPos]) - : m_amtReadOut->decodeWord(vint[wordPos]); + StationName == m_BMGid ? hptdcReadOut.decodeWord(vint[wordPos]) + : amtReadOut.decodeWord(vint[wordPos]); - if ( StationName == m_BMGid ) m_csmReadOut->decodeWord(vint[wordPos]); + if ( StationName == m_BMGid ) csmReadOut.decodeWord(vint[wordPos]); } // End of loop on AMTs @@ -479,16 +457,16 @@ StatusCode MdtROD_Decoder::fillCollections(const OFFLINE_FRAGMENTS_NAMESPACE::RO // increase the decoding position only if it's end of TDC // i.e. not operating in TDC trailer suppression mode - if ( (StationName == m_BMGid ? m_hptdcReadOut->is_EOT() : m_amtReadOut->is_EOT()) ) { + if ( (StationName == m_BMGid ? hptdcReadOut.is_EOT() : amtReadOut.is_EOT()) ) { wordPos += 1; if (wordPos >= size) { ATH_MSG_ERROR("Error: data corrupted"); return StatusCode::FAILURE; } } - m_csmReadOut->decodeWord(vint[wordPos]); - StationName == m_BMGid ? m_hptdcReadOut->decodeWord(vint[wordPos]) - : m_amtReadOut->decodeWord(vint[wordPos]); + csmReadOut.decodeWord(vint[wordPos]); + StationName == m_BMGid ? hptdcReadOut.decodeWord(vint[wordPos]) + : amtReadOut.decodeWord(vint[wordPos]); } // End of loop on TDCs if(collection) ATH_CHECK(lock.addOrDelete(std::move(collection))); // Collection has been found, go out @@ -499,7 +477,7 @@ StatusCode MdtROD_Decoder::fillCollections(const OFFLINE_FRAGMENTS_NAMESPACE::RO ATH_MSG_ERROR("Data corrupted"); return StatusCode::FAILURE; } - m_csmReadOut->decodeWord(vint[wordPos]); + csmReadOut.decodeWord(vint[wordPos]); } diff --git a/MuonSpectrometer/MuonCnv/MuonMDT_CnvTools/src/MdtROD_Decoder.h b/MuonSpectrometer/MuonCnv/MuonMDT_CnvTools/src/MdtROD_Decoder.h index 319b71c7e7a9623aac9aeef70eedb0cebeac8c16..a3ebcf1e3364d35a12b3a176ce62022fac6b5a30 100755 --- a/MuonSpectrometer/MuonCnv/MuonMDT_CnvTools/src/MdtROD_Decoder.h +++ b/MuonSpectrometer/MuonCnv/MuonMDT_CnvTools/src/MdtROD_Decoder.h @@ -70,12 +70,6 @@ private: /** TMP special ROB number for sector13 runs*/ int m_specialROBNumber; - - // Methods for the decoding - MdtRODReadOut * m_rodReadOut; - MdtCsmReadOut * m_csmReadOut; - MdtAmtReadOut * m_amtReadOut; - MdtHptdcReadOut * m_hptdcReadOut; bool m_BMEpresent; bool m_BMGpresent;