|  | ATLAS Offline Software
    | 
 
 
 
TrigComboHypoTool is a ComboHypoTool that calculates topological quantities between two particles and apply cuts on it (upper and lower cut) accepting the event if the required condition is satisfied.  
 More...
#include <TrigComboHypoTool.h>
|  | 
| StatusCode | decide (Combo::LegDecisionsMap &passingLegs, const EventContext &) const final | 
|  | Override the ComboHypoToolBase::decide in order to optimise combination generation This is to avoid excessive combinatorics for complex multileg chains.  More... 
 | 
|  | 
| bool | executeAlgStep (const Combination &combination, const VarInfo &, std::vector< float > &values) const | 
|  | Implementation of selection on individual variables.  More... 
 | 
|  | 
| float | compute (const std::pair< KineInfo, KineInfo > &kinepair, ComboHypoVars var) const | 
|  | Computation of the variables from the specified kinematics.  More... 
 | 
|  | 
| bool | fillLegDecisions_sameLeg (std::pair< Combo::LegDecision, Combo::LegDecision > &legpair, const Combination &combination, uint32_t leg) const | 
|  | Helpers to extract kinematics from the specified legs of the chain Specialised for two cases – exactly two objects from the same leg or exactly one object each from two legs.  More... 
 | 
|  | 
| bool | fillLegDecisions_diffLeg (std::pair< Combo::LegDecision, Combo::LegDecision > &legpair, const Combination &combination, uint32_t legA, uint32_t legB) const | 
|  | 
| bool | fillPairKinematics (std::pair< KineInfo, KineInfo > &kinepair, const Combination &combination, const VarInfo &varInfo) const | 
|  | 
| bool | fillKineInfo (KineInfo &kinematics, Combo::LegDecision decision, bool isMET) const | 
|  | 
|  | 
| Gaudi::Property< std::vector< std::string > > | m_varTag_vec {this, "Variables" , {""}, "Variables to cut on"} | 
|  | Gaudi configuration hooks.  More... 
 | 
|  | 
| Gaudi::Property< std::vector< bool > > | m_useMin_vec {this, "UseMinVec" , {false}, "Array with the apply_min_cut setting"} | 
|  | 
| Gaudi::Property< std::vector< bool > > | m_useMax_vec {this, "UseMaxVec" , {false}, "Array with the apply_max_cut setting"} | 
|  | 
| Gaudi::Property< std::vector< uint32_t > > | m_legA_vec {this, "LegAVec" , {0}, "Array with the first Leg ID"} | 
|  | 
| Gaudi::Property< std::vector< uint32_t > > | m_legB_vec {this, "LegBVec" , {0}, "Array with the second Leg ID"} | 
|  | 
| Gaudi::Property< std::vector< bool > > | m_isLegA_MET_vec {this, "IsLegA_METVec", {false}, "Array with the first Leg MET identifier"} | 
|  | 
| Gaudi::Property< std::vector< bool > > | m_isLegB_MET_vec {this, "IsLegB_METVec", {false}, "Array with the second Leg MET identifier"} | 
|  | 
| Gaudi::Property< bool > | m_skipLegCheck {this, "SkipLegCheck" , {false}, "Ignore leg IDs for chains with only one leg"} | 
|  | 
| Gaudi::Property< std::vector< float > > | m_varMin_vec {this, "LowerCutVec", {FLOATDEFAULT}, "Array with the lower cut for legs pair"} | 
|  | 
| Gaudi::Property< std::vector< float > > | m_varMax_vec {this, "UpperCutVec", {FLOATDEFAULT}, "Array with the upper cut for legs pair"} | 
|  | 
| ToolHandleArray< GenericMonitoringTool > | m_monTool_vec {this, "MonTools", {}, "Monitoring tools" } | 
|  | 
| std::vector< VarInfo > | m_varInfo_vec | 
|  | Internal variables for more efficient config lookup.  More... 
 | 
|  | 
| HLT::Identifier | m_decisionId | 
|  | The DecisionID of the chain, obtained from the Tool's name.  More... 
 | 
|  | 
| std::vector< HLT::Identifier > | m_legDecisionIds | 
|  | The DecisionIDs of the individual legs, derived from both m_decisionId and m_legMultiplicities.  More... 
 | 
|  | 
| std::vector< int > | m_legMultiplicities | 
|  | The number of legs, and the required multiplicity on each leg.  More... 
 | 
|  | 
|  | 
| static constexpr float | FLOATDEFAULT = std::numeric_limits<float>::lowest() | 
|  | 
TrigComboHypoTool is a ComboHypoTool that calculates topological quantities between two particles and apply cuts on it (upper and lower cut) accepting the event if the required condition is satisfied. 
Definition at line 33 of file TrigComboHypoTool.h.
◆ Combination
◆ KineInfo
Typedef for convenience, will contain eta/phi/pt info. 
Definition at line 80 of file TrigComboHypoTool.h.
 
 
◆ ComboHypoVars
◆ TrigComboHypoTool()
      
        
          | TrigComboHypoTool::TrigComboHypoTool | ( | const std::string & | type, | 
        
          |  |  | const std::string & | name, | 
        
          |  |  | const IInterface * | parent | 
        
          |  | ) |  |  | 
      
 
 
◆ ~TrigComboHypoTool()
  
  | 
        
          | virtual TrigComboHypoTool::~TrigComboHypoTool | ( |  | ) |  |  | inlinevirtual | 
 
 
◆ compute()
Computation of the variables from the specified kinematics. 
Definition at line 499 of file TrigComboHypoTool.cxx.
  500   const auto& [legA_kine,legB_kine] = kinepair;
 
  501   const auto& [
eta1,phi1,pt1] = legA_kine;
 
  502   const auto& [
eta2,phi2,pt2] = legB_kine;
 
  509     case ComboHypoVars::DR:
 
  514     case ComboHypoVars::DPHI:
 
  519     case ComboHypoVars::INVM:
 
  521         ROOT::Math::PtEtaPhiMVector 
p1(pt1,
eta1,phi1,0.), 
p2(pt2,
eta2,phi2,0.);
 
  531     case ComboHypoVars::DETA:
 
  538         ATH_MSG_ERROR(
"Undefined variable requested -- should never happen!");
 
 
 
 
◆ decide()
Override the ComboHypoToolBase::decide in order to optimise combination generation This is to avoid excessive combinatorics for complex multileg chains. 
Reimplemented from ComboHypoToolBase.
Definition at line 130 of file TrigComboHypoTool.cxx.
  133   if (passingLegs.empty()) {
 
  134     return StatusCode::SUCCESS;
 
  137   ATH_MSG_DEBUG(
"Looking for legs from " << 
decisionId() << 
" in the map. Map contains features for " << passingLegs.size() << 
" legs, which may be data for many chains.");
 
  138   for(
const auto& legpair : passingLegs) {
 
  139     ATH_MSG_DEBUG(
"  Leg " << legpair.first << 
" has " << legpair.second.size() << 
" features");
 
  143   std::vector<Combination> legDecisions;
 
  147   bool hasViableLegs{
true};
 
  153     legMultiplicityForComputation[0] = 2;
 
  154     hasViableLegs = legDecisions[0].size() >= 2;
 
  157       ATH_MSG_DEBUG(
"Var " << varInfo.varTag << 
" needs legs " << varInfo.legA << 
", " << varInfo.legB);
 
  160       if (passingLegs.contains(varInfo.legA) && passingLegs.contains(varInfo.legB)) {
 
  161         size_t goodLegA{
false}, goodLegB{
false};
 
  164         if ((iLegA<0) or (iLegB<0)){
 
  165           ATH_MSG_ERROR(
"TrigComboHypoTool::decide: Index into array is negative");
 
  166           return StatusCode::FAILURE;
 
  168         goodLegA = !passingLegs[varInfo.legA].empty();
 
  169         legMultiplicityForComputation[iLegA] = std::max<size_t>(1,legMultiplicityForComputation[iLegA]);
 
  170         ATH_MSG_DEBUG(
"Leg " << varInfo.legA << 
" has " << passingLegs[varInfo.legA].size() << 
" features --> " << (goodLegA ? 
"pass" : 
"fail"));
 
  171         if(varInfo.legB != varInfo.legA) {
 
  172           goodLegB = !passingLegs[varInfo.legB].empty();
 
  173           ATH_MSG_DEBUG(
"Leg " << varInfo.legB << 
" has " << passingLegs[varInfo.legB].size() << 
" features --> " << (goodLegB ? 
"pass" : 
"fail"));
 
  174           legMultiplicityForComputation[iLegB] = std::max<size_t>(1,legMultiplicityForComputation[iLegB]);
 
  176           goodLegB = goodLegA = passingLegs[varInfo.legA].size() >= 2;
 
  177           ATH_MSG_DEBUG(
"Leg " << varInfo.legA << 
" has " << passingLegs[varInfo.legA].size() << 
" features --> " << (goodLegB ? 
"pass" : 
"fail"));
 
  179           legMultiplicityForComputation[iLegA] = std::max<size_t>(2,legMultiplicityForComputation[iLegA]);
 
  181         hasViableLegs &= (goodLegA && goodLegB);
 
  182         if (!hasViableLegs) {
 
  183           ATH_MSG_DEBUG(
"Did not find at least 2 features on the target legs to compute " << varInfo.varTag);
 
  187           "Insufficient passing legs to compute " << varInfo.varTag
 
  188           << 
", intended on (" << varInfo.legA << 
", " << varInfo.legB << 
")" 
  190         hasViableLegs = 
false;
 
  195   if (!hasViableLegs) {
 
  196     ATH_MSG_DEBUG(
"This ComboHypoTool cannot run in this event, this chain **REJECTS** this event.");
 
  199     return StatusCode::SUCCESS;
 
  206   for (
size_t legindex = 0; 
size_t legmult : legMultiplicityForComputation){
 
  207     size_t out_of = legDecisions[legindex].size();
 
  209       extraLegs.insert(extraLegs.end(),legDecisions[legindex].cbegin(),legDecisions[legindex].cend());
 
  211       nucg.
add({out_of, legmult});
 
  212       ATH_MSG_DEBUG(
"For leg index " << legindex << 
" we will be choosing any " << legmult << 
" Decision Objects out of " << out_of);
 
  218   std::vector<Combination> passingCombinations;
 
  219   std::vector<float> 
values;
 
  221   size_t warnings = 0, iterations = 0;
 
  223   auto get_index_offset = [&legMultiplicityForComputation](
size_t legindex) {
 
  225     for (
auto iLeg=legMultiplicityForComputation.cbegin(); iLeg!=legMultiplicityForComputation.cbegin()+legindex; ++iLeg) {
 
  231     bool lastDecision(
true);
 
  232     const std::vector<size_t> combination = nucg();
 
  243       size_t legA_index = 0;
 
  244       size_t legB_index = 0;
 
  253         "Computing " << iVarInfo->varTag << 
" on legs " 
  254         << iVarInfo->legA << 
" (" << legA_index << 
"), " 
  255         << iVarInfo->legB << 
" (" << legB_index << 
")" 
  257       if(iVarInfo->legA==iVarInfo->legB) {
 
  260         Combination featurePair = {legDecisions[legA_index][combination.at(legA_index+get_index_offset(legA_index))],legDecisions[legA_index][combination.at(legA_index+get_index_offset(legA_index)+1)]};
 
  261         combinationToCheck.insert(combinationToCheck.end(),featurePair.cbegin(),featurePair.cend());
 
  262         combinationToRecord.insert(combinationToRecord.end(),featurePair.cbegin(),featurePair.cend());
 
  265         Combination featurePair = {legDecisions[legA_index][combination.at(legA_index+get_index_offset(legA_index))],legDecisions[legB_index][combination.at(legB_index+get_index_offset(legB_index))]};
 
  266         combinationToCheck.insert(combinationToCheck.end(),featurePair.cbegin(),featurePair.cend());
 
  267         combinationToRecord.insert(combinationToRecord.end(),featurePair.cbegin(),featurePair.cend());
 
  272         ATH_MSG_DEBUG(
"Combination " << (iterations - 1) << 
" decided to be " <<  (lastDecision ? 
"passing" : 
"failing") << 
" " << iVarInfo->varTag);
 
  275         return StatusCode::FAILURE;
 
  279         ATH_MSG_WARNING(
"Have so far processed " << iterations << 
" combinations for " << 
decisionId() << 
" in this event, " << passingCombinations.size() << 
" passing.");
 
  282           ATH_MSG_WARNING(
"Too many combinations! Breaking the loop at this point.");
 
  290       combinationToRecord.insert(combinationToRecord.end(),extraLegs.cbegin(),extraLegs.cend());
 
  291       passingCombinations.push_back(combinationToRecord);
 
  307         ATH_MSG_VERBOSE( varInfo.varTag << 
" = " << 
value << 
" is in range " << varInfo.rangeStr() << 
".");
 
  315     ATH_MSG_DEBUG(
"Passing " << passingCombinations.size() << 
" combinations out of " << iterations << 
", "  
  316       << 
decisionId() << (passingCombinations.size() ? 
" **ACCEPTS**" : 
" **REJECTS**") << 
" this event based on OR logic.");
 
  319       ATH_MSG_DEBUG(
"Note: stopped after the first successful combination due to the EnableOverride flag.");  
 
  324     const bool passAll = (passingCombinations.size() == iterations);
 
  326     ATH_MSG_DEBUG(
"Passing " << passingCombinations.size() << 
" combinations out of " << iterations << 
", "  
  327       << 
decisionId() << (passAll ? 
" **ACCEPTS**" : 
" **REJECTS**") << 
" this event based on AND logic.");
 
  330       ATH_MSG_DEBUG(
"Note: stopped after the first failed combination due to the EnableOverride flag.");  
 
  334       passingCombinations.clear();
 
  339   if (not passingCombinations.empty()) { 
 
  346   return StatusCode::SUCCESS;
 
 
 
 
◆ decideOnSingleObject()
Alternate method called by BPhysics ComboHypoAlgs instead of the base method decide(...). 
This function should be considered a specialist use-case only. It must be over-ridden to do anything useful. 
Reimplemented in TrigMultiTrkComboHypoTool, and TrigBmumuxComboHypoTool.
Definition at line 283 of file ComboHypoToolBase.cxx.
  284   ATH_MSG_ERROR(
"Do not use ComboHypoToolBase on its own, inherit this class and override decideOnSingleObject.");
 
  285   ATH_MSG_ERROR(
"NOTE: Only if you are also supplying your own decide(...) implimentation, or similar.");
 
  286   ATH_MSG_ERROR(
"NOTE: Most uses cases should only need to override executeAlg(...).");
 
  287   return StatusCode::FAILURE;
 
 
 
 
◆ decisionId()
◆ eraseFromLegDecisionsMap()
For when the tool rejects all combinations. 
Remove all Decision Objects from all the legs of this HypoTool's chain. 
Definition at line 253 of file ComboHypoToolBase.cxx.
  254   for (
auto& 
it : passingLegs) {
 
  257       const size_t nDecisionObjects = 
it.second.size();
 
 
 
 
◆ executeAlg()
  
  |  | protectedvirtualinherited | 
 
 
◆ executeAlgStep()
Implementation of selection on individual variables. 
Definition at line 350 of file TrigComboHypoTool.cxx.
  353   std::pair<KineInfo,KineInfo> kinepair;
 
  355     ATH_MSG_ERROR(
"Failed to extract kinematics of feature pair!");
 
  360     float eta_check, phi_check, pt_check;
 
  361     std::tie(eta_check,phi_check,pt_check) = kinepair.first;
 
  362     msg() << 
MSG::VERBOSE << 
"  Test filled legA kinematics: pt " << pt_check*
invGeV << 
", eta " << eta_check << 
", phi " << phi_check << 
endmsg;
 
  364     std::tie(eta_check,phi_check,pt_check) = kinepair.second;
 
  365     msg() << 
MSG::VERBOSE << 
"  Test filled legB kinematics: pt " << pt_check*
invGeV << 
", eta " << eta_check << 
", phi " << phi_check << 
endmsg;
 
  375   bool pass = varInfo.test(
value);
 
  379     ATH_MSG_DEBUG(
"  Combination failed var cut: " << varInfo.varTag << 
" = " << 
value << 
" not in range " << varInfo.rangeStr());
 
 
 
 
◆ fillKineInfo()
Definition at line 471 of file TrigComboHypoTool.cxx.
  474     auto pLink = TrigCompositeUtils::findLink<xAOD::TrigMissingETContainer>( *decision.second, 
featureString() ).link;
 
  475     if (!pLink.isValid()){
 
  479     ROOT::Math::XYVectorF metv((*pLink)->ex(),(*pLink)->ey());
 
  484     auto pLink = TrigCompositeUtils::findLink<xAOD::IParticleContainer>( *decision.second, 
featureString() ).link;
 
  485     if (!pLink.isValid()){
 
  489     eta = (*pLink)->p4().Eta();
 
  490     phi = (*pLink)->p4().Phi();
 
  491     pt  = (*pLink)->p4().Pt();
 
  494   kinematics = std::make_tuple(
eta,
phi,
pt);
 
 
 
 
◆ fillLegDecisions_diffLeg()
Definition at line 418 of file TrigComboHypoTool.cxx.
  425   std::copy_if(combination.begin(),combination.end(),std::back_inserter(legA_features),isLegA);
 
  426   if(legA_features.size()!=1) {
 
  427     ATH_MSG_ERROR(legA_features.size() << 
" Decision Objects supplied on leg " << legA
 
  428                   << 
", must be 1 for different-leg topo selection!");
 
  432   std::copy_if(combination.begin(),combination.end(),std::back_inserter(legB_features),isLegB);
 
  433   if (legB_features.size()!=1) {
 
  434     ATH_MSG_ERROR(legB_features.size() << 
" Decision Objects supplied on leg " << legB
 
  435                   << 
", must be 1 for different-leg topo selection!");
 
  439   legpair.first = legA_features[0];
 
  440   legpair.second = legB_features[0];
 
 
 
 
◆ fillLegDecisions_sameLeg()
Helpers to extract kinematics from the specified legs of the chain Specialised for two cases – exactly two objects from the same leg or exactly one object each from two legs. 
Definition at line 393 of file TrigComboHypoTool.cxx.
  397     std::copy(combination.begin(),combination.end(),std::back_inserter(leg_features));
 
  402     std::copy_if(combination.begin(),combination.end(),std::back_inserter(leg_features),isMyLeg);
 
  405   if (leg_features.size()==2) {
 
  406     legpair.first = leg_features[0];
 
  407     legpair.second = leg_features[1];
 
  409     ATH_MSG_ERROR(leg_features.size() << 
" Decision Objects supplied on leg " << 
leg 
  410                   << 
", must be 2 for same-leg topo selection!");
 
 
 
 
◆ fillPairKinematics()
Definition at line 446 of file TrigComboHypoTool.cxx.
  449     size_t nFeatures(combination.size());
 
  451       ATH_MSG_ERROR(
"Number of Decision Objects passed is less than 2! Sum over decision objects on all legs = " << combination.size() );
 
  454     std::pair<Combo::LegDecision,Combo::LegDecision> legpair;
 
  458     if(!
fillKineInfo(kinepair.first,legpair.first,varInfo.legA_is_MET)) {
 
  459       ATH_MSG_ERROR(
"Failed to extract requisite kinematic info from leg " << varInfo.legA << 
"!");
 
  463     if(!
fillKineInfo(kinepair.second,legpair.second,varInfo.legB_is_MET)) {
 
  464       ATH_MSG_ERROR(
"Failed to extract requisite kinematic info from leg " << varInfo.legB << 
"!");
 
 
 
 
◆ initialize()
  
  | 
        
          | StatusCode TrigComboHypoTool::initialize | ( |  | ) |  |  | overridevirtual | 
 
Definition at line 63 of file TrigComboHypoTool.cxx.
   76     ATH_MSG_ERROR(
"Trying to configure the Tool with legA and legB vectors of different size!");
 
   77     return StatusCode::FAILURE;
 
   80     ATH_MSG_ERROR(
"Trying to configure the Tool with UseMin and UseMax vectors of different size!");
 
   81     return StatusCode::FAILURE;
 
   84     ATH_MSG_ERROR(
"Trying to configure the Tool with legA/B and UseMax/Min vectors of different size!");
 
   85     return StatusCode::FAILURE;
 
   88     ATH_MSG_ERROR(
"Trying to configure the Tool with varTag and UseMax/Min(LegA/B) vectors of different size!");
 
   89     return StatusCode::FAILURE;
 
   99       ATH_MSG_ERROR(
"The variable is not present in the ComboHypoVars list");
 
  100       return StatusCode::FAILURE;
 
  116     std::string validmsg{
""};
 
  117     if(!
info.validate(validmsg)) {
 
  119       return StatusCode::FAILURE;
 
  126   return StatusCode::SUCCESS;
 
 
 
 
◆ legDecisionId()
Retrieves this ComboHypoTool's chain's decision ID for a given leg. 
Only populated for chains with more than one leg. For chains with one leg, use decisionId() 
Definition at line 60 of file ComboHypoToolBase.h.
 
 
◆ legDecisionIds()
Retrieves this ComboHypoTool's chain's decision IDs for all legs. 
Only populated for chains with more than one leg. For chains with one leg, use decisionId() 
Definition at line 66 of file ComboHypoToolBase.h.
 
 
◆ legMultiplicity()
  
  | 
        
          | const std::vector<int>& ComboHypoToolBase::legMultiplicity | ( |  | ) | const |  | inlineinherited | 
 
Gets the number of legs and the multiplicity required on each leg. 
Definition at line 54 of file ComboHypoToolBase.h.
 
 
◆ printDebugInformation()
Print the output of the tool, after having removed failed Decision Objects. 
Restricted to the ComboHypoTool's chain's legs. 
Definition at line 264 of file ComboHypoToolBase.cxx.
  266   for (
const auto& [
id, ELV] : passingLegs) {
 
  270       for (
const auto& 
EL : ELV) {
 
 
 
 
◆ selectLegs()
Creates the per-leg vectors of Decision objects starting from the initial LegDecision map, storing only those concerning this HypoTool's chain Pack the Decision objects in std::pair<DecisionID, ElementLink<Decision>> so the derived class' executeAlg function knows which leg each object is on. 
Definition at line 172 of file ComboHypoToolBase.cxx.
  189     std::vector<Combo::LegDecision> decisionObjectsOnLeg;
 
  192     const Combo::LegDecisionsMap::const_iterator 
it = IDCombMap.find(legIdentifier.
numeric());
 
  194     if (
it != IDCombMap.end()) {
 
  196         decisionObjectsOnLeg.emplace_back(legIdentifier, 
el);
 
  200     legDecisions.push_back(std::move(decisionObjectsOnLeg));
 
  206     for (
const auto& 
leg : legDecisions) {
 
  208       for (
const auto& dEL : 
leg) {
 
  213   return StatusCode::SUCCESS;
 
 
 
 
◆ setLegMultiplicity()
Sets the number of legs and the multiplicity required on each leg. 
This should be called when the Tool is retrieved by its parent ComboHypo alg. This also sets the leg Decision IDs at the same time param[in] multiplicityRequiredMap: Mapping of chains to required multiplicity per leg. 
Definition at line 16 of file ComboHypoToolBase.cxx.
   18   const Combo::MultiplicityReqMap::const_iterator 
it = multiplicityRequiredMap.find(nameOfToolsChain);
 
   20   if (
it == multiplicityRequiredMap.end()) {
 
   21     ATH_MSG_ERROR(
"ComboHypoTool for " << 
m_decisionId << 
" could not find its required multiplcity data in the map supplied by its parent alg.");
 
   22     return StatusCode::FAILURE;
 
   27     ATH_MSG_ERROR(
"ComboHypoTool for " << 
m_decisionId << 
" was listed in the supplied multiplicityRequiredMap, but data was not supplied for any legs.");
 
   28     return StatusCode::FAILURE;
 
   35       return StatusCode::FAILURE;
 
   45   return StatusCode::SUCCESS;
 
 
 
 
◆ updateLegDecisionsMap()
For when the tool accepts some/all combinations. 
Remove Decision Objects from legs of this HypoTool's chain which participated in NONE of combinations which were flagged as accepting the event. 
Definition at line 216 of file ComboHypoToolBase.cxx.
  219     for (
const std::vector<Combo::LegDecision>& comb : passingComb) {
 
  221       for (
const auto& [
id, 
EL] : comb) {
 
  228   for (
auto& 
it : passingLegs) {
 
  233     std::vector<ElementLink<DecisionContainer>> updatedDecisionObjectsOnLeg;
 
  236     for (
const std::vector<Combo::LegDecision>& comb : passingComb) {
 
  237       for (
const auto& [
id, 
EL] : comb) {
 
  239         if (
id == legId and 
std::find(updatedDecisionObjectsOnLeg.begin(), updatedDecisionObjectsOnLeg.end(), 
EL) == updatedDecisionObjectsOnLeg.end()) {
 
  241           updatedDecisionObjectsOnLeg.push_back(
EL);
 
  248       it.second = updatedDecisionObjectsOnLeg;
 
 
 
 
◆ FLOATDEFAULT
  
  | 
        
          | constexpr float TrigComboHypoTool::FLOATDEFAULT = std::numeric_limits<float>::lowest() |  | staticconstexprprivate | 
 
 
◆ m_combinationsThresholdBreak
  
  | 
        
          | Gaudi::Property<size_t> ComboHypoToolBase::m_combinationsThresholdBreak |  | protectedinherited | 
 
Initial value:{this, "CombinationsThresholdBreak", 10000,
    "Events processing this many combinations will generate a second WARNING message, and the loop over combinations will be terminated at this point."}
Definition at line 109 of file ComboHypoToolBase.h.
 
 
◆ m_combinationsThresholdWarn
  
  | 
        
          | Gaudi::Property<size_t> ComboHypoToolBase::m_combinationsThresholdWarn |  | protectedinherited | 
 
Initial value:{this, "CombinationsThresholdWarn", 1000,
    "Events processing this many combinations will generate a WARNING message."}
Definition at line 106 of file ComboHypoToolBase.h.
 
 
◆ m_decisionId
◆ m_enableOverride
  
  | 
        
          | Gaudi::Property<bool> ComboHypoToolBase::m_enableOverride |  | protectedinherited | 
 
Initial value:{this, "EnableOverride", false,
    "Stops processing combinations as soon as a valid combination is found in OR mode, or as soon as an invalid combination is found in AND mode. This is to save CPU."}
Definition at line 115 of file ComboHypoToolBase.h.
 
 
◆ m_isLegA_MET_vec
  
  | 
        
          | Gaudi::Property<std::vector< bool > > TrigComboHypoTool::m_isLegA_MET_vec {this, "IsLegA_METVec", {false}, "Array with the first Leg MET identifier"} |  | private | 
 
 
◆ m_isLegB_MET_vec
  
  | 
        
          | Gaudi::Property<std::vector< bool > > TrigComboHypoTool::m_isLegB_MET_vec {this, "IsLegB_METVec", {false}, "Array with the second Leg MET identifier"} |  | private | 
 
 
◆ m_legA_vec
  
  | 
        
          | Gaudi::Property<std::vector<uint32_t> > TrigComboHypoTool::m_legA_vec {this, "LegAVec" , {0}, "Array with the first Leg ID"} |  | private | 
 
 
◆ m_legB_vec
  
  | 
        
          | Gaudi::Property<std::vector<uint32_t> > TrigComboHypoTool::m_legB_vec {this, "LegBVec" , {0}, "Array with the second Leg ID"} |  | private | 
 
 
◆ m_legDecisionIds
The DecisionIDs of the individual legs, derived from both m_decisionId and m_legMultiplicities. 
Definition at line 123 of file ComboHypoToolBase.h.
 
 
◆ m_legMultiplicities
  
  | 
        
          | std::vector<int> ComboHypoToolBase::m_legMultiplicities |  | privateinherited | 
 
The number of legs, and the required multiplicity on each leg. 
Definition at line 124 of file ComboHypoToolBase.h.
 
 
◆ m_modeOR
  
  | 
        
          | Gaudi::Property<bool> ComboHypoToolBase::m_modeOR |  | protectedinherited | 
 
Initial value:{this, "ModeOR", true,
    "Accepts based on the logical OR over all calls to executeAlg. If this flag is set to false then the logical AND is required instead."}
Definition at line 112 of file ComboHypoToolBase.h.
 
 
◆ m_monTool_vec
◆ m_skipLegCheck
  
  | 
        
          | Gaudi::Property<bool> TrigComboHypoTool::m_skipLegCheck {this, "SkipLegCheck" , {false}, "Ignore leg IDs for chains with only one leg"} |  | private | 
 
 
◆ m_useMax_vec
  
  | 
        
          | Gaudi::Property<std::vector<bool> > TrigComboHypoTool::m_useMax_vec {this, "UseMaxVec" , {false}, "Array with the apply_max_cut setting"} |  | private | 
 
 
◆ m_useMin_vec
  
  | 
        
          | Gaudi::Property<std::vector<bool> > TrigComboHypoTool::m_useMin_vec {this, "UseMinVec" , {false}, "Array with the apply_min_cut setting"} |  | private | 
 
 
◆ m_varInfo_vec
  
  | 
        
          | std::vector<VarInfo> TrigComboHypoTool::m_varInfo_vec |  | private | 
 
 
◆ m_varMax_vec
  
  | 
        
          | Gaudi::Property<std::vector<float> > TrigComboHypoTool::m_varMax_vec {this, "UpperCutVec", {FLOATDEFAULT}, "Array with the upper cut for legs pair"} |  | private | 
 
 
◆ m_varMin_vec
  
  | 
        
          | Gaudi::Property<std::vector<float> > TrigComboHypoTool::m_varMin_vec {this, "LowerCutVec", {FLOATDEFAULT}, "Array with the lower cut for legs pair"} |  | private | 
 
 
◆ m_varTag_vec
  
  | 
        
          | Gaudi::Property<std::vector<std::string> > TrigComboHypoTool::m_varTag_vec {this, "Variables" , {""}, "Variables to cut on"} |  | private | 
 
 
The documentation for this class was generated from the following files:
 
const std::string & featureString()
Group
Properties of a chain group.
Scalar phi() const
phi method
std::string find(const std::string &s)
return a remapped string
TrigCompositeUtils::DecisionID numeric() const
numeric ID
Scalar eta() const
pseudorapidity method
An ensemble of UniqueCombinationGenerator API description.
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
setEt setPhi setE277 setWeta2 eta1
#define ATH_MSG_VERBOSE(x)
LVL1::L1CaloFcal23Cells2RxMappingTool::mapType MT
double deltaR(double rapidity1, double phi1, double rapidity2, double phi2)
from bare bare rapidity,phi
void add(const UniqueCombinationGenerator &gen)
Out copy_if(In first, const In &last, Out res, const Pred &p)
This module defines the arguments passed from the BATCH driver to the BATCH worker.
ElementLink implementation for ROOT usage.
HLT::Identifier createLegName(const HLT::Identifier &chainIdentifier, size_t counter)
Generate the HLT::Identifier which corresponds to a specific leg of a given chain.
int32_t getIndexFromLeg(const HLT::Identifier &legIdentifier)
Extract the numeric index of a leg identifier.
#define ATH_MSG_WARNING(x)
std::string name() const
reports human redable name
HLT::Identifier getIDFromLeg(const HLT::Identifier &legIdentifier)
Generate the HLT::Identifier which corresponds to the chain name from the leg name.
Declare a monitored scalar variable.
std::pair< TrigCompositeUtils::DecisionID, ElementLink< TrigCompositeUtils::DecisionContainer > > LegDecision
LegDecision keeps a given Decision Object associated with a specific leg when being used inside a sin...