ATLAS Offline Software
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
TrigMultiTrkComboHypoTool Class Reference

#include <TrigMultiTrkComboHypoTool.h>

Inheritance diagram for TrigMultiTrkComboHypoTool:
Collaboration diagram for TrigMultiTrkComboHypoTool:

Public Member Functions

 TrigMultiTrkComboHypoTool (const std::string &type, const std::string &name, const IInterface *parent)
 
virtual StatusCode initialize () override
 
virtual StatusCode decideOnSingleObject (TrigCompositeUtils::Decision *, const std::vector< const TrigCompositeUtils::DecisionIDContainer * > &) const override
 Alternate method called by BPhysics ComboHypoAlgs instead of the base method decide(...). More...
 
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...
 

Protected Member Functions

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 Member Functions

bool passed (const xAOD::TrigBphys *) const
 
virtual bool executeAlg (const std::vector< Combo::LegDecision > &) const override
 Only a dummy implementation exists in ComboHypoToolBase. More...
 
bool checkPreviousDecisionIDs (const std::vector< const TrigCompositeUtils::DecisionIDContainer * > &) const
 
int totalCharge (const xAOD::TrigBphys *) const
 
bool isInMassRange (double mass) const
 
bool passedDeltaRcut (const xAOD::TrigBphys *) const
 
bool passedPtCut (const xAOD::TrigBphys *) const
 
bool passedChi2Cut (int chi2) const
 
bool passedChargeCut (int charge) const
 

Private Attributes

Gaudi::Property< unsigned int > m_nTrk {this, "nTrk", 2, "number of tracks in the vertex"}
 
Gaudi::Property< std::vector< double > > m_trkPt {this, "trackPtThresholds", {-1., 3000.}, "minimum track transverse momenta (as they appear in TrigBphys)"}
 
Gaudi::Property< int > m_totalCharge {this, "totalCharge", 0, "magnitude of the total charge to accept, negative is none" }
 
Gaudi::Property< std::pair< double, double > > m_massRange {this, "massRange", {-99., -9.}, "range for the fitted mass, no selection applied if negative"}
 
Gaudi::Property< float > m_chi2 {this, "chi2", -99. , "Chi2 cut for vertex (0 < chi2 < cut), no selection applied if negative" }
 
Gaudi::Property< bool > m_acceptAll {this, "AcceptAll", false, "if AcceptAll flag is set to true, no selection will be applied for xAOD::TrigBphys object"}
 
Gaudi::Property< float > m_LxyCut {this, "LxyCut", -99., "Applies an Lxy Cut if set >= 0"}
 
Gaudi::Property< float > m_sigmaLxyCut {this, "sigmaLxyCut", -99., "Applies an Lxy/LxyError Cut if set >= 0"}
 
Gaudi::Property< float > m_deltaRMax
 
Gaudi::Property< float > m_deltaRMin
 
Gaudi::Property< bool > m_isCombinedChain {this, "isCombinedChain", false, "true for chains with different signatures, e.g. HLT_e9_mu6"}
 
Gaudi::Property< bool > m_isMergedElectronChain {this, "isMergedElectronChain", false, "true for close-by electrons, e.g. HLT_e5_lhvloose_L1BPH-0DR3-EM7J15"}
 
Gaudi::Property< bool > m_isMuonTrkPEB {this, "isMuonTrkPEB", false, "chains like HLT_mu6_bJpsimutrk_MuonTrkPEB_L1MU5VF"}
 
Gaudi::Property< std::vector< unsigned int > > m_legMultiplicities {this, "legMultiplicities", {2}, "taken from dict[chainMultiplicities]"}
 
ToolHandle< GenericMonitoringToolm_monTool {this, "MonTool", "", "Monitoring tool" }
 
std::vector< TrigCompositeUtils::DecisionIDm_legDecisionIDs
 
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...
 

Detailed Description

Definition at line 34 of file TrigMultiTrkComboHypoTool.h.

Constructor & Destructor Documentation

◆ TrigMultiTrkComboHypoTool()

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

Definition at line 27 of file TrigMultiTrkComboHypoTool.cxx.

Member Function Documentation

◆ checkPreviousDecisionIDs()

bool TrigMultiTrkComboHypoTool::checkPreviousDecisionIDs ( const std::vector< const TrigCompositeUtils::DecisionIDContainer * > &  ) const
private

Definition at line 146 of file TrigMultiTrkComboHypoTool.cxx.

146  {
147 
148  // the default ComboHypoTool is used at the previous step (muEFCB) to check the number of muons is sufficient to fire the BLS trigger
149  // now we should only check the muons fitted to the common vertex are marked as passed the corresponding trigger
150  // trigger with asymmetric legs (like HLT_mu6_2mu4_bDimu_L1MU6_3MU4) is treated in a specific way:
151  // all 6 possible combinations should be checked: {leg0, leg1}, {leg0, leg2}, {leg1, leg0}, {leg1, leg2}, {leg2, leg0}, {leg2, leg1}
152 
154  if (!TrigCompositeUtils::passed(m_legDecisionIDs.at(0), *previousDecisionIDs[0])) {
155  ATH_MSG_DEBUG( "Trigger for " << (m_isMergedElectronChain ? "close-by electrons" : "muon+track") << " didn't pass previous decision" );
156  return false;
157  }
158  return true;
159  }
160  else if (decisionId() == legDecisionId(0)) { // trigger with symmetric legs like HLT_3mu6_bDimu_L13MU6
161  for (size_t i = 0; i < m_nTrk; ++i) {
162  if (!TrigCompositeUtils::passed(decisionId().numeric(), *previousDecisionIDs[i])) {
163  ATH_MSG_DEBUG( "Trigger with symmetric legs didn't pass previous decision" );
164  return false;
165  }
166  }
167  ATH_MSG_DEBUG( "Trigger with symmetric legs passed previous decision" );
168  return true;
169  }
170  else { // trigger with asymmetric legs like HLT_mu6_2mu4_bDimu_L1MU6_3MU4
171 
172  std::vector<size_t> a(m_legDecisionIDs.size());
173  std::iota(a.begin(), a.end(), 0); // {0, 1, 2, .., m_legDecisionIDs().size() - 1}
174  int i = 1;
175  bool result = true;
176  do {
177  result = true;
178  for (size_t k = 0; k < m_nTrk; ++k) {
179  result = result && TrigCompositeUtils::passed(m_legDecisionIDs.at(a[k]), *previousDecisionIDs[k]);
180  }
181  if (msgLvl(MSG::DEBUG)) {
182  msg() << "combination #" << i++ << ": { ";
183  std::copy(a.begin(), a.begin() + m_nTrk, std::ostream_iterator<int>(msg().stream(), " "));
184  msg() << "} " << (result ? " passed" : "didn't pass") << endmsg;
185  }
186  if (result) break;
187  } while (std::next_permutation(a.begin(), a.end()));
188  ATH_MSG_DEBUG( "Trigger with asymmetric legs " << (result ? "passed" : "didn't pass") << " previous decision" );
189  return result;
190  }
191  return true;
192 }

◆ 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 TrigMultiTrkComboHypoTool::decideOnSingleObject ( TrigCompositeUtils::Decision ,
const std::vector< const TrigCompositeUtils::DecisionIDContainer * > &   
) const
overridevirtual

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 from ComboHypoToolBase.

Definition at line 118 of file TrigMultiTrkComboHypoTool.cxx.

118  {
119  ATH_MSG_DEBUG( "decideOnSingleObject trigger tool: " << decisionId() );
120  ATH_CHECK( decision->hasObjectLink(TrigCompositeUtils::featureString()) );
121 
122  auto trigBphysEL = decision->objectLink<xAOD::TrigBphysContainer>(TrigCompositeUtils::featureString());
123  ATH_CHECK( trigBphysEL.isValid() );
124 
125  if (previousDecisionIDs.size() != (m_isMergedElectronChain || m_isMuonTrkPEB ? 1 : m_nTrk.value())) {
126  return StatusCode::SUCCESS;
127  }
128 
129  if (!checkPreviousDecisionIDs(previousDecisionIDs)) {
130  return StatusCode::SUCCESS;
131  }
132 
133  if (m_acceptAll || passed(*trigBphysEL)) {
135  if (m_isCombinedChain) {
136  for (size_t i = 0; i < m_nTrk; ++i) {
138  }
139  }
140  }
141 
142  return StatusCode::SUCCESS;
143 }

◆ 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()

bool TrigMultiTrkComboHypoTool::executeAlg ( const std::vector< Combo::LegDecision > &  combination) const
overrideprivatevirtual

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 from ComboHypoToolBase.

Definition at line 239 of file TrigMultiTrkComboHypoTool.cxx.

239  {
240  ATH_MSG_ERROR( "executeAlg() is not supported by TrigMultiTrkComboHypoTool" );
241  return true;
242 }

◆ initialize()

StatusCode TrigMultiTrkComboHypoTool::initialize ( )
overridevirtual

Definition at line 31 of file TrigMultiTrkComboHypoTool.cxx.

31  {
32  ATH_MSG_DEBUG( "configuration for '" << this->name() << "'" << endmsg <<
33  " AcceptAll = " << (m_acceptAll ? "True" : "False") << endmsg <<
34  " isCombinedChain = " << (m_isCombinedChain ? "True" : "False") << endmsg <<
35  " isMergedElectronChain = " << (m_isMergedElectronChain ? "True" : "False") << endmsg <<
36  " mass range: ( " << m_massRange.value().first << ", " << m_massRange.value().second << " )" << endmsg <<
37  " chi2 cut: " << m_chi2 << endmsg <<
38  " " << (m_totalCharge < 0 ? "total charge cut is disabled" : "total charge cut: only right charge combinations") << endmsg <<
39  " LxyCut: > " << m_LxyCut.value() << endmsg <<
40  " sigmaLxyCut: > " << m_sigmaLxyCut.value() );
41 
42  ATH_CHECK( m_nTrk >= 2 );
44 
45  ATH_CHECK( !m_legMultiplicities.empty() );
46  if ( m_legMultiplicities.size() > 1 ) { // chain with asymmetric legs, as HLT_mu6_2mu4_bDimu_L1MU6_3MU4
47  // here we consider each decision as an individual object, i.e. for HLT_mu6_2mu4_bDimu_L1MU6_3MU4 we use
48  // m_legDecisionIDs = {createLegName("HLT_mu6_2mu4_bDimu_L1MU6_3MU4", 0),
49  // createLegName("HLT_mu6_2mu4_bDimu_L1MU6_3MU4", 1),
50  // createLegName("HLT_mu6_2mu4_bDimu_L1MU6_3MU4", 1)};
51  for (size_t legIndex = 0; legIndex < m_legMultiplicities.size(); ++legIndex) {
52  // can not use legDecisionId(legIndex) at initialize() step, use TrigCompositeUtils::createLegName() instead
53  auto legId = TrigCompositeUtils::createLegName(decisionId(), legIndex);
54  m_legDecisionIDs.insert(m_legDecisionIDs.end(), m_legMultiplicities[legIndex], legId.numeric());
55  }
56  }
57  else { // chain with symmetric legs, as HLT_2mu4_bDimu_L12MU4
58  m_legDecisionIDs.insert(m_legDecisionIDs.end(), m_legMultiplicities[0], decisionId().numeric());
59  }
61  ATH_CHECK( m_trkPt.size() == 2 || !m_isMuonTrkPEB );
62 
63  if (!m_monTool.empty()) {
64  ATH_CHECK( m_monTool.retrieve() );
65  ATH_MSG_DEBUG( "GenericMonitoringTool name:" << m_monTool );
66  }
67  else {
68  ATH_MSG_DEBUG( "No GenericMonitoringTool configured: no monitoring histograms will be available" );
69  }
70 
71  return StatusCode::SUCCESS;
72 }

◆ isInMassRange()

bool TrigMultiTrkComboHypoTool::isInMassRange ( double  mass) const
private

Definition at line 195 of file TrigMultiTrkComboHypoTool.cxx.

195  {
196 
197  const auto& range = m_massRange.value();
198  if ( range.first > 0. && mass < range.first ) return false;
199  if ( range.second > 0. && mass > range.second ) return false;
200  return true;
201 }

◆ 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; }

◆ passed()

bool TrigMultiTrkComboHypoTool::passed ( const xAOD::TrigBphys trigBphys) const
private

Definition at line 75 of file TrigMultiTrkComboHypoTool.cxx.

75  {
76  ATH_MSG_DEBUG( "TrigMultiTrkComboHypoTool::passed()" );
77 
78  auto mon_totalCharge = Monitored::Scalar<int>("totalCharge", -100);
79  auto mon_chi2 = Monitored::Scalar<float>("chi2", -1.);
80  auto mon_mass = Monitored::Scalar<float>("mass", -1.);
81  auto mon_pT_trk1 = Monitored::Scalar<float>("pT_trk1", -1.);
82  auto mon_pT_trk2 = Monitored::Scalar<float>("pT_trk2", -1.);
83  auto mon_D0_trk1 = Monitored::Scalar<float>("d0_trk1", -1.);
84  auto mon_D0_trk2 = Monitored::Scalar<float>("d0_trk2", -1.);
85  auto mon_Lxy = Monitored::Scalar<float>("Lxy", -1.);
86  auto mon_Eta1 = Monitored::Scalar<float>("eta_trk1", -100.);
87  auto mon_Eta2 = Monitored::Scalar<float>("eta_trk2", -100.);
88 
89  auto mon = Monitored::Group( m_monTool, mon_totalCharge, mon_chi2, mon_mass, mon_pT_trk1, mon_pT_trk2, mon_Lxy, mon_D0_trk1, mon_D0_trk2, mon_Eta1, mon_Eta2);
90 
91  if (m_acceptAll || (trigBphys->nTrackParticles() == m_nTrk &&
92  isInMassRange(trigBphys->mass()) &&
93  passedChi2Cut(trigBphys->fitchi2()) &&
94  passedChargeCut(totalCharge(trigBphys)) &&
95  (m_LxyCut < 0. || trigBphys->lxy() > m_LxyCut) &&
96  (m_sigmaLxyCut < 0. || (trigBphys->lxyError() != 0. && trigBphys->lxy() / trigBphys->lxyError() > m_sigmaLxyCut)) &&
97  passedDeltaRcut(trigBphys) &&
98  passedPtCut(trigBphys))) {
99  mon_Lxy = trigBphys->lxy();
100  mon_totalCharge = totalCharge(trigBphys);
101  mon_chi2 = trigBphys->fitchi2();
102  mon_mass = 0.001 * trigBphys->mass();
103  mon_pT_trk1 = 0.001 * trigBphys->trackParticle(0)->pt();
104  mon_pT_trk2 = 0.001 * trigBphys->trackParticle(1)->pt();
105  mon_D0_trk1 = trigBphys->trackParticle(0)->d0();
106  mon_D0_trk2 = trigBphys->trackParticle(1)->d0();
107  mon_Eta1 = trigBphys->trackParticle(0)->eta();
108  mon_Eta2 = trigBphys->trackParticle(1)->eta();
109  ATH_MSG_DEBUG( "accepting event" );
110  return true;
111  }
112 
113  ATH_MSG_DEBUG( "reject event" );
114  return false;
115 }

◆ passedChargeCut()

bool TrigMultiTrkComboHypoTool::passedChargeCut ( int  charge) const
inlineprivate

Definition at line 57 of file TrigMultiTrkComboHypoTool.h.

57 {this, "LxyCut", -99., "Applies an Lxy Cut if set >= 0"};

◆ passedChi2Cut()

bool TrigMultiTrkComboHypoTool::passedChi2Cut ( int  chi2) const
inlineprivate

Definition at line 56 of file TrigMultiTrkComboHypoTool.h.

56 {this, "AcceptAll", false, "if AcceptAll flag is set to true, no selection will be applied for xAOD::TrigBphys object"};

◆ passedDeltaRcut()

bool TrigMultiTrkComboHypoTool::passedDeltaRcut ( const xAOD::TrigBphys trigBphys) const
private

Definition at line 203 of file TrigMultiTrkComboHypoTool.cxx.

203  {
204  if (m_deltaRMax == std::numeric_limits<float>::max() && m_deltaRMin == std::numeric_limits<float>::lowest()) { // Cut disabled
205  return true;
206  }
207  size_t N = trigBphys->nTrackParticles();
208  for (size_t i = 0 ; i < N; i++) {
209  auto p1 = trigBphys->trackParticle(i)->genvecP4();
210  for (size_t j = i + 1; j < N; j++) {
211  auto p2 = trigBphys->trackParticle(j)->genvecP4();
213  if (deltaR > m_deltaRMax || deltaR < m_deltaRMin) return false;
214  }
215  }
216  return true;
217 }

◆ passedPtCut()

bool TrigMultiTrkComboHypoTool::passedPtCut ( const xAOD::TrigBphys trigBphys) const
private

Definition at line 219 of file TrigMultiTrkComboHypoTool.cxx.

219  {
220  if (!m_isMuonTrkPEB) return true;
221 
222  size_t N = trigBphys->nTrackParticles();
223  for (size_t i = 0 ; i < N; ++i) {
224  if (m_trkPt[i] > 0. && trigBphys->trackParticle(i)->pt() < m_trkPt[i]) return false;
225  }
226  return true;
227 }

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

◆ totalCharge()

int TrigMultiTrkComboHypoTool::totalCharge ( const xAOD::TrigBphys trigBphys) const
private

Definition at line 229 of file TrigMultiTrkComboHypoTool.cxx.

229  {
230 
231  int charge = 0;
232  for (size_t i = 0; i < trigBphys->nTrackParticles(); ++i) {
233  charge += static_cast<int>(trigBphys->trackParticle(i)->charge());
234  }
235  return charge;
236 }

◆ 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

◆ m_acceptAll

Gaudi::Property<bool> TrigMultiTrkComboHypoTool::m_acceptAll {this, "AcceptAll", false, "if AcceptAll flag is set to true, no selection will be applied for xAOD::TrigBphys object"}
private

Definition at line 64 of file TrigMultiTrkComboHypoTool.h.

◆ m_chi2

Gaudi::Property<float> TrigMultiTrkComboHypoTool::m_chi2 {this, "chi2", -99. , "Chi2 cut for vertex (0 < chi2 < cut), no selection applied if negative" }
private

Definition at line 63 of file TrigMultiTrkComboHypoTool.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_deltaRMax

Gaudi::Property<float> TrigMultiTrkComboHypoTool::m_deltaRMax
private
Initial value:
{this, "deltaRMax", std::numeric_limits<float>::max(),
"maximum deltaR between tracks in a candidate"}

Definition at line 67 of file TrigMultiTrkComboHypoTool.h.

◆ m_deltaRMin

Gaudi::Property<float> TrigMultiTrkComboHypoTool::m_deltaRMin
private
Initial value:
{this, "deltaRMin", std::numeric_limits<float>::lowest(),
"maximum deltaR between tracks in a candidate"}

Definition at line 69 of file TrigMultiTrkComboHypoTool.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_isCombinedChain

Gaudi::Property<bool> TrigMultiTrkComboHypoTool::m_isCombinedChain {this, "isCombinedChain", false, "true for chains with different signatures, e.g. HLT_e9_mu6"}
private

Definition at line 71 of file TrigMultiTrkComboHypoTool.h.

◆ m_isMergedElectronChain

Gaudi::Property<bool> TrigMultiTrkComboHypoTool::m_isMergedElectronChain {this, "isMergedElectronChain", false, "true for close-by electrons, e.g. HLT_e5_lhvloose_L1BPH-0DR3-EM7J15"}
private

Definition at line 72 of file TrigMultiTrkComboHypoTool.h.

◆ m_isMuonTrkPEB

Gaudi::Property<bool> TrigMultiTrkComboHypoTool::m_isMuonTrkPEB {this, "isMuonTrkPEB", false, "chains like HLT_mu6_bJpsimutrk_MuonTrkPEB_L1MU5VF"}
private

Definition at line 73 of file TrigMultiTrkComboHypoTool.h.

◆ m_legDecisionIDs

std::vector<TrigCompositeUtils::DecisionID> TrigMultiTrkComboHypoTool::m_legDecisionIDs
private

Definition at line 77 of file TrigMultiTrkComboHypoTool.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

Gaudi::Property<std::vector<unsigned int> > TrigMultiTrkComboHypoTool::m_legMultiplicities {this, "legMultiplicities", {2}, "taken from dict[chainMultiplicities]"}
private

Definition at line 74 of file TrigMultiTrkComboHypoTool.h.

◆ m_LxyCut

Gaudi::Property<float> TrigMultiTrkComboHypoTool::m_LxyCut {this, "LxyCut", -99., "Applies an Lxy Cut if set >= 0"}
private

Definition at line 65 of file TrigMultiTrkComboHypoTool.h.

◆ m_massRange

Gaudi::Property<std::pair<double, double> > TrigMultiTrkComboHypoTool::m_massRange {this, "massRange", {-99., -9.}, "range for the fitted mass, no selection applied if negative"}
private

Definition at line 62 of file TrigMultiTrkComboHypoTool.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

ToolHandle<GenericMonitoringTool> TrigMultiTrkComboHypoTool::m_monTool {this, "MonTool", "", "Monitoring tool" }
private

Definition at line 75 of file TrigMultiTrkComboHypoTool.h.

◆ m_nTrk

Gaudi::Property<unsigned int> TrigMultiTrkComboHypoTool::m_nTrk {this, "nTrk", 2, "number of tracks in the vertex"}
private

Definition at line 59 of file TrigMultiTrkComboHypoTool.h.

◆ m_sigmaLxyCut

Gaudi::Property<float> TrigMultiTrkComboHypoTool::m_sigmaLxyCut {this, "sigmaLxyCut", -99., "Applies an Lxy/LxyError Cut if set >= 0"}
private

Definition at line 66 of file TrigMultiTrkComboHypoTool.h.

◆ m_totalCharge

Gaudi::Property<int> TrigMultiTrkComboHypoTool::m_totalCharge {this, "totalCharge", 0, "magnitude of the total charge to accept, negative is none" }
private

Definition at line 61 of file TrigMultiTrkComboHypoTool.h.

◆ m_trkPt

Gaudi::Property<std::vector<double> > TrigMultiTrkComboHypoTool::m_trkPt {this, "trackPtThresholds", {-1., 3000.}, "minimum track transverse momenta (as they appear in TrigBphys)"}
private

Definition at line 60 of file TrigMultiTrkComboHypoTool.h.


The documentation for this class was generated from the following files:
ComboHypoToolBase::executeAlg
virtual bool executeAlg(const std::vector< Combo::LegDecision > &combination) const
Only a dummy implementation exists in ComboHypoToolBase.
Definition: ComboHypoToolBase.cxx:279
xAOD::TrackParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TrackParticle_v1.cxx:73
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
TrigMultiTrkComboHypoTool::m_acceptAll
Gaudi::Property< bool > m_acceptAll
Definition: TrigMultiTrkComboHypoTool.h:64
TrigMultiTrkComboHypoTool::passedDeltaRcut
bool passedDeltaRcut(const xAOD::TrigBphys *) const
Definition: TrigMultiTrkComboHypoTool.cxx:203
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
TrigMultiTrkComboHypoTool::m_deltaRMax
Gaudi::Property< float > m_deltaRMax
Definition: TrigMultiTrkComboHypoTool.h:67
get_generator_info.result
result
Definition: get_generator_info.py:21
TrigMultiTrkComboHypoTool::passed
bool passed(const xAOD::TrigBphys *) const
Definition: TrigMultiTrkComboHypoTool.cxx:75
TrigCompositeUtils::DecisionID
unsigned int DecisionID
Definition: TrigComposite_v1.h:27
ComboHypoToolBase::eraseFromLegDecisionsMap
void eraseFromLegDecisionsMap(Combo::LegDecisionsMap &passingLegs) const
For when the tool rejects all combinations.
Definition: ComboHypoToolBase.cxx:253
TrigCompositeUtils::passed
bool passed(DecisionID id, const DecisionIDContainer &idSet)
checks if required decision ID is in the set of IDs in the container
Definition: TrigCompositeUtilsRoot.cxx:117
TrigMultiTrkComboHypoTool::m_sigmaLxyCut
Gaudi::Property< float > m_sigmaLxyCut
Definition: TrigMultiTrkComboHypoTool.h:66
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
Base_Fragment.mass
mass
Definition: Sherpa_i/share/common/Base_Fragment.py:59
xAOD::TrackParticle_v1::charge
float charge() const
Returns the charge.
Definition: TrackParticle_v1.cxx:150
ComboHypoToolBase::legDecisionId
HLT::Identifier legDecisionId(size_t i) const
Retrieves this ComboHypoTool's chain's decision ID for a given leg.
Definition: ComboHypoToolBase.h:60
TrigMultiTrkComboHypoTool::m_trkPt
Gaudi::Property< std::vector< double > > m_trkPt
Definition: TrigMultiTrkComboHypoTool.h:60
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
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
xAOD::TrackParticle_v1::eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition: TrackParticle_v1.cxx:77
met::DeltaR
@ DeltaR
Definition: METRecoCommon.h:11
TrigCompositeUtils::addDecisionID
void addDecisionID(DecisionID id, Decision *d)
Appends the decision (given as ID) to the decision object.
Definition: TrigCompositeUtilsRoot.cxx:61
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
TRTCalib_cfilter.p1
p1
Definition: TRTCalib_cfilter.py:130
HLT::NestedUniqueCombinationGenerator
An ensemble of UniqueCombinationGenerator API description.
Definition: TrigCompositeUtils/TrigCompositeUtils/Combinators.h:72
python.TrigCompositeUtils.isLegId
def isLegId(chainName)
Definition: DecisionHandling/python/TrigCompositeUtils.py:18
skel.it
it
Definition: skel.GENtoEVGEN.py:396
TrigMultiTrkComboHypoTool::passedChargeCut
bool passedChargeCut(int charge) const
Definition: TrigMultiTrkComboHypoTool.h:57
TrigMultiTrkComboHypoTool::m_isMuonTrkPEB
Gaudi::Property< bool > m_isMuonTrkPEB
Definition: TrigMultiTrkComboHypoTool.h:73
xAOD::TrigBphys_v1::mass
float mass() const
accessor method: mass
JetTiledMap::N
@ N
Definition: TiledEtaPhiMap.h:44
ComboHypoToolBase::m_combinationsThresholdBreak
Gaudi::Property< size_t > m_combinationsThresholdBreak
Definition: ComboHypoToolBase.h:109
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
AthenaPoolTestWrite.stream
string stream
Definition: AthenaPoolTestWrite.py:12
ComboHypoToolBase::m_modeOR
Gaudi::Property< bool > m_modeOR
Definition: ComboHypoToolBase.h:112
xAOD::TrackParticle_v1::d0
float d0() const
Returns the parameter.
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
ComboHypoToolBase::decisionId
virtual HLT::Identifier decisionId() const
retrieves this ComboHypoTool's chain's decision ID
Definition: ComboHypoToolBase.h:41
TrigMultiTrkComboHypoTool::m_massRange
Gaudi::Property< std::pair< double, double > > m_massRange
Definition: TrigMultiTrkComboHypoTool.h:62
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
TrigMultiTrkComboHypoTool::isInMassRange
bool isInMassRange(double mass) const
Definition: TrigMultiTrkComboHypoTool.cxx:195
lumiFormat.i
int i
Definition: lumiFormat.py:85
TrigMultiTrkComboHypoTool::passedPtCut
bool passedPtCut(const xAOD::TrigBphys *) const
Definition: TrigMultiTrkComboHypoTool.cxx:219
TrigMultiTrkComboHypoTool::m_isCombinedChain
Gaudi::Property< bool > m_isCombinedChain
Definition: TrigMultiTrkComboHypoTool.h:71
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
xAOD::TrigBphys_v1::lxyError
float lxyError() const
accessor method: lxy uncertainty
Definition: TrigBphys_v1.cxx:390
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
TrigMultiTrkComboHypoTool::m_deltaRMin
Gaudi::Property< float > m_deltaRMin
Definition: TrigMultiTrkComboHypoTool.h:69
calibdata.exception
exception
Definition: calibdata.py:496
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
test_pyathena.parent
parent
Definition: test_pyathena.py:15
plotIsoValidation.el
el
Definition: plotIsoValidation.py:197
HLT::NestedUniqueCombinationGenerator::add
void add(const UniqueCombinationGenerator &gen)
Definition: Combinators.cxx:83
TrigMultiTrkComboHypoTool::m_nTrk
Gaudi::Property< unsigned int > m_nTrk
Definition: TrigMultiTrkComboHypoTool.h:59
TrigMultiTrkComboHypoTool::m_isMergedElectronChain
Gaudi::Property< bool > m_isMergedElectronChain
Definition: TrigMultiTrkComboHypoTool.h:72
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
xAOD::TrigBphys_v1::fitchi2
float fitchi2() const
accessor method: chi2 from vertex fit
xAOD::TrackParticle_v1::genvecP4
GenVecFourMom_t genvecP4() const
The full 4-momentum of the particle : GenVector form.
Definition: TrackParticle_v1.cxx:116
xAOD::TrigBphys_v1::trackParticle
const xAOD::TrackParticle * trackParticle(size_t i) const
Get the Nth track's pointer.
Definition: TrigBphys_v1.cxx:217
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
TrigMultiTrkComboHypoTool::m_legDecisionIDs
std::vector< TrigCompositeUtils::DecisionID > m_legDecisionIDs
Definition: TrigMultiTrkComboHypoTool.h:77
HLT::Identifier
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:20
ComboHypoToolBase::m_decisionId
HLT::Identifier m_decisionId
The DecisionID of the chain, obtained from the Tool's name.
Definition: ComboHypoToolBase.h:122
TrigCompositeUtils::featureString
const std::string & featureString()
Definition: TrigCompositeUtilsRoot.cxx:884
TrigMultiTrkComboHypoTool::passedChi2Cut
bool passedChi2Cut(int chi2) const
Definition: TrigMultiTrkComboHypoTool.h:56
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
TrigMultiTrkComboHypoTool::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrigMultiTrkComboHypoTool.h:75
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
charge
double charge(const T &p)
Definition: AtlasPID.h:756
TrigMultiTrkComboHypoTool::m_legMultiplicities
Gaudi::Property< std::vector< unsigned int > > m_legMultiplicities
Definition: TrigMultiTrkComboHypoTool.h:74
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
TrigMultiTrkComboHypoTool::m_totalCharge
Gaudi::Property< int > m_totalCharge
Definition: TrigMultiTrkComboHypoTool.h:61
a
TList * a
Definition: liststreamerinfos.cxx:10
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TrigMultiTrkComboHypoTool::checkPreviousDecisionIDs
bool checkPreviousDecisionIDs(const std::vector< const TrigCompositeUtils::DecisionIDContainer * > &) const
Definition: TrigMultiTrkComboHypoTool.cxx:146
DEBUG
#define DEBUG
Definition: page_access.h:11
plotBeamSpotMon.mon
mon
Definition: plotBeamSpotMon.py:67
TrigMultiTrkComboHypoTool::totalCharge
int totalCharge(const xAOD::TrigBphys *) const
Definition: TrigMultiTrkComboHypoTool.cxx:229
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
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
TrigMultiTrkComboHypoTool::m_chi2
Gaudi::Property< float > m_chi2
Definition: TrigMultiTrkComboHypoTool.h:63
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
xAOD::TrigBphys_v1::lxy
float lxy() const
accessor method: lxy
Definition: TrigBphys_v1.cxx:387
TrigMultiTrkComboHypoTool::m_LxyCut
Gaudi::Property< float > m_LxyCut
Definition: TrigMultiTrkComboHypoTool.h:65
makeComparison.deltaR
float deltaR
Definition: makeComparison.py:36
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
WriteBchToCool.update
update
Definition: WriteBchToCool.py:67
fitman.k
k
Definition: fitman.py:528
xAOD::TrigBphys_v1::nTrackParticles
size_t nTrackParticles() const
Number of tracks used to make particle.