94 {
95 auto nItems = Monitored::Scalar( "Items", 0 );
96 auto nChains = Monitored::Scalar( "Chains", 0 );
97
98 std::vector<uint32_t> ctpBits;
100
101
105 return StatusCode::FAILURE;
106 };
107
108
109 ctpBits =
m_useTBPBit ? ctpRes->getTBPWords() : ctpRes->getTAVWords();
110
111 }
112 else {
113
114
116 ctpBits.reserve(
rois.size());
117
118
119 std::transform(
rois.begin(),
rois.end(), std::back_inserter(ctpBits), [](
const ROIB::CTPRoI& roi){ return roi.roIWord(); });
120
121 }
122 const size_t bitsSize = ctpBits.size();
123 constexpr static size_t wordSize{32};
124
125 for ( size_t wordCounter = 0; wordCounter < bitsSize; ++wordCounter ) {
126 for ( size_t bitCounter = 0; bitCounter < wordSize; ++bitCounter ) {
127 const size_t ctpIndex = wordSize*wordCounter + bitCounter;
128 const bool decision = ( ctpBits[wordCounter] & ((
uint32_t)1 << bitCounter) ) > 0;
129
131 if ( decision ) {
132 nItems = nItems + 1;
133 ATH_MSG_DEBUG(
"L1 item " << ctpIndex <<
" active, enabling chains "
134 << (
m_forceEnable ?
" due to the forceEnable flag" :
" due to the seed"));
135 }
136
139 enabledChains.insert( enabledChains.end(), itr->second.begin(), itr->second.end() );
140 }
141 }
142 }
143 }
144
147 enabledChains.insert( enabledChains.end(), itr->second.begin(), itr->second.end());
148 }
149
150 nChains = enabledChains.size();
151 for ( auto chain: enabledChains ) {
153 }
154 if ( nItems == 0 ) {
155 ATH_MSG_ERROR(
"All CTP bits were disabled, this event should not have shown here" );
156 return StatusCode::FAILURE;
157 }
158 Monitored::Group(
m_monTool, nItems, nChains );
159 return StatusCode::SUCCESS;
160}
const std::vector< CTPRoI > TBP() const
get trigger result before prescale
const std::vector< CTPRoI > TAV() const
get trigger result after veto
const CTPResult & cTPResult() const
Gets the CTP part of the L1 RDO.
virtual bool isValid() override final
Can the handle be successfully dereferenced?