ATLAS Offline Software
TrigMuonMatching.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #ifdef ROOTCORE
8 #include "xAODRootAccess/Init.h"
11 #endif // ROOTCORE
12 
13 #include "xAODMuon/MuonContainer.h"
17 
18 #define MUONMASS 105.65837
19 
20 namespace Trig {
21 
23  : asg::AsgMetadataTool( name ),
24  m_trigDecTool("Trig::TrigDecisionTool/TrigDecisionTool")
25  {
26  declareProperty( "TriggerTool", m_trigDecTool);
27  }
28 
30  }
31 
33  // Greet the user:
34  ATH_MSG_INFO( "Initialising... " );
35 
36  ATH_CHECK(m_trigDecTool.retrieve());
37 
38  return StatusCode::SUCCESS;
39  }
40 
42  const std::string &chain,
43  const double mindelR) const
44  {
45  return match(mu->eta(),mu->phi(),chain,mindelR);
46  }
47 
49  const std::string &l1item,
50  const double DelR) const
51  {
52  return matchL1(mu->eta(),mu->phi(),l1item,DelR);
53  }
54 
56  const std::string &chain,
57  const double mindelR) const
58  {
59  Double_t delmin = mindelR;
60  EFmuon efmuon,dummy;
61  return matchedTrackDetail(efmuon, dummy, mu->eta(), mu->phi(), delmin, chain);
62  }
63 
65  const std::string &l1item,
66  const double DelR) const
67  {
68  Double_t l1dr = DelR;
69  const xAOD::MuonRoIContainer* muonrois = 0;
70  StatusCode sc = evtStore()->retrieve(muonrois,"LVL1MuonRoIs");
71  if(!sc){
72  ATH_MSG_ERROR("TrigMuonMatching::matchL1 : could not retrieve LVL1MuonRoIs");
73  return false;
74  }
75  Int_t threshold = getL1pt(l1item);
76  xAOD::MuonRoIContainer::const_iterator muroi_itr = muonrois->begin();
77  xAOD::MuonRoIContainer::const_iterator muroi_end = muonrois->end();
78  for( ; muroi_itr != muroi_end; ++muroi_itr ) {
79  if((*muroi_itr)->thrValue() >= threshold*1000){
80  Double_t dR = TrigMuonMatching::dR(mu->eta(), mu->phi(), (*muroi_itr)->eta(), (*muroi_itr)->phi());
81  if(dR < l1dr){
82  l1dr = dR;
83  }
84  }
85  }
86  return l1dr;
87  }
88 
90  const xAOD::Muon* mu2,
91  const std::string& chain,
92  std::pair<Bool_t, Bool_t>& result1,
93  std::pair<Bool_t, Bool_t>& result2,
94  const Double_t& mindelR)
95  {
96  TLorentzVector mu_1, mu_2;
97  mu_1.SetPtEtaPhiM(mu1->pt(),mu1->eta(),mu1->phi(),MUONMASS);
98  mu_2.SetPtEtaPhiM(mu2->pt(),mu2->eta(),mu2->phi(),MUONMASS);
99  Bool_t valid = matchDimuon(mu_1,mu_2,chain,result1,result2,mindelR);
100  return valid;
101  }
102 
103  Bool_t TrigMuonMatching::match(const double eta,
104  const double phi,
105  const std::string &chain,
106  const double mindelR) const
107  {
108  if(!m_trigDecTool->isPassed(chain)){
109  return false;
110  }
111  Double_t delmin = mindelR;
112  EFmuon efmuon,dummy;
113 
114  matchedTrackDetail(efmuon, dummy, eta, phi, delmin, chain);
115  return efmuon.valid;
116  }
117 
118  Bool_t TrigMuonMatching::matchL1(const double eta,
119  const double phi,
120  const std::string &l1item,
121  const double DelR) const
122  {
123  if(!m_trigDecTool->isPassed("L1_MU.*")){
124  return false;
125  }
126  Double_t l1dr = DelR;
127  const xAOD::MuonRoIContainer* muonrois = 0;
128  StatusCode sc = evtStore()->retrieve(muonrois,"LVL1MuonRoIs");
129  if(!sc){
130  ATH_MSG_ERROR("TrigMuonMatching::matchL1 : could not retrieve LVL1MuonRoIs");
131  return false;
132  }
133  Int_t threshold = getL1pt(l1item);
134  xAOD::MuonRoIContainer::const_iterator muroi_itr = muonrois->begin();
135  xAOD::MuonRoIContainer::const_iterator muroi_end = muonrois->end();
136  for( ; muroi_itr != muroi_end; ++muroi_itr ) {
137  if((*muroi_itr)->thrValue() >= threshold*1000){
138  Double_t dR = TrigMuonMatching::dR(eta, phi, (*muroi_itr)->eta(), (*muroi_itr)->phi());
139  if(dR < l1dr){
140  return true;
141  }
142  }
143  }
144  return false;
145  }
146 
148  const std::string &l1item,
149  const std::string &chain,
150  const double DelR) const
151  {
152  if(!m_trigDecTool->isPassed("L1_MU.*")){
153  return false;
154  }
155  const xAOD::MuonRoIContainer* muonrois = 0;
156  StatusCode sc = evtStore()->retrieve(muonrois,"LVL1MuonRoIs");
157  if(!sc){
158  ATH_MSG_ERROR("TrigMuonMatching::matchL1 : could not retrieve LVL1MuonRoIs");
159  return false;
160  }
161  xAOD::MuonRoIContainer::const_iterator muroi_itr = muonrois->begin();
162  xAOD::MuonRoIContainer::const_iterator muroi_end = muonrois->end();
163  Int_t threshold = getL1pt(l1item);
164  unsigned int ROI = 0;
165  for( ; muroi_itr != muroi_end; ++muroi_itr ) {
166  if(!((*muroi_itr)->thrValue() >= threshold*1000)) continue;
167  ROI = (*muroi_itr)->getRoI();
168  const std::string eventTrigger = chain;
169 
170  auto cg = m_trigDecTool->getChainGroup(eventTrigger);
171  auto fc = cg->features(TrigDefs::alsoDeactivateTEs);
172 #if defined(XAOD_STANDALONE) || defined(XAOD_ANALYSIS)
173  auto MuFeatureContainers = fc.containerFeature<xAOD::L2StandAloneMuonContainer>("",TrigDefs::alsoDeactivateTEs);
174 #else
175  const std::vector< Trig::Feature<xAOD::L2StandAloneMuonContainer> > MuFeatureContainers = fc.get<xAOD::L2StandAloneMuonContainer>("", TrigDefs::alsoDeactivateTEs);
176 #endif
177  for(auto mucont : MuFeatureContainers){
178  for(auto muon : *mucont.cptr()){
179  if(muon->roiNumber() == ROI){
180  Double_t dR = TrigMuonMatching::dR(mu->eta(), mu->phi(), muon->eta(), muon->phi());
181  if(dR < DelR) return true;
182  }
183  }
184  }
185  }
186 
187  return false;
188  }
189 
191  const std::string &chain,
192  const double DelR) const
193  {
194  const std::string eventTrigger = chain;
195 
196  auto cg = m_trigDecTool->getChainGroup(eventTrigger);
197  auto fc = cg->features(TrigDefs::alsoDeactivateTEs);
198 #if defined(XAOD_STANDALONE) || defined(XAOD_ANALYSIS)
199  auto MuFeatureContainers = fc.containerFeature<xAOD::L2CombinedMuonContainer>("",TrigDefs::alsoDeactivateTEs);
200 #else
201  const std::vector< Trig::Feature<xAOD::L2CombinedMuonContainer> > MuFeatureContainers = fc.get<xAOD::L2CombinedMuonContainer>("", TrigDefs::alsoDeactivateTEs);
202 #endif
203 
204  for(auto mucont : MuFeatureContainers){
205  for(auto muon : *mucont.cptr()){
206  Double_t dR = TrigMuonMatching::dR(mu->eta(), mu->phi(), muon->eta(), muon->phi());
207  if(dR < DelR) return true;
208  }
209  }
210  return false;
211  }
212 
213  Bool_t TrigMuonMatching::matchDimuon(const TLorentzVector& muon1,
214  const TLorentzVector& muon2,
215  const std::string& chain,
216  std::pair<Bool_t, Bool_t>& result1,
217  std::pair<Bool_t, Bool_t>& result2,
218  const Double_t& mindelR)
219  {
220  Double_t delmin = mindelR;
221  DimuonChainInfo chainInfo(chain);
222  if (not decodeDimuonChain(chainInfo)) {
223  ATH_MSG_ERROR("TrigMuonMatching : Failed to decode chain " << chain << " matchDimuon can accept only chains named HLT_2muXX and HLT_muXX_mu8noL1.");
224  return false;
225  }
226 
227  std::pair<Bool_t, Bool_t> rc12, rc21;
228  rc12 = matchDimuon(muon1, muon2, chainInfo, delmin);
229  if(chainInfo.isSymmetric){
230  rc21.first = rc12.second; rc21.second = rc12.first;
231  }
232 
233  else{
234  rc21 = matchDimuon(muon2, muon1, chainInfo, delmin);
235  }
236 
237  result1.first = rc12.first; result1.second = rc21.second;
238  result2.first = rc21.first; result2.second = rc12.second;
239  return true;
240  }
241 
242  Bool_t TrigMuonMatching::isPassedRerun(const std::string& trigger) const
243  {
244  const unsigned int bits = m_trigDecTool->isPassedBits(trigger);
245  if( (bits & TrigDefs::EF_passedRaw) && ! ( bits & TrigDefs::EF_passThrough) && ( bits & TrigDefs::EF_resurrected)){
246  return true;
247  }
248  return false;
249  }
250 
251  std::pair<Bool_t, Bool_t> TrigMuonMatching::matchDimuon(const TLorentzVector& muon1,
252  const TLorentzVector& muon2,
253  const DimuonChainInfo& chainInfo,
254  const double mindelR)
255  {
256 
257  EFmuon trkId1, trkId2, dummy;
258  const Double_t dr1 = matchedTrackDetail(trkId1, dummy, muon1.Eta(), muon1.Phi(), mindelR, chainInfo.thresholds.first);
259 
260  // for full scan trigger.
261 
262  const Double_t dr2 = matchedTrackDetail(trkId2, dummy, muon2.Eta(), muon2.Phi(), mindelR, chainInfo.thresholds.second);
263 
264  if(trkId1.valid && trkId2.valid &&
265  isEqual(trkId1.pt, trkId2.pt) &&
266  isEqual(trkId1.eta, trkId2.eta) &&
267  isEqual(trkId1.phi, trkId2.phi)){
268  if(dr1 > dr2){
269  matchedTrackDetail(trkId1, trkId2, muon1.Eta(), muon1.Phi(), mindelR, chainInfo.thresholds.first);
270  }
271  else{
272  matchedTrackDetail(trkId2, trkId1, muon2.Eta(), muon2.Phi(), mindelR, chainInfo.thresholds.second);
273  }
274  }
275 
276  return std::pair<Bool_t, Bool_t> (trkId1.valid, trkId2.valid);
277  }
278 
279 
280 
281  double TrigMuonMatching::dR(const double eta1,
282  const double phi1,
283  const double eta2,
284  const double phi2) const
285  {
286  double deta = fabs(eta1 - eta2);
287  double dphi = fabs(phi1 - phi2) < TMath::Pi() ? fabs(phi1 - phi2) : 2*TMath:: \
288  Pi() - fabs(phi1 - phi2);
289  return sqrt(deta*deta + dphi*dphi);
290  }
291 
292 
293  int TrigMuonMatching::getL1pt(const std::string& l1item) const
294  {
295  int rc = -1;
296 
297  std::vector<std::string> tokens;
298  tokenize(l1item, tokens, "_");
299  std::string pt;
300  if (tokens.size() == 1) {
301  pt = tokens.at(0);
302 
303  } else if ((tokens.size() == 2 ) and (tokens.at(0) == "L1")) {
304  pt = tokens.at(1);
305 
306  } else {
307  ATH_MSG_ERROR("TrigMuonMatching::getL1pt : cannot parse " << l1item);
308  return rc;
309  }
310 
311  const size_t index = pt.find("MU");
312  if (index != std::string::npos) {
313  std::istringstream iss(pt.substr(index + 2));
314  iss >> rc;
315  } else {
316  ATH_MSG_ERROR("TrigMuonMatching::getL1pt : cannot parse " << l1item);
317  }
318 
319  return rc;
320  }
321 
322 
323  void TrigMuonMatching::tokenize(const std::string& str,
324  std::vector<std::string>& tokens,
325  const std::string& delimiters) const
326  {
327  tokens.clear();
328  std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
329  std::string::size_type pos = str.find_first_of(delimiters, lastPos);
330 
331  while ((std::string::npos != pos) or (std::string::npos != lastPos)) {
332  tokens.push_back(str.substr(lastPos, pos - lastPos));
333  lastPos = str.find_first_not_of(delimiters, pos);
334  pos = str.find_first_of(delimiters, lastPos);
335  }
336  }
337 
338 
340  const EFmuon& usedEFMuonId,
341  const double eta,
342  const double phi,
343  const double mindelR,
344  const std::string& chainForEventTrigger) const
345  {
346  efMuonId.valid = false;
347  Double_t drmin = mindelR;
348 
349  const std::string eventTrigger = chainForEventTrigger;
350 
351  auto cg = m_trigDecTool->getChainGroup(eventTrigger);
352  auto fc = cg->features();
353 
354 #if defined(XAOD_STANDALONE) || defined(XAOD_ANALYSIS)
355  auto MuFeatureContainers = fc.containerFeature<xAOD::MuonContainer>();
356 #else
357  const std::vector< Trig::Feature<xAOD::MuonContainer> > MuFeatureContainers = fc.get<xAOD::MuonContainer>();
358 #endif
359 
360  for(auto mucont : MuFeatureContainers){
361  for(auto mu : *mucont.cptr()){
362 
363  // l1 matching
364 
365  if(isEqual(usedEFMuonId.pt, mu->pt()) &&
366  isEqual(usedEFMuonId.eta, mu->eta()) &&
367  isEqual(usedEFMuonId.phi, mu->phi())) continue;
368 
369  Double_t dr = dR(eta,phi,mu->eta(),mu->phi());
370  if(drmin > dr){
371  drmin = dr;
372  efMuonId.pt = mu->pt();
373  efMuonId.eta = mu->eta();
374  efMuonId.phi = mu->phi();
375  efMuonId.valid = true;
376  }
377  }
378  }
379  return drmin;
380  }
381 
382  /*
383  double TrigMuonMatching::matchedTrackDetail(const double eta,
384  const double phi,
385  const std::string chain,
386  const std::string l1item)
387  {
388  auto cg = m_trigDecTool->getChainGroup(chain);
389  auto fc = cg->features();
390  auto MuFeatureContainers = fc.containerFeature<xAOD::MuonContainer>();
391  double dR_min = m_matchingDr;
392  for(auto mucont : MuFeatureContainers){
393 
394  // l1 item matching
395 
396  for(auto mu : *mucont.cptr()){
397 
398  // l1 item matching
399  double dr = dR(eta,phi,mu->eta(),mu->phi());
400  if(dr < dR_min ) dR_min = dr;
401  }
402  }
403  return dR_min;
404  }
405  */
406 
408  {
409  chainInfo.isValid = false;
410  std::map<std::string, DimuonChainInfo >::const_iterator p = m_DimuonChainMap.find(chainInfo.chain);
411  if (p != m_DimuonChainMap.end()) {
412  chainInfo = p->second;
413  return chainInfo.isValid;
414  }
415  std::vector<std::string> tokens;
416  tokenize(chainInfo.chain, tokens, "_");
417  if (tokens.size() < 2) return false;
418  if (tokens[0] != "HLT") return false;
419  chainInfo.isSymmetric = (tokens[1].substr(0, 3) == "2mu");
420 
421  if(chainInfo.isSymmetric) {
422  std::string threshold = std::string("HLT_" + tokens[1].substr(1));
423  chainInfo.thresholds.first = threshold;
424  chainInfo.thresholds.second = threshold;
425  chainInfo.isValid = true;
426  //if (tokens.size() == 3) chainInfo.tightness = tokens[2];
427  }
428  else {
429  if(tokens.size() != 3) return false;
430 
431  std::string high = std::string("HLT_" + tokens[1]);
432  chainInfo.thresholds.first = high;
433  chainInfo.thresholds.second = chainInfo.chain;
434  chainInfo.isValid = true;
435  return chainInfo.isValid;
436 
437  }
438  m_DimuonChainMap[chainInfo.chain] = chainInfo;
439  return chainInfo.isValid;
440  }
441 
442  bool TrigMuonMatching::isEqual(const double x,
443  const double y) const
444  {
445  if (fabs(x - y) < std::numeric_limits<float>::epsilon()) return true;
446  return false;
447  }
448 
449 } // namespace CP
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:195
Trig::TrigMuonMatching::initialize
virtual StatusCode initialize(void) override
Definition: TrigMuonMatching.cxx:32
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
runLayerRecalibration.chain
chain
Definition: runLayerRecalibration.py:175
ParticleGun_SamplingFraction.eta2
eta2
Definition: ParticleGun_SamplingFraction.py:96
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
Trig::TrigMuonMatching::EFmuon::eta
float eta
Definition: TrigMuonMatching.h:89
TrigMuonMatching.h
Trig
The common trigger namespace for trigger analysis tools.
Definition: LArCellMonAlg.h:33
index
Definition: index.py:1
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Trig::TrigMuonMatching::matchL1
virtual Bool_t matchL1(const xAOD::Muon *mu, const std::string &l1item, const double DelR=0.2) const override
Definition: TrigMuonMatching.cxx:48
MuonRoIContainer.h
xAOD::Muon_v1::phi
virtual double phi() const
The azimuthal angle ( ) of the particle.
L2CombinedMuonContainer.h
DimuonChainInfo::thresholds
std::pair< std::string, std::string > thresholds
Definition: ITrigMuonMatching.h:16
xAOD::Muon_v1::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
asg
Definition: DataHandleTestTool.h:28
test_pyathena.pt
pt
Definition: test_pyathena.py:11
DataVector::get
const T * get(size_type n) const
Access an element, as an rvalue.
L2StandAloneMuonContainer.h
xAOD::eta1
setEt setPhi setE277 setWeta2 eta1
Definition: TrigEMCluster_v1.cxx:41
python.TurnDataReader.dr
dr
Definition: TurnDataReader.py:112
beamspotman.tokens
tokens
Definition: beamspotman.py:1284
x
#define x
ReturnCheck.h
DimuonChainInfo::chain
std::string chain
Definition: ITrigMuonMatching.h:15
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
Trig::TrigMuonMatching::isEqual
bool isEqual(const double x, const double y) const
Definition: TrigMuonMatching.cxx:442
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Trig::TrigMuonMatching::m_DimuonChainMap
std::map< std::string, DimuonChainInfo > m_DimuonChainMap
Definition: TrigMuonMatching.h:99
Trig::TrigMuonMatching::dR
double dR(const double eta1, const double phi1, const double eta2, const double phi2) const
Definition: TrigMuonMatching.cxx:281
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
calibdata.valid
list valid
Definition: calibdata.py:45
Trig::TrigMuonMatching::match
virtual Bool_t match(const xAOD::Muon *mu, const std::string &chain, const double mindelR=0.1) const override
Definition: TrigMuonMatching.cxx:41
Trig::TrigMuonMatching::m_trigDecTool
ToolHandle< Trig::TrigDecisionTool > m_trigDecTool
Definition: TrigMuonMatching.h:97
Trig::TrigMuonMatching::matchedTrackDetail
Double_t matchedTrackDetail(EFmuon &efMuonId, const EFmuon &usedEFMuonId, const double eta, const double phi, const double mindelR, const std::string &chainEventTrigger) const
Definition: TrigMuonMatching.cxx:339
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Trig::TrigMuonMatching::getL1pt
int getL1pt(const std::string &l1item) const
Definition: TrigMuonMatching.cxx:293
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TEvent.h
xAOD::Muon_v1::pt
virtual double pt() const
The transverse momentum ( ) of the particle.
python.xAODType.dummy
dummy
Definition: xAODType.py:4
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Init.h
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
Trig::TrigMuonMatching::EFmuon::pt
float pt
Definition: TrigMuonMatching.h:88
Trig::TrigMuonMatching::~TrigMuonMatching
virtual ~TrigMuonMatching()
Definition: TrigMuonMatching.cxx:29
Trig::TrigMuonMatching::matchL2SA
virtual Bool_t matchL2SA(const xAOD::Muon *mu, const std::string &l1item, const std::string &chain, const double DelR=0.2) const override
Definition: TrigMuonMatching.cxx:147
DimuonChainInfo::isValid
bool isValid
Definition: ITrigMuonMatching.h:19
MUONMASS
#define MUONMASS
Definition: TrigMuonMatching.cxx:18
DimuonChainInfo
Definition: ITrigMuonMatching.h:13
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
threshold
Definition: chainparser.cxx:74
Trig::TrigMuonMatching::minDelR
virtual Double_t minDelR(const xAOD::Muon *mu, const std::string &chain, const double mindelR=0.1) const override
Definition: TrigMuonMatching.cxx:55
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
Trig::TrigMuonMatching::minDelRL1
virtual Double_t minDelRL1(const xAOD::Muon *mu, const std::string &l1item, const double DelR=0.2) const override
Definition: TrigMuonMatching.cxx:64
MuonContainer.h
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
Trig::TrigMuonMatching::matchDimuon
virtual Bool_t matchDimuon(const xAOD::Muon *mu1, const xAOD::Muon *mu2, const std::string &chain, std::pair< Bool_t, Bool_t > &result1, std::pair< Bool_t, Bool_t > &result2, const Double_t &mindelR=0.1) override
Definition: TrigMuonMatching.cxx:89
y
#define y
Trig::TrigMuonMatching::EFmuon::phi
float phi
Definition: TrigMuonMatching.h:90
Trig::TrigMuonMatching::decodeDimuonChain
bool decodeDimuonChain(DimuonChainInfo &chainInfo)
Definition: TrigMuonMatching.cxx:407
Trig::TrigMuonMatching::isPassedRerun
virtual Bool_t isPassedRerun(const std::string &trigger) const override
Definition: TrigMuonMatching.cxx:242
str
Definition: BTagTrackIpAccessor.cxx:11
Trig::TrigMuonMatching::TrigMuonMatching
TrigMuonMatching(const std::string &name)
Definition: TrigMuonMatching.cxx:22
Trig::TrigMuonMatching::tokenize
void tokenize(const std::string &str, std::vector< std::string > &tokens, const std::string &delimiters) const
Definition: TrigMuonMatching.cxx:323
CaloNoise_fillDB.mu
mu
Definition: CaloNoise_fillDB.py:53
Trig::TrigMuonMatching::EFmuon
Definition: TrigMuonMatching.h:86
dumpTgcDigiThreshold.threshold
list threshold
Definition: dumpTgcDigiThreshold.py:34
Trig::TrigMuonMatching::matchL2CB
virtual Bool_t matchL2CB(const xAOD::Muon *mu, const std::string &chain, const double DelR=0.2) const override
Definition: TrigMuonMatching.cxx:190
Trig::TrigMuonMatching::EFmuon::valid
bool valid
Definition: TrigMuonMatching.h:87
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
DimuonChainInfo::isSymmetric
bool isSymmetric
Definition: ITrigMuonMatching.h:18