11 #include "../../../dump.h"
12 #include "../../../dump.icc"
23 std::vector<eEmTobPtr>
28 const std::string&
name,
29 const IInterface*
parent) :
50 std::vector<std::vector<unsigned int>> (
s_NumCnt,
59 std::vector<std::vector<int>>(
s_NumCnt,
66 return StatusCode::SUCCESS;
86 for (
const auto&
p : *
fifo) {
95 auto collector = std::make_unique<DataCollector>();
96 collector->collect(
"eEmTobs in", eEmTobs);
101 auto selected_eEmTobs = std::vector<std::vector<eEmTobPtr>>();
104 collector->collect(
"selected eEmTobs containers", selected_eEmTobs);
109 auto selected_genericTobs =
110 std::vector<std::vector<GenTobPtr>>(selected_eEmTobs.size(),
111 std::vector<GenTobPtr>());
113 auto make_genericTob = [](
const auto& tob) {
114 return std::make_shared<GenericTob>(tob);
117 for (std::size_t
i = 0;
i != selected_eEmTobs.size(); ++
i){
120 std::back_inserter(selected_genericTobs[
i]),
124 collector->collect(
"Selected generic tob containers",
125 selected_genericTobs);
128 return l->Et() >
r->Et();
132 auto ports_out = std::make_unique<eEmSortSelectCountContainerPortsOut>();
137 auto& outputTobs = ports_out->m_O_eEmGenTob;
140 auto&
sel = selected_genericTobs[
i];
158 collector->collect(
"Sorted generic tob containers",
159 selected_genericTobs);
167 std::cbegin(eEmTobs)+numToCopy,
178 auto ntobs =
count_tobs(selected_genericTobs);
179 collector->collect(
"eEmSortSelectCount counts", ntobs);
183 std::vector<std::pair<std::size_t, unsigned>> bounded_counts;
184 bounded_counts.reserve(ntobs.size());
186 for(std::size_t
i = 0;
i != ntobs.size(); ++
i) {
187 bounded_counts.push_back({
193 std::vector<std::vector<short>> int_bit_vecs;
194 int_bit_vecs.reserve(bounded_counts.size());
198 std::cend(bounded_counts),
199 std::back_inserter(int_bit_vecs),
201 std::vector<short> bits(
p.second, 0);
205 if (ntob&1) {bits.at(
i) = 1;}
215 std::vector<short> int_bits;
216 for (
const auto&
v : int_bit_vecs) {
217 int_bits.insert(int_bits.end(), std::cbegin(
v), std::cend(
v));
223 int_bits.size() != (ports_out->m_O_Multiplicity)->
size()) {
226 <<
" obtained " << int_bits.size()
227 <<
" number bits in output ports "
228 << (ports_out->m_O_Multiplicity)->size());
229 return StatusCode::FAILURE;
233 auto& count_bits_out = ports_out->m_O_Multiplicity;
234 for (std::size_t
i = 0;
i != int_bits.size(); ++
i){
235 if (int_bits[
i] == 1) {
236 count_bits_out->set(
i);
238 count_bits_out->reset(
i);
244 std::stringstream
ss;
250 std::stringstream
ss;
261 CHECK(h_write.record(std::move(ports_out)));
262 return StatusCode::SUCCESS;
265 std::vector<eEmTobPtr>
268 auto eEmTobs = std::vector<eEmTobPtr>();
269 eEmTobs.reserve(
fifo.size());
273 std::back_inserter(eEmTobs),
275 return std::make_shared<eEmTob>(f);
284 std::vector<std::vector<eEmTobPtr>>& selectedTobs)
const {
295 (tob->Et_bits()).to_ulong() >= etMin and
296 (tob->REta_bits()).to_ulong() >= rEtaMin and
297 (tob->RHad_bits()).to_ulong() >= rHadMin and
298 (tob->WsTot_bits()).to_ulong() >= wsTotMin;
301 std::vector<eEmTobPtr> s_tobs;
302 s_tobs.reserve(eEmTobs.size());
305 std::back_inserter(s_tobs),
308 selectedTobs.push_back(s_tobs);
312 return StatusCode::SUCCESS;
315 std::vector<std::size_t>
319 auto counts = std::vector<std::size_t>(
s_NumCnt, 0);
322 const auto& gTobs = tobContainerVector[
s_CntSelN[
i]];
331 for(std::size_t j{0}; j != etMin_etaRegs.size(); ++j) {
332 if (tob->Et() > etMin_etaRegs[j] and
333 tob->Eta() > etaMin_etaRegs[j] and
334 tob->Eta() <= etaMax_etaRegs[j]) {return true;}
345 std::stringstream
ss;
346 ss <<
"eEmSortSelectCountContainerAlgTool.name: " <<
name() <<
'\n'