15 const std::vector<std::size_t>& condMult,
20 m_valid = !siblings.empty() or satisfiedBy.size() != condMult.size();
21 if (
m_valid) {
init(siblings, satisfiedBy, condMult);}
26 const std::vector<std::size_t>& condMult) {
35 std::vector<std::vector<std::size_t>> condIndices;
36 condIndices.reserve(siblings.size());
37 std::vector<std::size_t> repeats;
38 condIndices.reserve(siblings.size());
40 for(
const auto& isib : siblings){
41 auto mult = condMult[isib];
42 repeats.push_back(mult);
43 condIndices.push_back(satisfiedBy.at(isib));
46 const auto& sibjets = satisfiedBy.at(isib);
48 *std::max_element(sibjets.begin(),
56 auto streamer =
make_jetstream(std::move(condIndices), std::move(repeats), 0);
73 if (!
m_valid) {
return std::vector<std::size_t>();}
75 unsigned int ipass{0};
76 std::vector<std::size_t> jg_indices;
82 collector->
collect(
"JetGroupProduct::next()",
83 "loop start pass " + std::to_string(ipass++));
89 if (jet_indices.empty()) {
91 collector->
collect(
"JetGroupProduct::next()",
96 for (
const auto& ind : jet_indices) {
104 if (blocked){
continue;}
107 for(std::size_t i = 0; i !=
m_jetEnd; ++i) {
109 jg_indices.push_back(i);
115 if (elem_indices.empty()) {
continue;}
std::map< int, std::vector< std::size_t > > CondInd2JetGroupsInds
std::map< int, std::vector< std::size_t > > JetGroupInd2ElemInds
std::unique_ptr< ITrigJetHypoInfoCollector > Collector
virtual void collect(const std::string &, const std::string &)=0
std::vector< bool > m_jetMask
std::unique_ptr< JetStreamer > m_jetstreamer
JetGroupProduct(const std::vector< std::size_t > &siblings, const CondInd2JetGroupsInds &satisfiedBy, const std::vector< std::size_t > &condMult, const JetGroupInd2ElemInds &)
JetGroupInd2ElemInds m_jg2elemjgs
virtual std::vector< std::size_t > next(const Collector &) override
void init(const std::vector< std::size_t > &siblings, const CondInd2JetGroupsInds &satisfiedBy, const std::vector< std::size_t > &condMult)
std::vector< std::vector< std::size_t > > m_seenIndices
virtual bool valid() const override
std::vector< std::size_t > elementalJetGroups(const std::vector< std::size_t > &non_elemental, const JetGroupInd2ElemInds &jg2elemjg)
std::unique_ptr< IJetStream > make_jetstream(std::vector< std::vector< std::size_t > > indices, std::vector< std::size_t > repeats, std::size_t sid)