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

#include <TrigMufastHypoTool.h>

Inheritance diagram for TrigMufastHypoTool:
Collaboration diagram for TrigMufastHypoTool:

Classes

struct  MuonClusterInfo
 

Public Member Functions

 TrigMufastHypoTool (const std::string &type, const std::string &name, const IInterface *parent)
 
virtual ~TrigMufastHypoTool ()
 
virtual StatusCode initialize () override
 
virtual StatusCode decide (std::vector< TrigMufastHypoTool::MuonClusterInfo > &toolInput) const
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
 
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed. More...
 

Private Types

enum  { MaxNumberTools = 20 }
 
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

bool decideOnSingleObject (TrigMufastHypoTool::MuonClusterInfo &input, size_t cutIndex) const
 
StatusCode inclusiveSelection (std::vector< TrigMufastHypoTool::MuonClusterInfo > &toolInput) const
 
StatusCode multiplicitySelection (std::vector< TrigMufastHypoTool::MuonClusterInfo > &toolInput) const
 
StatusCode applyOverlapRemoval (std::vector< TrigMufastHypoTool::MuonClusterInfo > &toolInput) const
 
StatusCode checkOverlap (std::vector< TrigMufastHypoTool::MuonClusterInfo * > &input) const
 
bool isOverlap (const xAOD::L2StandAloneMuon *mf1, const xAOD::L2StandAloneMuon *mf2) const
 
double dR (double eta1, double phi1, double eta2, double phi2) const
 
double invMass (double m1, double pt1, double eta1, double phi1, double m2, double pt2, double eta2, double phi2) const
 
StatusCode chooseBestMuon (std::vector< TrigMufastHypoTool::MuonClusterInfo * > &input, const std::vector< unsigned int > &mufastResult) const
 
float getLocalPhi (float, float, float) const
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Private Attributes

HLT::Identifier m_decisionId
 
Gaudi::Property< std::vector< std::vector< double > > > m_ptBins
 
Gaudi::Property< std::vector< std::vector< double > > > m_ptThresholds
 
Gaudi::Property< bool > m_acceptAll
 
Gaudi::Property< bool > m_selectPV
 
Gaudi::Property< float > m_ZPV
 
Gaudi::Property< float > m_RPV
 
Gaudi::Property< std::vector< double > > m_ptThresholdForECWeakBRegionA
 
Gaudi::Property< std::vector< double > > m_ptThresholdForECWeakBRegionB
 
Gaudi::Property< bool > m_decisionPerCluster
 
Gaudi::Property< bool > m_doCalib
 
Gaudi::Property< bool > m_applyOR
 
Gaudi::Property< bool > m_requireDR
 
Gaudi::Property< bool > m_requireMass
 
Gaudi::Property< bool > m_requireSameSign
 
Gaudi::Property< float > m_dRThresBB
 
Gaudi::Property< float > m_massThresBB
 
Gaudi::Property< float > m_dRThresBE
 
Gaudi::Property< float > m_massThresBE
 
Gaudi::Property< std::vector< float > > m_etaBinsEC
 
Gaudi::Property< std::vector< float > > m_dRThresEC
 
Gaudi::Property< std::vector< float > > m_massThresEC
 
std::vector< size_t > m_bins = {0}
 
ToolHandle< GenericMonitoringToolm_monTool { this, "MonTool", "", "Monitoring tool" }
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

Definition at line 33 of file TrigMufastHypoTool.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
private
Enumerator
MaxNumberTools 

Definition at line 34 of file TrigMufastHypoTool.h.

34 { MaxNumberTools = 20 };

Constructor & Destructor Documentation

◆ TrigMufastHypoTool()

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

Definition at line 19 of file TrigMufastHypoTool.cxx.

◆ ~TrigMufastHypoTool()

TrigMufastHypoTool::~TrigMufastHypoTool ( )
virtual

Definition at line 27 of file TrigMufastHypoTool.cxx.

27  {
28 }

Member Function Documentation

◆ applyOverlapRemoval()

StatusCode TrigMufastHypoTool::applyOverlapRemoval ( std::vector< TrigMufastHypoTool::MuonClusterInfo > &  toolInput) const
private

Definition at line 390 of file TrigMufastHypoTool.cxx.

390  {
391 
392  ATH_MSG_DEBUG("Running Overlap Removal for muFast");
393 
394  std::vector<TrigMufastHypoTool::MuonClusterInfo*> input;
395 
396  for ( auto& i: toolInput ) {
397  // If muon event has difference DecisionID, it shouldn't apply.
398  if ( TrigCompositeUtils::passed( m_decisionId.numeric(), i.previousDecisionIDs ) ) {
399  input.emplace_back(&i);
400  }
401  }
402 
403  size_t numMuon = input.size();
404 
405  auto mufastNrAllEVs = Monitored::Scalar("NrAllEVs", -9999.);
406  auto mufastNrActiveEVs = Monitored::Scalar("NrActiveEVs", -9999.);
407  auto monitorIt = Monitored::Group(m_monTool, mufastNrAllEVs, mufastNrActiveEVs);
408  if ( numMuon == 0) {
409  ATH_MSG_DEBUG( "No positive previous hypo decision. Not need overlap removal." );
410  mufastNrActiveEVs = numMuon;
411  mufastNrAllEVs = numMuon;
412  return StatusCode::SUCCESS;
413  }
414  else if ( numMuon == 1 ) {
415  ATH_MSG_DEBUG("Number of muon event = " << numMuon );
416  ATH_MSG_DEBUG("no overlap Removal necessary. exitting with all EventViews active." );
417  mufastNrActiveEVs = numMuon;
418  mufastNrAllEVs = numMuon;
419  return StatusCode::SUCCESS;
420  } else {
421  ATH_MSG_DEBUG("Number of muon event = " << numMuon );
422  mufastNrAllEVs = numMuon;
424  return StatusCode::SUCCESS;
425  }
426 
427 
428  return StatusCode::SUCCESS;
429 }

◆ checkOverlap()

StatusCode TrigMufastHypoTool::checkOverlap ( std::vector< TrigMufastHypoTool::MuonClusterInfo * > &  input) const
private

Definition at line 434 of file TrigMufastHypoTool.cxx.

434  {
435 
436  size_t numMuon = input.size();
437  unsigned int i,j;
438  std::vector<unsigned int> mufastResult;
439 
440  bool errorWhenIdentifyingOverlap = false;
441 
442  for(i=0; i<numMuon; i++) {mufastResult.emplace_back(i); }
443  for(i=0; i<numMuon-1; i++){
444  for(j=i+1; j<numMuon; j++){
445  ATH_MSG_DEBUG("++ i=" << i << " vs j=" << j);
446  bool overlapped = isOverlap((*input[i]).muFast, (*input[j]).muFast);
447  if( ! overlapped ){ // judged as different
448  ATH_MSG_DEBUG(" judged as: different objects");
449  if( mufastResult[i] == mufastResult[j] ) { // but marked as same by someone
450  ATH_MSG_DEBUG( "inconsistentency in muFast overlap removal for more than two objects" );
451  ATH_MSG_DEBUG( "two objects are judged as different but both were already marked as identical by someone else as: " );
452  ATH_MSG_DEBUG( "i/j/result[i]/result[j]=" << i << " / " << j << " / " << mufastResult[i] << " / " << mufastResult[j] );
453  auto mufastError = Monitored::Scalar("MufastError", -9999.);
454  auto monitorIt = Monitored::Group(m_monTool, mufastError);
456  errorWhenIdentifyingOverlap = true;
457  }
458  }
459  else{ // judged as overlap
460  if( (mufastResult[j] != j && mufastResult[i] != mufastResult[j]) || (mufastResult[j] == j && mufastResult[i] != i) ){
461  ATH_MSG_DEBUG( "inconsistentency in muFast overlap removal for more than two objects" );
462  ATH_MSG_DEBUG( "two objects are judged as overlap but only either was already marked as overlap to someone else: " );
463  ATH_MSG_DEBUG( "i/j/result[i]/result[j]=" << i << " / " << j << " / " << mufastResult[i] << " / " << mufastResult[j] );
464  auto mufastError = Monitored::Scalar("MufastError", -9999.);
465  auto monitorIt = Monitored::Group(m_monTool, mufastError);
467  errorWhenIdentifyingOverlap = true;
468  }
469  ATH_MSG_DEBUG(" judged as: overlapped objects");
470  if( mufastResult[i] == i ) {
471  ATH_MSG_DEBUG( " i is not yet marked as overlap. so, it is a newly found overlap" );
472  ATH_MSG_DEBUG( " -> marking mufastResult[j] as i..." );
473  mufastResult[j] = i;
474  } else {
475  ATH_MSG_DEBUG( " both i/j already marked as overlap by: mufastResult[i]=" << mufastResult[i] );
476  ATH_MSG_DEBUG( " -> do nothing..." );
477  }
478  }
479  }
480  }
481 
482  if( errorWhenIdentifyingOverlap ) {
483  ATH_MSG_WARNING( "error when resolving overlap. exitting with all EVs active..." );
484  auto mufastNrActiveEVs = Monitored::Scalar("NrActiveEVs", -9999.);
485  auto monitorIt = Monitored::Group(m_monTool, mufastNrActiveEVs);
486  mufastNrActiveEVs = numMuon;
487  // for(i=0; i<numMuon; i++) TrigCompositeUtils::addDecisionID( m_decisionId, toolInput[i].decision );
488  return StatusCode::SUCCESS;
489  }
490 
491  unsigned int n_uniqueMuon = 0;
492  for(i=0; i<numMuon; i++) {
493  ATH_MSG_DEBUG( "muFast results: i=" << i << ": ");
494  if( mufastResult[i] != i ) { ATH_MSG_DEBUG( " overlap to j=" << mufastResult[i] ); }
495  else {
496  n_uniqueMuon++;
497  ATH_MSG_DEBUG( " unique" );
498  }
499  }
500 
501  ATH_MSG_DEBUG( "nr of unique Muons after muFast overlap removal=" << n_uniqueMuon );
502 
503  if( numMuon != n_uniqueMuon ){
504  ATH_CHECK(chooseBestMuon(input, mufastResult));
505  } else {
506  ATH_MSG_DEBUG( "no overlap identified. exitting with all EventViews active" );
507  auto mufastNrActiveEVs = Monitored::Scalar("NrActiveEVs", -9999.);
508  auto monitorIt = Monitored::Group(m_monTool, mufastNrActiveEVs);
509  mufastNrActiveEVs = n_uniqueMuon;
510  }
511 
512  return StatusCode::SUCCESS;
513 }

◆ chooseBestMuon()

StatusCode TrigMufastHypoTool::chooseBestMuon ( std::vector< TrigMufastHypoTool::MuonClusterInfo * > &  input,
const std::vector< unsigned int > &  mufastResult 
) const
private

Definition at line 684 of file TrigMufastHypoTool.cxx.

685 {
686  size_t numMuon = input.size();
687  unsigned int i,j,k;
688 
689  auto mufastNrActiveEVs = Monitored::Scalar("NrActiveEVs", -9999.);
690  auto mufastNrOverlapped = Monitored::Scalar("NrOverlapped", 0);
691  auto mufastOverlappedEta = Monitored::Scalar("OverlappedEta", -9999.);
692  auto mufastOverlappedPhi = Monitored::Scalar("OverlappedPhi", -9999.);
693  auto mufastOverlappedPt = Monitored::Scalar("OverlappedPt", -9999.);
694 
695  auto monitorIt = Monitored::Group(m_monTool, mufastNrActiveEVs, mufastNrOverlapped,
696  mufastOverlappedPt, mufastOverlappedEta, mufastOverlappedPhi);
697 
698  ATH_MSG_DEBUG( "--- choose best among overlaps & disable EVs (muFast based) ---" );
699  for(i=0; i<numMuon; i++) {
700  ATH_MSG_DEBUG( "++ i=" << i << ": result=" << mufastResult[i] );
701  if( mufastResult[i] != i ) {
702  ATH_MSG_DEBUG( " overlap to some one. already the best one was chosen. skip." );
703  continue;
704  }
705  std::vector<unsigned int> others;
706  for(j=0; j<numMuon; j++) {
707  if( mufastResult[j] == mufastResult[i] ) others.emplace_back(j);
708  }
709  if( others.size() == 1 ) {
710  ATH_MSG_DEBUG( " unique object. keep it active." );
711  continue;
712  }
713  else {
714  // must choose one best
715  ATH_MSG_DEBUG( " overlapped objects among: " << others );
716  unsigned int best_ev = 0;
717  float maxPtMf = 0;
718  float maxPtRoI = 0;
719  for(k=0; k<others.size(); k++) {
720  j=others[k];
721  // const LVL1::RecMuonRoI* muonRoI = input[j].RecRoI;
722  // float ptRoI = muonRoI->getThresholdValue();
723  const xAOD::L2StandAloneMuon* mf = (*input[j]).muFast;
724  float ptMf = fabs(mf->pt());
725  float ptRoI = mf->roiThreshold();
726  ATH_MSG_DEBUG(" ev/PtRoI/ptMf="<< j << "/" << ptRoI << "/" << ptMf);
727  if( (ptRoI-maxPtRoI) > 0.1 ) {
728  maxPtRoI = ptRoI;
729  maxPtMf = ptMf;
730  best_ev = j;
731  }
732  else if( fabs(ptRoI-maxPtRoI) < 0.1 ) {
733  if( ptMf > maxPtMf ) {
734  maxPtRoI = ptRoI;
735  maxPtMf = ptMf;
736  best_ev = j;
737  }
738  }
739  }
740  ATH_MSG_DEBUG( " best is: best_ev/maxPtRoI/maxPtMf=" << best_ev << " / " << maxPtRoI << " / " << maxPtMf );
741 
742  for(k=0; k<others.size(); k++) {
743  j=others[k];
744  if( j != best_ev ) {
745  ATH_MSG_DEBUG( " EventView( j=" << j << " ) is not active" );
746 
747  (*input[j]).isOR.insert(m_decisionId.numeric());
748 
749  // monitoring
750  const xAOD::L2StandAloneMuon* mf = (*input[j]).muFast;
751  ++mufastNrOverlapped;
752  mufastOverlappedPt = mf->pt();
753  mufastOverlappedEta = mf->etaMS();
754  mufastOverlappedPhi = mf->phiMS();
755  }
756  if( j == best_ev ){
757  ATH_MSG_DEBUG( " EventView( j=" << j << " ) is best one" );
758  }
759  }
760  }
761  }
762  mufastNrActiveEVs = numMuon - mufastNrOverlapped;
763 
764  return StatusCode::SUCCESS;
765 }

◆ decide()

StatusCode TrigMufastHypoTool::decide ( std::vector< TrigMufastHypoTool::MuonClusterInfo > &  toolInput) const
virtual

Definition at line 278 of file TrigMufastHypoTool.cxx.

278  {
279 
280  size_t numTrigger = m_ptBins.size();
281  size_t numMuon = toolInput.size();
282  ATH_MSG_DEBUG("Retrieved from TrigMufastHypoAlg and Running TrigMufastHypoTool for selections.");
283 
284  if ( numTrigger == 1 ) { // in case of HLT_mu4, HLT_mu6 and so on.
285  ATH_MSG_DEBUG("Number of muon event = " << numMuon );
286  ATH_MSG_DEBUG("Applying selection of single << " << m_decisionId );
287  return inclusiveSelection(toolInput);
288  } else { // in case of HLT_2mu6 and so on.
289  ATH_MSG_DEBUG("Number of muon event = " << numMuon );
290  ATH_MSG_DEBUG("Applying selection of multiplicity << " << m_decisionId );
291 
292  if(m_applyOR)
293  ATH_CHECK(applyOverlapRemoval(toolInput));
294 
295  return multiplicitySelection(toolInput);
296  }
297 
298  return StatusCode::SUCCESS;
299 }

◆ decideOnSingleObject()

bool TrigMufastHypoTool::decideOnSingleObject ( TrigMufastHypoTool::MuonClusterInfo input,
size_t  cutIndex 
) const
private

Definition at line 120 of file TrigMufastHypoTool.cxx.

121 {
122 
123  auto fexPt = Monitored::Scalar("Pt", -9999.);
124  auto fexEta = Monitored::Scalar("Eta", -9999.);
125  auto fexPhi = Monitored::Scalar("Phi", -9999.);
126  auto fexPtFL = Monitored::Scalar("PtFL", -9999.);
127  auto xatStation = Monitored::Scalar("XatSt", -9999.);
128  auto yatStation = Monitored::Scalar("YatSt", -9999.);
129  auto zatStation = Monitored::Scalar("ZatSt", -9999.);
130  auto xatBeam = Monitored::Scalar("XatBe", -9999.);
131  auto zatBeam = Monitored::Scalar("ZatBe", -9999.);
132 
133  auto monitorIt = Monitored::Group(m_monTool, fexPt, fexEta, fexPhi, fexPtFL,
134  xatStation, yatStation, zatStation,
135  xatBeam, zatBeam);
136 
137  ATH_MSG_VERBOSE( "Cut index " << cutIndex );
138 
139  auto roiDescriptor = input.roi;
140  ATH_MSG_DEBUG("RoI ID = " << roiDescriptor->roiId()
141  << ", Eta = " << roiDescriptor->eta()
142  << ", Phi = " << roiDescriptor->phi());
143 
144  bool result = false;
145  // if accept All flag is on, just pass it
146  if(m_acceptAll) {
147  result = true;
148  ATH_MSG_DEBUG("Accept property is set: taking all the events");
149  return result;
150  } else {
151  result = false;
152  ATH_MSG_DEBUG("Accept property not set: applying selection!");
153  }
154 
155  // Get xAOD::L2StandAloneMuon:
156  auto pMuon = input.muFast;
157 
158  if(!pMuon){
159  result = false;
160  ATH_MSG_ERROR("Retrieval of L2StandAloneMuon from vector failed");
161  return result;
162  }
163 
164  // fill Monitoring histos
165  fexPt = (pMuon->pt())? pMuon->pt() : -9999.;
166  fexEta = (pMuon->etaMS())? pMuon->etaMS() : -9999.;
167  fexPhi = (pMuon->etaMS())? pMuon->phiMS() : -9999.;
168  fexPtFL = (pMuon->pt())? pMuon->pt() : -9999.;
169 
170  if( pMuon->etaMS() ) {
171  float localPhi = getLocalPhi(pMuon->etaMS(),pMuon->phiMS(),pMuon->rMS());
172  float radius = pMuon->rMS()/cos(fabs(localPhi));
173  float DirZ = (pMuon->dirZMS())? pMuon->dirZMS() : .000001;
174  float DirF = (pMuon->dirPhiMS())? pMuon->dirPhiMS() : .000001;
175  xatStation = radius * cos(pMuon->phiMS());
176  yatStation = radius * sin(pMuon->phiMS());
177  zatStation = pMuon->zMS();
178  float xb = xatStation - yatStation/DirF;
179  float de = xatStation - xb;
180  float ds = sqrt(yatStation*yatStation+de*de);
181  xatBeam = xb;
182  zatBeam = zatStation - ds*DirZ;
183  } else {
184  xatStation = -9999.;
185  yatStation = -9999.;
186  zatStation = -9999.;
187  xatBeam = -9999.;
188  zatBeam = -9999.;
189  }
190 
191  if(m_doCalib){
192  result = false;
193  ATH_MSG_DEBUG("This muoncalib chain is only monitored.");
194  return result;
195  }
196 
197  //Get the Pt cut for that eta bin
198  double threshold = 0;
199  float absEta = fabs(fexEta);
200  for (std::vector<float>::size_type i=0; i<m_bins[0]; ++i)
201  if ( absEta > m_ptBins[cutIndex][i] && absEta < m_ptBins[cutIndex][i+1] ) threshold = m_ptThresholds[cutIndex][i];
202 
203  // if in the weak Bfield regions at endcap, set special threshold
204 
207  ATH_MSG_DEBUG("threshold is set for EC WeakBField A");
209  }
210 
212  ATH_MSG_DEBUG("threshold is set for EC WeakBField B");
214  }
215 
216  ATH_MSG_DEBUG("threshold value is set as: " << threshold/Gaudi::Units::GeV << " GeV");
217 
218  // Check pt threshold for hypothesis,
219  // convert units since Muonfeature is in GeV
220  if ( std::abs(pMuon->pt()) > (threshold/Gaudi::Units::GeV)){
221  // selects only tracks coming from a region around PV
222  if( m_selectPV ){
223  if((fabs(xatBeam)<m_RPV) && (fabs(zatBeam)<m_ZPV))
224  result = true;
225  } else {
226  result = true;
227  }
228  }
229 
230  if ( result ) fexPtFL = -9999.;
231 
232  ATH_MSG_DEBUG("REGTEST: Muon pt is " << pMuon->pt() << " GeV"
233  << " and threshold cut is " << threshold/Gaudi::Units::GeV << " GeV"
234  << " so hypothesis is " << (result?"true":"false"));
235 
236  return result;
237 }

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKeyArray>

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleBase>

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ detStore()

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ dR()

double TrigMufastHypoTool::dR ( double  eta1,
double  phi1,
double  eta2,
double  phi2 
) const
private

Definition at line 638 of file TrigMufastHypoTool.cxx.

639 {
640  const double deta = eta1 - eta2;
641  const double dphi = CxxUtils::deltaPhi(phi1, phi2);
642  return std::sqrt(deta*deta + dphi*dphi);
643 }

◆ evtStore() [1/2]

ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( ) const
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase &  ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ getLocalPhi()

float TrigMufastHypoTool::getLocalPhi ( float  eta,
float  phi,
float  rad 
) const
private

Definition at line 242 of file TrigMufastHypoTool.cxx.

243 {
244  if(phi<0.) phi += 2*3.14159265;
245  float step = 0.78539816;
246  float offs = 0.39269908;
247  if(fabs(eta) <= 1.1)
248  {
249  float Dphi = 999999.;
250  float sign = 0.;
251  const float ZEROLIMIT = 1e-6;
252  if(rad < 800.)
253  {
254  for(int i=0;i<8;++i) if(fabs(i*step-phi)<=Dphi)
255  {
256  Dphi=fabs(i*step-phi);
257  sign = (fabs(Dphi) > ZEROLIMIT) ? (i*step-phi)/fabs(i*step-phi) : 0;
258  }
259  return sign*Dphi;
260  }else
261  {
262  for(int i=1;i<8;++i) if(fabs(i*step+offs-phi)<=Dphi)
263  {
264  Dphi=fabs(i*step+offs-phi);
265  sign = (fabs(Dphi) > ZEROLIMIT) ? (i*step+offs-phi)/fabs(i*step+offs-phi) : 0;
266  }
267  return sign*Dphi;
268  }
269  }else
270  {
271  return 0.;
272  }
273 }

◆ inclusiveSelection()

StatusCode TrigMufastHypoTool::inclusiveSelection ( std::vector< TrigMufastHypoTool::MuonClusterInfo > &  toolInput) const
private

Definition at line 302 of file TrigMufastHypoTool.cxx.

302  {
303 
304  for ( auto& i: toolInput ) {
305  // If muon event has difference DecisionID, it shouldn't apply.
306  if ( TrigCompositeUtils::passed( m_decisionId.numeric(), i.previousDecisionIDs ) ) {
307  if ( decideOnSingleObject( i, 0 )==true ) {
308  ATH_MSG_DEBUG("Pass through selection " << m_decisionId );
310  } else {
311  ATH_MSG_DEBUG("Not pass through selection " << m_decisionId );
312  }
313  } else {
314  ATH_MSG_DEBUG("Not match DecisionID:" << m_decisionId );
315  }
316  }
317 
318  return StatusCode::SUCCESS;
319 }

◆ initialize()

StatusCode TrigMufastHypoTool::initialize ( )
overridevirtual

Definition at line 33 of file TrigMufastHypoTool.cxx.

34 {
35  ATH_MSG_DEBUG("Initializing " << name());
36 
37  if(m_acceptAll) {
38  ATH_MSG_DEBUG("AcceptAll = True");
39  ATH_MSG_DEBUG("Accepting all the events!");
40  }
41  else if(m_doCalib){
42  ATH_MSG_DEBUG("This is muon calibration chain.");
43  }
44  else {
45  ATH_MSG_DEBUG("AcceptAll = False");
46  m_bins.resize (m_ptBins.size());
47  for ( size_t j=0; j<m_ptBins.size(); ++j) {
48  m_bins[j] = m_ptBins[j].size() - 1;
49  if (m_bins[j] != m_ptThresholds[j].size()) {
50  ATH_MSG_DEBUG("bad thresholds setup .... exiting!");
51  return StatusCode::SUCCESS;
52  }
53 
54  for (std::vector<float>::size_type i=0; i<m_bins[j];++i) {
55  char buf1[256];
56  char buf2[256];
57  sprintf(buf1,"%f5.2",m_ptBins[j][i]);
58  sprintf(buf2,"%f5.2",m_ptBins[j][i+1]);
59  ATH_MSG_DEBUG("EtaBin[" << j << "] " << buf1 << " - " << buf2
60  << ": with Pt Threshold of " << (m_ptThresholds[j][i])/Gaudi::Units::GeV
61  << " GeV");
62  }
63 
64  ATH_MSG_DEBUG("Endcap WeakBField A[" << j << "]: pT threshold of " << m_ptThresholdForECWeakBRegionA[j] / Gaudi::Units::GeV << " GeV");
65  ATH_MSG_DEBUG("Endcap WeakBField B[" << j << "]: pT threshold of " << m_ptThresholdForECWeakBRegionB[j] / Gaudi::Units::GeV << " GeV");
66  }
67  }
68 
69  ATH_MSG_DEBUG( "Tool configured for chain/id: " << m_decisionId );
70 
71  if ( not m_monTool.name().empty() ) {
72  ATH_CHECK( m_monTool.retrieve() );
73  ATH_MSG_DEBUG("MonTool name: " << m_monTool);
74  }
75 
76 
77  // Overlap Removal
78  if( m_applyOR ) {
79  ATH_MSG_DEBUG( "--- overlap removal as: ---" );
80  if( m_requireDR ) {
81  ATH_MSG_DEBUG( "+ dR cut:" );
82  if( (m_etaBinsEC.size()-1) != m_dRThresEC.size() ) {
83  ATH_MSG_ERROR( "bad thresholds setup .... exiting!" );
84  return StatusCode::FAILURE;
85  }
86  ATH_MSG_DEBUG( " B-B : dR < " << m_dRThresBB );
87  ATH_MSG_DEBUG( " B-E : dR < " << m_dRThresBE );
88  ATH_MSG_DEBUG( " E-E : " );
89  for(unsigned int i=0; i<m_dRThresEC.size(); i++) {
90  ATH_MSG_DEBUG( " EtaBin " << m_etaBinsEC[i] << " - " << m_etaBinsEC[i+1]
91  << " : dR < " << m_dRThresEC[i] );
92  }
93  }
94  if( m_requireMass ) {
95  ATH_MSG_DEBUG( "+ Mass cut:" );
96  if( (m_etaBinsEC.size()-1) != m_massThresEC.size() ) {
97  ATH_MSG_ERROR( "bad thresholds setup .... exiting!" );
98  return StatusCode::FAILURE;
99  }
100  ATH_MSG_DEBUG( " B-B : Mass < " << m_massThresBB );
101  ATH_MSG_DEBUG( " B-E : Mass < " << m_massThresBE );
102  ATH_MSG_DEBUG( " E-E : " );
103  for(unsigned int i=0; i<m_massThresEC.size(); i++) {
104  ATH_MSG_DEBUG( " EtaBin " << m_etaBinsEC[i] << " - " << m_etaBinsEC[i+1]
105  << " : Mass < " << m_massThresEC[i] );
106  }
107  }
108  if( m_requireSameSign ) ATH_MSG_DEBUG( "+ Same charge sign" );
109  }
110 
111 
112  ATH_MSG_DEBUG("Initialization completed successfully");
113 
114  return StatusCode::SUCCESS;
115 }

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ invMass()

double TrigMufastHypoTool::invMass ( double  m1,
double  pt1,
double  eta1,
double  phi1,
double  m2,
double  pt2,
double  eta2,
double  phi2 
) const
private

Definition at line 648 of file TrigMufastHypoTool.cxx.

650 {
651  const double ZERO_LIMIT = 1e-12;
652 
653  double theta1 = 2*atan2((double)exp(-eta1),1.);
654  double theta2 = 2*atan2((double)exp(-eta2),1.);
655 
656  double fpt1 = fabs(pt1);
657  double fpt2 = fabs(pt2);
658 
659  double px1 = fpt1*cos(phi1);
660  double py1 = fpt1*sin(phi1);
661  double pz1 = fpt1/tan(theta1);
662  double e1 = sqrt(px1*px1+py1*py1+pz1*pz1+m1*m1);
663 
664  double px2 = fpt2*cos(phi2);
665  double py2 = fpt2*sin(phi2);
666  double pz2 = fpt2/tan(theta2);
667  double e2 = sqrt(px2*px2+py2*py2+pz2*pz2+m2*m2);
668 
669  double pxsum = px1 + px2;
670  double pysum = py1 + py2;
671  double pzsum = pz1 + pz2;
672  double esum = e1 + e2;
673 
674  double mass = 0;
675  double mass2 = esum*esum - pxsum*pxsum - pysum*pysum - pzsum*pzsum;
676  if( mass2 > ZERO_LIMIT ) mass = sqrt(mass2);
677 
678  return mass;
679 }

◆ isOverlap()

bool TrigMufastHypoTool::isOverlap ( const xAOD::L2StandAloneMuon mf1,
const xAOD::L2StandAloneMuon mf2 
) const
private

Definition at line 518 of file TrigMufastHypoTool.cxx.

520 {
521 
522  auto mufastDR = Monitored::Scalar("DR", -9999.);
523  auto mufastMass = Monitored::Scalar("Mass", -9999.);
524  auto mufastDRLog10 = Monitored::Scalar("DRLog10", -9999.);
525  auto mufastMassLog10 = Monitored::Scalar("MassLog10", -9999.);
526 
527  auto monitorIt = Monitored::Group(m_monTool, mufastDR, mufastMass, mufastDRLog10, mufastMassLog10);
528 
529  ATH_MSG_DEBUG( " ...mF1: pt/eta/phi=" << mf1->pt() << " / " << mf1->etaMS() << " / " << mf1->phiMS() );
530  ATH_MSG_DEBUG( " ...mF2: pt/eta/phi=" << mf2->pt() << " / " << mf2->etaMS() << " / " << mf2->phiMS() );
531 
532  // if dR or invMass is necessary but (eta,phi) info is not avaiable
533  // (i.e. eta,phi=0,0; rec failed)
534  const double ZERO_LIMIT_FOR_ETAPHI = 1e-4;
535  if( (fabs(mf1->etaMS()) <ZERO_LIMIT_FOR_ETAPHI && fabs(mf1->phiMS()) < ZERO_LIMIT_FOR_ETAPHI) ||
536  (fabs(mf2->etaMS()) <ZERO_LIMIT_FOR_ETAPHI && fabs(mf2->phiMS()) < ZERO_LIMIT_FOR_ETAPHI) ) {
537  ATH_MSG_DEBUG( " ...-> (eta,phi) info not available (rec at (eta,phi)=(0,0))" );
538  ATH_MSG_DEBUG( " ...-> but dR of invMass check is required. cannot judge overlap -> return with false" );
539  return false;
540  }
541 
542  // if charge or invMass is necessary but charge(=pT) info is not avaiable
543  const double ZERO_LIMIT_FOR_PT = 1e-4;
544  if( (fabs(mf1->pt()) <ZERO_LIMIT_FOR_PT) || (fabs(mf2->pt()) < ZERO_LIMIT_FOR_PT) ) {
545  ATH_MSG_DEBUG( " ...-> pT info not available (rec at pT=0)" );
546  ATH_MSG_DEBUG( " ...-> but same sign or invMass check is required. cannot judge overlap -> return with false" );
547  return false;
548  }
549 
550 
551  // determine dR, mass threshold separately for: BB, BE, EE
552  double dRThres = 9999;
553  double massThres = 9999;
554 
555  const int SADDRESS_EC = -1;
556  bool isBarrel1 = (mf1->sAddress() != SADDRESS_EC ) ? true : false;
557  bool isBarrel2 = (mf2->sAddress() != SADDRESS_EC ) ? true : false;
558 
559  if( isBarrel1 && isBarrel2 ) { // BB
560  ATH_MSG_DEBUG( " ...B-B" );
561  dRThres =m_dRThresBB;
562  massThres=m_massThresBB;
563  }
564  else if( (isBarrel1 && ! isBarrel2) || (!isBarrel1 && isBarrel2) ) { // BE
565  ATH_MSG_DEBUG( " ...B-E" );
566  dRThres =m_dRThresBE;
567  massThres=m_massThresBE;
568  }
569  else { // EE
570  ATH_MSG_DEBUG( " ...E-E" );
571  double absEta = (fabs(mf1->pt()) > fabs(mf2->pt())) ? fabs(mf1->etaMS()) : fabs(mf2->etaMS());
572  unsigned int iThres=0;
573  for(unsigned int i=0; i<(m_etaBinsEC.size()-1); i++) {
574  if ( m_etaBinsEC[i] <= absEta && absEta < m_etaBinsEC[i+1] ) iThres = i;
575  }
576  ATH_MSG_DEBUG( " ...iThres=" << iThres );
577  dRThres = m_dRThresEC[iThres];
578  massThres = m_massThresEC[iThres];
579  }
580  ATH_MSG_DEBUG( " ...dR threshold=" << dRThres );
581  ATH_MSG_DEBUG( " ...mass threshold=" << massThres );
582 
583 
584  // same sign cut
585  bool sameSign = false;
586  if( m_requireSameSign ) {
587  sameSign = ((mf1->pt()*mf2->pt()) > 0) ? true : false;
588  ATH_MSG_DEBUG( " ...-> sameSign=" << sameSign );
589  }
590 
591  // dR cut
592  bool dRisClose = false;
593  double dr = dR(mf1->etaMS(),mf1->phiMS(),mf2->etaMS(),mf2->phiMS());
594 
595  // for monitoring
596  mufastDR = dr;
597  const double monitor_limit = 1e-4;
598  double dr_mon = (dr>=monitor_limit) ? dr : monitor_limit;
599  mufastDRLog10 = log10(dr_mon);
600 
601  if( m_requireDR ) {
602  if( dr < dRThres ) dRisClose = true;
603  ATH_MSG_DEBUG( " ...-> dR=" << dr << " : dRisClose=" << dRisClose );
604  }
605 
606  // mass cut
607  const double TRACK_MASS = 0; // just assume zero mass
608  bool massIsClose = false;
609  double mass = invMass(TRACK_MASS,mf1->pt(),mf1->etaMS(),mf1->phiMS(),TRACK_MASS,mf2->pt(),mf2->etaMS(),mf2->phiMS());
610 
611  // for monitoring
612  mufastMass = mass;
613  double mass_mon = (mass>=monitor_limit) ? mass : monitor_limit;
614  mufastMassLog10 = log10(mass_mon);
615 
616  if( m_requireMass ) {
617  if( mass < massThres ) massIsClose = true;
618  ATH_MSG_DEBUG( " ...-> mass=" << mass << " : massIsClose=" << massIsClose );
619  }
620 
621  // total judge
622  bool overlap = false;
623  if( ((m_requireSameSign && sameSign) || (! m_requireSameSign)) &&
624  ((m_requireDR && dRisClose) || (! m_requireDR)) &&
625  ((m_requireMass && massIsClose) || (! m_requireMass)) ) {
626  overlap = true;
627  }
628 
629  ATH_MSG_DEBUG( " ...=> isOverlap=" << overlap );
630 
631  return overlap;
632 
633 }

◆ msg() [1/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24  {
25  return this->msgStream();
26  }

◆ msg() [2/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30  {
31  return this->msgLevel(lvl);
32  }

◆ multiplicitySelection()

StatusCode TrigMufastHypoTool::multiplicitySelection ( std::vector< TrigMufastHypoTool::MuonClusterInfo > &  toolInput) const
private

Definition at line 322 of file TrigMufastHypoTool.cxx.

322  {
323 
324  HLT::Index2DVec passingSelection( m_ptBins.size() );
325 
326  for ( size_t cutIndex=0; cutIndex < m_ptBins.size(); ++cutIndex ) {
327  size_t elementIndex{ 0 };
328  for ( auto& i: toolInput ) {
329 
330  if(!m_acceptAll && m_applyOR && (i.isOR.find(m_decisionId.numeric()) != i.isOR.end())) {
331  ATH_MSG_DEBUG("skip due to overap, DecisionID " << m_decisionId );
332  elementIndex++;
333  continue;
334  }
335 
336  // If muon event has difference DecisionID, it shouldn't apply.
337  if ( TrigCompositeUtils::passed( m_decisionId.numeric(), i.previousDecisionIDs ) ) {
338  if ( decideOnSingleObject( i, cutIndex ) == true ) {
339  ATH_MSG_DEBUG("Pass through selection " << m_decisionId << " : Event[" << elementIndex << "]" );
340  passingSelection[cutIndex].push_back( elementIndex );
341  } else {
342  ATH_MSG_DEBUG("Not pass through selection " << m_decisionId << " : Event[" << elementIndex << "]" );
343  }
344  } else {
345  ATH_MSG_DEBUG("Not match DecisionID " << m_decisionId );
346  }
347  elementIndex++;
348  }
349 
350  // If no object passes the selection, multipul selection should stop.
351  if ( passingSelection[cutIndex].empty() ) {
352  ATH_MSG_DEBUG( "No object passed selection " << cutIndex << " rejecting" );
353  return StatusCode::SUCCESS;
354  }
355  }
356 
357  std::set<size_t> passingIndices;
358  if ( m_decisionPerCluster==true ) {
359  auto notFromSameRoI = [&]( const HLT::Index1DVec& comb ) {
360  std::set<const xAOD::L2StandAloneMuon*> setOfClusters;
361  for ( auto index: comb ) {
362  setOfClusters.insert( toolInput[index].muFast );
363  }
364  return setOfClusters.size() == comb.size();
365  };
366 
367  HLT::elementsInUniqueCombinations( passingSelection, passingIndices, std::move(notFromSameRoI) );
368 
369  } else {
370  HLT::elementsInUniqueCombinations( passingSelection, passingIndices );
371  }
372 
373  if ( passingIndices.empty() ) {
374  ATH_MSG_DEBUG("No muon event passed through selection " << m_decisionId );
375  return StatusCode::SUCCESS;
376  }
377 
378  for ( auto idx: passingIndices ) {
379  ATH_MSG_DEBUG("Muon event[" << idx << "] passes through Chain/ID " << m_decisionId
380  << " with pT = " << toolInput[idx].muFast->pt() << "GeV" );
381  TrigCompositeUtils::addDecisionID( m_decisionId.numeric(), toolInput[idx].decision );
382  }
383 
384  return StatusCode::SUCCESS;
385 }

◆ outputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t<std::is_void_v<std::result_of_t<decltype(&T::renounce)(T)> > && !std::is_base_of_v<SG::VarHandleKeyArray, T> && std::is_base_of_v<Gaudi::DataHandle, T>, void> AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T &  h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381  {
382  h.renounce();
383  PBASE::renounce (h);
384  }

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in DerivationFramework::CfAthAlgTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and asg::AsgMetadataTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase &  )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308  {
309  // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310  // << " size: " << m_vhka.size() << endmsg;
311  for (auto &a : m_vhka) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

Member Data Documentation

◆ m_acceptAll

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

Definition at line 95 of file TrigMufastHypoTool.h.

◆ m_applyOR

Gaudi::Property< bool > TrigMufastHypoTool::m_applyOR
private
Initial value:
{
this, "ApplyOR", false, "apply overlap removal for mufast" }

Definition at line 120 of file TrigMufastHypoTool.h.

◆ m_bins

std::vector<size_t> TrigMufastHypoTool::m_bins = {0}
private

Definition at line 155 of file TrigMufastHypoTool.h.

◆ m_decisionId

HLT::Identifier TrigMufastHypoTool::m_decisionId
private

Definition at line 68 of file TrigMufastHypoTool.h.

◆ m_decisionPerCluster

Gaudi::Property<bool> TrigMufastHypoTool::m_decisionPerCluster
private
Initial value:
{
this, "DecisionPerCluster", true, "Is multiplicity requirement refering to muons ( false ) or RoIs/clusters with muons ( false ), relevant only in when multiplicity > 1" }

Definition at line 113 of file TrigMufastHypoTool.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doCalib

Gaudi::Property< bool > TrigMufastHypoTool::m_doCalib
private
Initial value:
{
this, "DoCalib", false, "muoncalib chain" }

Definition at line 116 of file TrigMufastHypoTool.h.

◆ m_dRThresBB

Gaudi::Property< float > TrigMufastHypoTool::m_dRThresBB
private
Initial value:
{
this, "DRThresBB", 0.05, "DR threshold in barel and barel region"}

Definition at line 132 of file TrigMufastHypoTool.h.

◆ m_dRThresBE

Gaudi::Property< float > TrigMufastHypoTool::m_dRThresBE
private
Initial value:
{
this, "DRThresBE", 0.05, "DR threshold in barel and barel region"}

Definition at line 138 of file TrigMufastHypoTool.h.

◆ m_dRThresEC

Gaudi::Property< std::vector<float> > TrigMufastHypoTool::m_dRThresEC
private
Initial value:
{
this, "DRThresEC", {0.06, 0.05, 0.05}, "DR threshold in endcap and barel region"}

Definition at line 147 of file TrigMufastHypoTool.h.

◆ m_etaBinsEC

Gaudi::Property< std::vector<float> > TrigMufastHypoTool::m_etaBinsEC
private
Initial value:
{
this, "EtaBinsEC", {0, 1.9, 2.1, 9.9}, "eta bins of DR and mass thresholds in endcap and barel region"}

Definition at line 144 of file TrigMufastHypoTool.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_massThresBB

Gaudi::Property< float > TrigMufastHypoTool::m_massThresBB
private
Initial value:
{
this, "MassThresBB", 0.20, "mass threshold in barel and barel region"}

Definition at line 135 of file TrigMufastHypoTool.h.

◆ m_massThresBE

Gaudi::Property< float > TrigMufastHypoTool::m_massThresBE
private
Initial value:
{
this, "MassThresBE", 0.20, "mass threshold in barel and endcap region"}

Definition at line 141 of file TrigMufastHypoTool.h.

◆ m_massThresEC

Gaudi::Property< std::vector<float> > TrigMufastHypoTool::m_massThresEC
private
Initial value:
{
this, "MassThresEC", {0.20, 0.15, 0.10}, "mass threshold in endcap and endcap region"}

Definition at line 150 of file TrigMufastHypoTool.h.

◆ m_monTool

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

Definition at line 157 of file TrigMufastHypoTool.h.

◆ m_ptBins

Gaudi::Property< std::vector<std::vector<double> > > TrigMufastHypoTool::m_ptBins
private
Initial value:
{
this, "PtBins", { {0, 2.5} }, "Bins range of each pT threshold" }

Definition at line 89 of file TrigMufastHypoTool.h.

◆ m_ptThresholdForECWeakBRegionA

Gaudi::Property< std::vector<double> > TrigMufastHypoTool::m_ptThresholdForECWeakBRegionA
private
Initial value:
{
this, "PtThresholdForECWeakBRegionA", {3.}, "Track pT requirement on regionA of weak magnetic field ( separate threshold for each muon )" }

Definition at line 107 of file TrigMufastHypoTool.h.

◆ m_ptThresholdForECWeakBRegionB

Gaudi::Property< std::vector<double> > TrigMufastHypoTool::m_ptThresholdForECWeakBRegionB
private
Initial value:
{
this, "PtThresholdForECWeakBRegionB", {3.}, "Track pT requirement on regionB of weak magnetic field ( separate threshold for each muon )" }

Definition at line 110 of file TrigMufastHypoTool.h.

◆ m_ptThresholds

Gaudi::Property< std::vector<std::vector<double> > > TrigMufastHypoTool::m_ptThresholds
private
Initial value:
{
this, "PtThresholds", { {5.49*Gaudi::Units::GeV} }, "Track pT requirement ( separate threshold for each muon )" }

Definition at line 92 of file TrigMufastHypoTool.h.

◆ m_requireDR

Gaudi::Property<bool> TrigMufastHypoTool::m_requireDR
private
Initial value:
{
this, "RequireDR", true, "require or not DR cut for overlap removal"}

Definition at line 123 of file TrigMufastHypoTool.h.

◆ m_requireMass

Gaudi::Property<bool> TrigMufastHypoTool::m_requireMass
private
Initial value:
{
this, "RequireMass", true, "require or not mass cut for overlap removal"}

Definition at line 126 of file TrigMufastHypoTool.h.

◆ m_requireSameSign

Gaudi::Property<bool> TrigMufastHypoTool::m_requireSameSign
private
Initial value:
{
this, "RequireSameSign", true, "require or not charge cut for overlap removal"}

Definition at line 129 of file TrigMufastHypoTool.h.

◆ m_RPV

Gaudi::Property< float > TrigMufastHypoTool::m_RPV
private
Initial value:
{
this, "RPVBins", 200., "Define RPV" }

Definition at line 104 of file TrigMufastHypoTool.h.

◆ m_selectPV

Gaudi::Property< bool > TrigMufastHypoTool::m_selectPV
private
Initial value:
{
this, "SelectPV", false, "Select PV" }

Definition at line 98 of file TrigMufastHypoTool.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ m_ZPV

Gaudi::Property< float > TrigMufastHypoTool::m_ZPV
private
Initial value:
{
this, "ZPVBins", 400. , "Define ZPV" }

Definition at line 101 of file TrigMufastHypoTool.h.


The documentation for this class was generated from the following files:
xAOD::L2MuonParameters::ECRegions
ECRegions
Definition: TrigMuonDefs.h:36
checkxAOD.ds
ds
Definition: Tools/PyUtils/bin/checkxAOD.py:257
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
get_generator_info.result
result
Definition: get_generator_info.py:21
python.SystemOfUnits.m2
int m2
Definition: SystemOfUnits.py:92
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
ParticleGun_SamplingFraction.eta2
eta2
Definition: ParticleGun_SamplingFraction.py:96
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
xAOD::L2StandAloneMuon_v2::etaMS
float etaMS() const
Get the eta at muon spectrometer.
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
HLT::Identifier::numeric
TrigCompositeUtils::DecisionID numeric() const
numeric ID
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:47
TrigMufastHypoTool::m_ptThresholdForECWeakBRegionA
Gaudi::Property< std::vector< double > > m_ptThresholdForECWeakBRegionA
Definition: TrigMufastHypoTool.h:107
egammaEnergyPositionAllSamples::e1
double e1(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in 1st sampling
xAOD::L2StandAloneMuon_v2
Class describing standalone muons reconstructed in the LVL2 trigger.
Definition: L2StandAloneMuon_v2.h:36
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
index
Definition: index.py:1
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
TrigMufastHypoTool::m_etaBinsEC
Gaudi::Property< std::vector< float > > m_etaBinsEC
Definition: TrigMufastHypoTool.h:144
TrigMufastHypoTool::m_decisionId
HLT::Identifier m_decisionId
Definition: TrigMufastHypoTool.h:68
TrigCompositeUtils::addDecisionID
void addDecisionID(DecisionID id, Decision *d)
Appends the decision (given as ID) to the decision object.
Definition: TrigCompositeUtilsRoot.cxx:61
TrigMufastHypoTool::m_doCalib
Gaudi::Property< bool > m_doCalib
Definition: TrigMufastHypoTool.h:116
TrigMufastHypoTool::MaxNumberTools
@ MaxNumberTools
Definition: TrigMufastHypoTool.h:34
TrigMufastHypoTool::m_acceptAll
Gaudi::Property< bool > m_acceptAll
Definition: TrigMufastHypoTool.h:95
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
xAOD::eta1
setEt setPhi setE277 setWeta2 eta1
Definition: TrigEMCluster_v1.cxx:41
TrigMufastHypoTool::chooseBestMuon
StatusCode chooseBestMuon(std::vector< TrigMufastHypoTool::MuonClusterInfo * > &input, const std::vector< unsigned int > &mufastResult) const
Definition: TrigMufastHypoTool.cxx:684
xAOD::L2StandAloneMuon_v2::phiMS
float phiMS() const
Get the phi at muon spectrometer.
python.TurnDataReader.dr
dr
Definition: TurnDataReader.py:112
TrigMufastHypoTool::checkOverlap
StatusCode checkOverlap(std::vector< TrigMufastHypoTool::MuonClusterInfo * > &input) const
Definition: TrigMufastHypoTool.cxx:434
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
TrigMufastHypoTool::m_bins
std::vector< size_t > m_bins
Definition: TrigMufastHypoTool.h:155
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
TrigMufastHypoTool::invMass
double invMass(double m1, double pt1, double eta1, double phi1, double m2, double pt2, double eta2, double phi2) const
Definition: TrigMufastHypoTool.cxx:648
empty
bool empty(TH1 *h)
Definition: computils.cxx:294
dqt_zlumi_pandas.mass
mass
Definition: dqt_zlumi_pandas.py:170
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
HLT::Identifier::fromToolName
static HLT::Identifier fromToolName(const std::string &tname)
Definition: HLTIdentifier.cxx:31
DQPostProcessTest.mf
mf
Definition: DQPostProcessTest.py:19
TrigMufastHypoTool::m_ptThresholdForECWeakBRegionB
Gaudi::Property< std::vector< double > > m_ptThresholdForECWeakBRegionB
Definition: TrigMufastHypoTool.h:110
TrigMufastHypoTool::m_massThresBE
Gaudi::Property< float > m_massThresBE
Definition: TrigMufastHypoTool.h:141
HLT::Index1DVec
std::vector< size_t > Index1DVec
Unique combinations for case when one can not repeat the index (i.e.
Definition: TrigCompositeUtils/TrigCompositeUtils/Combinators.h:139
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
TrigMufastHypoTool::decideOnSingleObject
bool decideOnSingleObject(TrigMufastHypoTool::MuonClusterInfo &input, size_t cutIndex) const
Definition: TrigMufastHypoTool.cxx:120
TrigMufastHypoTool::m_massThresEC
Gaudi::Property< std::vector< float > > m_massThresEC
Definition: TrigMufastHypoTool.h:150
TrigMufastHypoTool::applyOverlapRemoval
StatusCode applyOverlapRemoval(std::vector< TrigMufastHypoTool::MuonClusterInfo > &toolInput) const
Definition: TrigMufastHypoTool.cxx:390
AthCommonDataStore
Definition: AthCommonDataStore.h:52
python.changerun.m1
m1
Definition: changerun.py:32
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
xAOD::L2StandAloneMuon_v2::sAddress
int sAddress() const
Get the station address of the muon.
lumiFormat.i
int i
Definition: lumiFormat.py:92
TrigMufastHypoTool::m_selectPV
Gaudi::Property< bool > m_selectPV
Definition: TrigMufastHypoTool.h:98
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
TrigMufastHypoTool::dR
double dR(double eta1, double phi1, double eta2, double phi2) const
Definition: TrigMufastHypoTool.cxx:638
WeakBFieldA
@ WeakBFieldA
Definition: MuFastSteering.h:42
test_pyathena.parent
parent
Definition: test_pyathena.py:15
sign
int sign(int a)
Definition: TRT_StrawNeighbourSvc.h:127
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TrigMufastHypoTool::m_decisionPerCluster
Gaudi::Property< bool > m_decisionPerCluster
Definition: TrigMufastHypoTool.h:113
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
TrigMufastHypoTool::m_dRThresBB
Gaudi::Property< float > m_dRThresBB
Definition: TrigMufastHypoTool.h:132
TrigMufastHypoTool::m_applyOR
Gaudi::Property< bool > m_applyOR
Definition: TrigMufastHypoTool.h:120
TrigMufastHypoTool::m_massThresBB
Gaudi::Property< float > m_massThresBB
Definition: TrigMufastHypoTool.h:135
TrigMufastHypoTool::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrigMufastHypoTool.h:157
TrigMufastHypoTool::m_dRThresEC
Gaudi::Property< std::vector< float > > m_dRThresEC
Definition: TrigMufastHypoTool.h:147
AthAlgTool::AthAlgTool
AthAlgTool()
Default constructor:
HLT::elementsInUniqueCombinations
void elementsInUniqueCombinations(const Index2DVec &indices, std::set< size_t > &participants, std::function< bool(const Index1DVec &)> &&filter)
Definition: Combinators.cxx:154
ZERO_LIMIT
const float ZERO_LIMIT
Definition: VP1TriggerHandleL2.cxx:37
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
TrigMufastHypoTool::m_ZPV
Gaudi::Property< float > m_ZPV
Definition: TrigMufastHypoTool.h:101
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
TrigMufastHypoToolConsts::errorCode_inconsistent_overlap1
const int errorCode_inconsistent_overlap1
Definition: TrigMufastHypoTool.h:25
threshold
Definition: chainparser.cxx:74
CxxUtils::deltaPhi
T deltaPhi(T phiA, T phiB)
Return difference phiA - phiB in range [-pi, pi].
Definition: phihelper.h:42
TrigMufastHypoTool::inclusiveSelection
StatusCode inclusiveSelection(std::vector< TrigMufastHypoTool::MuonClusterInfo > &toolInput) const
Definition: TrigMufastHypoTool.cxx:302
TrigMufastHypoTool::multiplicitySelection
StatusCode multiplicitySelection(std::vector< TrigMufastHypoTool::MuonClusterInfo > &toolInput) const
Definition: TrigMufastHypoTool.cxx:322
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
DataModelTestDataCommonDict::xb
DMTest::CView::Pers_t xb
Definition: DataModelTestDataCommonDict.h:44
TrigMufastHypoTool::m_ptBins
Gaudi::Property< std::vector< std::vector< double > > > m_ptBins
Definition: TrigMufastHypoTool.h:89
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
a
TList * a
Definition: liststreamerinfos.cxx:10
TrigMufastHypoToolConsts::errorCode_inconsistent_overlap2
const int errorCode_inconsistent_overlap2
Definition: TrigMufastHypoTool.h:26
h
egammaEnergyPositionAllSamples::e2
double e2(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in 2nd sampling
TrigMufastHypoTool::getLocalPhi
float getLocalPhi(float, float, float) const
Definition: TrigMufastHypoTool.cxx:242
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TrigMufastHypoTool::m_requireDR
Gaudi::Property< bool > m_requireDR
Definition: TrigMufastHypoTool.h:123
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
TauGNNUtils::Variables::absEta
bool absEta(const xAOD::TauJet &tau, double &out)
Definition: TauGNNUtils.cxx:232
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:616
LArCellBinning.step
step
Definition: LArCellBinning.py:158
xAOD::L2StandAloneMuon_v2::pt
virtual double pt() const
The transverse momentum ( ) of the particle.
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
HLT::Index2DVec
std::vector< Index1DVec > Index2DVec
Definition: TrigCompositeUtils/TrigCompositeUtils/Combinators.h:140
TrigMufastHypoTool::m_requireSameSign
Gaudi::Property< bool > m_requireSameSign
Definition: TrigMufastHypoTool.h:129
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
TrigMufastHypoTool::m_RPV
Gaudi::Property< float > m_RPV
Definition: TrigMufastHypoTool.h:104
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
TrigMufastHypoTool::m_requireMass
Gaudi::Property< bool > m_requireMass
Definition: TrigMufastHypoTool.h:126
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
TrigMufastHypoTool::m_dRThresBE
Gaudi::Property< float > m_dRThresBE
Definition: TrigMufastHypoTool.h:138
python.SystemOfUnits.rad
int rad
Definition: SystemOfUnits.py:111
TrigMufastHypoTool::m_ptThresholds
Gaudi::Property< std::vector< std::vector< double > > > m_ptThresholds
Definition: TrigMufastHypoTool.h:92
TrigMufastHypoTool::isOverlap
bool isOverlap(const xAOD::L2StandAloneMuon *mf1, const xAOD::L2StandAloneMuon *mf2) const
Definition: TrigMufastHypoTool.cxx:518
fitman.k
k
Definition: fitman.py:528
xAOD::L2MuonParameters::whichECRegion
ECRegions whichECRegion(const float eta, const float phi)
Definition: TrigMuonDefs.cxx:16