ATLAS Offline Software
Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
TrigComboHypoTool Class Reference

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>

Inheritance diagram for TrigComboHypoTool:
Collaboration diagram for TrigComboHypoTool:

Classes

struct  VarInfo
 Organise info per var selection in a struct. More...
 

Public Types

enum  ComboHypoVars {
  UNDEF =-1, DR =0, DPHI, INVM,
  MT, DETA
}
 

Public Member Functions

 TrigComboHypoTool (const std::string &type, const std::string &name, const IInterface *parent)
 
virtual ~TrigComboHypoTool ()
 
virtual StatusCode initialize () override
 
virtual StatusCode decide (Combo::LegDecisionsMap &passingLegs, const EventContext &) const override
 retrieves the decisions associated to this decId, make their combinations and apply the algorithm More...
 
virtual HLT::Identifier decisionId () const
 retrieves this ComboHypoTool's chain's decision ID More...
 
StatusCode setLegMultiplicity (const Combo::MultiplicityReqMap &multiplicityRequiredMap)
 Sets the number of legs and the multiplicity required on each leg. More...
 
const std::vector< int > & legMultiplicity () const
 Gets the number of legs and the multiplicity required on each leg. More...
 
HLT::Identifier legDecisionId (size_t i) const
 Retrieves this ComboHypoTool's chain's decision ID for a given leg. More...
 
const std::vector< HLT::Identifier > & legDecisionIds () const
 Retrieves this ComboHypoTool's chain's decision IDs for all legs. More...
 
virtual StatusCode decideOnSingleObject (TrigCompositeUtils::Decision *, const std::vector< const TrigCompositeUtils::DecisionIDContainer * > &) const
 Alternate method called by BPhysics ComboHypoAlgs instead of the base method decide(...). More...
 

Protected Member Functions

virtual bool executeAlg (const std::vector< Combo::LegDecision > &combination) const
 Only a dummy implementation exists in ComboHypoToolBase. More...
 
StatusCode selectLegs (const Combo::LegDecisionsMap &IDCombMap, std::vector< std::vector< Combo::LegDecision >> &leg_decisions) const
 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. More...
 
void updateLegDecisionsMap (const std::vector< std::vector< Combo::LegDecision >> &passing_comb, Combo::LegDecisionsMap &passingLegs) const
 For when the tool accepts some/all combinations. More...
 
void eraseFromLegDecisionsMap (Combo::LegDecisionsMap &passingLegs) const
 For when the tool rejects all combinations. More...
 
StatusCode printDebugInformation (const Combo::LegDecisionsMap &passingLegs) const
 Print the output of the tool, after having removed failed Decision Objects. More...
 

Protected Attributes

Gaudi::Property< size_t > m_combinationsThresholdWarn
 
Gaudi::Property< size_t > m_combinationsThresholdBreak
 
Gaudi::Property< bool > m_modeOR
 
Gaudi::Property< bool > m_enableOverride
 

Private Types

typedef std::tuple< float, float, float > KineInfo
 Typedef for convenience, will contain eta/phi/pt info. More...
 
typedef std::vector< Combo::LegDecisionCombination
 

Private Member Functions

virtual bool executeAlg (const Combination &combination) const override
 Top-level function to make chain-level decision This applies the AND of all configured var selections. 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
 

Private Attributes

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< GenericMonitoringToolm_monTool_vec {this, "MonTools", {}, "Monitoring tools" }
 
std::vector< VarInfom_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::Identifierm_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 Private Attributes

static constexpr float FLOATDEFAULT = std::numeric_limits<float>::lowest()
 

Detailed Description

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.

Member Typedef Documentation

◆ Combination

typedef std::vector<Combo::LegDecision> TrigComboHypoTool::Combination
private

Definition at line 81 of file TrigComboHypoTool.h.

◆ KineInfo

typedef std::tuple<float,float,float> TrigComboHypoTool::KineInfo
private

Typedef for convenience, will contain eta/phi/pt info.

Definition at line 80 of file TrigComboHypoTool.h.

Member Enumeration Documentation

◆ ComboHypoVars

Enumerator
UNDEF 
DR 
DPHI 
INVM 
MT 
DETA 

Definition at line 36 of file TrigComboHypoTool.h.

36 { UNDEF=-1, DR=0, DPHI, INVM, MT, DETA};

Constructor & Destructor Documentation

◆ TrigComboHypoTool()

TrigComboHypoTool::TrigComboHypoTool ( const std::string &  type,
const std::string &  name,
const IInterface *  parent 
)

Definition at line 32 of file TrigComboHypoTool.cxx.

36 {}

◆ ~TrigComboHypoTool()

virtual TrigComboHypoTool::~TrigComboHypoTool ( )
inlinevirtual

Definition at line 42 of file TrigComboHypoTool.h.

42 {};

Member Function Documentation

◆ compute()

float TrigComboHypoTool::compute ( const std::pair< KineInfo, KineInfo > &  kinepair,
ComboHypoVars  var 
) const
private

Computation of the variables from the specified kinematics.

Definition at line 300 of file TrigComboHypoTool.cxx.

300  {
301  const auto& [legA_kine,legB_kine] = kinepair;
302  const auto& [eta1,phi1,pt1] = legA_kine;
303  const auto& [eta2,phi2,pt2] = legB_kine;
304 
305  ATH_MSG_DEBUG("Leg A has pt " << pt1*invGeV << ", eta " << eta1 << ", phi " << phi1);
306  ATH_MSG_DEBUG("Leg B has pt " << pt2*invGeV << ", eta " << eta2 << ", phi " << phi2);
307 
308  float value(0);
309  switch(var) {
310  case ComboHypoVars::DR:
311  {
312  value = xAOD::P4Helpers::deltaR(eta1,phi1,eta2,phi2);
313  break;
314  }
315  case ComboHypoVars::DPHI:
316  {
317  value = std::fabs(xAOD::P4Helpers::deltaPhi(phi1,phi2));
318  break;
319  }
320  case ComboHypoVars::INVM:
321  {
322  ROOT::Math::PtEtaPhiMVector p1(pt1,eta1,phi1,0.), p2(pt2,eta2,phi2,0.);
323  value = (p1+p2).M()*invGeV; // Convert to GeV
324  break;
325  }
326  case ComboHypoVars::MT:
327  {
328  //Transverse mass defined for semi-visible decays in hadron colliders. See PDG 49.6, section on kinematics
329  value = std::sqrt(2*pt1*pt2*(1-std::cos(xAOD::P4Helpers::deltaPhi(phi1,phi2) ) ) )*invGeV; // Convert to GeV
330  break;
331  }
332  case ComboHypoVars::DETA:
333  {
334  value = std::fabs(eta2-eta1);
335  break;
336  }
337  default:
338  {
339  ATH_MSG_ERROR("Undefined variable requested -- should never happen!");
340  }
341  }
342  return value;
343 }

◆ decide()

StatusCode ComboHypoToolBase::decide ( Combo::LegDecisionsMap passingLegs,
const EventContext &   
) const
overridevirtualinherited

retrieves the decisions associated to this decId, make their combinations and apply the algorithm

Parameters
[in]LegDecisionsMapthat lists all the passing decisions, to be updated by the tool depending on the outcome of executeAlg
[in]EventContext, currently unused

Reimplemented in DisplacedJetRankComboHypoTool.

Definition at line 48 of file ComboHypoToolBase.cxx.

48  {
49  if (m_legMultiplicities.size() == 0) {
50  ATH_MSG_ERROR("ComboHypoTool for " << m_decisionId << " has not been properly configured. setLegMultiplicity should be called by the parent alg in initalize");
51  return StatusCode::FAILURE;
52  }
53 
54  // if no combinations passed, then exit
55  if (passingLegs.size() == 0) {
56  return StatusCode::SUCCESS;
57  }
58 
59  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.");
60 
61  // select the leg decisions from the map with this ID:
62  std::vector<std::vector<Combo::LegDecision>> legDecisions;
63  ATH_CHECK(selectLegs(passingLegs, legDecisions));
64 
65  for (size_t legIndex = 0; legIndex < m_legMultiplicities.size(); ++legIndex) {
66  // The static cast is because this gets read as a Gaudi property which only seems to work with vector<int> rather than vector<size_t>
67  if (legDecisions.at(legIndex).size() < static_cast<size_t>(m_legMultiplicities.at(legIndex))) {
68  ATH_MSG_DEBUG("Too few features are found for " << m_decisionId << " on leg " << legIndex <<", require:" << m_legMultiplicities.at(legIndex) << " have:" << legDecisions.at(legIndex).size());
69  ATH_MSG_DEBUG("This ComboHypoTool cannot run in this event, this chain **REJECTS** this event.");
70  eraseFromLegDecisionsMap(passingLegs);
71  ATH_CHECK(printDebugInformation(passingLegs));
72  return StatusCode::SUCCESS;
73  }
74  }
75 
76  // Create and initialise the combinations generator for the requirements of this chain, given the objects available in this event.
78  for (size_t legIndex = 0; legIndex < m_legMultiplicities.size(); ++legIndex) {
79  const size_t choose_any = m_legMultiplicities.at(legIndex);
80  const size_t out_of = legDecisions.at(legIndex).size();
81  nucg.add({out_of, choose_any});
82  ATH_MSG_DEBUG("For leg " << legIndex << " we will be choosing any " << choose_any << " Decision Objects out of " << out_of);
83  }
84 
85  std::vector<std::vector<Combo::LegDecision>> passingCombinations;
86 
87  size_t warnings = 0, iterations = 0;
88  do {
89 
90  const std::vector<size_t> combination = nucg();
91  ++nucg;
92  std::vector<Combo::LegDecision> combinationToCheck;
93 
94  size_t location_in_combination = 0;
95  for (size_t legIndex = 0; legIndex < m_legMultiplicities.size(); ++legIndex) {
96  // We loop over however many objects are required on the leg,
97  // but we take their index from the 'combination'. Hence 'object' is not used directly
98  for (size_t object = 0; object < static_cast<size_t>(m_legMultiplicities.at(legIndex)); ++object) {
99  const size_t objectIndex = combination.at(location_in_combination++);
100  combinationToCheck.push_back( legDecisions.at(legIndex).at(objectIndex) );
101  }
102  }
103 
104  ++iterations;
105 
106  try {
107  if (executeAlg(combinationToCheck)) {
108  ATH_MSG_DEBUG("Combination " << (iterations - 1) << " decided to be passing");
109  passingCombinations.push_back(combinationToCheck);
110  if (m_modeOR == true and m_enableOverride) {
111  break;
112  }
113  } else { // the combination failed
114  if (m_modeOR == false and m_enableOverride) {
115  break;
116  }
117  }
118  } catch (std::exception& e) {
119  ATH_MSG_ERROR(e.what());
120  return StatusCode::FAILURE;
121  }
122 
123  if ((iterations >= m_combinationsThresholdWarn && warnings == 0) or (iterations >= m_combinationsThresholdBreak)) {
124  ATH_MSG_WARNING("Have so far processed " << iterations << " combinations for " << m_decisionId << " in this event, " << passingCombinations.size() << " passing.");
125  ++warnings;
126  if (iterations >= m_combinationsThresholdBreak) {
127  ATH_MSG_WARNING("Too many combinations! Breaking the loop at this point.");
128  break;
129  }
130  }
131 
132  } while (nucg);
133 
134 
135  if (m_modeOR) {
136 
137  ATH_MSG_DEBUG("Passing " << passingCombinations.size() << " combinations out of " << iterations << ", "
138  << m_decisionId << (passingCombinations.size() ? " **ACCEPTS**" : " **REJECTS**") << " this event based on OR logic.");
139 
140  if (m_enableOverride) {
141  ATH_MSG_DEBUG("Note: stopped after the first successful combination due to the EnableOverride flag.");
142  }
143 
144  } else { // modeAND
145 
146  const bool passAll = (passingCombinations.size() == iterations);
147 
148  ATH_MSG_DEBUG("Passing " << passingCombinations.size() << " combinations out of " << iterations << ", "
149  << m_decisionId << (passAll ? " **ACCEPTS**" : " **REJECTS**") << " this event based on AND logic.");
150 
151  if (m_enableOverride) {
152  ATH_MSG_DEBUG("Note: stopped after the first failed combination due to the EnableOverride flag.");
153  }
154 
155  if (not passAll) {
156  passingCombinations.clear();
157  }
158 
159  }
160 
161  if (not passingCombinations.empty()) { // need partial erasure of the decsions (only those not present in any combination)
162  updateLegDecisionsMap(passingCombinations, passingLegs);
163  } else { // need complete erasure of input decisions
164  eraseFromLegDecisionsMap(passingLegs);
165  }
166 
167  ATH_CHECK(printDebugInformation(passingLegs));
168  return StatusCode::SUCCESS;
169 }

◆ decideOnSingleObject()

StatusCode ComboHypoToolBase::decideOnSingleObject ( TrigCompositeUtils::Decision ,
const std::vector< const TrigCompositeUtils::DecisionIDContainer * > &   
) const
virtualinherited

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 284 of file ComboHypoToolBase.cxx.

284  {
285  ATH_MSG_ERROR("Do not use ComboHypoToolBase on its own, inherit this class and override decideOnSingleObject.");
286  ATH_MSG_ERROR("NOTE: Only if you are also supplying your own decide(...) implimentation, or similar.");
287  ATH_MSG_ERROR("NOTE: Most uses cases should only need to override executeAlg(...).");
288  return StatusCode::FAILURE;
289 }

◆ decisionId()

virtual HLT::Identifier ComboHypoToolBase::decisionId ( ) const
inlinevirtualinherited

retrieves this ComboHypoTool's chain's decision ID

Definition at line 41 of file ComboHypoToolBase.h.

41 { return m_decisionId; }

◆ eraseFromLegDecisionsMap()

void ComboHypoToolBase::eraseFromLegDecisionsMap ( Combo::LegDecisionsMap passingLegs) const
protectedinherited

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.

253  {
254  for (auto& it : passingLegs) {
255  DecisionID id = it.first;
256  if (id == m_decisionId or (isLegId(id) and getIDFromLeg(id) == m_decisionId)) {
257  const size_t nDecisionObjects = it.second.size();
258  it.second.clear();
259  ATH_MSG_VERBOSE("-- Removed " << nDecisionObjects << " from " << id);
260  }
261  }
262 }

◆ executeAlg() [1/2]

bool TrigComboHypoTool::executeAlg ( const Combination combination) const
overrideprivatevirtual

Top-level function to make chain-level decision This applies the AND of all configured var selections.

Definition at line 127 of file TrigComboHypoTool.cxx.

127  {
128  //loop over all the hypos
129  bool lastDecision(true);
130  std::vector<float> values;
131  values.reserve(m_varInfo_vec.size());
132 
133  for (auto varInfo = m_varInfo_vec.cbegin(); varInfo!=m_varInfo_vec.cend() && lastDecision; ++varInfo){
134  lastDecision = executeAlgStep(combination, *varInfo, values);
135  }
136 
137  // Monitoring of variables for only accepted events
138  if(lastDecision && !m_monTool_vec.empty()) {
139  for (auto varInfo = m_varInfo_vec.cbegin(); varInfo!=m_varInfo_vec.cend(); ++varInfo){
140  float value = values[varInfo->index];
141  auto varOfAccepted = Monitored::Scalar(m_varTag_vec[varInfo->index]+"OfAccepted", value );//varInfo->monToolName+"OfAccepted", value );
142  auto monitorIt = Monitored::Group (m_monTool_vec[varInfo->index], varOfAccepted);
143  ATH_MSG_DEBUG( varInfo->varTag << " = " << value << " is in range " << varInfo->rangeStr() << ".");
144  ATH_MSG_DEBUG("m_varTag_vec = "<< m_varTag_vec<<", values = "<<values << ", valIndex = "<< varInfo->index <<", monToolName = " << varInfo->monToolName << ", monToolVec = "<< m_monTool_vec);
145  }
146  }
147  return lastDecision;
148 }

◆ executeAlg() [2/2]

bool ComboHypoToolBase::executeAlg ( const std::vector< Combo::LegDecision > &  combination) const
protectedvirtualinherited

Only a dummy implementation exists in ComboHypoToolBase.

This should be over-ridden by a derived class. The derived class should return a boolean pass/fail for each possible combination in the event. param[in] combination A single combination of objects to be discriminated against. Vector contains the required number of objects over all legs. Use the pair.first to tell which leg a given pair.second decision object belongs to in the current combination.

Reimplemented in TrigEgammaTopoHypoTool, TrigAFPDijetComboHypoTool, DebugComboHypoTool, DeltaRRoIComboHypoTool, TrigMuonEFIdtpInvMassHypoTool, TrigMuonEFInvMassHypoTool, TrigMultiTrkComboHypoTool, and TrigBmumuxComboHypoTool.

Definition at line 279 of file ComboHypoToolBase.cxx.

279  {
280  ATH_MSG_ERROR("Do not use ComboHypoToolBase on its own, inherit this class and override executeAlg.");
281  return false;
282 }

◆ executeAlgStep()

bool TrigComboHypoTool::executeAlgStep ( const Combination combination,
const VarInfo varInfo,
std::vector< float > &  values 
) const
private

Implementation of selection on individual variables.

Definition at line 151 of file TrigComboHypoTool.cxx.

151  {
152  ATH_MSG_DEBUG("Executing selection " << varInfo.index << " of " << m_varInfo_vec.size() << ": " << varInfo.rangeStr());
153 
154  std::pair<KineInfo,KineInfo> kinepair;
155  if(!fillPairKinematics(kinepair, combination, varInfo)) {
156  ATH_MSG_ERROR("Failed to extract kinematics of feature pair!");
157  return false;
158  }
159 
160  if(msgLvl(MSG::DEBUG)) {
161  float eta_check, phi_check, pt_check;
162  std::tie(eta_check,phi_check,pt_check) = kinepair.first;
163  msg() << MSG::DEBUG << "Test filled legA kinematics: pt " << pt_check*invGeV << ", eta " << eta_check << ", phi " << phi_check << endmsg;
164 
165  std::tie(eta_check,phi_check,pt_check) = kinepair.second;
166  msg() << MSG::DEBUG << "Test filled legB kinematics: pt " << pt_check*invGeV << ", eta " << eta_check << ", phi " << phi_check << endmsg;
167  }
168 
169  // apply the cut
170  float value = compute(kinepair,varInfo.var);
171  if(!m_monTool_vec.empty()) {
172  auto varOfProcessed = Monitored::Scalar(m_varTag_vec[varInfo.index]+"OfProcessed" , value );
173  auto monitorIt = Monitored::Group (m_monTool_vec[varInfo.index], varOfProcessed);
174  }
175  vals.push_back(value);
176  bool pass = varInfo.test(value);
177 
178  ATH_MSG_DEBUG("Found a combination with " << value);
179  if(!pass) {
180  ATH_MSG_DEBUG("Combination failed var cut: " << varInfo.varTag << " = " << value << " not in range " << varInfo.rangeStr());
181  }
182  return pass;
183 }

◆ fillKineInfo()

bool TrigComboHypoTool::fillKineInfo ( TrigComboHypoTool::KineInfo kinematics,
Combo::LegDecision  decision,
bool  isMET 
) const
private

Definition at line 272 of file TrigComboHypoTool.cxx.

272  {
273  float eta, phi, pt;
274  if (isMET) {
275  auto pLink = TrigCompositeUtils::findLink<xAOD::TrigMissingETContainer>( *decision.second, featureString() ).link;
276  if (!pLink.isValid()){
277  ATH_MSG_ERROR("link for MET not valid");
278  return false;
279  }
280  ROOT::Math::XYVectorF metv((*pLink)->ex(),(*pLink)->ey());
281  eta = FLOATDEFAULT;
282  phi = metv.phi();
283  pt = metv.r();
284  } else {
285  auto pLink = TrigCompositeUtils::findLink<xAOD::IParticleContainer>( *decision.second, featureString() ).link;
286  if (!pLink.isValid()){
287  ATH_MSG_ERROR("link for IParticle not valid");
288  return false;
289  }
290  eta = (*pLink)->p4().Eta();
291  phi = (*pLink)->p4().Phi();
292  pt = (*pLink)->p4().Pt();
293  }
294  ATH_MSG_DEBUG("Filled kinematics with pt " << pt*invGeV << ", eta " << eta << ", phi " << phi);
295  kinematics = std::make_tuple(eta,phi,pt);
296  return true;
297 }

◆ fillLegDecisions_diffLeg()

bool TrigComboHypoTool::fillLegDecisions_diffLeg ( std::pair< Combo::LegDecision, Combo::LegDecision > &  legpair,
const Combination combination,
uint32_t  legA,
uint32_t  legB 
) const
private

Definition at line 219 of file TrigComboHypoTool.cxx.

219  {
220  // Extract the features matching the legs
221  // We take all of them, so as to be able to check if there is any ambiguity
222  auto isLegA = [&legA](const Combo::LegDecision& d) { return testLegId(d,legA); };
223  auto isLegB = [&legB](const Combo::LegDecision& d) { return testLegId(d,legB); };
224  Combination legA_features, legB_features;
225 
226  std::copy_if(combination.begin(),combination.end(),std::back_inserter(legA_features),isLegA);
227  if(legA_features.size()!=1) {
228  ATH_MSG_ERROR(legA_features.size() << " Decision Objects supplied on leg " << legA
229  << ", must be 1 for different-leg topo selection!");
230  return false;
231  }
232 
233  std::copy_if(combination.begin(),combination.end(),std::back_inserter(legB_features),isLegB);
234  if (legB_features.size()!=1) {
235  ATH_MSG_ERROR(legB_features.size() << " Decision Objects supplied on leg " << legB
236  << ", must be 1 for different-leg topo selection!");
237  return false;
238  }
239 
240  legpair.first = legA_features[0];
241  legpair.second = legB_features[0];
242 
243  return true;
244 }

◆ fillLegDecisions_sameLeg()

bool TrigComboHypoTool::fillLegDecisions_sameLeg ( std::pair< Combo::LegDecision, Combo::LegDecision > &  legpair,
const Combination combination,
uint32_t  leg 
) const
private

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 194 of file TrigComboHypoTool.cxx.

194  {
195  Combination leg_features;
196  if(m_skipLegCheck) {
197  // If there is only one leg, the decision IDs don't have a leg ID
198  std::copy(combination.begin(),combination.end(),std::back_inserter(leg_features));
199  } else {
200  // Extract the features matching the legs
201  // We take all of them, so as to be able to check if there is any ambiguity
202  auto isMyLeg = [&leg](const Combo::LegDecision& d) { return testLegId(d,leg); };
203  std::copy_if(combination.begin(),combination.end(),std::back_inserter(leg_features),isMyLeg);
204  }
205 
206  if (leg_features.size()==2) {
207  legpair.first = leg_features[0];
208  legpair.second = leg_features[1];
209  } else {
210  ATH_MSG_ERROR(leg_features.size() << " Decision Objects supplied on leg " << leg
211  << ", must be 2 for same-leg topo selection!");
212  return false;
213  }
214 
215  return true;
216 }

◆ fillPairKinematics()

bool TrigComboHypoTool::fillPairKinematics ( std::pair< KineInfo, KineInfo > &  kinepair,
const Combination combination,
const VarInfo varInfo 
) const
private

Definition at line 247 of file TrigComboHypoTool.cxx.

247  {
248  ATH_MSG_DEBUG("Decision objects available = "<< combination);
249  // Check that there are enough features
250  size_t nFeatures(combination.size());
251  if (nFeatures < 2){
252  ATH_MSG_ERROR("Number of Decision Objects passed is less than 2! Sum over decision objects on all legs = " << combination.size() );
253  return false;
254  }
255  std::pair<Combo::LegDecision,Combo::LegDecision> legpair;
256  if (varInfo.legsAreEqual) {fillLegDecisions_sameLeg(legpair,combination,varInfo.legA);}
257  else {fillLegDecisions_diffLeg(legpair,combination,varInfo.legA,varInfo.legB);}
258  ATH_MSG_DEBUG("Fill leg A kinematics");
259  if(!fillKineInfo(kinepair.first,legpair.first,varInfo.legA_is_MET)) {
260  ATH_MSG_ERROR("Failed to extract requisite kinematic info from leg " << varInfo.legA << "!");
261  return false;
262  }
263  ATH_MSG_DEBUG("Fill leg B kinematics");
264  if(!fillKineInfo(kinepair.second,legpair.second,varInfo.legB_is_MET)) {
265  ATH_MSG_ERROR("Failed to extract requisite kinematic info from leg " << varInfo.legB << "!");
266  return false;
267  }
268  return true;
269  }

◆ initialize()

StatusCode TrigComboHypoTool::initialize ( )
overridevirtual

Definition at line 60 of file TrigComboHypoTool.cxx.

61 {
62  ATH_MSG_DEBUG("Variable = " << m_varTag_vec );
63  ATH_MSG_DEBUG("UseCut min = " << m_useMin_vec );
64  ATH_MSG_DEBUG("UseCut max = " << m_useMax_vec );
65  ATH_MSG_DEBUG("varCut min = " << m_varMin_vec );
66  ATH_MSG_DEBUG("varCut max = " << m_varMax_vec );
67  ATH_MSG_DEBUG("LegA = " << m_legA_vec );
68  ATH_MSG_DEBUG("LegB = " << m_legB_vec );
69 
70  ATH_CHECK( m_monTool_vec.retrieve() );
71 
72  if (m_legA_vec.size() != m_legB_vec.size()) {
73  ATH_MSG_ERROR("Trying to configure the Tool with legA and legB vectors of different size!");
74  return StatusCode::FAILURE;
75  }
76  if (m_useMin_vec.size() != m_useMax_vec.size()) {
77  ATH_MSG_ERROR("Trying to configure the Tool with UseMin and UseMax vectors of different size!");
78  return StatusCode::FAILURE;
79  }
80  if (m_legA_vec.size() != m_useMax_vec.size()) {
81  ATH_MSG_ERROR("Trying to configure the Tool with legA/B and UseMax/Min vectors of different size!");
82  return StatusCode::FAILURE;
83  }
84  if (m_varTag_vec.size() != m_useMax_vec.size()) {
85  ATH_MSG_ERROR("Trying to configure the Tool with varTag and UseMax/Min(LegA/B) vectors of different size!");
86  return StatusCode::FAILURE;
87  }
88 
89  for (size_t i=0; i<m_varTag_vec.size(); ++i){
90  VarInfo info;
91  info.index = i;
92  if(!m_monTool_vec.empty()) {
93  info.monToolName = m_monTool_vec[i].name();
94  }
95  if (VarMap.find(m_varTag_vec[i]) == VarMap.end()){
96  ATH_MSG_ERROR("The variable is not present in the ComboHypoVars list");
97  return StatusCode::FAILURE;
98  }
99  info.varTag = (m_varTag_vec[i]);
100  info.var = VarMap.at(m_varTag_vec[i]);
101  //
102  info.useMin = m_useMin_vec[i];
103  if(info.useMin) {info.varMin=m_varMin_vec[i];}
104  info.useMax = m_useMax_vec[i];
105  if(info.useMax) {info.varMax=m_varMax_vec[i];}
106  //
107  info.legA = m_legA_vec[i];
108  info.legA_is_MET = m_isLegA_MET_vec[i];
109  info.legB = m_legB_vec[i];
110  info.legB_is_MET = m_isLegB_MET_vec[i];
111  info.legsAreEqual = info.legA==info.legB;
112 
113  std::string validmsg{""};
114  if(!info.validate(validmsg)) {
115  ATH_MSG_ERROR(validmsg);
116  return StatusCode::FAILURE;
117  }
118 
119  m_varInfo_vec.push_back(info);
120  }
121  ATH_MSG_DEBUG("Initialization completed successfully");
122 
123  return StatusCode::SUCCESS;
124 }

◆ legDecisionId()

HLT::Identifier ComboHypoToolBase::legDecisionId ( size_t  i) const
inlineinherited

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.

60 { return m_legDecisionIds.at(i); }

◆ legDecisionIds()

const std::vector<HLT::Identifier>& ComboHypoToolBase::legDecisionIds ( ) const
inlineinherited

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.

66 { return m_legDecisionIds; }

◆ 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.

54 { return m_legMultiplicities; }

◆ printDebugInformation()

StatusCode ComboHypoToolBase::printDebugInformation ( const Combo::LegDecisionsMap passingLegs) const
protectedinherited

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.

264  {
265  ATH_MSG_DEBUG("ComboHypoToolBase: End of " << m_decisionId << ", passing elements are: ");
266  for (const auto& [id, ELV] : passingLegs) {
267  // Only print for this chain
268  if (id == m_decisionId or (isLegId(id) and m_decisionId == getIDFromLeg(id))) {
269  ATH_MSG_DEBUG("-- " << HLT::Identifier(id) << " with " << ELV.size() << " elements");
270  for (const auto& EL : ELV) {
271  ATH_MSG_DEBUG("-- -- container:" << EL.dataID() << ", index:" << EL.index());
272  }
273  }
274  }
275  return StatusCode::SUCCESS;
276 }

◆ selectLegs()

StatusCode ComboHypoToolBase::selectLegs ( const Combo::LegDecisionsMap IDCombMap,
std::vector< std::vector< Combo::LegDecision >> &  leg_decisions 
) const
protectedinherited

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.

173 {
174  /*
175  legDecisions: nested vector like:
176  [(leg0, el0), (leg0, el1), (leg0, el2), (leg0, el3)], <-- All leg0 objects are in legDecisions[0][X]
177  [(leg1, mu0), (leg1, mu1)] <-- All leg1 objects are in legDecisions[1][X]
178  We keep the legID in the std::pair inside the inner vector as these pairs will be flattened into a single vector
179  when individual combinations of objects are passed to executeAlg, pair.first then contains the leg, with pair.second containing the Decision Object.
180  */
181 
182  // Extract from IDCombMap the features for this chain. Wrap the features up in a pair along with their leg ID
183  for (size_t legIndex = 0; legIndex < m_legMultiplicities.size(); ++ legIndex) {
184 
185  // If the chain has more than one leg, then we have per-leg IDs. Otherwise we just use the chain's ID
186  const HLT::Identifier& legIdentifier = (m_legMultiplicities.size() > 1 ? m_legDecisionIds.at(legIndex) : m_decisionId);
187 
188  // Combo::LegDecision is a pair of <DecisionID, ElementLink<Decision>>
189  std::vector<Combo::LegDecision> decisionObjectsOnLeg;
190 
191  // Find physics objects on this leg. May be zero.
192  const Combo::LegDecisionsMap::const_iterator it = IDCombMap.find(legIdentifier.numeric());
193 
194  if (it != IDCombMap.end()) {
195  for (const ElementLink<DecisionContainer>& el : it->second) {
196  decisionObjectsOnLeg.emplace_back(legIdentifier, el);
197  }
198  }
199 
200  legDecisions.push_back(std::move(decisionObjectsOnLeg));
201  }
202 
203  if (msgLvl(MSG::DEBUG)) {
204  ATH_MSG_DEBUG("Getting " << legDecisions.size() << " legs to combine, for ID: " << decisionId());
205  size_t count = 0;
206  for (const auto& leg : legDecisions) {
207  ATH_MSG_DEBUG("Leg " << count++ << " --");
208  for (const auto& dEL : leg) {
209  ATH_MSG_DEBUG("-- " << HLT::Identifier(dEL.first) << " container:" << dEL.second.dataID() << ", index:" << dEL.second.index());
210  }
211  }
212  }
213  return StatusCode::SUCCESS;
214 }

◆ setLegMultiplicity()

StatusCode ComboHypoToolBase::setLegMultiplicity ( const Combo::MultiplicityReqMap multiplicityRequiredMap)
inherited

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.

16  {
17  const std::string nameOfToolsChain = m_decisionId.name();
18  const Combo::MultiplicityReqMap::const_iterator it = multiplicityRequiredMap.find(nameOfToolsChain);
19 
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;
23  }
24 
25  m_legMultiplicities = it->second;
26  if (m_legMultiplicities.size() == 0) {
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;
29  }
30 
31  m_legDecisionIds.clear();
32  for (size_t i = 0; i < m_legMultiplicities.size(); ++i) {
33  if(m_legMultiplicities.at(i) <= 0) {
34  ATH_MSG_ERROR("ComboHypoTool for " << m_decisionId << " has been configured with an impossible multiplicity requirement of " << m_legMultiplicities.at(i) << " on leg " << i);
35  return StatusCode::FAILURE;
36  }
37  ATH_MSG_DEBUG("ComboHypoTool for " << m_decisionId << " will require multiplicity " << m_legMultiplicities.at(i) << " on leg " << i);
38  if (m_legMultiplicities.size() > 1) { // We only have per-leg IDs when there is more than one leg
40  } else { // For one leg, just repete the chain's ID
41  m_legDecisionIds.push_back(m_decisionId);
42  }
43  }
44 
45  return StatusCode::SUCCESS;
46 }

◆ updateLegDecisionsMap()

void ComboHypoToolBase::updateLegDecisionsMap ( const std::vector< std::vector< Combo::LegDecision >> &  passing_comb,
Combo::LegDecisionsMap passingLegs 
) const
protectedinherited

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.

216  {
217  if (msgLvl(MSG::DEBUG)) {
218  size_t count = 0;
219  for (const std::vector<Combo::LegDecision>& comb : passingComb) {
220  ATH_MSG_DEBUG("-- Passing combination " << count++ << " of " << passingComb.size());
221  for (const auto& [id, EL] : comb) {
222  ATH_MSG_DEBUG("-- -- " << HLT::Identifier(id) << " container:" << EL.dataID() << ", index:" << EL.index());
223  }
224  }
225  }
226 
227  // remove combinations that didn't pass from the final map passingLegs
228  for (auto& it : passingLegs) {
229  DecisionID legId = it.first;
230  if (not(legId == m_decisionId or (isLegId(legId) and getIDFromLeg(legId) == m_decisionId))) {
231  continue; // Some other chain, ignore it to get faster execution.
232  }
233  std::vector<ElementLink<DecisionContainer>> updatedDecisionObjectsOnLeg;
234  bool update = false;
235  // Loop over all passing combinations, and all Decision Objects in each passing combination. Find Decision Objects on this leg.
236  for (const std::vector<Combo::LegDecision>& comb : passingComb) {
237  for (const auto& [id, EL] : comb) {
238  // Check that this Decision Object is on the correct leg, and that we haven't collated it already from another combination.
239  if (id == legId and std::find(updatedDecisionObjectsOnLeg.begin(), updatedDecisionObjectsOnLeg.end(), EL) == updatedDecisionObjectsOnLeg.end()) {
240  ATH_MSG_VERBOSE("Keeping on leg " << HLT::Identifier(id) << " the Decision Object container:" << EL.dataID() << ", index:" << EL.index());
241  updatedDecisionObjectsOnLeg.push_back(EL);
242  update = true;
243  }
244  }
245  }
246  // only update those concerning this tool ID
247  if (update){
248  it.second = updatedDecisionObjectsOnLeg;
249  }
250  }
251 }

Member Data Documentation

◆ FLOATDEFAULT

constexpr float TrigComboHypoTool::FLOATDEFAULT = std::numeric_limits<float>::lowest()
staticconstexprprivate

Definition at line 47 of file TrigComboHypoTool.h.

◆ 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

HLT::Identifier ComboHypoToolBase::m_decisionId
privateinherited

The DecisionID of the chain, obtained from the Tool's name.

Definition at line 122 of file ComboHypoToolBase.h.

◆ 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

Definition at line 109 of file TrigComboHypoTool.h.

◆ 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

Definition at line 110 of file TrigComboHypoTool.h.

◆ m_legA_vec

Gaudi::Property<std::vector<uint32_t> > TrigComboHypoTool::m_legA_vec {this, "LegAVec" , {0}, "Array with the first Leg ID"}
private

Definition at line 107 of file TrigComboHypoTool.h.

◆ m_legB_vec

Gaudi::Property<std::vector<uint32_t> > TrigComboHypoTool::m_legB_vec {this, "LegBVec" , {0}, "Array with the second Leg ID"}
private

Definition at line 108 of file TrigComboHypoTool.h.

◆ m_legDecisionIds

std::vector<HLT::Identifier> ComboHypoToolBase::m_legDecisionIds
privateinherited

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

ToolHandleArray<GenericMonitoringTool> TrigComboHypoTool::m_monTool_vec {this, "MonTools", {}, "Monitoring tools" }
private

Definition at line 118 of file TrigComboHypoTool.h.

◆ m_skipLegCheck

Gaudi::Property<bool> TrigComboHypoTool::m_skipLegCheck {this, "SkipLegCheck" , {false}, "Ignore leg IDs for chains with only one leg"}
private

Definition at line 111 of file TrigComboHypoTool.h.

◆ m_useMax_vec

Gaudi::Property<std::vector<bool> > TrigComboHypoTool::m_useMax_vec {this, "UseMaxVec" , {false}, "Array with the apply_max_cut setting"}
private

Definition at line 104 of file TrigComboHypoTool.h.

◆ m_useMin_vec

Gaudi::Property<std::vector<bool> > TrigComboHypoTool::m_useMin_vec {this, "UseMinVec" , {false}, "Array with the apply_min_cut setting"}
private

Definition at line 103 of file TrigComboHypoTool.h.

◆ m_varInfo_vec

std::vector<VarInfo> TrigComboHypoTool::m_varInfo_vec
private

Internal variables for more efficient config lookup.

Definition at line 121 of file TrigComboHypoTool.h.

◆ m_varMax_vec

Gaudi::Property<std::vector<float> > TrigComboHypoTool::m_varMax_vec {this, "UpperCutVec", {FLOATDEFAULT}, "Array with the upper cut for legs pair"}
private

Definition at line 115 of file TrigComboHypoTool.h.

◆ m_varMin_vec

Gaudi::Property<std::vector<float> > TrigComboHypoTool::m_varMin_vec {this, "LowerCutVec", {FLOATDEFAULT}, "Array with the lower cut for legs pair"}
private

Definition at line 114 of file TrigComboHypoTool.h.

◆ m_varTag_vec

Gaudi::Property<std::vector<std::string> > TrigComboHypoTool::m_varTag_vec {this, "Variables" , {""}, "Variables to cut on"}
private

Gaudi configuration hooks.

Definition at line 102 of file TrigComboHypoTool.h.


The documentation for this class was generated from the following files:
grepfile.info
info
Definition: grepfile.py:38
ComboHypoToolBase::executeAlg
virtual bool executeAlg(const std::vector< Combo::LegDecision > &combination) const
Only a dummy implementation exists in ComboHypoToolBase.
Definition: ComboHypoToolBase.cxx:279
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
TrigComboHypoTool::m_legB_vec
Gaudi::Property< std::vector< uint32_t > > m_legB_vec
Definition: TrigComboHypoTool.h:108
beamspotnt.var
var
Definition: bin/beamspotnt.py:1394
TrigComboHypoTool::m_monTool_vec
ToolHandleArray< GenericMonitoringTool > m_monTool_vec
Definition: TrigComboHypoTool.h:118
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
TrigComboHypoTool::m_varMax_vec
Gaudi::Property< std::vector< float > > m_varMax_vec
Definition: TrigComboHypoTool.h:115
TrigCompositeUtils::DecisionID
unsigned int DecisionID
Definition: TrigComposite_v1.h:27
ParticleGun_SamplingFraction.eta2
eta2
Definition: ParticleGun_SamplingFraction.py:96
ComboHypoToolBase::eraseFromLegDecisionsMap
void eraseFromLegDecisionsMap(Combo::LegDecisionsMap &passingLegs) const
For when the tool rejects all combinations.
Definition: ComboHypoToolBase.cxx:253
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
HLT::Identifier::numeric
TrigCompositeUtils::DecisionID numeric() const
numeric ID
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:47
TrigComboHypoTool::UNDEF
@ UNDEF
Definition: TrigComboHypoTool.h:36
TrigComboHypoTool::fillPairKinematics
bool fillPairKinematics(std::pair< KineInfo, KineInfo > &kinepair, const Combination &combination, const VarInfo &varInfo) const
Definition: TrigComboHypoTool.cxx:247
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
hist_file_dump.d
d
Definition: hist_file_dump.py:137
ComboHypoToolBase::printDebugInformation
StatusCode printDebugInformation(const Combo::LegDecisionsMap &passingLegs) const
Print the output of the tool, after having removed failed Decision Objects.
Definition: ComboHypoToolBase.cxx:264
ComboHypoToolBase::updateLegDecisionsMap
void updateLegDecisionsMap(const std::vector< std::vector< Combo::LegDecision >> &passing_comb, Combo::LegDecisionsMap &passingLegs) const
For when the tool accepts some/all combinations.
Definition: ComboHypoToolBase.cxx:216
invGeV
constexpr float invGeV
Definition: TrigComboHypoTool.cxx:19
TRTCalib_cfilter.p1
p1
Definition: TRTCalib_cfilter.py:130
HLT::NestedUniqueCombinationGenerator
An ensemble of UniqueCombinationGenerator API description.
Definition: TrigCompositeUtils/TrigCompositeUtils/Combinators.h:72
TrigComboHypoTool::MT
@ MT
Definition: TrigComboHypoTool.h:36
python.TrigCompositeUtils.isLegId
def isLegId(chainName)
Definition: DecisionHandling/python/TrigCompositeUtils.py:18
skel.it
it
Definition: skel.GENtoEVGEN.py:396
TrigComboHypoTool::DPHI
@ DPHI
Definition: TrigComboHypoTool.h:36
TrigComboHypoTool::m_isLegB_MET_vec
Gaudi::Property< std::vector< bool > > m_isLegB_MET_vec
Definition: TrigComboHypoTool.h:110
test_pyathena.pt
pt
Definition: test_pyathena.py:11
xAOD::P4Helpers::deltaPhi
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
Definition: xAODP4Helpers.h:69
athena.value
value
Definition: athena.py:124
xAOD::eta1
setEt setPhi setE277 setWeta2 eta1
Definition: TrigEMCluster_v1.cxx:41
TrigComboHypoTool::m_varTag_vec
Gaudi::Property< std::vector< std::string > > m_varTag_vec
Gaudi configuration hooks.
Definition: TrigComboHypoTool.h:102
ComboHypoToolBase::m_combinationsThresholdBreak
Gaudi::Property< size_t > m_combinationsThresholdBreak
Definition: ComboHypoToolBase.h:109
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
ComboHypoToolBase::m_modeOR
Gaudi::Property< bool > m_modeOR
Definition: ComboHypoToolBase.h:112
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
TrigComboHypoTool::INVM
@ INVM
Definition: TrigComboHypoTool.h:36
python.Bindings.values
values
Definition: Control/AthenaPython/python/Bindings.py:805
ComboHypoToolBase::decisionId
virtual HLT::Identifier decisionId() const
retrieves this ComboHypoTool's chain's decision ID
Definition: ComboHypoToolBase.h:41
LVL1::MT
LVL1::L1CaloFcal23Cells2RxMappingTool::mapType MT
Definition: L1CaloFcal23Cells2RxMappingTool.cxx:14
ComboHypoToolBase::m_legDecisionIds
std::vector< HLT::Identifier > m_legDecisionIds
The DecisionIDs of the individual legs, derived from both m_decisionId and m_legMultiplicities.
Definition: ComboHypoToolBase.h:123
TRTCalib_cfilter.p2
p2
Definition: TRTCalib_cfilter.py:131
ComboHypoToolBase::m_enableOverride
Gaudi::Property< bool > m_enableOverride
Definition: ComboHypoToolBase.h:115
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TrigComboHypoTool::fillKineInfo
bool fillKineInfo(KineInfo &kinematics, Combo::LegDecision decision, bool isMET) const
Definition: TrigComboHypoTool.cxx:272
TrigComboHypoTool::fillLegDecisions_sameLeg
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 – exactl...
Definition: TrigComboHypoTool.cxx:194
lumiFormat.i
int i
Definition: lumiFormat.py:85
xAOD::P4Helpers::deltaR
double deltaR(double rapidity1, double phi1, double rapidity2, double phi2)
from bare bare rapidity,phi
Definition: xAODP4Helpers.h:150
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ComboHypoToolBase::m_combinationsThresholdWarn
Gaudi::Property< size_t > m_combinationsThresholdWarn
Definition: ComboHypoToolBase.h:106
calibdata.exception
exception
Definition: calibdata.py:496
TrigComboHypoTool::m_isLegA_MET_vec
Gaudi::Property< std::vector< bool > > m_isLegA_MET_vec
Definition: TrigComboHypoTool.h:109
test_pyathena.parent
parent
Definition: test_pyathena.py:15
TrigComboHypoTool::FLOATDEFAULT
static constexpr float FLOATDEFAULT
Definition: TrigComboHypoTool.h:47
plotIsoValidation.el
el
Definition: plotIsoValidation.py:197
HLT::NestedUniqueCombinationGenerator::add
void add(const UniqueCombinationGenerator &gen)
Definition: Combinators.cxx:83
AnalysisUtils::copy_if
Out copy_if(In first, const In &last, Out res, const Pred &p)
Definition: IFilterUtils.h:30
compute_lumi.leg
leg
Definition: compute_lumi.py:95
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
EL
This module defines the arguments passed from the BATCH driver to the BATCH worker.
Definition: AlgorithmWorkerData.h:24
Combination
TrigComboHypoTool::executeAlgStep
bool executeAlgStep(const Combination &combination, const VarInfo &, std::vector< float > &values) const
Implementation of selection on individual variables.
Definition: TrigComboHypoTool.cxx:151
HLT::Identifier
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:20
TrigComboHypoTool::DR
@ DR
Definition: TrigComboHypoTool.h:36
ComboHypoToolBase::m_decisionId
HLT::Identifier m_decisionId
The DecisionID of the chain, obtained from the Tool's name.
Definition: ComboHypoToolBase.h:122
TrigComboHypoTool::m_varInfo_vec
std::vector< VarInfo > m_varInfo_vec
Internal variables for more efficient config lookup.
Definition: TrigComboHypoTool.h:121
TrigCompositeUtils::featureString
const std::string & featureString()
Definition: TrigCompositeUtilsRoot.cxx:884
ComboHypoToolBase::selectLegs
StatusCode selectLegs(const Combo::LegDecisionsMap &IDCombMap, std::vector< std::vector< Combo::LegDecision >> &leg_decisions) const
Creates the per-leg vectors of Decision objects starting from the initial LegDecision map,...
Definition: ComboHypoToolBase.cxx:172
TrigComboHypoTool::compute
float compute(const std::pair< KineInfo, KineInfo > &kinepair, ComboHypoVars var) const
Computation of the variables from the specified kinematics.
Definition: TrigComboHypoTool.cxx:300
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
TrigComboHypoTool::m_useMax_vec
Gaudi::Property< std::vector< bool > > m_useMax_vec
Definition: TrigComboHypoTool.h:104
TrigCompositeUtils::createLegName
HLT::Identifier createLegName(const HLT::Identifier &chainIdentifier, size_t counter)
Generate the HLT::Identifier which corresponds to a specific leg of a given chain.
Definition: TrigCompositeUtilsRoot.cxx:166
ComboHypoToolBase::ComboHypoToolBase
ComboHypoToolBase(const std::string &type, const std::string &name, const IInterface *parent)
Definition: ComboHypoToolBase.cxx:10
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TrigComboHypoTool::m_varMin_vec
Gaudi::Property< std::vector< float > > m_varMin_vec
Definition: TrigComboHypoTool.h:114
TrigComboHypoTool::fillLegDecisions_diffLeg
bool fillLegDecisions_diffLeg(std::pair< Combo::LegDecision, Combo::LegDecision > &legpair, const Combination &combination, uint32_t legA, uint32_t legB) const
Definition: TrigComboHypoTool.cxx:219
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
HLT::Identifier::name
std::string name() const
reports human redable name if it is enabled or, empty string
Definition: HLTIdentifier.cxx:14
pickleTool.object
object
Definition: pickleTool.py:30
TrigComboHypoTool::m_skipLegCheck
Gaudi::Property< bool > m_skipLegCheck
Definition: TrigComboHypoTool.h:111
TrigCompositeUtils::getIDFromLeg
HLT::Identifier getIDFromLeg(const HLT::Identifier &legIdentifier)
Generate the HLT::Identifier which corresponds to the chain name from the leg name.
Definition: TrigCompositeUtilsRoot.cxx:180
calibdata.copy
bool copy
Definition: calibdata.py:27
ComboHypoToolBase::m_legMultiplicities
std::vector< int > m_legMultiplicities
The number of legs, and the required multiplicity on each leg.
Definition: ComboHypoToolBase.h:124
VarMap
const std::map< std::string, TrigComboHypoTool::ComboHypoVars > VarMap
Definition: TrigComboHypoTool.cxx:24
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
testLegId
bool testLegId(const Combo::LegDecision &d, uint32_t targetleg)
Test function to compare decision ID with the legs to be used in var computation.
Definition: TrigComboHypoTool.cxx:187
TrigComboHypoTool::m_useMin_vec
Gaudi::Property< std::vector< bool > > m_useMin_vec
Definition: TrigComboHypoTool.h:103
TrigComboHypoTool::DETA
@ DETA
Definition: TrigComboHypoTool.h:36
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
WriteBchToCool.update
update
Definition: WriteBchToCool.py:67
Combo::LegDecision
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...
Definition: IComboHypoTool.h:33
PlotCalibFromCool.vals
vals
Definition: PlotCalibFromCool.py:474
TrigComboHypoTool::m_legA_vec
Gaudi::Property< std::vector< uint32_t > > m_legA_vec
Definition: TrigComboHypoTool.h:107