diff --git a/Trigger/TrigAlgorithms/TrigMuSuperEF/python/TrigMuSuperEFConfig.py b/Trigger/TrigAlgorithms/TrigMuSuperEF/python/TrigMuSuperEFConfig.py index 1fad0d2474dae16be1732a4619edff3654b6194a..da41bee45c997d31d500cc909a7bb1a25e29aacf 100644 --- a/Trigger/TrigAlgorithms/TrigMuSuperEF/python/TrigMuSuperEFConfig.py +++ b/Trigger/TrigAlgorithms/TrigMuSuperEF/python/TrigMuSuperEFConfig.py @@ -70,12 +70,12 @@ class TrigMuSuperEFConfig(TrigMuSuperEF): from AthenaCommon.CfgGetter import getPublicTool,getPublicToolClone self.StauCreatorTool = getPublicToolClone("TMEF_StauCreatorTool","TMEF_MuonCreatorTool",BuildStauContainer=True) # only add TrigMuGirl monitoring if it is run - if doTrigMuGirl: - self.MuGirlTool = getPublicTool("TMEF_MuonInsideOutRecoTool") - #from TrigMuGirl.TrigMuGirlMonitoring import TrigMuGirlToolMonitoring - #montool = TrigMuGirlToolMonitoring() - #print montool - #monTools.append( montool ) + # if doTrigMuGirl: + kwargs.setdefault("MuGirlTool", getPublicTool("TMEF_MuonInsideOutRecoTool")) + #from TrigMuGirl.TrigMuGirlMonitoring import TrigMuGirlToolMonitoring + #montool = TrigMuGirlToolMonitoring() + #print montool + #monTools.append( montool ) # turn off PrepRawData decoders in MuGirl if doTrigMuGirl: @@ -124,8 +124,7 @@ def TrigMuSuperEF_MGonly(name="TrigMuSuperEF_MGonly",**kwargs): kwargs.setdefault("doOutsideIn", False) kwargs.setdefault("UseL2Info",False) kwargs.setdefault("DoCache", False) - #kwargs.setdefault("MuGirlTool", getPublicTool("TMEF_MuonStauRecoTool")) - kwargs.setdefault("MuGirlTool", "TMEF_MuonStauRecoTool") + kwargs.setdefault("MuGirlTool", getPublicTool("TMEF_MuonStauRecoTool")) return TrigMuSuperEFConfig(name,**kwargs) diff --git a/Trigger/TrigAlgorithms/TrigMuSuperEF/src/TrigMuSuperEF.cxx b/Trigger/TrigAlgorithms/TrigMuSuperEF/src/TrigMuSuperEF.cxx index 3ce3e3c9274ec931b9d627c1e321c6711ef2f69c..085a08c9815e036a9d00f814618f70f01e9a6347 100644 --- a/Trigger/TrigAlgorithms/TrigMuSuperEF/src/TrigMuSuperEF.cxx +++ b/Trigger/TrigAlgorithms/TrigMuSuperEF/src/TrigMuSuperEF.cxx @@ -100,7 +100,7 @@ TrigMuSuperEF::TrigMuSuperEF(const std::string& name, ISvcLocator* pSvcLocator) m_debug(false), m_verbose(false), m_muonCombinedTool("MuonCombined::MuonCombinedTool/MuonCombinedTool"), - m_muGirlTool("MuonCombined::MuGirlTagTool/MuGirlTagTool"), + m_muGirlTool("TMEF_MuonInsideOutRecoTool"), m_caloTagTool("TrigMuSuperEF_MuonCaloTagTool"), m_muonSegmentTagTool("MuonCombined::MuonCombinedTool/MuonSegmentTagTool"), m_TrackToTrackParticleConvTool("TrackToTrackParticleConvTool",this), diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py b/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py index b32d4188fcd65e945acb58c1b9bb88a6c014c306..b6cdbc3cb5e2a02cb91cc81c017ebe5465b783a4 100755 --- a/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py +++ b/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py @@ -417,11 +417,10 @@ def TMEF_MuonInsideOutRecoTool(name="TMEF_MuonInsideOutRecoTool",**kwargs): ### Stau late trigger configs def TMEF_MuonStauRecoTool( name='TMEF_MuonStauRecoTool', **kwargs ): - kwargs.setdefault('DoSummary', True) - kwargs.setdefault('OutputLevel', 'VERBOSE') + # kwargs.setdefault('DoSummary', True) + kwargs.setdefault('DoSummary', muonCombinedRecFlags.printSummary() ) kwargs.setdefault('ConsideredPDGs', [13,-13,1000015,-1000015]) kwargs.setdefault('DoTruth', rec.doTruth() ) - kwargs.setdefault('DoSummary', muonCombinedRecFlags.printSummary() ) kwargs.setdefault('MuonSegmentMaker', CfgGetter.getPublicTool('DCMathStauSegmentMaker') ) kwargs.setdefault('MuonInsideOutRecoTool', CfgGetter.getPublicTool('TMEF_MuonStauInsideOutRecoTool') ) return CfgMgr.MuonCombined__MuonStauRecoTool(name,**kwargs ) diff --git a/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.cxx b/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.cxx index 741690789c12cf62d8d5f830ef1ceb2e80bdaa3b..44ce39833cee23eab8bd047751d8a28db03b33b7 100644 --- a/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.cxx +++ b/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.cxx @@ -24,12 +24,14 @@ TrigMuonRoITool::TrigMuonRoITool(const std::string& type, m_time_stamp(0), m_time_stamp_ns_offset(0), m_lumi_block(0), - m_robDataProviderSvc( "ROBDataProviderSvc", name ) + m_robDataProviderSvc( "ROBDataProviderSvc", name ), + m_decodeMuCTPiFromROB(false) { declareInterface <ITrigMuonRoITool> ( this ); // Declare the properties declareProperty("DaqMuCTPiROBid",m_daqMuCTPiROBid=0x760000); + declareProperty("DecodeMuCTPiFromROB",m_decodeMuCTPiFromROB=false); } @@ -94,189 +96,180 @@ std::vector< std::pair<ROIB::MuCTPIRoI,int> >::const_iterator TrigMuonRoITool::e /// helper to decode MuCTPi information void TrigMuonRoITool::decodeMuCTPi() { - //std::cout<<"Calling TrigMuonRoITool::decodeMuCTPi"<<std::endl; - - // save input stream flags - //std::ios_base::fmtflags log_flags_save = (msg().stream()).flags(); - //char log_fill_char_save = (msg().stream()).fill(); + // save input stream flags + std::ios_base::fmtflags log_flags_save = (msg().stream()).flags(); + char log_fill_char_save = (msg().stream()).fill(); + ///////////////////////////////////// // check if data are still valid + ///////////////////////////////////// + // retrieve the event info information and check its validity - // get EventInfo - // const EventInfo* p_EventInfo(0); - // // StatusCode sc = m_storeGateSvc->retrieve(p_EventInfo); - // StatusCode sc = evtStore()->retrieve(p_EventInfo); - - // if ((sc.isFailure()) || (p_EventInfo == 0)) { - // msg(MSG::WARNING) << "Can't get EventInfo object for checking data validity." << endreq; - // m_inTime_muCTPIRoIs.clear(); - // m_outOfTime_muCTPIRoIs.clear(); - // return; - // } else { - // // check event parameters for validity. The check for run/event number is not sufficient since - // // in L2 the event number = L1 ID, which may be identical to a previous one after an ECR. - // // Only if all parameters match the present info is still valid - // if ( (m_run_no == p_EventInfo->event_ID()->run_number()) && - // (m_event_number == p_EventInfo->event_ID()->event_number()) && - // (m_bunch_crossing_id == p_EventInfo->event_ID()->bunch_crossing_id()) && - // (m_time_stamp == p_EventInfo->event_ID()->time_stamp()) && - // (m_time_stamp_ns_offset == p_EventInfo->event_ID()->time_stamp_ns_offset()) && - // (m_lumi_block == p_EventInfo->event_ID()->lumi_block()) ) { - // // information is still valid - // if (msgLvl(MSG::DEBUG)) { - // msg(MSG::DEBUG) << " decodeMuCTPi: Stored information is still valid. Complete EventID = " - // << *(p_EventInfo->event_ID()) << endreq; - // } - // return ; - // } else { - // // information is outdated - // if (msgLvl(MSG::DEBUG)) { - // msg(MSG::DEBUG) << " decodeMuCTPi: Stored information needs to be updated. Complete EventID = " - // << *(p_EventInfo->event_ID()) << endreq; - // } - // } - // } - - // - // --- Update information from DAQ ROB - // + const EventInfo* p_EventInfo(0); + StatusCode sc = evtStore()->retrieve(p_EventInfo); + if ((sc.isFailure()) || (p_EventInfo == 0)) { + msg(MSG::WARNING) << "Can't get EventInfo object for checking data validity." << endreq; + m_inTime_muCTPIRoIs.clear(); + m_outOfTime_muCTPIRoIs.clear(); + return; + } else { + // check event parameters for validity. The check for run/event number is not sufficient since + // in L2 the event number = L1 ID, which may be identical to a previous one after an ECR. + // Only if all parameters match the present info is still valid + if ( (m_run_no == p_EventInfo->event_ID()->run_number()) && + (m_event_number == p_EventInfo->event_ID()->event_number()) && + (m_bunch_crossing_id == p_EventInfo->event_ID()->bunch_crossing_id()) && + (m_time_stamp == p_EventInfo->event_ID()->time_stamp()) && + (m_time_stamp_ns_offset == p_EventInfo->event_ID()->time_stamp_ns_offset()) && + (m_lumi_block == p_EventInfo->event_ID()->lumi_block()) ) { + // information is still valid + if (msgLvl(MSG::DEBUG)) { + msg(MSG::DEBUG) << " decodeMuCTPi: Stored information is still valid. Complete EventID = " + << *(p_EventInfo->event_ID()) << endreq; + } + return; // no need to decode again MUCTPI, already done for current event + } else { + // information is outdated + if (msgLvl(MSG::DEBUG)) { + msg(MSG::DEBUG) << " decodeMuCTPi: Stored information needs to be updated. Complete EventID = " + << *(p_EventInfo->event_ID()) << endreq; + } + } + } + + ///////////////////////////////////// + // decode MUCTPI + ///////////////////////////////////// + // reset the containers and fill them with new data m_inTime_muCTPIRoIs.clear(); m_outOfTime_muCTPIRoIs.clear(); + // save event parameters + m_run_no = p_EventInfo->event_ID()->run_number(); + m_event_number = p_EventInfo->event_ID()->event_number(); + m_bunch_crossing_id = p_EventInfo->event_ID()->bunch_crossing_id(); + m_time_stamp = p_EventInfo->event_ID()->time_stamp(); + m_time_stamp_ns_offset = p_EventInfo->event_ID()->time_stamp_ns_offset(); + m_lumi_block = p_EventInfo->event_ID()->lumi_block(); - /* - - // in L2 the DAQ muCTPi ROB needs to be retreived first from the ROS - m_robDataProviderSvc->addROBData(m_muCTPiRobIds); - - // get the muCTPi ROB fragment - std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*> muCTPiRobFragmentVec; - - std::cout<<"m_muCTPiRobIds.size() = "<<m_muCTPiRobIds.size()<<std::endl; - - muCTPiRobFragmentVec.reserve(m_muCTPiRobIds.size()); - - m_robDataProviderSvc->getROBData(m_muCTPiRobIds,muCTPiRobFragmentVec); - + // MuCTPi pointer + const MuCTPI_RDO* daqmuCTPIResult = 0; - - if (muCTPiRobFragmentVec.size()==0) { - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " decodeMuCTPi: No muCTPi ROB found." << endreq; - return; - } - - // check for received ROB id and return if it doesn't match the DAQ MuCTPI ROB - if (msgLvl(MSG::DEBUG)) { - msg(MSG::DEBUG) + // Build muCTPi from DAQ ROB + /////////////////////////////// + if(m_decodeMuCTPiFromROB) { + + // in L2 the DAQ muCTPi ROB needs to be retreived first from the ROS + m_robDataProviderSvc->addROBData(m_muCTPiRobIds); + + // get the muCTPi ROB fragment + std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*> muCTPiRobFragmentVec; + muCTPiRobFragmentVec.reserve(m_muCTPiRobIds.size()); + m_robDataProviderSvc->getROBData(m_muCTPiRobIds,muCTPiRobFragmentVec); + + if (muCTPiRobFragmentVec.size()==0) { + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " decodeMuCTPi: No muCTPi ROB found." << endmsg; + return; + } + + // check for received ROB id and return if it doesn't match the DAQ MuCTPI ROB + if (msgLvl(MSG::DEBUG)) { + msg(MSG::DEBUG) << " decodeMuCTPi: ROB id = 0x" << std::setw(6) << MSG::hex << muCTPiRobFragmentVec[0]->source_id() << MSG::dec << endreq; - } - - if (muCTPiRobFragmentVec[0]->source_id() != (uint32_t)m_daqMuCTPiROBid.value()) { - if (msgLvl(MSG::DEBUG)) { - msg(MSG::DEBUG) + } + + if (muCTPiRobFragmentVec[0]->source_id() != (uint32_t)m_daqMuCTPiROBid.value()) { + if (msgLvl(MSG::DEBUG)) { + msg(MSG::DEBUG) << " decodeMuCTPi: received ROB id = 0x" << std::setw(6) << MSG::hex << muCTPiRobFragmentVec[0]->source_id() << MSG::dec << " does not match requested ROB id = 0x" << std::setw(6) << MSG::hex << m_daqMuCTPiROBid.value() << MSG::dec << endreq; + } + // reset msg() stream flags to original values + msg().flags(log_flags_save); + return; } - // reset msg() stream flags to original values - msg().flags(log_flags_save); - return; - } - - // - // --- Save event parameters - // - m_run_no = p_EventInfo->event_ID()->run_number(); - m_event_number = p_EventInfo->event_ID()->event_number(); - m_bunch_crossing_id = p_EventInfo->event_ID()->bunch_crossing_id(); - m_time_stamp = p_EventInfo->event_ID()->time_stamp(); - m_time_stamp_ns_offset = p_EventInfo->event_ID()->time_stamp_ns_offset(); - m_lumi_block = p_EventInfo->event_ID()->lumi_block(); - - // decode now the ROB - uint32_t formatVersion = muCTPiRobFragmentVec[0]->rod_version(); - uint32_t evtNum = muCTPiRobFragmentVec[0]->rod_lvl1_id(); - uint32_t robFragSize = muCTPiRobFragmentVec[0]->fragment_size_word(); - uint32_t rodFragSize = muCTPiRobFragmentVec[0]->rod_fragment_size_word(); - uint32_t robId = muCTPiRobFragmentVec[0]->source_id(); - uint32_t rodId = muCTPiRobFragmentVec[0]->rod_source_id(); - const uint32_t bcId = muCTPiRobFragmentVec[0]->rod_bc_id(); - - const uint32_t* status; - muCTPiRobFragmentVec[0]->rod_status( status ); - // nstatus, errorStat not used, cause compilation warning - //uint32_t nstatus = muCTPiRobFragmentVec[0]->rod_nstatus(); - //uint32_t errorStat( 0 ); - //if( nstatus > 0 ) errorStat = static_cast< uint32_t >( *status ); - // - - if (msgLvl(MSG::DEBUG)) { - msg(MSG::DEBUG) << "ROB ID 0x" << MSG::hex << robId << " ROD ID 0x" - << rodId << MSG::dec << " ROB fragment size " - << robFragSize << " ROD fragment size " << rodFragSize - << endreq; - msg(MSG::DEBUG) + + // decode now the ROB + uint32_t formatVersion = muCTPiRobFragmentVec[0]->rod_version(); + uint32_t evtNum = muCTPiRobFragmentVec[0]->rod_lvl1_id(); + uint32_t robFragSize = muCTPiRobFragmentVec[0]->fragment_size_word(); + uint32_t rodFragSize = muCTPiRobFragmentVec[0]->rod_fragment_size_word(); + uint32_t robId = muCTPiRobFragmentVec[0]->source_id(); + uint32_t rodId = muCTPiRobFragmentVec[0]->rod_source_id(); + const uint32_t bcId = muCTPiRobFragmentVec[0]->rod_bc_id(); + + const uint32_t* status; + muCTPiRobFragmentVec[0]->rod_status( status ); + // nstatus, errorStat not used, cause compilation warning + //uint32_t nstatus = muCTPiRobFragmentVec[0]->rod_nstatus(); + //uint32_t errorStat( 0 ); + //if( nstatus > 0 ) errorStat = static_cast< uint32_t >( *status ); + // + + if (msgLvl(MSG::DEBUG)) { + msg(MSG::DEBUG) << "ROB ID 0x" << MSG::hex << robId << " ROD ID 0x" + << rodId << MSG::dec << " ROB fragment size " + << robFragSize << " ROD fragment size " << rodFragSize + << endreq; + msg(MSG::DEBUG) << " ROD Header L1 ID " << evtNum << " ROD Header BCID " << bcId << " ROD Header Format version " << formatVersion - << endreq; - } - - OFFLINE_FRAGMENTS_NAMESPACE::PointerType it_data; - muCTPiRobFragmentVec[0]->rod_data( it_data ); - const uint32_t ndata = muCTPiRobFragmentVec[0]->rod_ndata(); - if (msgLvl(MSG::DEBUG)) { - msg(MSG::DEBUG) << " Dumping RoI Words:" << endreq; - msg(MSG::DEBUG) << " number of data words: " << ndata << endreq; - } - - // candidate multiplicity - std::vector< uint32_t > candidateMultiplicity; - // data words - std::vector< uint32_t > dataWord; - for( uint32_t i = 0; i < ndata; ++i, ++it_data ) { - if( *it_data >> MuCTPI_RDO::MULT_WORD_FLAG_SHIFT ) { - candidateMultiplicity.push_back( static_cast< uint32_t >( *it_data ) ); - if (msgLvl(MSG::DEBUG)) { - msg(MSG::DEBUG) << " 0x" << MSG::hex << std::setw( 8 ) << std::setfill( '0' ) - << ( *it_data ) << " (candidate multiplicity)" << std::setfill( log_fill_char_save ) << endreq; - } - } else { - dataWord.push_back( static_cast< uint32_t >( *it_data ) ); - if (msgLvl(MSG::DEBUG)) { - msg(MSG::DEBUG) << " 0x" << MSG::hex << std::setw( 8 ) << std::setfill( '0' ) - << ( *it_data ) << " (candidate word)" - << " (--> RoI word = 0x" << MSG::hex << std::setw( 8 ) << std::setfill( '0' ) - << mirodToRoIBDataWord( *it_data ) << ")" - << std::setfill( log_fill_char_save ) << endreq; + << endreq; + } + + OFFLINE_FRAGMENTS_NAMESPACE::PointerType it_data; + muCTPiRobFragmentVec[0]->rod_data( it_data ); + const uint32_t ndata = muCTPiRobFragmentVec[0]->rod_ndata(); + if (msgLvl(MSG::DEBUG)) { + msg(MSG::DEBUG) << " Dumping RoI Words:" << endreq; + msg(MSG::DEBUG) << " number of data words: " << ndata << endreq; + } + + // candidate multiplicity + std::vector< uint32_t > candidateMultiplicity; + // data words + std::vector< uint32_t > dataWord; + for( uint32_t i = 0; i < ndata; ++i, ++it_data ) { + if( *it_data >> MuCTPI_RDO::MULT_WORD_FLAG_SHIFT ) { + candidateMultiplicity.push_back( static_cast< uint32_t >( *it_data ) ); + if (msgLvl(MSG::DEBUG)) { + msg(MSG::DEBUG) << " 0x" << MSG::hex << std::setw( 8 ) << std::setfill( '0' ) + << ( *it_data ) << " (candidate multiplicity)" << std::setfill( log_fill_char_save ) << endreq; + } + } else { + dataWord.push_back( static_cast< uint32_t >( *it_data ) ); + if (msgLvl(MSG::DEBUG)) { + msg(MSG::DEBUG) << " 0x" << MSG::hex << std::setw( 8 ) << std::setfill( '0' ) + << ( *it_data ) << " (candidate word)" + << " (--> RoI word = 0x" << MSG::hex << std::setw( 8 ) << std::setfill( '0' ) + << mirodToRoIBDataWord( *it_data ) << ")" + << std::setfill( log_fill_char_save ) << endreq; + } } } + + // create MuCTPi RDO (DAQ muCTPi Result) + daqmuCTPIResult = new MuCTPI_RDO( candidateMultiplicity, dataWord ); } - - // create MuCTPI RDO - MuCTPI_RDO daqmuCTPIResult( candidateMultiplicity, dataWord ); // DAQ muCTPi Result - */ - - - //std::cout<<"TrigMuonRoITool::decodeMuCTPi retreive MUCTPI_RDO from evtstore"<<std::endl; - // Retrieve the MuCTPI RDO - const MuCTPI_RDO* daqmuCTPIResult = 0; - StatusCode sc = evtStore()->retrieve(daqmuCTPIResult,"MUCTPI_RDO"); - if ((sc.isFailure()) || (daqmuCTPIResult == 0)) { - msg(MSG::WARNING) << "Can't get MUCTPI_RDO object from event store." << endreq; - m_inTime_muCTPIRoIs.clear(); - m_outOfTime_muCTPIRoIs.clear(); - return; + // Retrieve the MuCTPi RDO from event store + ////////////////////////////////////////////// + else{ + sc = evtStore()->retrieve(daqmuCTPIResult,"MUCTPI_RDO"); + if ((sc.isFailure()) || (daqmuCTPIResult == 0)) { + msg(MSG::WARNING) << "Can't get MUCTPI_RDO object from event store." << endreq; + m_inTime_muCTPIRoIs.clear(); + m_outOfTime_muCTPIRoIs.clear(); + return; + } } - - //std::cout<<"TrigMuonRoITool::decodeMuCTPi retreived MUCTPI_RDO from evtstore !!!!"<<std::endl; - // print contents if (msgLvl(MSG::DEBUG)) { @@ -293,14 +286,12 @@ void TrigMuonRoITool::decodeMuCTPi() { uint16_t roiEventBCID = MuCTPI_MultiplicityWord_Decoder(daqmuCTPIResult->candidateMultiplicity()).getBCID(); uint16_t roiEventNCan = MuCTPI_MultiplicityWord_Decoder(daqmuCTPIResult->candidateMultiplicity()).getNCandidates(); - // std::cout<<"TrigMuonRoITool::decodeMuCTPi roiEventBCID "<<roiEventBCID<<std::endl; - // std::cout<<"TrigMuonRoITool::decodeMuCTPi roiEventNCan "<<roiEventNCan<<std::endl; - m_inTime_muCTPIRoIs.reserve( roiEventNCan ); m_outOfTime_muCTPIRoIs.reserve( roiEventNCan ); for(std::vector< uint32_t >::const_iterator it = daqmuCTPIResult->dataWord().begin(); it != daqmuCTPIResult->dataWord().end(); ++it) { + // decode the RDO data word MuCTPI_DataWord_Decoder daqRoI(*it); @@ -309,17 +300,13 @@ void TrigMuonRoITool::decodeMuCTPi() { if (roiEventBCID == daqRoI.getBCID()) { // RoI matches event BCID m_inTime_muCTPIRoIs.push_back(roI); - - //////////////////////////////// - ///// TEST TO BE REMOVED!!!!! - //m_outOfTime_muCTPIRoIs.push_back( std::pair<ROIB::MuCTPIRoI,int>(roI,(int(daqRoI.getBCID())-int(roiEventBCID))) ); - //////////////////////////////// - + // The line below is meant to enable testing late particles trigger chains with in-time RoIs + /////m_outOfTime_muCTPIRoIs.push_back( std::pair<ROIB::MuCTPIRoI,int>(roI,(int(daqRoI.getBCID())-int(roiEventBCID))) ); } else { m_outOfTime_muCTPIRoIs.push_back( std::pair<ROIB::MuCTPIRoI,int>(roI,(int(daqRoI.getBCID())-int(roiEventBCID))) ); } } // end loop over data words - + // print contents of RoI arrays if (msgLvl(MSG::DEBUG)) { msg(MSG::DEBUG) << "=================================================" << endreq; @@ -339,8 +326,11 @@ void TrigMuonRoITool::decodeMuCTPi() { } } - // reset msg() stream flags to original values - //msg().flags(log_flags_save); + //reset msg() stream flags to original values + msg().flags(log_flags_save); + + if(m_decodeMuCTPiFromROB) + delete daqmuCTPIResult; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * diff --git a/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.h b/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.h index 97e30e2be7fcbb89086cc7670dc8dcb1e84718fc..ba8cfde88ce8cc0c60a4420f8d27d344429f31ce 100644 --- a/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.h +++ b/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.h @@ -77,6 +77,9 @@ class TrigMuonRoITool: public AthAlgTool, /// Helper to print contents of a muCTPi RoIB data word void dumpRoIBDataWord(uint32_t data_word ); + + /// Configurable to decide how to decode muCTPi + bool m_decodeMuCTPiFromROB; }; #endif // TRIGMUONROITOOL_H