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

#include <TrigMuonEFIdtpInvMassHypoTool.h>

Inheritance diagram for TrigMuonEFIdtpInvMassHypoTool:
Collaboration diagram for TrigMuonEFIdtpInvMassHypoTool:

Public Member Functions

 TrigMuonEFIdtpInvMassHypoTool (const std::string &type, const std::string &name, const IInterface *parent)
 
 ~TrigMuonEFIdtpInvMassHypoTool ()=default
 
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

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 executeAlg (const std::vector< Combo::LegDecision > &combinaiton) const override
 Only a dummy implementation exists in ComboHypoToolBase. More...
 
StatusCode doTPIdperf (const xAOD::TrackParticle *metrack, const std::vector< const xAOD::TrackParticle * > &tracks_pt, const std::vector< const xAOD::TrackParticle * > &tracks_ftf) const
 
float qOverPMatching (const xAOD::TrackParticle *metrack, const xAOD::TrackParticle *idtrack) const
 
bool passedCBQualityCuts (const xAOD::Muon *muon) const
 
bool passedSAQualityCuts (const xAOD::Muon *muon) const
 

Private Attributes

Gaudi::Property< double > m_invMassLow
 
Gaudi::Property< double > m_invMassHigh
 
Gaudi::Property< bool > m_acceptAll
 
Gaudi::Property< bool > m_selOS
 
Gaudi::Property< bool > m_muonqualityCut
 
ToolHandle< GenericMonitoringToolm_monTool {this, "MonTool", "", "Monitoring tool" }
 
ToolHandle< CP::IMuonSelectionToolm_muonSelTool {this, "MuonSelectionTool", "CP::MuonSelectionTool/MuonSelectionTool", "Tool for muon quality selection"}
 
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...
 

Detailed Description

Definition at line 19 of file TrigMuonEFIdtpInvMassHypoTool.h.

Constructor & Destructor Documentation

◆ TrigMuonEFIdtpInvMassHypoTool()

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

Definition at line 16 of file TrigMuonEFIdtpInvMassHypoTool.cxx.

16  :
18 }

◆ ~TrigMuonEFIdtpInvMassHypoTool()

TrigMuonEFIdtpInvMassHypoTool::~TrigMuonEFIdtpInvMassHypoTool ( )
default

Member Function Documentation

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

◆ doTPIdperf()

StatusCode TrigMuonEFIdtpInvMassHypoTool::doTPIdperf ( const xAOD::TrackParticle metrack,
const std::vector< const xAOD::TrackParticle * > &  tracks_pt,
const std::vector< const xAOD::TrackParticle * > &  tracks_ftf 
) const
private

Definition at line 163 of file TrigMuonEFIdtpInvMassHypoTool.cxx.

164 {
165  ATH_MSG_VERBOSE("----- doTPIdperf -----");
166 
167  // monitored variables
168  std::vector<float> mnt_PT_dr, mnt_PT_qovp;
169  std::vector<float> mnt_FTF_dr, mnt_FTF_qovp;
170  auto mon_PT_dr = Monitored::Collection("PT_dr", mnt_PT_dr);
171  auto mon_PT_qovp = Monitored::Collection("PT_qovp", mnt_PT_qovp);
172  auto mon_FTF_dr = Monitored::Collection("FTF_dr", mnt_FTF_dr);
173  auto mon_FTF_qovp = Monitored::Collection("FTF_qovp", mnt_FTF_qovp);
174  auto mon_phi_effi = Monitored::Scalar<float>("probePhiEfficiency", -999.0);
175  auto mon_eta_effi = Monitored::Scalar<float>("probeEtaEfficiency", -999.0);
176  auto mon_pt_found = Monitored::Scalar<float>("PTfound", -1);
177  auto mon_ftf_found = Monitored::Scalar<float>("FTFfound", -1);
178  auto mon_pt_phi = Monitored::Scalar<float>("PTphi", -999.0);
179  auto mon_pt_pix = Monitored::Scalar<float>("PTpixelFound", -1);
180  auto mon_pt_pixnext= Monitored::Scalar<float>("PTpixelNextToFound", -1);
181  auto monitorIt = Monitored::Group(m_monTool, mon_PT_dr, mon_PT_qovp, mon_FTF_dr, mon_FTF_qovp, mon_phi_effi, mon_eta_effi, mon_pt_found, mon_ftf_found, mon_pt_phi, mon_pt_pix, mon_pt_pixnext);
182 
183  // probe values
184  auto mnt_probe_pt = Monitored::Scalar<float>("probe_pt", 0);
185  auto mnt_probe_eta = Monitored::Scalar<float>("probe_eta", 0);
186  auto monProbe = Monitored::Group(m_monTool, mnt_probe_pt, mnt_probe_eta);
187  mnt_probe_pt = metrack->pt()/Gaudi::Units::GeV;
188  mnt_probe_eta = metrack->eta();
189 
190  // PT
191  const float PT_DR_CUT = 0.1;
192  const float PT_QOVP_CUT = 2.0;
193  ATH_MSG_VERBOSE("PT: n size="<<tracks_pt.size());
194  int n_pt_matched = 0;
195  float min_dr_pt_matched = 999;
196  uint8_t pt_expectInnermost=0;
197  uint8_t pt_numberInnermost=0;
198  uint8_t pt_expectNextToInnermost=0;
199  uint8_t pt_numberNextToInnermost=0;
200  for(auto idtrack : tracks_pt) {
201  float dr_pt = xAOD::P4Helpers::deltaR(metrack,idtrack);
202  float qovp_pt = TrigMuonEFIdtpCommon::qOverPMatching(metrack,idtrack);
203  mnt_PT_dr.push_back(dr_pt);
204  mnt_PT_qovp.push_back(qovp_pt);
205  ATH_MSG_VERBOSE("... dr (ME-PT): "<<dr_pt);
206  ATH_MSG_VERBOSE("... Q/p match (ME-PT): "<<qovp_pt);
207  if( dr_pt > PT_DR_CUT ) continue;
208  if( qovp_pt > PT_QOVP_CUT ) continue;
209  ++n_pt_matched;
210  if( dr_pt < min_dr_pt_matched ) {
211  min_dr_pt_matched = dr_pt;
212  mon_pt_phi = idtrack->phi();
213  idtrack->summaryValue(pt_expectInnermost,xAOD::expectInnermostPixelLayerHit);
214  idtrack->summaryValue(pt_numberInnermost,xAOD::numberOfInnermostPixelLayerHits);
215  idtrack->summaryValue(pt_expectNextToInnermost,xAOD::expectNextToInnermostPixelLayerHit);
216  idtrack->summaryValue(pt_numberNextToInnermost,xAOD::numberOfNextToInnermostPixelLayerHits);
217  }
218  }
219  if( n_pt_matched > 1 ) n_pt_matched=1;
220 
221  // FTF
222  const float FTF_DR_CUT = 0.2;
223  const float FTF_QOVP_CUT = 3.0;
224  ATH_MSG_VERBOSE("FTF: n size="<<tracks_ftf.size());
225  int n_ftf_matched = 0;
226  for(auto idtrack : tracks_ftf) {
227  float dr_pt = xAOD::P4Helpers::deltaR(metrack,idtrack);
228  float qovp_pt = TrigMuonEFIdtpCommon::qOverPMatching(metrack,idtrack);
229  mnt_FTF_dr.push_back(dr_pt);
230  mnt_FTF_qovp.push_back(qovp_pt);
231  ATH_MSG_VERBOSE("... dr (ME-FTF): "<<dr_pt);
232  ATH_MSG_VERBOSE("... Q/p match (ME-FTF): "<<qovp_pt);
233  if( dr_pt > FTF_DR_CUT ) continue;
234  if( qovp_pt > FTF_QOVP_CUT ) continue;
235  ++n_ftf_matched;
236  }
237  if( n_ftf_matched > 1 ) n_ftf_matched=1;
238 
239  // efficiency
240  float me_eta = metrack->eta();
241  float me_phi = metrack->phi();
242  float me_pt_gev = metrack->pt()/Gaudi::Units::GeV;
243 
244  int eta_nr = 0;
245  if( std::abs(me_eta) > 2.0 ) { eta_nr = 2; }
246  else if( std::abs(me_eta) > 1.0 ) { eta_nr = 1; }
247  int pt_nr = 0;
248  if( me_pt_gev > 20.0 ) { pt_nr = 1; }
249 
250  std::stringstream ss;
251  ss << "PT_effi_pt" << pt_nr << "_eta" << eta_nr;
252  auto mnt_PT_effi = Monitored::Scalar<int>(ss.str(), 0);
253  ss.clear();
254  ss << "PT_effi_pt" << pt_nr << "_eta" << eta_nr;
255  auto mnt_FTF_effi = Monitored::Scalar<int>(ss.str(), 0);
256  auto monEffi = Monitored::Group(m_monTool, mnt_PT_effi, mnt_FTF_effi);
257  mnt_PT_effi = n_pt_matched;
258  mnt_FTF_effi = n_ftf_matched;
259 
260  // TnP monitoring
261  mon_phi_effi = me_phi;
262  mon_eta_effi = me_eta;
263  mon_pt_found = n_pt_matched;
264  mon_ftf_found = n_ftf_matched;
265  if( n_pt_matched != 0 ) {
266  if( pt_expectInnermost == 1 ) {
267  if( pt_numberInnermost>0 ) {
268  mon_pt_pix=1;
269  } else {
270  mon_pt_pix=0;
271  }
272  }
273  if( pt_expectNextToInnermost == 1 ) {
274  if( pt_numberNextToInnermost>0 ) {
275  mon_pt_pixnext=1;
276  } else {
277  mon_pt_pixnext=0;
278  }
279  }
280  }
281 
282  //
283  return StatusCode::SUCCESS;
284 }

◆ 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 TrigMuonEFIdtpInvMassHypoTool::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 53 of file TrigMuonEFIdtpInvMassHypoTool.cxx.

54 {
55  ATH_MSG_VERBOSE("in executeAlg");
56  bool result = false;
57 
58  if( m_acceptAll ) {
59  ATH_MSG_DEBUG("Accept property is set: taking all the events");
60  return true;
61  }
62 
63  // monitored variables
64  std::vector<float> mnt_invMass;
65  auto mon_invMass = Monitored::Collection("Mass", mnt_invMass);
66  auto monitorIt = Monitored::Group(m_monTool, mon_invMass);
67 
68  // retrieve muon and tracks
69  std::vector<const xAOD::TrackParticle*> tracks_pt;
70  std::vector<const xAOD::TrackParticle*> tracks_ftf;
71  std::vector<const xAOD::Muon*> muons_cb;
72  std::vector<const xAOD::Muon*> muons_sa;
73  int i_leg_idperf = -1;
74  for(auto leg: combination) {
75  auto decision= (*(leg.second));
76  auto i_leg = TrigCompositeUtils::getIndexFromLeg(leg.first);
77  ATH_MSG_VERBOSE("i_leg="<<i_leg);
78  auto muonLinks = TrigCompositeUtils::findLinks<xAOD::MuonContainer>( decision, TrigCompositeUtils::featureString(), TrigDefs::lastFeatureOfType);
79  if( muonLinks.size() != 1 ) continue;
80  if( ! muonLinks.at(0).isValid() ) continue;
81  const xAOD::Muon *mu = *(muonLinks.at(0).link);
82  if( ! mu->primaryTrackParticle() ) continue;
83 
84  bool is_idperf_muon = false;
85  ATH_MSG_VERBOSE("... selected: muonType="<<mu->muonType()<<", pT="<<mu->pt()/Gaudi::Units::GeV<<", eta="<<mu->eta()<<", phi="<<mu->phi()<<", author="<<mu->author());
86  if(mu->author()==xAOD::Muon::Author::MuidCo && mu->muonType()==xAOD::Muon::MuonType::Combined) {
87  muons_cb.push_back(mu);
88  }
89  else if(mu->author()==xAOD::Muon::Author::MuidSA && mu->muonType()==xAOD::Muon::MuonType::MuonStandAlone) {
90  muons_sa.push_back(mu);
91  is_idperf_muon = true;
92  if( i_leg_idperf == -1 ) { i_leg_idperf = i_leg; }
93  else if( i_leg_idperf != (int)i_leg ) {
94  ATH_MSG_ERROR("i_leg for idperf looks inconsistent: i_leg_idperf / i_leg="<<i_leg_idperf<<" / "<<i_leg);
95  return result;
96  }
97  }
98 
99  // if this leg is idperf leg (muon is SA) get ID tracks
100  if( is_idperf_muon ) {
101  const std::vector< TrigCompositeUtils::LinkInfo<xAOD::TrackParticleContainer> > ptLinks = TrigCompositeUtils::findLinks< xAOD::TrackParticleContainer >( decision, "HLT_IDTrack_Muon_IDTrig", TrigDefs::lastFeatureOfType);
102  ATH_MSG_VERBOSE("PT TrackParticleContainer Links size = "<<ptLinks.size());
103  if( ptLinks.size() == 1 && ptLinks.at(0).isValid() ) {
104  const xAOD::TrackParticle* track = *(ptLinks.at(0).link);
105  tracks_pt.push_back(track);
106  float pt = track->pt();
107  float eta = track->eta();
108  float phi = track->phi();
109  ATH_MSG_VERBOSE("... pt / eta / phi = "<<pt/Gaudi::Units::GeV << " / " << eta << " / " << phi<<", fitter="<<track->trackFitter());
110  }
111  const std::vector< TrigCompositeUtils::LinkInfo<xAOD::TrackParticleContainer> > ftfLinks = TrigCompositeUtils::findLinks< xAOD::TrackParticleContainer >( decision, "HLT_IDTrack_Muon_FTF", TrigDefs::lastFeatureOfType);
112  ATH_MSG_VERBOSE("FTF TrackParticleContainer Links size = "<< ftfLinks.size());
113  if( ftfLinks.size() == 1 && ftfLinks.at(0).isValid() ) {
114  const xAOD::TrackParticle* track = *(ftfLinks.at(0).link);
115  tracks_ftf.push_back(track);
116  float pt = track->pt();
117  float eta = track->eta();
118  float phi = track->phi();
119  ATH_MSG_VERBOSE("... pt / eta / phi = "<<pt/Gaudi::Units::GeV << " / " << eta << " / " << phi<<", fitter="<<track->trackFitter());
120  }
121  }
122  } // end of combination loop
123 
124  // mass between CB and SA
125  for(auto muon_cb : muons_cb) {
126  if( m_muonqualityCut && ! passedCBQualityCuts(muon_cb) ) continue;
127 
128  for(auto muon_sa : muons_sa) {
129  if( m_muonqualityCut && ! passedSAQualityCuts(muon_sa) ) continue;
130 
131  const xAOD::TrackParticle* tr_cb = muon_cb->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle);
132  const xAOD::TrackParticle* tr_sa = muon_sa->trackParticle(xAOD::Muon::TrackParticleType::ExtrapolatedMuonSpectrometerTrackParticle);
133  if (!tr_cb || !tr_sa) {
134  ATH_MSG_ERROR("Either CB or SA TrackParticle not found.");
135  continue;
136  }
137 
138  if( m_selOS && (muon_cb->charge()*muon_sa->charge() > 0) ) continue;
139 
140  float diMuMass = (tr_cb->p4()+tr_sa->p4()).M()/Gaudi::Units::GeV;
141  mnt_invMass.push_back(diMuMass);
142  ATH_MSG_VERBOSE("pt CB / pt SA = " << (*tr_cb).pt()/Gaudi::Units::GeV << " / " << (*tr_sa).pt()/Gaudi::Units::GeV << ", mass =" << diMuMass);
143 
144  if( ((m_invMassLow >=0 && diMuMass>m_invMassLow ) || m_invMassLow <0) &&
145  ((m_invMassHigh>=0 && diMuMass<m_invMassHigh) || m_invMassHigh<0) ) {
146  result = true;
147  StatusCode sc = doTPIdperf(tr_sa, tracks_pt, tracks_ftf);
148  if( sc != StatusCode::SUCCESS ) {
149  ATH_MSG_ERROR("doTPIdperf failed with StatuCode="<<sc);
150  }
151  }
152  }
153  }
154 
155  //
156  ATH_MSG_VERBOSE("idperf TP overall result is: "<<(result?"true":"false"));
157  return result;
158 }

◆ initialize()

StatusCode TrigMuonEFIdtpInvMassHypoTool::initialize ( )
overridevirtual

Definition at line 23 of file TrigMuonEFIdtpInvMassHypoTool.cxx.

24 {
25  if( m_muonqualityCut ) {
26  if( m_muonSelTool.retrieve().isFailure() ) {
27  ATH_MSG_ERROR("Unable to retrieve " << m_muonSelTool);
28  return StatusCode::FAILURE;
29  }
30  } else m_muonSelTool.disable();
31 
32  if( m_acceptAll ) {
33  ATH_MSG_DEBUG("Accepting all the events!");
34  } else {
35  if( m_invMassLow<0 && m_invMassHigh<0 ) {
36  ATH_MSG_ERROR("Both mass cuts are <0. This is probably a configuration mistake.");
37  return StatusCode::FAILURE;
38  }
39  }
40 
41  if ( not m_monTool.name().empty() ) {
42  ATH_CHECK( m_monTool.retrieve() );
43  ATH_MSG_DEBUG("MonTool name: " << m_monTool);
44  }
45 
46  ATH_MSG_DEBUG("Initialization completed successfully");
47  return StatusCode::SUCCESS;
48 }

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

◆ passedCBQualityCuts()

bool TrigMuonEFIdtpInvMassHypoTool::passedCBQualityCuts ( const xAOD::Muon muon) const
private

Definition at line 289 of file TrigMuonEFIdtpInvMassHypoTool.cxx.

290 {
291  bool passCut = false;
292 
293  const xAOD::TrackParticle* idtrack = muon->trackParticle( xAOD::Muon::InnerDetectorTrackParticle );
294  const xAOD::TrackParticle* metrack = muon->trackParticle( xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle );
295 
296  const float CHI2_CUT = 8.0;
297  const float QOVP_CUT = 7.0;
298 
299  if( idtrack && metrack ) {
300  float qOverPsignif = TrigMuonEFIdtpCommon::qOverPMatching(metrack,idtrack);
301  float reducedChi2 = muon->primaryTrackParticle()->chiSquared()/muon->primaryTrackParticle()->numberDoF();
302  // Selection criteria based on the requirements that are part of the muon quality working points (offline)
303  if(std::abs(reducedChi2) < CHI2_CUT && !m_muonSelTool->isBadMuon(*muon) && qOverPsignif<QOVP_CUT && muon->author()==xAOD::Muon::MuidCo) passCut = true;
304  }
305 
306  return passCut;
307 }

◆ passedSAQualityCuts()

bool TrigMuonEFIdtpInvMassHypoTool::passedSAQualityCuts ( const xAOD::Muon muon) const
private

Definition at line 310 of file TrigMuonEFIdtpInvMassHypoTool.cxx.

311 {
312  bool passCut = false;
313 
314  const xAOD::TrackParticle* metrack = muon->trackParticle( xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle );
315 
316  const float CHI2_CUT = 8.0;
317 
318  if( metrack ) {
319  float reducedChi2 = muon->primaryTrackParticle()->chiSquared()/muon->primaryTrackParticle()->numberDoF();
320  if( std::abs(reducedChi2) < CHI2_CUT && !m_muonSelTool->isBadMuon(*muon) ) passCut = true;
321  }
322 
323  return passCut;
324 }

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

◆ qOverPMatching()

float TrigMuonEFIdtpInvMassHypoTool::qOverPMatching ( const xAOD::TrackParticle metrack,
const xAOD::TrackParticle idtrack 
) const
private

◆ 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

◆ m_acceptAll

Gaudi::Property< bool > TrigMuonEFIdtpInvMassHypoTool::m_acceptAll
private
Initial value:
{
this, "AcceptAll", false, "Ignore selection" }

Definition at line 42 of file TrigMuonEFIdtpInvMassHypoTool.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_invMassHigh

Gaudi::Property< double> TrigMuonEFIdtpInvMassHypoTool::m_invMassHigh
private
Initial value:
{
this, "InvMassHigh", -1.0, "High threshold for invariant mass cut" }

Definition at line 40 of file TrigMuonEFIdtpInvMassHypoTool.h.

◆ m_invMassLow

Gaudi::Property< double> TrigMuonEFIdtpInvMassHypoTool::m_invMassLow
private
Initial value:
{
this, "InvMassLow", -1.0, "Low threshold for invariant mass cut" }

Definition at line 38 of file TrigMuonEFIdtpInvMassHypoTool.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

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

Definition at line 50 of file TrigMuonEFIdtpInvMassHypoTool.h.

◆ m_muonqualityCut

Gaudi::Property< bool > TrigMuonEFIdtpInvMassHypoTool::m_muonqualityCut
private
Initial value:
{
this, "MuonQualityCut", false, "Ignore selection" }

Definition at line 46 of file TrigMuonEFIdtpInvMassHypoTool.h.

◆ m_muonSelTool

ToolHandle<CP::IMuonSelectionTool> TrigMuonEFIdtpInvMassHypoTool::m_muonSelTool {this, "MuonSelectionTool", "CP::MuonSelectionTool/MuonSelectionTool", "Tool for muon quality selection"}
private

Definition at line 51 of file TrigMuonEFIdtpInvMassHypoTool.h.

◆ m_selOS

Gaudi::Property< bool > TrigMuonEFIdtpInvMassHypoTool::m_selOS
private
Initial value:
{
this, "SelectOppositeSign", false, "Select only oppositly charged pairs" }

Definition at line 44 of file TrigMuonEFIdtpInvMassHypoTool.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
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:195
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
get_generator_info.result
result
Definition: get_generator_info.py:21
TrigCompositeUtils::DecisionID
unsigned int DecisionID
Definition: TrigComposite_v1.h:27
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
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:64
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
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
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
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
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
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:423
test_pyathena.pt
pt
Definition: test_pyathena.py:11
xAOD::expectInnermostPixelLayerHit
@ expectInnermostPixelLayerHit
Do we expect a 0th-layer barrel hit for this track?
Definition: TrackingPrimitives.h:236
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
TrigMuonEFIdtpInvMassHypoTool::m_muonqualityCut
Gaudi::Property< bool > m_muonqualityCut
Definition: TrigMuonEFIdtpInvMassHypoTool.h:46
TrigMuonEFIdtpInvMassHypoTool::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrigMuonEFIdtpInvMassHypoTool.h:50
TrigMuonEFIdtpInvMassHypoTool::passedSAQualityCuts
bool passedSAQualityCuts(const xAOD::Muon *muon) const
Definition: TrigMuonEFIdtpInvMassHypoTool.cxx:310
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
ComboHypoToolBase::m_modeOR
Gaudi::Property< bool > m_modeOR
Definition: ComboHypoToolBase.h:112
TrigMuonEFIdtpCommon::qOverPMatching
float qOverPMatching(const xAOD::TrackParticle *metrack, const xAOD::TrackParticle *idtrack)
Definition: TrigMuonEFIdtpCommon.cxx:11
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
ComboHypoToolBase::decisionId
virtual HLT::Identifier decisionId() const
retrieves this ComboHypoTool's chain's decision ID
Definition: ComboHypoToolBase.h:41
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
xAOD::TrackParticle_v1::p4
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
Definition: TrackParticle_v1.cxx:129
TrigMuonEFIdtpInvMassHypoTool::m_muonSelTool
ToolHandle< CP::IMuonSelectionTool > m_muonSelTool
Definition: TrigMuonEFIdtpInvMassHypoTool.h:51
ComboHypoToolBase::m_enableOverride
Gaudi::Property< bool > m_enableOverride
Definition: ComboHypoToolBase.h:115
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
xAOD::expectNextToInnermostPixelLayerHit
@ expectNextToInnermostPixelLayerHit
Do we expect a 1st-layer barrel hit for this track?
Definition: TrackingPrimitives.h:247
lumiFormat.i
int i
Definition: lumiFormat.py:92
xAOD::P4Helpers::deltaR
double deltaR(double rapidity1, double phi1, double rapidity2, double phi2)
from bare bare rapidity,phi
Definition: xAODP4Helpers.h:150
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
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
TrigMuonEFIdtpInvMassHypoTool::m_selOS
Gaudi::Property< bool > m_selOS
Definition: TrigMuonEFIdtpInvMassHypoTool.h:44
calibdata.exception
exception
Definition: calibdata.py:496
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
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
TrigMuonEFIdtpInvMassHypoTool::m_acceptAll
Gaudi::Property< bool > m_acceptAll
Definition: TrigMuonEFIdtpInvMassHypoTool.h:42
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
TrigMuonEFIdtpInvMassHypoTool::m_invMassLow
Gaudi::Property< double > m_invMassLow
Definition: TrigMuonEFIdtpInvMassHypoTool.h:38
Trk::Combined
@ Combined
Definition: TrackSummaryTool.h:32
TrigCompositeUtils::featureString
const std::string & featureString()
Definition: TrigCompositeUtilsRoot.cxx:886
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
xAOD::numberOfNextToInnermostPixelLayerHits
@ numberOfNextToInnermostPixelLayerHits
these are the hits in the 1st pixel barrel layer
Definition: TrackingPrimitives.h:248
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
MuonParameters::MuidSA
@ MuidSA
Definition: MuonParamDefs.h:59
TrigMuonEFIdtpInvMassHypoTool::m_invMassHigh
Gaudi::Property< double > m_invMassHigh
Definition: TrigMuonEFIdtpInvMassHypoTool.h:40
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
MuonParameters::MuidCo
@ MuidCo
Definition: MuonParamDefs.h:60
dqt_zlumi_pandas.update
update
Definition: dqt_zlumi_pandas.py:42
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
TrigCompositeUtils::getIndexFromLeg
int32_t getIndexFromLeg(const HLT::Identifier &legIdentifier)
Extract the numeric index of a leg identifier.
Definition: TrigCompositeUtilsRoot.cxx:191
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
CaloCondBlobAlgs_fillNoiseFromASCII.author
string author
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:26
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
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
ComboHypoToolBase::m_legMultiplicities
std::vector< int > m_legMultiplicities
The number of legs, and the required multiplicity on each leg.
Definition: ComboHypoToolBase.h:124
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
TrigMuonEFIdtpInvMassHypoTool::passedCBQualityCuts
bool passedCBQualityCuts(const xAOD::Muon *muon) const
Definition: TrigMuonEFIdtpInvMassHypoTool.cxx:289
CaloNoise_fillDB.mu
mu
Definition: CaloNoise_fillDB.py:53
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
xAOD::TrackParticle_v1::phi
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
xAOD::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
Definition: TrackingPrimitives.h:237
TrigMuonEFIdtpInvMassHypoTool::doTPIdperf
StatusCode doTPIdperf(const xAOD::TrackParticle *metrack, const std::vector< const xAOD::TrackParticle * > &tracks_pt, const std::vector< const xAOD::TrackParticle * > &tracks_ftf) const
Definition: TrigMuonEFIdtpInvMassHypoTool.cxx:163