8 return StatusCode::SUCCESS;
13 if (passingLegs.size() == 0) {
14 return StatusCode::SUCCESS;
17 std::vector<std::vector<Combo::LegDecision>> legDecisions;
26 std::unordered_set<TrigCompositeUtils::DecisionID> dispj_leg_ids;
28 ATH_MSG_DEBUG(
"Have "<<passingLegs.size()<<
" passing legs in");
31 if(!passingLegs.contains(legId))
continue;
33 auto decs = passingLegs[legId];
34 if(decs.size() == 0)
continue;
38 dispj_leg_ids.insert(legId);
42 ATH_MSG_DEBUG(
"Have "<<dispj_leg_ids.size()<<
" dispjet legs");
44 std::vector<const xAOD::Jet*> input_jets;
45 std::map<const xAOD::Jet*, std::vector<Combo::LegDecision>> jet_decisions;
48 for(
const auto& leg_decs : legDecisions){
49 for(
auto dec_pair : leg_decs){
54 if(dispj_leg_ids.count(dec_pair.first) == 0)
continue;
57 std::vector<TrigCompositeUtils::LinkInfo<xAOD::JetContainer>> jet_feature_links = TrigCompositeUtils::findLinks<xAOD::JetContainer>(decision,
TrigCompositeUtils::featureString(), TrigDefs::lastFeatureOfType);
58 if(jet_feature_links.size() == 0)
continue;
65 jet_decisions[
jet].push_back(dec_pair);
74 for(
auto pair: jet_decisions){
75 input_jets.push_back(pair.first);
78 if(input_jets.size() == 0){
83 return StatusCode::SUCCESS;
90 ATH_MSG_DEBUG(
"Reject event as it has "<<input_jets.size()<<
" input passing jets but max jet cut is "<<
m_maxjets);
92 return StatusCode::SUCCESS;
97 std::sort(input_jets.begin(), input_jets.end(), [](
const xAOD::Jet*
a,
const xAOD::Jet*
b) ->
bool
99 return a->pt() > b->pt();
106 unsigned int n_jets_passed = 0;
108 for(
size_t i = 0;
i<input_jets.size();
i++){
113 for(
auto leg_dec_pair: jet_decisions.at(input_jets.at(
i))){
114 accepted_decisions_by_leg[leg_dec_pair.first].push_back(leg_dec_pair.second);
115 ATH_MSG_DEBUG(
"Accepting decision for jet "<<input_jets.at(
i)->pt()/1000.0);
120 if(n_jets_passed < input_jets.size()){
124 for (
auto& legIt : passingLegs) {
125 if(dispj_leg_ids.count(legIt.first) == 0)
continue;
127 auto accepted_decisions_on_leg = accepted_decisions_by_leg.find(legIt.first);
129 if(accepted_decisions_on_leg != accepted_decisions_by_leg.end()){
131 legIt.second = accepted_decisions_on_leg->second;
132 ATH_MSG_DEBUG(
"Updating leg "<<legIt.first<<
" with "<<accepted_decisions_on_leg->second.size()<<
" decisions");
136 ATH_MSG_DEBUG(
"Updating leg "<<legIt.first<<
"; clearing decisions");
137 legIt.second.clear();
144 for(
size_t i=0;
i<lm.size();
i++){
147 if(passingLegs[legId].
size() < (
size_t)(lm.at(
i))){
150 ATH_MSG_DEBUG(
"Leg "<<legId<<
" fails mulitplicity check, rejecting event");
152 return StatusCode::SUCCESS;
156 return StatusCode::SUCCESS;