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

EF hypothesis algorithm for B -> mu+ nu_mu X decays: B+ -> mu+ nu_mu anti-D0(-> K+ pi-) B0 -> mu+ nu_mu D*-(-> anti-D0(-> K+ pi-) pi-) B0 -> mu+ nu_mu D-(-> K+ pi- pi-) B_s0 -> mu+ nu_mu D_s-(->phi(-> K+ K-) pi-) anti-Lambda_b0 -> mu+ nu_mu anti-Lambda_c-(-> anti-p K+ pi-) More...

#include <TrigBmuxComboHypo.h>

Inheritance diagram for TrigBmuxComboHypo:
Collaboration diagram for TrigBmuxComboHypo:

Public Types

enum  Decay : size_t {
  kD0, kDstar, kDs, kDplus,
  kLambdaC
}
 

Public Member Functions

 TrigBmuxComboHypo (const std::string &name, ISvcLocator *pSvcLocator)
 
 TrigBmuxComboHypo ()=delete
 
virtual StatusCode initialize () override
 
virtual StatusCode execute (const EventContext &context) const override
 
virtual StatusCode sysInitialize () override
 Override sysInitialize. More...
 
virtual bool isClonable () const override
 Specify if the algorithm is clonable. More...
 
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant. More...
 
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm. More...
 
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies. More...
 
virtual bool filterPassed (const EventContext &ctx) const
 
virtual void setFilterPassed (bool state, const EventContext &ctx) 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 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

const SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsInput () const
 
const SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsOutput () const
 
const Combo::MultiplicityReqMaptriggerMultiplicityMap () const
 
const Combo::LegMaplegToInputCollectionMap () const
 
ToolHandleArray< ComboHypoToolBase > & hypoTools ()
 
const ToolHandleArray< ComboHypoToolBase > & hypoTools () const
 
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

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

StatusCode findBmuxCandidates (TrigBmuxState &) const
 
StatusCode createDecisionObjects (TrigBmuxState &) const
 
std::unique_ptr< xAOD::Vertexfit (const EventContext &context, const std::vector< ElementLink< xAOD::TrackParticleContainer >> &trackParticleLinks, Decay decay) const
 Perform a vertex fit on selected tracks. More...
 
std::unique_ptr< Trk::VxCascadeInfofitCascade (const EventContext &context, const std::vector< ElementLink< xAOD::TrackParticleContainer >> &trackParticleLinks, Decay decay) const
 Perform a cascade vertex fit on selected tracks. More...
 
StatusCode fillTriggerObject (xAOD::TrigBphys &triggerObject, xAOD::TrigBphys::pType type, const xAOD::Vertex &vertex, const std::vector< double > &trkMass) const
 Fill the trigger object that may be stored for debugging or matching. More...
 
StatusCode fillTriggerObjects (std::vector< xAOD::TrigBphys * > &triggerObjects, xAOD::TrigBphys::pType type, const Trk::VxCascadeInfo &vxCascadeInfo, const Amg::Vector3D &beamSpotPosition) const
 Fill the trigger object that may be stored for debugging or matching for a cascade vertex. More...
 
bool isIdenticalTracks (const xAOD::TrackParticle *lhs, const xAOD::TrackParticle *rhs) const
 Returns false for the tracks with opposite charges. More...
 
bool isInSameRoI (const xAOD::Muon *, const xAOD::TrackParticle *) const
 Checks that the given track is close enough to the muon, i.e. More...
 
bool isInMassRange (double mass, const std::pair< double, double > &range) const
 Checks that the given mass value falls into the specified range. More...
 
double getTrkImpactParameterZ0 (const EventContext &ctx, const xAOD::TrackParticle &track, const Amg::Vector3D &vertex) const
 Returns the longitudinal impact parameter z0 of the track w.r.t. More...
 
double Lxy (const Amg::Vector3D &productionVertex, const Amg::Vector3D &decayVertex, const std::vector< TLorentzVector > &momenta) const
 Returns the transverse decay length of a particle Lxy in [mm]. More...
 
StatusCode copyDecisions (const Combo::LegDecisionsMap &passingLegs, const EventContext &context) const
 iterates over the inputs and for every object (no filtering) crates output object linked to input moving the decisions that are mentioned in the passing set More...
 
StatusCode extractFeatureAndRoI (const HLT::Identifier &chainLegId, const ElementLink< TrigCompositeUtils::DecisionContainer > &EL, SG::sgkey_t &featureKey, uint16_t &featureIndex, SG::sgkey_t &roiKey, uint16_t &roiIndex, bool &roiFullscan, bool &objectRequestsNoMultiplicityCheck, SG::SGKeyMap< std::set< uint32_t >> &priorFeaturesMap, const EventContext &ctx) const
 For a given Decision node from a HypoAlg, extracts type-less identification data on the node's Feature and seeding ROI. More...
 
StatusCode fillDecisionsMap (Combo::LegDecisionsMap &dmap, const EventContext &context) const
 iterates over all inputs, associating inputs to legs More...
 
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

SG::ReadHandleKey< xAOD::TrackParticleContainerm_trackParticleContainerKey
 
SG::ReadHandleKey< xAOD::MuonContainerm_muonContainerKey
 
SG::WriteHandleKey< xAOD::TrigBphysContainerm_trigBphysContainerKey
 
SG::ReadCondHandleKey< InDet::BeamSpotDatam_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"}
 
Gaudi::Property< bool > m_makeCascadeFit
 
Gaudi::Property< float > m_cascadeChi2
 
Gaudi::Property< double > m_deltaR
 
Gaudi::Property< double > m_trkZ0
 
Gaudi::Property< double > m_roiEtaWidth
 
Gaudi::Property< double > m_roiPhiWidth
 
Gaudi::Property< size_t > m_fitAttemptsWarningThreshold
 
Gaudi::Property< size_t > m_fitAttemptsBreakThreshold
 
Gaudi::Property< bool > m_BToD0
 
Gaudi::Property< bool > m_BToD0_makeDstar
 
Gaudi::Property< double > m_BToD0_minD0KaonPt
 
Gaudi::Property< double > m_BToD0_minD0PionPt
 
Gaudi::Property< double > m_BToD0_minD0Pt
 
Gaudi::Property< double > m_BToD0_minDstarPt
 
Gaudi::Property< double > m_BToD0_minDstarPionPt
 
Gaudi::Property< double > m_BToD0_maxDstarPionZ0
 
Gaudi::Property< std::pair< double, double > > m_BToD0_massRange
 
Gaudi::Property< std::pair< double, double > > m_BToD0_D0MassRange
 
Gaudi::Property< std::pair< double, double > > m_BToD0_DstarMassRange
 
Gaudi::Property< float > m_BToD0_chi2
 
Gaudi::Property< float > m_BToD0_LxyB
 
Gaudi::Property< float > m_BToD0_LxyBd
 
Gaudi::Property< float > m_BToD0_LxyD0
 
Gaudi::Property< bool > m_BdToD
 
Gaudi::Property< double > m_BdToD_minKaonPt
 
Gaudi::Property< double > m_BdToD_minPionPt
 
Gaudi::Property< double > m_BdToD_minDPt
 
Gaudi::Property< std::pair< double, double > > m_BdToD_massRange
 
Gaudi::Property< std::pair< double, double > > m_BdToD_DMassRange
 
Gaudi::Property< float > m_BdToD_chi2
 
Gaudi::Property< float > m_BdToD_LxyBd
 
Gaudi::Property< float > m_BdToD_LxyD
 
Gaudi::Property< bool > m_BsToDs
 
Gaudi::Property< double > m_BsToDs_minKaonPt
 
Gaudi::Property< double > m_BsToDs_minPionPt
 
Gaudi::Property< double > m_BsToDs_minDsPt
 
Gaudi::Property< std::pair< double, double > > m_BsToDs_massRange
 
Gaudi::Property< std::pair< double, double > > m_BsToDs_phiMassRange
 
Gaudi::Property< std::pair< double, double > > m_BsToDs_DsMassRange
 
Gaudi::Property< float > m_BsToDs_chi2
 
Gaudi::Property< float > m_BsToDs_LxyBs
 
Gaudi::Property< float > m_BsToDs_LxyDs
 
Gaudi::Property< bool > m_LambdaBToLambdaC
 
Gaudi::Property< double > m_LambdaBToLambdaC_minProtonPt
 
Gaudi::Property< double > m_LambdaBToLambdaC_minKaonPt
 
Gaudi::Property< double > m_LambdaBToLambdaC_minPionPt
 
Gaudi::Property< double > m_LambdaBToLambdaC_minLambdaCPt
 
Gaudi::Property< std::pair< double, double > > m_LambdaBToLambdaC_massRange
 
Gaudi::Property< std::pair< double, double > > m_LambdaBToLambdaC_LambdaCMassRange
 
Gaudi::Property< float > m_LambdaBToLambdaC_chi2
 
Gaudi::Property< float > m_LambdaBToLambdaC_LxyLb
 
Gaudi::Property< float > m_LambdaBToLambdaC_LxyLc
 
ToolHandle< InDet::VertexPointEstimatorm_vertexPointEstimator
 
ToolHandle< Trk::TrkVKalVrtFitterm_vertexFitter
 
ToolHandle< Reco::ITrackToVertexm_trackToVertexTool
 
ToolHandle< GenericMonitoringToolm_monTool
 
TrigCompositeUtils::DecisionIDContainer m_allowedIDs
 
SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainerm_inputs { this, "HypoInputDecisions", {}, "Input Decisions" }
 
SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainerm_outputs { this, "HypoOutputDecisions", {}, "Output Decisions" }
 
Gaudi::Property< bool > m_requireUniqueROI
 
Gaudi::Property< Combo::MultiplicityReqMapm_multiplicitiesReqMap
 
Gaudi::Property< Combo::LegMapm_legToInputCollectionMap
 
Gaudi::Property< bool > m_checkMultiplicityMap
 
ToolHandleArray< ComboHypoToolBasem_hypoTools {this, "ComboHypoTools", {}, "Tools to perform selection"}
 
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks. More...
 
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
 

Static Private Attributes

static const std::vector< std::vector< std::vector< double > > > s_trkMass
 

Detailed Description

EF hypothesis algorithm for B -> mu+ nu_mu X decays: B+ -> mu+ nu_mu anti-D0(-> K+ pi-) B0 -> mu+ nu_mu D*-(-> anti-D0(-> K+ pi-) pi-) B0 -> mu+ nu_mu D-(-> K+ pi- pi-) B_s0 -> mu+ nu_mu D_s-(->phi(-> K+ K-) pi-) anti-Lambda_b0 -> mu+ nu_mu anti-Lambda_c-(-> anti-p K+ pi-)

Definition at line 89 of file TrigBmuxComboHypo.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ Decay

enum TrigBmuxComboHypo::Decay : size_t
Enumerator
kD0 
kDstar 
kDs 
kDplus 
kLambdaC 

Definition at line 97 of file TrigBmuxComboHypo.h.

97  : size_t {
98  kD0, // D0 -> K- pi+
99  kDstar, // D*-(-> anti-D0(-> K+ pi-) pi-)
100  kDs, // D_s+ -> K+ K- pi+
101  kDplus, // D+ -> K- pi+ pi+
102  kLambdaC // Lambda_c+ -> p K- pi+
103  };

Constructor & Destructor Documentation

◆ TrigBmuxComboHypo() [1/2]

TrigBmuxComboHypo::TrigBmuxComboHypo ( const std::string &  name,
ISvcLocator *  pSvcLocator 
)

Definition at line 49 of file TrigBmuxComboHypo.cxx.

50  : ::ComboHypo(name, pSvcLocator) {}

◆ TrigBmuxComboHypo() [2/2]

TrigBmuxComboHypo::TrigBmuxComboHypo ( )
delete

Member Function Documentation

◆ cardinality()

unsigned int AthReentrantAlgorithm::cardinality ( ) const
overridevirtualinherited

Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.

Override this to return 0 for reentrant algorithms.

Override this to return 0 for reentrant algorithms.

Definition at line 55 of file AthReentrantAlgorithm.cxx.

56 {
57  return 0;
58 }

◆ copyDecisions()

StatusCode ComboHypo::copyDecisions ( const Combo::LegDecisionsMap passingLegs,
const EventContext &  context 
) const
privateinherited

iterates over the inputs and for every object (no filtering) crates output object linked to input moving the decisions that are mentioned in the passing set

Definition at line 87 of file ComboHypo.cxx.

87  {
88  DecisionIDContainer passing;
89  for (auto const& element : passingLegs) {
90  passing.insert(element.first);
91  }
92 
93  ATH_MSG_DEBUG( "Copying "<<passing.size()<<" positive decision IDs to outputs");
94 
95  for ( size_t input_counter = 0; input_counter < m_inputs.size(); ++input_counter ) {
96  // new output decisions
97  SG::WriteHandle<DecisionContainer> outputHandle = createAndStore(m_outputs.at(input_counter), context );
98  auto outDecisions = outputHandle.ptr();
99  auto inputHandle = SG::makeHandle( m_inputs.at(input_counter), context );
100  if ( inputHandle.isValid() ) {
101 
102  for (const Decision* inputDecision : *inputHandle) {
103  auto thisEL = TrigCompositeUtils::decisionToElementLink(inputDecision, context);
104 
105  // from all positive decision in the input only the ones that survived counting are passed over
106  const DecisionIDContainer& common = passedDecisionIDs(inputDecision, passing);
107 
108  // check if this EL is in the combination map for the passing decIDs:
109  ATH_MSG_DEBUG("Searching this element in the map: ("<<thisEL.dataID() << " , " << thisEL.index()<<")");
110  DecisionIDContainer finalIds;
111  for (const DecisionID c : common){
112  const HLT::Identifier cID = HLT::Identifier(c);
113  // add the decID only if this candidate passed the combination selection
114  const std::vector<ElementLink<DecisionContainer>>& Comb=passingLegs.at(c);
115  if(std::find(Comb.begin(), Comb.end(), thisEL) == Comb.end()) {
116  continue;
117  }
118  ATH_MSG_DEBUG(" Adding "<< cID <<" because EL is found in the passingLegs map");
119  finalIds.insert( cID.numeric() ); // all Ids used by the Filter, including legs
120  if (TrigCompositeUtils::isLegId ( cID )){
121  const HLT::Identifier mainChain = TrigCompositeUtils::getIDFromLeg( cID );
122  finalIds.insert( mainChain.numeric() );
123  ATH_MSG_DEBUG(" Adding "<< mainChain <<" consequently");
124  }
125  }
126 
127  Decision* newDec = newDecisionIn( outDecisions, inputDecision, comboHypoAlgNodeName(), context );
128  ATH_MSG_DEBUG("New decision (Container Index:" << input_counter << ", Element Index:"<< newDec->index() <<") has "
129  << (TrigCompositeUtils::findLink<TrigRoiDescriptorCollection>(newDec, initialRoIString())).isValid()
130  << " valid initialRoI, "<< TrigCompositeUtils::getLinkToPrevious(newDec).size() <<" previous decisions and "<<finalIds.size()<<" decision IDs") ;
131  insertDecisionIDs( finalIds, newDec );
132 
133  }
134  }
135 
136  if (msgLvl(MSG::DEBUG)) {
137  ATH_MSG_DEBUG("Output Handle " << m_outputs.at(input_counter).key() << " with " << outputHandle->size() <<" Decision objects");
138  for (const Decision* d : *outputHandle){
139  DecisionIDContainer objDecisions;
140  decisionIDs( d, objDecisions );
141  ATH_MSG_DEBUG(" Decision object #" << d->index() << " with " << objDecisions.size()<<" positive decision IDs");
142  for (const TrigCompositeUtils::DecisionID id : objDecisions ) {
143  ATH_MSG_DEBUG(" --- Passes: " << HLT::Identifier( id ));
144  }
145  }
146  }
147  }
148 
149  return StatusCode::SUCCESS;
150 }

◆ createDecisionObjects()

StatusCode TrigBmuxComboHypo::createDecisionObjects ( TrigBmuxState state) const
private

Definition at line 447 of file TrigBmuxComboHypo.cxx.

447  {
448 
449  size_t idx = 0;
450  for (const xAOD::TrigBphys* triggerObject : state.trigBphysCollection()) {
451  if (triggerObject->particleType() == xAOD::TrigBphys::UNKNOWNPTYPE) continue;
452 
453  ATH_MSG_DEBUG( "Found xAOD::TrigBphys object: mass = " << triggerObject->mass() );
454 
455  auto triggerObjectEL = ElementLink<xAOD::TrigBphysContainer>(state.trigBphysCollection(), triggerObject->index());
456  ATH_CHECK( triggerObjectEL.isValid() );
457 
458  const auto& muon = state.muons.at(state.trigBphysMuonIndices.at(idx));
459 
460  // create a new output Decision object, backed by the 'decisions' container.
462 
463  // add link to the previous decision
464  decision->addObjectCollectionLink(TrigCompositeUtils::seedString(), muon.decisionLink);
465 
466  // set mandatory link to the trigger object
467  decision->setObjectLink<xAOD::TrigBphysContainer>(TrigCompositeUtils::featureString(), triggerObjectEL);
468 
469  std::vector<const DecisionIDContainer*> previousDecisionIDs(1, &muon.decisionIDs);
470  for (const auto& tool : hypoTools()) {
471  ATH_MSG_DEBUG( "Go to " << tool );
472  ATH_CHECK( tool->decideOnSingleObject(decision, previousDecisionIDs) );
473  }
474  ++idx;
475  }
476 
477  return StatusCode::SUCCESS;
478 }

◆ decisionsInput()

const SG::ReadHandleKeyArray<TrigCompositeUtils::DecisionContainer>& ComboHypo::decisionsInput ( ) const
inlineprotectedinherited

Definition at line 40 of file ComboHypo.h.

40 { return m_inputs; }

◆ decisionsOutput()

const SG::WriteHandleKeyArray<TrigCompositeUtils::DecisionContainer>& ComboHypo::decisionsOutput ( ) const
inlineprotectedinherited

Definition at line 41 of file ComboHypo.h.

41 { return m_outputs; }

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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; }

◆ evtStore() [1/2]

ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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; }

◆ execute()

StatusCode TrigBmuxComboHypo::execute ( const EventContext &  context) const
overridevirtual

Reimplemented from ComboHypo.

Definition at line 98 of file TrigBmuxComboHypo.cxx.

98  {
99 
100  ATH_MSG_DEBUG( "TrigBmuxComboHypo::execute() starts" );
101 
102  ATH_MSG_DEBUG( "decision input key: " << decisionsInput().at(0).key() );
103  auto previousDecisionsHandle = SG::makeHandle(decisionsInput().at(0), context);
104  ATH_CHECK( previousDecisionsHandle.isValid() );
105  ATH_MSG_DEBUG( "Running with " << previousDecisionsHandle->size() << " previous decisions" );
106 
108 
109  auto trigBphysHandle = SG::makeHandle(m_trigBphysContainerKey, context);
110  ATH_CHECK( trigBphysHandle.record(std::make_unique<xAOD::TrigBphysContainer>(),
111  std::make_unique<xAOD::TrigBphysAuxContainer>()) );
112 
113  SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle {m_beamSpotKey, context};
114  ATH_CHECK( beamSpotHandle.isValid() );
115 
116  auto state = std::make_unique<TrigBmuxState>(context, *previousDecisionsHandle, *outputDecisionsHandle, trigBphysHandle.ptr(), *beamSpotHandle);
117 
118  ATH_CHECK( findBmuxCandidates(*state) );
119  ATH_CHECK( createDecisionObjects(*state) );
120 
121  ATH_MSG_DEBUG( "TrigBmuxComboHypo::execute() terminates with StatusCode::SUCCESS" );
122  return StatusCode::SUCCESS;
123 }

◆ extractFeatureAndRoI()

StatusCode ComboHypo::extractFeatureAndRoI ( const HLT::Identifier chainLegId,
const ElementLink< TrigCompositeUtils::DecisionContainer > &  EL,
SG::sgkey_t featureKey,
uint16_t &  featureIndex,
SG::sgkey_t roiKey,
uint16_t &  roiIndex,
bool &  roiFullscan,
bool &  objectRequestsNoMultiplicityCheck,
SG::SGKeyMap< std::set< uint32_t >> &  priorFeaturesMap,
const EventContext &  ctx 
) const
privateinherited

For a given Decision node from a HypoAlg, extracts type-less identification data on the node's Feature and seeding ROI.

Parameters
[in]chainLegIdThe HLT::Identifer of the chain (leg) we're extracting features for.
[in]ELThe Decision node from the HypoAlg, expected to have a "feature" link attached to it. Expected to be able to locate a "initialRoI" in its history if RequireUniqueROI=True.
[out]featureKeyType-less SG Key hash of the collection hosting the Decision node's feature .
[out]featureIndexIndex inside the featureKey collection.
[out]roiKeyType-less SG Key hash of the collection hosting the Decision node's initial ROI collection.
[out]roiIndexIndex inside the roiKey collection.
[out]roiIsFullscanFlag indicating if the located initial ROI has the FullScan flag enabled. Triggers special behaviour allowing the ROI to satisfy arbitrary multiplicities in an arbitrary number of legs.
[out]objectRequestsNoMultiplicityCheckFlag indicating of the DecisionObject requested not be included in the multiplicity computation. Triggers special behaviour allowing the DecisionObject to satisfy arbitrary multiplicities in an arbitrary number of legs.
[in,out]priorFeaturesMapData structure collating for a given feature (key) what the prior features were integrated over all previous steps (value set).
[in]ctxThe event context

Definition at line 381 of file ComboHypo.cxx.

391 {
392  // Return collections for the findLinks call.
393  // While we will be focusing on the most recent feature, for tag-and-probe we need to keep a record of the features from the prior steps too.
394 
395  // Construct a sub-graph following just this leg back through the nav
396  DecisionIDContainer chainLegIdSet = {chainLegId.numeric()};
398  recursiveGetDecisions((*dEL), subGraph, ctx, chainLegIdSet, /*enforceDecisionOnStartNode =*/ true);
399 
400  if (subGraph.finalNodes().size() != 1) {
401  ATH_MSG_ERROR("We are only expecting to search from a single navigation node in extractFeatureAndRoI");
402  return StatusCode::FAILURE;
403  }
404  const NavGraphNode* start = *(subGraph.finalNodes().begin());
405 
406  std::vector<SG::sgkey_t> keys;
407  std::vector<uint32_t> clids; // We don't care about the class ID. This part gets ignored.
408  std::vector<uint16_t> indicies;
409  std::vector<const Decision*> sources;
410 
411  std::set<const xAOD::TrigComposite*> fullyExploredFrom; // This is a cache which typelessFindLinks will use to avoid re-visiting already explored regions of the graph
412  // Note: This call to typelessFindLinks is exploring from a NavGraphNode* rather than a Decision*,
413  // this indicates that the search is restricted to a sub-graph (specifically, only following one chain-leg)
414  const bool foundFeature = typelessFindLinks(start, featureString(), keys, clids, indicies, sources, TrigDefs::allFeaturesOfType, &fullyExploredFrom);
415 
416  const Decision* featureSource = nullptr;
417  // The "most recent" feature (from the step just run) is the one we find first. Hence it's at index 0
418  if (foundFeature) {
419  featureKey = keys.at(0);
420  featureIndex = indicies.at(0);
421  featureSource = sources.at(0);
422  }
423 
424  objectRequestsNoMultiplicityCheck = (featureSource and featureSource->hasDetail<int32_t>("noCombo") and featureSource->getDetail<int32_t>("noCombo") == 1);
425 
426  if (foundFeature and priorFeaturesMap.count(featureKey + featureIndex) == 0) {
427  const std::string* key_str = evtStore()->keyToString(featureKey);
428  ATH_MSG_DEBUG("Note: Will use feature hash " << featureKey + featureIndex << ", for " << (key_str ? *key_str : "UNKNOWN") << " index=" << featureIndex);
429  // Use the deep-search data to look further back than .at(0)
430  // Here's where we keep the record of the features in previous steps. Step ordering is unimportant, we can use a set.
431  if (keys.size() > 1) {
432  for (size_t i = 1; i < keys.size(); ++i) { // Skip the 1st entry, this will be equal to featureKey and featureIndex from typelessFindLink above.
433  // featureKey + featureIndex should be considered as equivalent to a per-feature hash (featureKey is a real hash, featureIndex is an offset index)
434  if (featureKey + featureIndex == keys.at(i) + indicies.at(i)) {
435  continue; // Do not add the case where a feature is re-attached to more than one step.
436  }
437  priorFeaturesMap[featureKey + featureIndex].insert(keys.at(i) + indicies.at(i));
438  }
439  } else { // Exactly one feature. Make a note of this by inserting an empty set, such that we don't do this search again.
440  priorFeaturesMap.insert( std::pair<uint32_t, std::set<uint32_t>>(featureKey + featureIndex, std::set<uint32_t>()) );
441  }
442  }
443 
444  // Try and get seeding ROI data too.
445  uint32_t roiClid{0}; // Unused
446  const Decision* roiSource{nullptr}; // Unused
447  const bool foundROI = typelessFindLink(subGraph, initialRoIString(), roiKey, roiClid, roiIndex, roiSource);
448  if (foundROI) {
449  ElementLink<TrigRoiDescriptorCollection> roiEL(roiKey, roiIndex);
450  ATH_CHECK( roiEL.isValid() );
451  roiIsFullscan = (*(roiEL))->isFullscan();
452  if (!foundFeature) {
453  const std::string* roi_str = evtStore()->keyToString(roiKey);
454  ATH_MSG_DEBUG("Note: Located fallback-ROI, if used this will have feature hash =" << roiKey + roiIndex << ", for " << (roi_str ? *roi_str : "UNKNOWN") << " index=" << roiIndex);
455  }
456  }
457 
458  if (!foundFeature && !foundROI) {
459  ATH_MSG_WARNING("Did not find the feature or initialRoI for " << dEL.dataID() << " index " << dEL.index());
460  }
461 
462  return StatusCode::SUCCESS;
463 }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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

◆ extraOutputDeps()

const DataObjIDColl & AthReentrantAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 79 of file AthReentrantAlgorithm.cxx.

80 {
81  // If we didn't find any symlinks to add, just return the collection
82  // from the base class. Otherwise, return the extended collection.
83  if (!m_extendedExtraObjects.empty()) {
85  }
86  return Algorithm::extraOutputDeps();
87 }

◆ fillDecisionsMap()

StatusCode ComboHypo::fillDecisionsMap ( Combo::LegDecisionsMap dmap,
const EventContext &  context 
) const
privateinherited

iterates over all inputs, associating inputs to legs

Definition at line 466 of file ComboHypo.cxx.

466  {
467  for ( size_t inputContainerIndex = 0; inputContainerIndex < m_inputs.size(); ++inputContainerIndex ) {
468  auto inputHandle = SG::makeHandle( m_inputs.at(inputContainerIndex), context );
469  if ( !inputHandle.isValid() ) {
470  ATH_MSG_ERROR( "No input ReadHandle from " << inputHandle.key() );
471  return StatusCode::FAILURE;
472  }
473  ATH_MSG_DEBUG( "-- Found ReadHandle from " << inputHandle.key() <<" with "<< inputHandle->size() << " elements:" );
474  for ( const Decision* decision : *inputHandle ) {
475  ATH_MSG_DEBUG( "-- -- Input Decision #"<< decision->index() <<" with "<< decisionIDs( decision ).size() << " active IDs. Populating the multiplicity map:" );
476  for ( const DecisionID id: decisionIDs( decision ) ) {
477  HLT::Identifier chainID = HLT::Identifier(id);
478  int32_t chainLeg = 0; // Assume initially that the chain is not multi-leg, and update these two values if it is.
479  if (isLegId(id)) {
480  chainID = getIDFromLeg(id);
481  chainLeg = getIndexFromLeg(id);
482  }
483 
484  // We need to check if we are configured to accept DecisionObjects passing 'chainID' ...
485  Combo::LegMap::const_iterator it = m_legToInputCollectionMap.find(chainID.name());
486  if (it == m_legToInputCollectionMap.end()) {
487  ATH_MSG_VERBOSE("-- -- -- Ignoring the DecsionID " << id << " on leg " << chainLeg << " as it does not correspond to any of the " << m_legToInputCollectionMap.size() << " chains this Alg is processing.");
488  continue;
489  }
490 
491  // ... and if so we need to further check that we are accepting passing IDs for chainLeg on the current inputContainerIndex
492  const std::vector<int>& legToInputCollectionIndex = it->second;
493  const size_t requiredInputContainerIndex = static_cast<size_t>(legToInputCollectionIndex.at(chainLeg));
494  if (requiredInputContainerIndex != inputContainerIndex) {
495  ATH_MSG_VERBOSE("-- -- -- Ignoring the DecisionID " << id << " on leg " << chainLeg << " as we are only permitted to accept passing objects on leg #" << chainLeg << " of " << chainID.name()
496  << " which come from input collection index " << requiredInputContainerIndex << " (which is " << m_inputs.at(requiredInputContainerIndex).key() << ")"
497  << ". Not the current index " << inputContainerIndex << " (which is " << m_inputs.at(inputContainerIndex).key() << ")");
498  continue;
499  }
500 
501  ATH_MSG_DEBUG( " ++++ " << HLT::Identifier( id ) );
502  dmap[id].push_back( TrigCompositeUtils::decisionToElementLink(decision, context) );
503  }
504  }
505  }
506 
507  if (msgLvl(MSG::DEBUG)){
508  ATH_MSG_DEBUG( "Decision map filled :" );
509  size_t legCount = 0;
510  for (const auto& entry: dmap){
511  ATH_MSG_DEBUG("leg ["<<legCount<<"]: ");
512  const std::vector<ElementLink<DecisionContainer>>& decisions = entry.second;
513  ATH_MSG_DEBUG(" ++++ " << HLT::Identifier( entry.first ) <<" Number Decisions: "<< decisions.size());
515  ATH_MSG_DEBUG(" Decision: (ContainerKey:"<<d.dataID()<<", DecisionElementIndex:"<<d.index()<<")");
516  }
517  legCount++;
518  }
519  }
520 
521 
522  return StatusCode::SUCCESS;
523 }

◆ fillTriggerObject()

StatusCode TrigBmuxComboHypo::fillTriggerObject ( xAOD::TrigBphys triggerObject,
xAOD::TrigBphys::pType  type,
const xAOD::Vertex vertex,
const std::vector< double > &  trkMass 
) const
private

Fill the trigger object that may be stored for debugging or matching.

Parameters
triggerObjectthe trigger object
typedecay type enumerator. Corresponds to EDM definitions
trkMassTrack mass hypothesis for mass calculations
Returns
StatusCode to indicate success or failure

Definition at line 594 of file TrigBmuxComboHypo.cxx.

598  {
599 
600  // refitted track momentum as a 4-vector for mass hypothesis defined by the given decay value
602  std::vector<xAOD::TrackParticle::GenVecFourMom_t> momenta;
603  ATH_CHECK( vertex.vxTrackAtVertexAvailable() );
604  ATH_CHECK( vertex.vxTrackAtVertex().size() == trkMass.size() );
605  for (size_t i = 0; i < vertex.vxTrackAtVertex().size(); ++i) {
606  const Trk::TrackParameters* perigee = vertex.vxTrackAtVertex()[i].perigeeAtVertex();
607  ATH_CHECK( perigee != nullptr );
608  const Amg::Vector3D& p = perigee->momentum();
609  momenta.emplace_back(p.x(), p.y(), p.z(), trkMass[i]);
610  momentum += momenta.back();
611  }
612 
613  triggerObject.initialise(0, momentum.Eta(), momentum.Phi(), momentum.Pt(), type, momentum.M(), xAOD::TrigBphys::EF);
614 
615  triggerObject.setFitmass(momentum.M());
616  triggerObject.setFitx(vertex.x());
617  triggerObject.setFity(vertex.y());
618  triggerObject.setFitz(vertex.z());
619  triggerObject.setFitchi2(vertex.chiSquared());
620  triggerObject.setFitndof(vertex.numberDoF());
621 
622  // set all the particles associated with the decay
623  triggerObject.setTrackParticleLinks(vertex.trackParticleLinks());
624 
626  "TrigBphys object:\n\t " <<
627  "roiId: " << triggerObject.roiId() << "\n\t " <<
628  "particleType: " << triggerObject.particleType() << "\n\t " <<
629  "level: " << triggerObject.level() << "\n\t " <<
630  "eta: " << triggerObject.eta() << "\n\t " <<
631  "phi: " << triggerObject.phi() << "\n\t " <<
632  "mass: " << triggerObject.mass() << "\n\t " <<
633  "fitmass: " << triggerObject.fitmass() << "\n\t " <<
634  "chi2/NDF: " << triggerObject.fitchi2() << " / " << triggerObject.fitndof() << "\n\t " <<
635  "vertex: (" << triggerObject.fitx() << ", " << triggerObject.fity() << ", " << triggerObject.fitz() << ")" );
636 
637  return StatusCode::SUCCESS;
638 }

◆ fillTriggerObjects()

StatusCode TrigBmuxComboHypo::fillTriggerObjects ( std::vector< xAOD::TrigBphys * > &  triggerObjects,
xAOD::TrigBphys::pType  type,
const Trk::VxCascadeInfo vxCascadeInfo,
const Amg::Vector3D beamSpotPosition 
) const
private

Fill the trigger object that may be stored for debugging or matching for a cascade vertex.

Parameters
triggerObjectsthe trigger objects for the cascade
typedecay type enumerator. Corresponds to EDM definitions
vxCascadeInfothe cascade info object for the vertex fitter.
beamSpotPositionThe beamspot position
Returns
StatusCode to indicate success or failure

Definition at line 641 of file TrigBmuxComboHypo.cxx.

645  {
646 
647  const std::vector<xAOD::Vertex*>& vertices = vxCascadeInfo.vertices();
648  const std::vector<std::vector<TLorentzVector>>& momenta = vxCascadeInfo.getParticleMoms();
649  ATH_CHECK( triggerObjects.size() == vertices.size() );
650 
651  for (size_t i = 0; i < vertices.size(); ++i) {
652  const xAOD::Vertex* vertex = vertices[i];
653  TLorentzVector momentum = std::accumulate(momenta[i].begin(), momenta[i].end(), TLorentzVector());
654  xAOD::TrigBphys* triggerObject = triggerObjects[i];
656  triggerObject->setFitmass(momentum.M());
657  triggerObject->setFitx(vertex->x());
658  triggerObject->setFity(vertex->y());
659  triggerObject->setFitz(vertex->z());
660  triggerObject->setTrackParticleLinks(vertex->trackParticleLinks());
661  }
662 
663  // D0/D(*)-/D_s-/Lambda_c+
664  triggerObjects[0]->setLxy(Lxy(vertices[1]->position(), vertices[0]->position(), momenta[0]));
665  triggerObjects[0]->setSecondaryDecayLink(ElementLink<xAOD::TrigBphysContainer>(m_trigBphysContainerKey.key(), triggerObjects[1]->index()));
666  ATH_CHECK( triggerObjects[0]->secondaryDecayLink().isValid() );
667 
668  // B+/B0/B_s0/Lambda_b0
669  triggerObjects[1]->setParticleType(type);
670  triggerObjects[1]->setFitchi2(vxCascadeInfo.fitChi2());
671  triggerObjects[1]->setFitndof(vxCascadeInfo.nDoF());
672  triggerObjects[1]->setLxy(Lxy(beamSpotPosition, vertices[1]->position(), momenta[1]));
673  triggerObjects[1]->setLowerChainLink(ElementLink<xAOD::TrigBphysContainer>(m_trigBphysContainerKey.key(), triggerObjects[0]->index()));
674  ATH_CHECK( triggerObjects[1]->lowerChainLink().isValid() );
675 
676  if (msgLvl(MSG::DEBUG)) {
677  const xAOD::TrigBphys* vtx0 = triggerObjects[0];
678  const xAOD::TrigBphys* vtx1 = triggerObjects[1];
680  "TrigBphys object:\n\t " <<
681  "particleType: " << vtx1->particleType() << "\n\t " <<
682  "chi2/NDF: " << vtx1->fitchi2() << " / " << vtx1->fitndof() << "\n\t " <<
683  "vertex0: (" << vtx0->fitx() << ", " << vtx0->fity() << ", " << vtx0->fitz() << ")\n\t " <<
684  "vertex1: (" << vtx1->fitx() << ", " << vtx1->fity() << ", " << vtx1->fitz() << ")\n\t " <<
685  "Lxy(B): " << vtx1->lxy() << "\n\t " <<
686  "Lxy(D): " << vtx0->lxy() );
687  }
688 
689  return StatusCode::SUCCESS;
690 }

◆ filterPassed()

virtual bool AthReentrantAlgorithm::filterPassed ( const EventContext &  ctx) const
inlinevirtualinherited

Definition at line 135 of file AthReentrantAlgorithm.h.

135  {
136  return execState( ctx ).filterPassed();
137  }

◆ findBmuxCandidates()

StatusCode TrigBmuxComboHypo::findBmuxCandidates ( TrigBmuxState state) const
private

Definition at line 126 of file TrigBmuxComboHypo.cxx.

126  {
127 
128  auto& muons = state.muons;
129  muons.clear();
130 
131  // monitored variables
132  std::vector<int> nTrk;
133  auto mon_nMuon = Monitored::Scalar<int>("nMuon", 0);
134  auto mon_nTrk = Monitored::Collection("nTrk", nTrk);
135  auto mon_nBPhysObject = Monitored::Scalar<int>("nBPhysObject", 0);
136 
138  mon_nMuon, mon_nTrk, mon_nBPhysObject);
139 
140  for (const Decision* decision : state.previousDecisions()) {
141  if (!TrigCompositeUtils::isAnyIDPassing(decision, m_allowedIDs)) continue;
142 
143  auto decisionEL = TrigCompositeUtils::decisionToElementLink(decision, state.context());
145  auto muonEL = decision->objectLink<xAOD::MuonContainer>(TrigCompositeUtils::featureString());
146  const auto muon = *muonEL;
147  if (!muon->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle)) continue;
148  if (!muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)) continue;
149  const auto muonInDetTrack = muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
150  auto p_mu = muonInDetTrack->genvecP4();
151  p_mu.SetM(PDG::mMuon);
152  double z0_mu = (m_trkZ0 > 0. ? getTrkImpactParameterZ0(state.context(), *muonInDetTrack, state.beamSpotPosition()) : -1.);
153  mon_nMuon++;
154 
155  // add muon from decision to state.leptons
158  size_t muonIndex = muons.size();
159  muons.push_back({muonEL, decisionEL, decisionIDs});
160 
161  ATH_MSG_DEBUG( "Found muon (CombinedTrackParticle) pt/eta/phi/q: " << muon->pt() << " / " << muon->eta() << " / " << muon->phi() << " / " << muon->charge() );
162 
163  auto viewLinkInfo = TrigCompositeUtils::findLink<ViewContainer>(decision, TrigCompositeUtils::viewString(), true);
164  ATH_CHECK( viewLinkInfo.isValid() );
165  auto view = *viewLinkInfo.link;
166 
167  auto roiLinkInfo = TrigCompositeUtils::findLink<TrigRoiDescriptorCollection>(decision, TrigCompositeUtils::roiString(), true);
168  ATH_CHECK( roiLinkInfo.isValid() );
169  const auto roi = *roiLinkInfo.link;
170 
171  auto tracksHandle = ViewHelper::makeHandle(view, m_trackParticleContainerKey, state.context());
172  ATH_CHECK( tracksHandle.isValid() );
173  ATH_MSG_DEBUG( "Tracks container " << m_trackParticleContainerKey << " size: " << tracksHandle->size() );
174 
175  std::vector<ElementLink<xAOD::TrackParticleContainer>> tracks;
176  tracks.reserve(tracksHandle->size());
177  for (size_t idx = 0; idx < tracksHandle->size(); ++idx) {
178  const auto track = tracksHandle->get(idx);
179  if (track->definingParametersCovMatrixVec().empty() || (m_trkZ0 > 0. && std::abs(getTrkImpactParameterZ0(state.context(), *track, state.beamSpotPosition()) - z0_mu) > m_trkZ0)) continue;
180  if (roi->composite() && !isInSameRoI(muon, track)) continue;
181  tracks.emplace_back(ViewHelper::makeLink<xAOD::TrackParticleContainer>(view, tracksHandle, idx));
182  }
183  // find the best match to the original muon and remove it
184  if (tracks.size() < 2) continue;
185  std::sort(tracks.begin(), tracks.end(), [p_mu](const auto& lhs, const auto& rhs){ return ROOT::Math::VectorUtil::DeltaR(p_mu, (*lhs)->genvecP4()) > ROOT::Math::VectorUtil::DeltaR(p_mu, (*rhs)->genvecP4()); });
186  if (isIdenticalTracks(muonInDetTrack, *tracks.back())) tracks.pop_back();
187  nTrk.push_back(tracks.size());
188 
189  std::sort(tracks.begin(), tracks.end(), [](const auto& lhs, const auto& rhs){ return ((*lhs)->pt() > (*rhs)->pt()); });
190 
191  if (msgLvl(MSG::DEBUG)) {
192  ATH_MSG_DEBUG( "Dump found tracks before vertex fit: " << tracks.size() << " candidates" );
193  for (const auto& trackEL : tracks) {
194  const xAOD::TrackParticle* track = *trackEL;
195  ATH_MSG_DEBUG( " -- track pt/eta/phi/q: " << track->pt() << " / " << track->eta() << " / " << track->phi() << " / " << track->charge() );
196  }
197  }
198 
199  size_t iterations = 0;
200  bool isOverWarningThreshold = false;
201  for (size_t itrk1 = 0; itrk1 < tracks.size(); ++itrk1) {
202  const xAOD::TrackParticle* trk1 = *tracks[itrk1];
203  auto p_trk1 = trk1->genvecP4();
204  auto charge1 = trk1->charge();
205 
206  for (size_t itrk2 = 0; itrk2 < tracks.size(); ++itrk2) {
207  if (itrk2 == itrk1) continue;
208  const xAOD::TrackParticle* trk2 = *tracks[itrk2];
209  auto p_trk2 = trk2->genvecP4();
210  auto charge2 = trk2->charge();
211 
212  // D0(-> K- pi+)
214  std::unique_ptr<xAOD::Vertex> vtx_D0;
216  if (m_BToD0 &&
217  charge1 * charge2 < 0. &&
218  p_trk1.Pt() > m_BToD0_minD0KaonPt &&
219  p_trk2.Pt() > m_BToD0_minD0PionPt &&
220  (p_trk1 + p_trk2).Pt() > m_BToD0_minD0Pt &&
221  isInMassRange((p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mPion)).M(), m_BToD0_D0MassRange) &&
222  isInMassRange((p_mu + p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mPion)).M(), m_BToD0_massRange)) {
223  vtx_D0 = fit(state.context(), {muon->inDetTrackParticleLink(), tracks[itrk1], tracks[itrk2]}, kD0);
224  ++iterations;
225 
226  if (vtx_D0 && vtx_D0->chiSquared() < m_BToD0_chi2) {
227  ATH_MSG_DEBUG( "Partially reconstructed B+ -> mu+ nu_mu anti-D0(-> K+ pi-) candidate has been created from { " << itrk1 << ", " << itrk2 << " }" );
228  if (m_makeCascadeFit) {
229  auto result = fitCascade(state.context(), {muon->inDetTrackParticleLink(), tracks[itrk1], tracks[itrk2]}, kD0);
230  // all fitted (muon + D0) candidates should be taken into account to avoid bias in (muon + D*-) sample
231  if (result &&
232  result->fitChi2() < m_cascadeChi2 && result->nDoF() == 2) {
233  std::vector<xAOD::TrigBphys*> triggerObjects = state.addTriggerObjects(2, muonIndex);
235  p_D0 = ROOT::Math::PtEtaPhiMVector(triggerObjects[0]->pt(), triggerObjects[0]->eta(), triggerObjects[0]->phi(), triggerObjects[0]->fitmass());
237  ATH_CHECK( D0.isValid() );
238 
239  // only candidates with proper Lxy values should fire B2D0MUX trigger
240  if (triggerObjects[1]->lxy() > m_BToD0_LxyB && triggerObjects[0]->lxy() > m_BToD0_LxyD0) {
241  triggerObjects[1]->setParticleType(xAOD::TrigBphys::B2D0MUX);
242  mon_nBPhysObject++;
243  }
244  }
245  }
246  else {
247  xAOD::TrigBphys* triggerObject = state.addTriggerObject(muonIndex);
248  ATH_CHECK( fillTriggerObject(*triggerObject, xAOD::TrigBphys::B2D0MUX, *vtx_D0, s_trkMass[kD0][0]) );
249  p_D0 = ROOT::Math::PtEtaPhiMVector(triggerObject->pt(), triggerObject->eta(), triggerObject->phi(), triggerObject->fitmass());
250  triggerObject->setMass((p_mu + p_D0).M());
252  ATH_CHECK( D0.isValid() );
253  mon_nBPhysObject++;
254  }
255  }
256  } // end of D0
257 
258  for (size_t itrk3 = 0; itrk3 < tracks.size(); ++itrk3) {
259  if (itrk3 == itrk1 || itrk3 == itrk2) continue;
260  const xAOD::TrackParticle* trk3 = *tracks[itrk3];
261  auto p_trk3 = trk3->genvecP4();
262  auto charge3 = trk3->charge();
263 
264  std::vector<ElementLink<xAOD::TrackParticleContainer>> trackParticleLinks = {muon->inDetTrackParticleLink(), tracks[itrk1], tracks[itrk2], tracks[itrk3]};
265 
266  // D*-(-> anti-D0(-> K+ pi-) pi-)
267  if (m_BToD0_makeDstar && D0.isValid() &&
268  p_trk3.Pt() > m_BToD0_minDstarPionPt &&
269  (p_trk1 + p_trk2 + p_trk3).Pt() > m_BToD0_minDstarPt &&
270  isInMassRange((p_D0 + p_trk3.SetM(PDG::mPion)).M() - p_D0.M() + PDG::mD0, m_BToD0_DstarMassRange)) {
271 
272  bool makeDstar = true;
273  if (m_BToD0_maxDstarPionZ0 > 0.) {
274  std::unique_ptr<const Trk::Perigee> perigee(m_trackToVertexTool->perigeeAtVertex(state.context(), *trk3, vtx_D0->position()));
275  if (!perigee || std::abs(perigee->parameters()[Trk::z0]) > m_BToD0_maxDstarPionZ0) makeDstar = false;
276  }
277 
278  if (makeDstar) {
279  if (m_makeCascadeFit) {
281  if (result &&
282  result->fitChi2() < m_cascadeChi2 && result->nDoF() == 4 &&
283  Lxy(state.beamSpotPosition(), result->vertices()[1]->position(), result->getParticleMoms()[1]) > m_BToD0_LxyBd &&
284  Lxy(result->vertices()[1]->position(), result->vertices()[0]->position(), result->getParticleMoms()[0]) > m_BToD0_LxyD0) {
285 
286  std::vector<xAOD::TrigBphys*> triggerObjects = state.addTriggerObjects(2, muonIndex);
288  triggerObjects[1]->setSecondaryDecayLink(D0);
289  mon_nBPhysObject++;
290  }
291  }
292  else {
293  xAOD::TrackParticle::GenVecFourMom_t p_Dstar = p_D0 + p_trk3.SetM(PDG::mPion);
294  xAOD::TrigBphys* Dstar = state.addTriggerObject(muonIndex);
295  Dstar->initialise(0, p_Dstar.Eta(), p_Dstar.Phi(), p_Dstar.Pt(), xAOD::TrigBphys::BD2DSTMUX, (p_mu + p_Dstar).M(), xAOD::TrigBphys::EF);
296  Dstar->setFitmass((p_D0 + p_trk3).M() - p_D0.M() + PDG::mD0);
298  Dstar->setLowerChainLink(D0);
299 
301  "TrigBphys object:\n\t " <<
302  "roiId: " << Dstar->roiId() << "\n\t " <<
303  "particleType: " << Dstar->particleType() << "\n\t " <<
304  "level: " << Dstar->level() << "\n\t " <<
305  "eta: " << Dstar->eta() << "\n\t " <<
306  "phi: " << Dstar->phi() << "\n\t " <<
307  "mass: " << Dstar->mass() << "\n\t " <<
308  "fitmass: " << Dstar->fitmass() << "\n\t " <<
309  "chi2/NDF: " << Dstar->fitchi2() << " / " << Dstar->fitndof() << "\n\t " <<
310  "vertex: (" << Dstar->fitx() << ", " << Dstar->fity() << ", " << Dstar->fitz() << ")" );
311 
312  mon_nBPhysObject++;
313  }
314  }
315  } // end of D*-
316 
317  // B0 -> mu+ nu_mu D-(-> K+ pi- pi-)
318  if (m_BdToD &&
319  itrk3 > itrk2 &&
320  charge1 * charge2 < 0. && charge2 * charge3 > 0. &&
321  p_trk1.Pt() > m_BdToD_minKaonPt &&
322  p_trk2.Pt() > m_BdToD_minPionPt &&
323  p_trk3.Pt() > m_BdToD_minPionPt &&
324  (p_trk1 + p_trk2 + p_trk3).Pt() > m_BdToD_minDPt &&
325  isInMassRange((p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mPion) + p_trk3.SetM(PDG::mPion)).M(), m_BdToD_DMassRange) &&
326  isInMassRange((p_mu + p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mPion) + p_trk3.SetM(PDG::mPion)).M(), m_BdToD_massRange)) {
327  auto vtx_D = fit(state.context(), trackParticleLinks, kDplus);
328  ++iterations;
329 
330  if (vtx_D && vtx_D->chiSquared() < m_BdToD_chi2) {
331  ATH_MSG_DEBUG( "Partially reconstructed B0 -> mu+ nu_mu D-(-> K+ pi- pi-) candidate has been created from { " << itrk1 << ", " << itrk2 << ", " << itrk3 << " }" );
332  if (m_makeCascadeFit) {
334  if (result &&
335  result->fitChi2() < m_cascadeChi2 && result->nDoF() == 4 &&
336  Lxy(state.beamSpotPosition(), result->vertices()[1]->position(), result->getParticleMoms()[1]) > m_BdToD_LxyBd &&
337  Lxy(result->vertices()[1]->position(), result->vertices()[0]->position(), result->getParticleMoms()[0]) > m_BdToD_LxyD) {
338 
339  std::vector<xAOD::TrigBphys*> triggerObjects = state.addTriggerObjects(2, muonIndex);
341  mon_nBPhysObject++;
342  }
343  }
344  else {
345  xAOD::TrigBphys* triggerObject = state.addTriggerObject(muonIndex);
346  ATH_CHECK( fillTriggerObject(*triggerObject, xAOD::TrigBphys::BD2DMMUX, *vtx_D, s_trkMass[kDplus][0]) );
347  xAOD::TrackParticle::GenVecFourMom_t p_D(ROOT::Math::PtEtaPhiMVector(triggerObject->pt(), triggerObject->eta(), triggerObject->phi(), triggerObject->fitmass()));
348  triggerObject->setMass((p_mu + p_D).M());
349  mon_nBPhysObject++;
350  }
351  }
352  } // end of B0
353 
354  // B_s0 -> mu+ nu_mu D_s-(->phi(-> K+ K-) pi-)
355  if (m_BsToDs &&
356  itrk2 > itrk1 &&
357  charge1 * charge2 < 0. &&
358  p_trk1.Pt() > m_BsToDs_minKaonPt &&
359  p_trk2.Pt() > m_BsToDs_minKaonPt &&
360  p_trk3.Pt() > m_BsToDs_minPionPt &&
361  (p_trk1 + p_trk2 + p_trk3).Pt() > m_BsToDs_minDsPt &&
362  isInMassRange((p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mKaon)).M(), m_BsToDs_phiMassRange) &&
363  isInMassRange((p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mKaon) + p_trk3.SetM(PDG::mPion)).M(), m_BsToDs_DsMassRange) &&
364  isInMassRange((p_mu + p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mKaon) + p_trk3.SetM(PDG::mPion)).M(), m_BsToDs_massRange)) {
365  auto vtx_Ds = fit(state.context(), trackParticleLinks, kDs);
366  ++iterations;
367 
368  if (vtx_Ds && vtx_Ds->chiSquared() < m_BsToDs_chi2) {
369  ATH_MSG_DEBUG( "Partially reconstructed B_s0 -> mu+ nu_mu D_s-(->phi(-> K+ K-) pi-) candidate has been created from { " << itrk1 << ", " << itrk2 << ", " << itrk3 << " }" );
370  if (m_makeCascadeFit) {
371  auto result = fitCascade(state.context(), trackParticleLinks, kDs);
372  if (result &&
373  result->fitChi2() < m_cascadeChi2 && result->nDoF() == 4 &&
374  Lxy(state.beamSpotPosition(), result->vertices()[1]->position(), result->getParticleMoms()[1]) > m_BsToDs_LxyBs &&
375  Lxy(result->vertices()[1]->position(), result->vertices()[0]->position(), result->getParticleMoms()[0]) > m_BsToDs_LxyDs) {
376 
377  std::vector<xAOD::TrigBphys*> triggerObjects = state.addTriggerObjects(2, muonIndex);
379  mon_nBPhysObject++;
380  }
381  }
382  else {
383  xAOD::TrigBphys* triggerObject = state.addTriggerObject(muonIndex);
384  ATH_CHECK( fillTriggerObject(*triggerObject, xAOD::TrigBphys::BS2DSMUX, *vtx_Ds, s_trkMass[kDs][0]) );
385  xAOD::TrackParticle::GenVecFourMom_t p_Ds(ROOT::Math::PtEtaPhiMVector(triggerObject->pt(), triggerObject->eta(), triggerObject->phi(), triggerObject->fitmass()));
386  triggerObject->setMass((p_mu + p_Ds).M());
387  mon_nBPhysObject++;
388  }
389  }
390  } // end of B_s0
391 
392  // Lambda_b0 -> mu+ nu_mu anti-Lambda_c-(-> anti-p K+ pi-)
393  if (m_LambdaBToLambdaC &&
394  charge1 * charge3 > 0. && charge1 * charge2 < 0. &&
395  p_trk1.Pt() > m_LambdaBToLambdaC_minProtonPt &&
396  p_trk2.Pt() > m_LambdaBToLambdaC_minKaonPt &&
397  p_trk3.Pt() > m_LambdaBToLambdaC_minPionPt &&
398  (p_trk1 + p_trk2 + p_trk3).Pt() > m_LambdaBToLambdaC_minLambdaCPt &&
399  isInMassRange((p_trk1.SetM(PDG::mProton) + p_trk2.SetM(PDG::mKaon) + p_trk3.SetM(PDG::mPion)).M(), m_LambdaBToLambdaC_LambdaCMassRange) &&
400  isInMassRange((p_mu + p_trk1.SetM(PDG::mProton) + p_trk2.SetM(PDG::mKaon) + p_trk3.SetM(PDG::mPion)).M(), m_LambdaBToLambdaC_massRange)) {
401  auto vtx_LambdaC = fit(state.context(), trackParticleLinks, kLambdaC);
402  ++iterations;
403 
404  if (vtx_LambdaC && vtx_LambdaC->chiSquared() < m_LambdaBToLambdaC_chi2) {
405  ATH_MSG_DEBUG( "Partially reconstructed Lambda_b0 -> mu+ nu_mu anti-Lambda_c-(-> anti-p K+ pi-) candidate has been created from { " << itrk1 << ", " << itrk2 << ", " << itrk3 << " }" );
406  if (m_makeCascadeFit) {
408  if (result &&
409  result->fitChi2() < m_cascadeChi2 && result->nDoF() == 4 &&
410  Lxy(state.beamSpotPosition(), result->vertices()[1]->position(), result->getParticleMoms()[1]) > m_LambdaBToLambdaC_LxyLb &&
411  Lxy(result->vertices()[1]->position(), result->vertices()[0]->position(), result->getParticleMoms()[0]) > m_LambdaBToLambdaC_LxyLc) {
412 
413  std::vector<xAOD::TrigBphys*> triggerObjects = state.addTriggerObjects(2, muonIndex);
415  mon_nBPhysObject++;
416  }
417  }
418  else {
419  xAOD::TrigBphys* triggerObject = state.addTriggerObject(muonIndex);
420  ATH_CHECK( fillTriggerObject(*triggerObject, xAOD::TrigBphys::LB2LCMUX, *vtx_LambdaC, s_trkMass[kLambdaC][0]) );
421  xAOD::TrackParticle::GenVecFourMom_t p_LambdaC(ROOT::Math::PtEtaPhiMVector(triggerObject->pt(), triggerObject->eta(), triggerObject->phi(), triggerObject->fitmass()));
422  triggerObject->setMass((p_mu + p_LambdaC).M());
423  mon_nBPhysObject++;
424  }
425  }
426  } // end of Lambda_b0
427 
428  }
429  vtx_D0.reset();
430 
431  }
432 
433  if (iterations > m_fitAttemptsWarningThreshold && !isOverWarningThreshold) {
434  ATH_MSG_WARNING( iterations << " combinations for vertex fitter have been processed; " << mon_nBPhysObject << " vertices have been created" );
435  isOverWarningThreshold = true;
436  }
437  if (iterations > m_fitAttemptsBreakThreshold) {
438  ATH_MSG_WARNING( "the number of fit attempts has exceeded the limit; breaking the loop at this point" );
439  break;
440  }
441  }
442  }
443  return StatusCode::SUCCESS;
444 }

◆ fit()

std::unique_ptr< xAOD::Vertex > TrigBmuxComboHypo::fit ( const EventContext &  context,
const std::vector< ElementLink< xAOD::TrackParticleContainer >> &  trackParticleLinks,
Decay  decay 
) const
private

Perform a vertex fit on selected tracks.

Parameters
contextthe event context used to make the vertex threadsafe.
trackParticleLinksthe trackParticles to fit
decaythe decay enumerator to specify the mass contraints
Returns
The fitted vertex - null if fit fails or is very low quality

Definition at line 481 of file TrigBmuxComboHypo.cxx.

484  {
485 
486  ATH_MSG_DEBUG( "Perform vertex fit" );
487 
488  if (trackParticleLinks.size() < 3) {
489  ATH_MSG_WARNING( "At least muon and two tracks should be given to the vertex fitter" );
490  return std::unique_ptr<xAOD::Vertex>(nullptr);
491  }
492 
493  std::vector<const xAOD::TrackParticle*> tracklist(trackParticleLinks.size() - 1, nullptr);
494  std::transform(trackParticleLinks.begin() + 1, trackParticleLinks.end(), tracklist.begin(),
495  [](const ElementLink<xAOD::TrackParticleContainer>& link){ return *link; });
496 
497  Amg::Vector3D startingPoint = Amg::Vector3D::Zero(3);
498  int flag = 0;
499  int errorcode = 0;
500  const Trk::Perigee& perigee1 = tracklist[0]->perigeeParameters();
501  const Trk::Perigee& perigee2 = tracklist[1]->perigeeParameters();
502  startingPoint = m_vertexPointEstimator->getCirclesIntersectionPoint(&perigee1, &perigee2, flag, errorcode);
503  if (errorcode != 0) startingPoint = Amg::Vector3D::Zero(3);
504  ATH_MSG_DEBUG( "Starting point: (" << startingPoint(0) << ", " << startingPoint(1) << ", " << startingPoint(2) << ")" );
505 
506  auto fitterState = m_vertexFitter->makeState(context);
507  m_vertexFitter->setMassInputParticles(s_trkMass[static_cast<size_t>(decay)][0], *fitterState);
508 
509  std::unique_ptr<xAOD::Vertex> vertex(m_vertexFitter->fit(tracklist, startingPoint, *fitterState));
510  if (!vertex) {
511  ATH_MSG_DEBUG( "Vertex fit fails" );
512  return vertex;
513  }
514  if (vertex->chiSquared() > 50.) {
515  ATH_MSG_DEBUG( "Fit is successful, but vertex chi2 is too high, we are not going to save it (chi2 = " << vertex->chiSquared() << ")" );
516  vertex.reset();
517  return vertex;
518  }
519  ATH_MSG_DEBUG( "Fit is successful" );
520 
521  // update trackParticleLinks()
522  vertex->clearTracks();
523  vertex->setTrackParticleLinks(trackParticleLinks);
524 
525  return vertex;
526 }

◆ fitCascade()

std::unique_ptr< Trk::VxCascadeInfo > TrigBmuxComboHypo::fitCascade ( const EventContext &  context,
const std::vector< ElementLink< xAOD::TrackParticleContainer >> &  trackParticleLinks,
Decay  decay 
) const
private

Perform a cascade vertex fit on selected tracks.

Parameters
contextthe event context used to make the vertex threadsafe.
trackParticleLinksthe trackParticles to fit
decaythe decay enumerator to specify the mass contraints
Returns
The fitted vertex - null if fit fails or is very low quality

Definition at line 529 of file TrigBmuxComboHypo.cxx.

532  {
533 
534  if (trackParticleLinks.size() != (decay == kD0 ? 3 : 4)) {
535  ATH_MSG_WARNING( "fitCascade(): " << (decay == kD0 ? 3 : 4) << " tracks required for decay " << decay << ", but trackParticleLinks size = " << trackParticleLinks.size() );
536  return std::unique_ptr<Trk::VxCascadeInfo>(nullptr);
537  }
538 
539  std::vector<std::vector<ElementLink<xAOD::TrackParticleContainer>>> vtx_trackParticleLinks;
540  switch (decay) {
541 
542  case kD0: // B+ -> mu+ nu_mu anti-D0(-> K+ pi-)
543  vtx_trackParticleLinks = {{trackParticleLinks[1], trackParticleLinks[2]}, // B+.anti-D0.K+, B+.anti-D0.pi-
544  {trackParticleLinks[0]}}; // B+.mu+
545  break;
546 
547  case kDstar: // B0 -> mu+ nu_mu D*-(-> anti-D0(-> K+ pi-) pi-)
548  vtx_trackParticleLinks = {{trackParticleLinks[1], trackParticleLinks[2]}, // B0.D*-.anti-D0.K+, B0.D*-.anti-D0.pi-
549  {trackParticleLinks[0], trackParticleLinks[3]}}; // B0.mu+, B0.D*-.pi-
550  break;
551 
552  case kDs: // B_s0 -> mu+ nu_mu D_s-(->phi(-> K+ K-) pi-)
553  case kDplus: // B0 -> mu+ nu_mu D-(-> K+ pi- pi-)
554  case kLambdaC: // anti-Lambda_b0 -> mu+ nu_mu anti-Lambda_c-(-> anti-p K+ pi-)
555  vtx_trackParticleLinks = {{trackParticleLinks[1], trackParticleLinks[2], trackParticleLinks[3]}, // B_s0.D_s-.phi.K+, B_s0.D_s-.phi.K-, B_s0.D_s-.pi-
556  {trackParticleLinks[0]}}; // B_s0.mu+
557  break;
558 
559  default:
560  ATH_MSG_WARNING( "fitCascade(): decay " << decay << " has not been defined in McTopologyTool" );
561  return std::unique_ptr<Trk::VxCascadeInfo>(nullptr);
562  break;
563  }
564 
565  std::vector<std::vector<const xAOD::TrackParticle*>> vtx_tracks(vtx_trackParticleLinks.size());
566  for (size_t i = 0; i < vtx_trackParticleLinks.size(); ++i) {
567  for (size_t j = 0; j < vtx_trackParticleLinks[i].size(); ++j) {
568  vtx_tracks[i].push_back(*vtx_trackParticleLinks[i][j]);
569  }
570  }
571 
572  auto state = m_vertexFitter->makeState(context);
573  m_vertexFitter->setRobustness(0, *state);
574 
575  std::vector<Trk::VertexID> precedingVertices(1, m_vertexFitter->startVertex(vtx_tracks[0], s_trkMass[static_cast<size_t>(decay)][0], *state));
576  m_vertexFitter->nextVertex(vtx_tracks[1], s_trkMass[static_cast<size_t>(decay)][1], precedingVertices, *state);
577  std::unique_ptr<Trk::VxCascadeInfo> result(m_vertexFitter->fitCascade(*state));
578 
579  if (result) {
580  ATH_MSG_DEBUG( "Cascade fit is successful: chi2 = " << result->fitChi2() << "; NDF = " << result->nDoF() );
581  result->setSVOwnership(true);
582 
583  size_t i = 0;
584  for (xAOD::Vertex* vertex : result->vertices()) {
585  vertex->clearTracks();
586  vertex->setTrackParticleLinks(vtx_trackParticleLinks[i++]);
587  }
588  }
589 
590  return result;
591 }

◆ getTrkImpactParameterZ0()

double TrigBmuxComboHypo::getTrkImpactParameterZ0 ( const EventContext &  ctx,
const xAOD::TrackParticle track,
const Amg::Vector3D vertex 
) const
private

Returns the longitudinal impact parameter z0 of the track w.r.t.

the vertex in [mm]. If track cannot be extrapolated to the vertex, a value -1000. will be returned.

Definition at line 708 of file TrigBmuxComboHypo.cxx.

708  {
709 
710  std::unique_ptr<const Trk::Perigee> perigee(m_trackToVertexTool->perigeeAtVertex(ctx, track, vertex));
711  return (perigee ? perigee->parameters()[Trk::z0] : -1000.);
712 }

◆ hypoTools() [1/2]

ToolHandleArray<ComboHypoToolBase>& ComboHypo::hypoTools ( )
inlineprotectedinherited

Definition at line 44 of file ComboHypo.h.

44 { return m_hypoTools; }

◆ hypoTools() [2/2]

const ToolHandleArray<ComboHypoToolBase>& ComboHypo::hypoTools ( ) const
inlineprotectedinherited

Definition at line 45 of file ComboHypo.h.

45 { return m_hypoTools; }

◆ initialize()

StatusCode TrigBmuxComboHypo::initialize ( )
overridevirtual

Reimplemented from ComboHypo.

Definition at line 53 of file TrigBmuxComboHypo.cxx.

53  {
54  ATH_MSG_DEBUG( "TrigBmuxComboHypo::initialize()" );
55 
57 
58  ATH_CHECK( m_muonContainerKey.initialize() );
62  ATH_CHECK( m_trigBphysContainerKey.initialize() );
64 
65  ATH_CHECK( m_vertexFitter.retrieve() );
66  ATH_CHECK( m_vertexPointEstimator.retrieve() );
67  ATH_CHECK( m_trackToVertexTool.retrieve() );
68 
69  // allowed IDs to filter out incoming decisions at L2 level
70  for (const auto& item : triggerMultiplicityMap()) {
71  const HLT::Identifier id = HLT::Identifier(item.first);
72  m_allowedIDs.insert(id.numeric());
73  if (item.second.size() > 1) {
74  for (size_t i = 0; i < item.second.size(); i++) {
75  m_allowedIDs.insert(TrigCompositeUtils::createLegName(id, i).numeric());
76  }
77  }
78  }
79  if (msgLvl(MSG::DEBUG)) {
80  ATH_MSG_DEBUG( "Allowed decisions:" );
81  for (const DecisionID& id : m_allowedIDs) {
82  ATH_MSG_DEBUG( " +++ " << HLT::Identifier(id) );
83  }
84  }
85 
86  if (!m_monTool.empty()) {
87  ATH_CHECK( m_monTool.retrieve() );
88  ATH_MSG_DEBUG( "GenericMonitoringTool name:" << m_monTool );
89  }
90  else {
91  ATH_MSG_DEBUG( "No GenericMonitoringTool configured: no monitoring histograms will be available" );
92  }
93 
94  return StatusCode::SUCCESS;
95 }

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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.

◆ isClonable()

bool AthReentrantAlgorithm::isClonable ( ) const
overridevirtualinherited

◆ isIdenticalTracks()

bool TrigBmuxComboHypo::isIdenticalTracks ( const xAOD::TrackParticle lhs,
const xAOD::TrackParticle rhs 
) const
private

Returns false for the tracks with opposite charges.

Otherwise calculates the deltaR(lhs, rhs) and compares it with threshold value m_deltaR. Should be used to remove muon InDet track from the track collection.

Definition at line 693 of file TrigBmuxComboHypo.cxx.

693  {
694 
695  if (lhs->charge() * rhs->charge() < 0.) return false;
696  return (ROOT::Math::VectorUtil::DeltaR(lhs->genvecP4(), rhs->genvecP4()) < m_deltaR);
697 }

◆ isInMassRange()

bool TrigBmuxComboHypo::isInMassRange ( double  mass,
const std::pair< double, double > &  range 
) const
inlineprivate

Checks that the given mass value falls into the specified range.

Definition at line 177 of file TrigBmuxComboHypo.h.

177 { return (mass > range.first && mass < range.second); }

◆ isInSameRoI()

bool TrigBmuxComboHypo::isInSameRoI ( const xAOD::Muon muon,
const xAOD::TrackParticle track 
) const
private

Checks that the given track is close enough to the muon, i.e.

it belongs to the RoI built around muon (approximately). Should be used to mimic standard RoI behavior only when the option IDConfig.SuperRoI is active in bmumuxAlgSequence.

Definition at line 700 of file TrigBmuxComboHypo.cxx.

700  {
701 
702  auto p_mu = muon->genvecP4();
703  auto p_trk = track->genvecP4();
704  return (ROOT::Math::VectorUtil::DeltaPhi(p_mu, p_trk) < m_roiPhiWidth && std::abs(p_mu.eta() - p_trk.eta()) < m_roiEtaWidth);
705 }

◆ legToInputCollectionMap()

const Combo::LegMap& ComboHypo::legToInputCollectionMap ( ) const
inlineprotectedinherited

Definition at line 43 of file ComboHypo.h.

43 { return m_legToInputCollectionMap.value(); }

◆ Lxy()

double TrigBmuxComboHypo::Lxy ( const Amg::Vector3D productionVertex,
const Amg::Vector3D decayVertex,
const std::vector< TLorentzVector > &  momenta 
) const
private

Returns the transverse decay length of a particle Lxy in [mm].

It is defined as the transverse distance between the production and decay vertices projected along the transverse momentum of the particle.

Definition at line 715 of file TrigBmuxComboHypo.cxx.

715  {
716 
717  XYVector R(decayVertex.x() - productionVertex.x(), decayVertex.y() - productionVertex.y());
718  XYVector pT;
719  for (const auto& p : momenta) {
720  pT += XYVector(p.Px(), p.Py());
721  }
722  return R.Dot(pT.unit());
723 }

◆ msg() [1/2]

MsgStream& AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

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

◆ msg() [2/2]

MsgStream& AthCommonMsg< Gaudi::Algorithm >::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< Gaudi::Algorithm >::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

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

◆ outputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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  }

◆ setFilterPassed()

virtual void AthReentrantAlgorithm::setFilterPassed ( bool  state,
const EventContext &  ctx 
) const
inlinevirtualinherited

Definition at line 139 of file AthReentrantAlgorithm.h.

139  {
140  execState( ctx ).setFilterPassed( state );
141  }

◆ sysExecute()

StatusCode AthReentrantAlgorithm::sysExecute ( const EventContext &  ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Definition at line 67 of file AthReentrantAlgorithm.cxx.

68 {
69  return Gaudi::Algorithm::sysExecute (ctx);
70 }

◆ sysInitialize()

StatusCode AthReentrantAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in InputMakerBase, and HypoBase.

Definition at line 96 of file AthReentrantAlgorithm.cxx.

96  {
98 
99  if (sc.isFailure()) {
100  return sc;
101  }
102 
103  ServiceHandle<ICondSvc> cs("CondSvc",name());
104  for (auto h : outputHandles()) {
105  if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
106  // do this inside the loop so we don't create the CondSvc until needed
107  if ( cs.retrieve().isFailure() ) {
108  ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
109  return StatusCode::SUCCESS;
110  }
111  if (cs->regHandle(this,*h).isFailure()) {
112  sc = StatusCode::FAILURE;
113  ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
114  << " with CondSvc");
115  }
116  }
117  }
118  return sc;
119 }

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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.

◆ triggerMultiplicityMap()

const Combo::MultiplicityReqMap& ComboHypo::triggerMultiplicityMap ( ) const
inlineprotectedinherited

Definition at line 42 of file ComboHypo.h.

42 { return m_multiplicitiesReqMap.value(); }

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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_allowedIDs

TrigCompositeUtils::DecisionIDContainer TrigBmuxComboHypo::m_allowedIDs
private

Definition at line 324 of file TrigBmuxComboHypo.h.

◆ m_BdToD

Gaudi::Property<bool> TrigBmuxComboHypo::m_BdToD
private
Initial value:
{this,
"BdToD", true, "switch on/off B0 -> mu+ nu_mu D-(-> K+ pi- pi-) decay"}

Definition at line 251 of file TrigBmuxComboHypo.h.

◆ m_BdToD_chi2

Gaudi::Property<float> TrigBmuxComboHypo::m_BdToD_chi2
private
Initial value:
{this,
"BdToD_chi2", 27., "maximum chi2 of the fitted D- vertex"}

Definition at line 263 of file TrigBmuxComboHypo.h.

◆ m_BdToD_DMassRange

Gaudi::Property<std::pair<double, double> > TrigBmuxComboHypo::m_BdToD_DMassRange
private
Initial value:
{this,
"BdToD_DMassRange", {1750., 2000.}, "D+ mass range"}

Definition at line 261 of file TrigBmuxComboHypo.h.

◆ m_BdToD_LxyBd

Gaudi::Property<float> TrigBmuxComboHypo::m_BdToD_LxyBd
private
Initial value:
{this,
"BdToD_LxyBd", 0.1, "Lxy(B0,BeamSpot) for B0 -> mu+ nu_mu D-"}

Definition at line 265 of file TrigBmuxComboHypo.h.

◆ m_BdToD_LxyD

Gaudi::Property<float> TrigBmuxComboHypo::m_BdToD_LxyD
private
Initial value:
{this,
"BdToD_LxyD", 0.05, "Lxy(D-,B0) for D- -> K+ pi- pi-"}

Definition at line 267 of file TrigBmuxComboHypo.h.

◆ m_BdToD_massRange

Gaudi::Property<std::pair<double, double> > TrigBmuxComboHypo::m_BdToD_massRange
private
Initial value:
{this,
"BdToD_massRange", {-1., 10000.}, "B0 mass range"}

Definition at line 259 of file TrigBmuxComboHypo.h.

◆ m_BdToD_minDPt

Gaudi::Property<double> TrigBmuxComboHypo::m_BdToD_minDPt
private
Initial value:
{this,
"BdToD_minDPt", 4500., "minimum pT of D-"}

Definition at line 257 of file TrigBmuxComboHypo.h.

◆ m_BdToD_minKaonPt

Gaudi::Property<double> TrigBmuxComboHypo::m_BdToD_minKaonPt
private
Initial value:
{this,
"BdToD_minKaonPt", 1250., "minimum pT of kaon track from D-"}

Definition at line 253 of file TrigBmuxComboHypo.h.

◆ m_BdToD_minPionPt

Gaudi::Property<double> TrigBmuxComboHypo::m_BdToD_minPionPt
private
Initial value:
{this,
"BdToD_minPionPt", 1000., "minimum pT of pion track from D-"}

Definition at line 255 of file TrigBmuxComboHypo.h.

◆ m_beamSpotKey

SG::ReadCondHandleKey<InDet::BeamSpotData> TrigBmuxComboHypo::m_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"}
private

Definition at line 198 of file TrigBmuxComboHypo.h.

◆ m_BsToDs

Gaudi::Property<bool> TrigBmuxComboHypo::m_BsToDs
private
Initial value:
{this,
"BsToDs", true, "switch on/off B_s0 -> mu+ nu_mu D_s-(->phi(-> K+ K-) pi-) decay"}

Definition at line 271 of file TrigBmuxComboHypo.h.

◆ m_BsToDs_chi2

Gaudi::Property<float> TrigBmuxComboHypo::m_BsToDs_chi2
private
Initial value:
{this,
"BsToDs_chi2", 27., "maximum chi2 of the fitted D_s- vertex"}

Definition at line 285 of file TrigBmuxComboHypo.h.

◆ m_BsToDs_DsMassRange

Gaudi::Property<std::pair<double, double> > TrigBmuxComboHypo::m_BsToDs_DsMassRange
private
Initial value:
{this,
"BsToDs_DsMassRange", {1750., 2100.}, "D_s- mass range"}

Definition at line 283 of file TrigBmuxComboHypo.h.

◆ m_BsToDs_LxyBs

Gaudi::Property<float> TrigBmuxComboHypo::m_BsToDs_LxyBs
private
Initial value:
{this,
"BsToDs_LxyBs", 0.1, "Lxy(B_s0,BeamSpot) for B_s0 -> mu+ nu_mu D_s-"}

Definition at line 287 of file TrigBmuxComboHypo.h.

◆ m_BsToDs_LxyDs

Gaudi::Property<float> TrigBmuxComboHypo::m_BsToDs_LxyDs
private
Initial value:
{this,
"BsToDs_LxyDs", 0.02, "Lxy(D_s-,B_s0) for D_s- -> phi pi-"}

Definition at line 289 of file TrigBmuxComboHypo.h.

◆ m_BsToDs_massRange

Gaudi::Property<std::pair<double, double> > TrigBmuxComboHypo::m_BsToDs_massRange
private
Initial value:
{this,
"BsToDs_massRange", {-1., 10000.}, "B_s0 mass range"}

Definition at line 279 of file TrigBmuxComboHypo.h.

◆ m_BsToDs_minDsPt

Gaudi::Property<double> TrigBmuxComboHypo::m_BsToDs_minDsPt
private
Initial value:
{this,
"BsToDs_minDsPt", 5500., "minimum pT of D_s-"}

Definition at line 277 of file TrigBmuxComboHypo.h.

◆ m_BsToDs_minKaonPt

Gaudi::Property<double> TrigBmuxComboHypo::m_BsToDs_minKaonPt
private
Initial value:
{this,
"BsToDs_minKaonPt", 1000., "minimum pT of kaon track from phi(1020)"}

Definition at line 273 of file TrigBmuxComboHypo.h.

◆ m_BsToDs_minPionPt

Gaudi::Property<double> TrigBmuxComboHypo::m_BsToDs_minPionPt
private
Initial value:
{this,
"BsToDs_minPionPt", 1000., "minimum pT of pion track from D_s-"}

Definition at line 275 of file TrigBmuxComboHypo.h.

◆ m_BsToDs_phiMassRange

Gaudi::Property<std::pair<double, double> > TrigBmuxComboHypo::m_BsToDs_phiMassRange
private
Initial value:
{this,
"BsToDs_phiMassRange", {940., 1100.}, "phi(1020) mass range"}

Definition at line 281 of file TrigBmuxComboHypo.h.

◆ m_BToD0

Gaudi::Property<bool> TrigBmuxComboHypo::m_BToD0
private
Initial value:
{this,
"BToD0", true, "switch on/off B+ -> mu+ nu_mu anti-D0(-> K+ pi-) decay"}

Definition at line 219 of file TrigBmuxComboHypo.h.

◆ m_BToD0_chi2

Gaudi::Property<float> TrigBmuxComboHypo::m_BToD0_chi2
private
Initial value:
{this,
"BToD0_chi2", 20., "maximum chi2 of the fitted D0 vertex"}

Definition at line 241 of file TrigBmuxComboHypo.h.

◆ m_BToD0_D0MassRange

Gaudi::Property<std::pair<double, double> > TrigBmuxComboHypo::m_BToD0_D0MassRange
private
Initial value:
{this,
"BToD0_D0MassRange", {1750., 2000.}, "D0 mass range"}

Definition at line 237 of file TrigBmuxComboHypo.h.

◆ m_BToD0_DstarMassRange

Gaudi::Property<std::pair<double, double> > TrigBmuxComboHypo::m_BToD0_DstarMassRange
private
Initial value:
{this,
"BToD0_DstarMassRange", {-1., 2110.}, "D*+ mass range"}

Definition at line 239 of file TrigBmuxComboHypo.h.

◆ m_BToD0_LxyB

Gaudi::Property<float> TrigBmuxComboHypo::m_BToD0_LxyB
private
Initial value:
{this,
"BToD0_LxyB", 0.1, "Lxy(B+,BeamSpot) for B+ -> mu+ nu_mu anti-D0"}

Definition at line 243 of file TrigBmuxComboHypo.h.

◆ m_BToD0_LxyBd

Gaudi::Property<float> TrigBmuxComboHypo::m_BToD0_LxyBd
private
Initial value:
{this,
"BToD0_LxyBd", 0.05, "Lxy(B0,BeamSpot) for B0 -> mu+ nu_mu D*-"}

Definition at line 245 of file TrigBmuxComboHypo.h.

◆ m_BToD0_LxyD0

Gaudi::Property<float> TrigBmuxComboHypo::m_BToD0_LxyD0
private
Initial value:
{this,
"BToD0_LxyD0", 0., "Lxy(D0,B+/B0) for both B+ and B0 decays"}

Definition at line 247 of file TrigBmuxComboHypo.h.

◆ m_BToD0_makeDstar

Gaudi::Property<bool> TrigBmuxComboHypo::m_BToD0_makeDstar
private
Initial value:
{this,
"BToD0_makeDstar", true, "switch on/off B0 -> mu+ nu_mu D*-(-> anti-D0(-> K+ pi-) pi-) decay"}

Definition at line 221 of file TrigBmuxComboHypo.h.

◆ m_BToD0_massRange

Gaudi::Property<std::pair<double, double> > TrigBmuxComboHypo::m_BToD0_massRange
private
Initial value:
{this,
"BToD0_massRange", {-1., 10000.}, "B+/B0 mass range"}

Definition at line 235 of file TrigBmuxComboHypo.h.

◆ m_BToD0_maxDstarPionZ0

Gaudi::Property<double> TrigBmuxComboHypo::m_BToD0_maxDstarPionZ0
private
Initial value:
{this,
"BToD0_maxDstarPionZ0", 5., "maximum z0 impact parameter of the pion track from D*+ wrt the fitted D0 vertex; no preselection if negative"}

Definition at line 233 of file TrigBmuxComboHypo.h.

◆ m_BToD0_minD0KaonPt

Gaudi::Property<double> TrigBmuxComboHypo::m_BToD0_minD0KaonPt
private
Initial value:
{this,
"BToD0_minD0KaonPt", 1000., "minimum pT of kaon track from D0"}

Definition at line 223 of file TrigBmuxComboHypo.h.

◆ m_BToD0_minD0PionPt

Gaudi::Property<double> TrigBmuxComboHypo::m_BToD0_minD0PionPt
private
Initial value:
{this,
"BToD0_minD0PionPt", 1000., "minimum pT of pion track from D0"}

Definition at line 225 of file TrigBmuxComboHypo.h.

◆ m_BToD0_minD0Pt

Gaudi::Property<double> TrigBmuxComboHypo::m_BToD0_minD0Pt
private
Initial value:
{this,
"BToD0_minD0Pt", -1., "minimum pT of D0"}

Definition at line 227 of file TrigBmuxComboHypo.h.

◆ m_BToD0_minDstarPionPt

Gaudi::Property<double> TrigBmuxComboHypo::m_BToD0_minDstarPionPt
private
Initial value:
{this,
"BToD0_minDstarPionPt", 1000., "minimum pT of pion track from D*-"}

Definition at line 231 of file TrigBmuxComboHypo.h.

◆ m_BToD0_minDstarPt

Gaudi::Property<double> TrigBmuxComboHypo::m_BToD0_minDstarPt
private
Initial value:
{this,
"BToD0_minDstarPt", 5500., "minimum pT of D*-"}

Definition at line 229 of file TrigBmuxComboHypo.h.

◆ m_cascadeChi2

Gaudi::Property<float> TrigBmuxComboHypo::m_cascadeChi2
private
Initial value:
{this,
"CascadeChi2", 50., "maximum chi2 of the cascade fit"}

Definition at line 203 of file TrigBmuxComboHypo.h.

◆ m_checkMultiplicityMap

Gaudi::Property<bool> ComboHypo::m_checkMultiplicityMap
privateinherited
Initial value:
{ this, "CheckMultiplicityMap", true,
"Perform a consistency check of the MultiplicitiesMap"}

Definition at line 63 of file ComboHypo.h.

◆ m_deltaR

Gaudi::Property<double> TrigBmuxComboHypo::m_deltaR
private
Initial value:
{this,
"DeltaR", 0.01, "minimum deltaR between same-sign tracks (overlap removal)"}

Definition at line 205 of file TrigBmuxComboHypo.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthReentrantAlgorithm::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 153 of file AthReentrantAlgorithm.h.

◆ m_fitAttemptsBreakThreshold

Gaudi::Property<size_t> TrigBmuxComboHypo::m_fitAttemptsBreakThreshold
private
Initial value:
{this,
"FitAttemptsBreakThreshold", 1000, "Events processing this many calls of the vertex fitter will generate a second WARNING message and the loop over combinations will be terminated at this point (time-out protect)"}

Definition at line 215 of file TrigBmuxComboHypo.h.

◆ m_fitAttemptsWarningThreshold

Gaudi::Property<size_t> TrigBmuxComboHypo::m_fitAttemptsWarningThreshold
private
Initial value:
{this,
"FitAttemptsWarningThreshold", 200, "Events processing this many calls of the vertex fitter will generate a WARNING message (time-out protect)"}

Definition at line 213 of file TrigBmuxComboHypo.h.

◆ m_hypoTools

ToolHandleArray< ComboHypoToolBase > ComboHypo::m_hypoTools {this, "ComboHypoTools", {}, "Tools to perform selection"}
privateinherited

Definition at line 108 of file ComboHypo.h.

◆ m_inputs

SG::ReadHandleKeyArray<TrigCompositeUtils::DecisionContainer> ComboHypo::m_inputs { this, "HypoInputDecisions", {}, "Input Decisions" }
privateinherited

Definition at line 49 of file ComboHypo.h.

◆ m_LambdaBToLambdaC

Gaudi::Property<bool> TrigBmuxComboHypo::m_LambdaBToLambdaC
private
Initial value:
{this,
"LambdaBToLambdaC", true, "switch on/off Lambda_b0 -> mu+ nu_mu anti-Lambda_c-(-> anti-p K+ pi-) decay"}

Definition at line 293 of file TrigBmuxComboHypo.h.

◆ m_LambdaBToLambdaC_chi2

Gaudi::Property<float> TrigBmuxComboHypo::m_LambdaBToLambdaC_chi2
private
Initial value:
{this,
"LambdaBToLambdaC_chi2", 27., "maximum chi2 of the fitted Lambda_c- vertex"}

Definition at line 307 of file TrigBmuxComboHypo.h.

◆ m_LambdaBToLambdaC_LambdaCMassRange

Gaudi::Property<std::pair<double, double> > TrigBmuxComboHypo::m_LambdaBToLambdaC_LambdaCMassRange
private
Initial value:
{this,
"LambdaBToLambdaC_LambdaCMassRange", {2190., 2390.}, "Lambda_c- mass range"}

Definition at line 305 of file TrigBmuxComboHypo.h.

◆ m_LambdaBToLambdaC_LxyLb

Gaudi::Property<float> TrigBmuxComboHypo::m_LambdaBToLambdaC_LxyLb
private
Initial value:
{this,
"LambdaBToLambdaC_LxyLb", 0.1, "Lxy(Lambda_b0,BeamSpot) for Lambda_b0 -> mu- anti-nu_mu Lambda_c+"}

Definition at line 309 of file TrigBmuxComboHypo.h.

◆ m_LambdaBToLambdaC_LxyLc

Gaudi::Property<float> TrigBmuxComboHypo::m_LambdaBToLambdaC_LxyLc
private
Initial value:
{this,
"LambdaBToLambdaC_LxyLc", 0.02, "Lxy(Lambda_c+,Lambda_b0) for Lambda_c+-> p K- pi+"}

Definition at line 311 of file TrigBmuxComboHypo.h.

◆ m_LambdaBToLambdaC_massRange

Gaudi::Property<std::pair<double, double> > TrigBmuxComboHypo::m_LambdaBToLambdaC_massRange
private
Initial value:
{this,
"LambdaBToLambdaC_massRange", {-1., 10000.}, "Lambda_b0 mass range"}

Definition at line 303 of file TrigBmuxComboHypo.h.

◆ m_LambdaBToLambdaC_minKaonPt

Gaudi::Property<double> TrigBmuxComboHypo::m_LambdaBToLambdaC_minKaonPt
private
Initial value:
{this,
"LambdaBToLambdaC_minKaonPt", 1250., "minimum pT of kaon track"}

Definition at line 297 of file TrigBmuxComboHypo.h.

◆ m_LambdaBToLambdaC_minLambdaCPt

Gaudi::Property<double> TrigBmuxComboHypo::m_LambdaBToLambdaC_minLambdaCPt
private
Initial value:
{this,
"LambdaBToLambdaC_minLambdaCPt", 5500., "minimum pT of Lambda_c-"}

Definition at line 301 of file TrigBmuxComboHypo.h.

◆ m_LambdaBToLambdaC_minPionPt

Gaudi::Property<double> TrigBmuxComboHypo::m_LambdaBToLambdaC_minPionPt
private
Initial value:
{this,
"LambdaBToLambdaC_minPionPt", 1000., "minimum pT of pion track"}

Definition at line 299 of file TrigBmuxComboHypo.h.

◆ m_LambdaBToLambdaC_minProtonPt

Gaudi::Property<double> TrigBmuxComboHypo::m_LambdaBToLambdaC_minProtonPt
private
Initial value:
{this,
"LambdaBToLambdaC_minProtonPt", 2750., "minimum pT of proton track"}

Definition at line 295 of file TrigBmuxComboHypo.h.

◆ m_legToInputCollectionMap

Gaudi::Property< Combo::LegMap > ComboHypo::m_legToInputCollectionMap
privateinherited
Initial value:
{this, "LegToInputCollectionMap", {},
"Map from the chain name to the per-leg index in this algorithm's ReadHandleKeyArray which should be used as the source of incoming Decision Objects on the leg.",
"mapMergeNoReplace<std::string, std::vector<int>>"}

Definition at line 59 of file ComboHypo.h.

◆ m_makeCascadeFit

Gaudi::Property<bool> TrigBmuxComboHypo::m_makeCascadeFit
private
Initial value:
{this,
"MakeCascadeFit", true, "perform cascade fit of the partially reconstructed decays"}

Definition at line 201 of file TrigBmuxComboHypo.h.

◆ m_monTool

ToolHandle<GenericMonitoringTool> TrigBmuxComboHypo::m_monTool
private
Initial value:
{this,
"MonTool", "", "monitoring tool"}

Definition at line 321 of file TrigBmuxComboHypo.h.

◆ m_multiplicitiesReqMap

Gaudi::Property< Combo::MultiplicityReqMap > ComboHypo::m_multiplicitiesReqMap
privateinherited
Initial value:
{this, "MultiplicitiesMap", {},
"Map from the chain name to multiplicities required at each input",
"mapMergeNoReplace<std::string, std::vector<int>>"}

Definition at line 55 of file ComboHypo.h.

◆ m_muonContainerKey

SG::ReadHandleKey<xAOD::MuonContainer> TrigBmuxComboHypo::m_muonContainerKey
private
Initial value:
{this,
"MuonCollectionKey", "Muons", "input EF Muon container name"}

Definition at line 193 of file TrigBmuxComboHypo.h.

◆ m_outputs

SG::WriteHandleKeyArray<TrigCompositeUtils::DecisionContainer> ComboHypo::m_outputs { this, "HypoOutputDecisions", {}, "Output Decisions" }
privateinherited

Definition at line 50 of file ComboHypo.h.

◆ m_requireUniqueROI

Gaudi::Property<bool> ComboHypo::m_requireUniqueROI
privateinherited
Initial value:
{this, "RequireUniqueROI", false,
"Require each Feature in each leg of the combination to come from a unique L1 seeding ROI."}

Definition at line 52 of file ComboHypo.h.

◆ m_roiEtaWidth

Gaudi::Property<double> TrigBmuxComboHypo::m_roiEtaWidth
private
Initial value:
{this,
"RoiEtaWidth", 0.75, "extent of the RoI in eta from initial muon, to be check for SuperRoI"}

Definition at line 209 of file TrigBmuxComboHypo.h.

◆ m_roiPhiWidth

Gaudi::Property<double> TrigBmuxComboHypo::m_roiPhiWidth
private
Initial value:
{this,
"RoiPhiWidth", 0.75, "extent of the RoI in phi from initial muon, to be check for SuperRoI"}

Definition at line 211 of file TrigBmuxComboHypo.h.

◆ m_trackParticleContainerKey

SG::ReadHandleKey<xAOD::TrackParticleContainer> TrigBmuxComboHypo::m_trackParticleContainerKey
private
Initial value:
{this,
"TrackCollectionKey", "InDetTrackParticles", "input TrackParticle container name"}

Definition at line 191 of file TrigBmuxComboHypo.h.

◆ m_trackToVertexTool

ToolHandle<Reco::ITrackToVertex> TrigBmuxComboHypo::m_trackToVertexTool
private
Initial value:
{this,
"TrackToVertexTool", "", "tool to extrapolate track to vertex or beamspot"}

Definition at line 319 of file TrigBmuxComboHypo.h.

◆ m_trigBphysContainerKey

SG::WriteHandleKey<xAOD::TrigBphysContainer> TrigBmuxComboHypo::m_trigBphysContainerKey
private
Initial value:
{this,
"TrigBphysCollectionKey", "TrigBphysContainer", "output TrigBphysContainer name"}

Definition at line 195 of file TrigBmuxComboHypo.h.

◆ m_trkZ0

Gaudi::Property<double> TrigBmuxComboHypo::m_trkZ0
private
Initial value:
{this,
"TrkZ0", 10., "maximum of |z0_trk - z0_muon|, where z0_trk(z0_muon) is impact parameter of the track(muon) wrt BeamSpot; no preselection if negative"}

Definition at line 207 of file TrigBmuxComboHypo.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vertexFitter

ToolHandle<Trk::TrkVKalVrtFitter> TrigBmuxComboHypo::m_vertexFitter
private
Initial value:
{this,
"VertexFitter", "", "VKalVrtFitter tool to fit tracks into the common vertex"}

Definition at line 317 of file TrigBmuxComboHypo.h.

◆ m_vertexPointEstimator

ToolHandle<InDet::VertexPointEstimator> TrigBmuxComboHypo::m_vertexPointEstimator
private
Initial value:
{this,
"VertexPointEstimator", "", "tool to find starting point for the vertex fitter"}

Definition at line 315 of file TrigBmuxComboHypo.h.

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.

◆ s_trkMass

const std::vector< std::vector< std::vector< double > > > TrigBmuxComboHypo::s_trkMass
staticprivate

The documentation for this class was generated from the following files:
TrigBmuxComboHypo::m_BdToD_massRange
Gaudi::Property< std::pair< double, double > > m_BdToD_massRange
Definition: TrigBmuxComboHypo.h:259
TrigBmuxComboHypo::s_trkMass
static const std::vector< std::vector< std::vector< double > > > s_trkMass
Definition: TrigBmuxComboHypo.h:326
ComboHypo::m_multiplicitiesReqMap
Gaudi::Property< Combo::MultiplicityReqMap > m_multiplicitiesReqMap
Definition: ComboHypo.h:55
TrigBmuxComboHypo::m_vertexFitter
ToolHandle< Trk::TrkVKalVrtFitter > m_vertexFitter
Definition: TrigBmuxComboHypo.h:317
xAOD::TrackParticle_v1::GenVecFourMom_t
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzM4D< double > > GenVecFourMom_t
Base 4 Momentum type for TrackParticle.
Definition: TrackParticle_v1.h:78
TrigBmuxComboHypo::m_muonContainerKey
SG::ReadHandleKey< xAOD::MuonContainer > m_muonContainerKey
Definition: TrigBmuxComboHypo.h:193
TrigBmuxComboHypo::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: TrigBmuxComboHypo.h:198
CalculateHighPtTerm.pT
pT
Definition: ICHEP2016/CalculateHighPtTerm.py:57
TrigBmuxComboHypo::findBmuxCandidates
StatusCode findBmuxCandidates(TrigBmuxState &) const
Definition: TrigBmuxComboHypo.cxx:126
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:195
TrigBmuxComboHypo::m_BdToD_minKaonPt
Gaudi::Property< double > m_BdToD_minKaonPt
Definition: TrigBmuxComboHypo.h:253
xAOD::TrigBphys_v1::setFitchi2
void setFitchi2(float FitChi2)
set method: chi2 from vertex fit
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
TrigBmuxComboHypo::m_LambdaBToLambdaC_minKaonPt
Gaudi::Property< double > m_LambdaBToLambdaC_minKaonPt
Definition: TrigBmuxComboHypo.h:297
get_generator_info.result
result
Definition: get_generator_info.py:21
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
TrigBmuxComboHypo::m_LambdaBToLambdaC_chi2
Gaudi::Property< float > m_LambdaBToLambdaC_chi2
Definition: TrigBmuxComboHypo.h:307
TrigCompositeUtils::DecisionID
unsigned int DecisionID
Definition: TrigComposite_v1.h:27
TrigBmuxComboHypo::m_BdToD_minPionPt
Gaudi::Property< double > m_BdToD_minPionPt
Definition: TrigBmuxComboHypo.h:255
xAOD::TrigBphys_v1::BD2DSTMUX
@ BD2DSTMUX
Definition: TrigBphys_v1.h:75
ComboHypo::decisionsOutput
const SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsOutput() const
Definition: ComboHypo.h:41
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
TrigBmuxComboHypo::m_deltaR
Gaudi::Property< double > m_deltaR
Definition: TrigBmuxComboHypo.h:205
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
IDTPM::R
float R(const U &p)
Definition: TrackParametersHelper.h:101
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
TrigCompositeUtils::typelessFindLink
bool typelessFindLink(const Decision *start, const std::string &linkName, sgkey_t &key, uint32_t &clid, uint16_t &index, const Decision *&source, const bool suppressMultipleLinksWarning)
Perform a recursive search for ElementLinks of any time and name 'linkName', starting from Decision o...
Definition: TrigCompositeUtilsRoot.cxx:725
HLT::Identifier::numeric
TrigCompositeUtils::DecisionID numeric() const
numeric ID
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:47
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
xAOD::TrackParticle_v1::charge
float charge() const
Returns the charge.
Definition: TrackParticle_v1.cxx:150
TrigCompositeUtils::newDecisionIn
Decision * newDecisionIn(DecisionContainer *dc, const std::string &name)
Helper method to create a Decision object, place it in the container and return a pointer to it.
Definition: TrigCompositeUtilsRoot.cxx:46
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
hist_file_dump.d
d
Definition: hist_file_dump.py:137
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
TrigBmuxComboHypo::m_BsToDs_LxyBs
Gaudi::Property< float > m_BsToDs_LxyBs
Definition: TrigBmuxComboHypo.h:287
xAOD::TrigBphys_v1::level
levelType level() const
accessor method: level Type
xAOD::TrigBphys_v1::BS2DSMUX
@ BS2DSMUX
Definition: TrigBphys_v1.h:76
xAOD::TrigBphys_v1::setLowerChainLink
void setLowerChainLink(const ElementLink< xAOD::TrigBphysContainer_v1 > &link)
set method: link to lowerChain decay particle
Trk::VxSecVertexInfo::vertices
const std::vector< xAOD::Vertex * > & vertices() const
Definition: VxSecVertexInfo.cxx:100
met::DeltaR
@ DeltaR
Definition: METRecoCommon.h:11
TrigBmuxComboHypo::m_BdToD_chi2
Gaudi::Property< float > m_BdToD_chi2
Definition: TrigBmuxComboHypo.h:263
accumulate
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
Definition: FPGATrackSimMatrixAccumulator.cxx:22
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
xAOD::TrigBphys_v1::setFitz
void setFitz(float FitZ)
set method: z position of vertex
ViewHelper::makeHandle
SG::ReadHandle< T > makeHandle(const SG::View *view, const SG::ReadHandleKey< T > &rhKey, const EventContext &context)
navigate from the TrigComposite to nearest view and fetch object from it
Definition: ViewHelper.h:258
xAOD::TrigBphys_v1::particleType
pType particleType() const
accessor method: particle Type
PDG20::mMuon
static constexpr double mMuon
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:12
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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 > renounce(T &h)
Definition: AthCommonDataStore.h:380
xAOD::TrigBphys_v1::fitx
float fitx() const
accessor method: x position of vertex
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
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
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
TrigBmuxComboHypo::m_BsToDs_minKaonPt
Gaudi::Property< double > m_BsToDs_minKaonPt
Definition: TrigBmuxComboHypo.h:273
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
TrigCompositeUtils::insertDecisionIDs
void insertDecisionIDs(const Decision *src, Decision *dest)
Appends the decision IDs of src to the dest decision object.
Definition: TrigCompositeUtilsRoot.cxx:80
TrigCompositeUtils::passedDecisionIDs
DecisionIDContainer passedDecisionIDs(const Decision *d, const T &required)
return DecisionIDs in Decision object that match the required ones
TrigBmuxComboHypo::isInMassRange
bool isInMassRange(double mass, const std::pair< double, double > &range) const
Checks that the given mass value falls into the specified range.
Definition: TrigBmuxComboHypo.h:177
Trk::z0
@ z0
Definition: ParamDefs.h:70
TrigBmuxComboHypo::m_BdToD_minDPt
Gaudi::Property< double > m_BdToD_minDPt
Definition: TrigBmuxComboHypo.h:257
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
xAOD::TrigComposite_v1::hasDetail
bool hasDetail(const std::string &name) const
Check if a given type of detail is available.
TrigCompositeUtils::comboHypoAlgNodeName
const std::string & comboHypoAlgNodeName()
Definition: TrigCompositeUtilsRoot.cxx:910
TrigCompositeUtils::createAndStore
SG::WriteHandle< DecisionContainer > createAndStore(const SG::WriteHandleKey< DecisionContainer > &key, const EventContext &ctx)
Creates and right away records the DecisionContainer with the key.
Definition: TrigCompositeUtilsRoot.cxx:30
TrigBmuxComboHypo::m_BToD0_LxyD0
Gaudi::Property< float > m_BToD0_LxyD0
Definition: TrigBmuxComboHypo.h:247
xAOD::Vertex_v1::position
const Amg::Vector3D & position() const
Returns the 3-pos.
xAOD::TrigBphys_v1::mass
float mass() const
accessor method: mass
TrigBmuxComboHypo::kDs
@ kDs
Definition: TrigBmuxComboHypo.h:100
TrigBmuxComboHypo::kLambdaC
@ kLambdaC
Definition: TrigBmuxComboHypo.h:102
xAOD::TrigBphys_v1::BD2DMMUX
@ BD2DMMUX
Definition: TrigBphys_v1.h:74
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
isValid
bool isValid(const T &p)
Definition: AtlasPID.h:214
Trk::VxCascadeInfo::nDoF
int nDoF() const
Definition: VxCascadeInfo.h:133
TrigBmuxComboHypo::m_LambdaBToLambdaC_LxyLc
Gaudi::Property< float > m_LambdaBToLambdaC_LxyLc
Definition: TrigBmuxComboHypo.h:311
xAOD::TrigBphys_v1::UNKNOWNPTYPE
@ UNKNOWNPTYPE
Definition: TrigBphys_v1.h:78
ITrigBphysState::beamSpotPosition
Amg::Vector3D beamSpotPosition() const
Definition: ITrigBphysState.h:47
TrigBmuxComboHypo::fillTriggerObject
StatusCode fillTriggerObject(xAOD::TrigBphys &triggerObject, xAOD::TrigBphys::pType type, const xAOD::Vertex &vertex, const std::vector< double > &trkMass) const
Fill the trigger object that may be stored for debugging or matching.
Definition: TrigBmuxComboHypo.cxx:594
TrigBmuxComboHypo::m_BToD0_minDstarPt
Gaudi::Property< double > m_BToD0_minDstarPt
Definition: TrigBmuxComboHypo.h:229
TrigBmuxComboHypo::m_roiEtaWidth
Gaudi::Property< double > m_roiEtaWidth
Definition: TrigBmuxComboHypo.h:209
dqt_zlumi_pandas.mass
mass
Definition: dqt_zlumi_pandas.py:170
xAOD::TrigBphys_v1::pt
float pt() const
accessor method: pt
Definition: TrigBphys_v1.cxx:362
TrigBmuxComboHypo::m_BsToDs_chi2
Gaudi::Property< float > m_BsToDs_chi2
Definition: TrigBmuxComboHypo.h:285
TrigBmuxComboHypo::m_LambdaBToLambdaC
Gaudi::Property< bool > m_LambdaBToLambdaC
Definition: TrigBmuxComboHypo.h:293
TrigBmuxComboHypo::m_trigBphysContainerKey
SG::WriteHandleKey< xAOD::TrigBphysContainer > m_trigBphysContainerKey
Definition: TrigBmuxComboHypo.h:195
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
xAOD::TrigBphys_v1::setFitndof
void setFitndof(int FitNdof)
set method: ndof from vertex fit
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
TrigBmuxComboHypo::kDstar
@ kDstar
Definition: TrigBmuxComboHypo.h:99
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
TrigBmuxComboHypo::m_BToD0_minD0Pt
Gaudi::Property< double > m_BToD0_minD0Pt
Definition: TrigBmuxComboHypo.h:227
TrigBmuxComboHypo::m_vertexPointEstimator
ToolHandle< InDet::VertexPointEstimator > m_vertexPointEstimator
Definition: TrigBmuxComboHypo.h:315
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:269
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
TrigBmuxComboHypo::m_BToD0_D0MassRange
Gaudi::Property< std::pair< double, double > > m_BToD0_D0MassRange
Definition: TrigBmuxComboHypo.h:237
TrigBmuxComboHypo::m_fitAttemptsBreakThreshold
Gaudi::Property< size_t > m_fitAttemptsBreakThreshold
Definition: TrigBmuxComboHypo.h:215
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
TrigBmuxComboHypo::m_trackToVertexTool
ToolHandle< Reco::ITrackToVertex > m_trackToVertexTool
Definition: TrigBmuxComboHypo.h:319
TrigBmuxComboHypo::m_BToD0
Gaudi::Property< bool > m_BToD0
Definition: TrigBmuxComboHypo.h:219
xAOD::TrigBphys_v1::setFitmass
void setFitmass(float FitMass)
set method: mass from vertex fit
TrigBmuxComboHypo::m_BsToDs_phiMassRange
Gaudi::Property< std::pair< double, double > > m_BsToDs_phiMassRange
Definition: TrigBmuxComboHypo.h:281
TrigBmuxState::addTriggerObject
xAOD::TrigBphys * addTriggerObject(size_t muonIndex)
Definition: TrigBmuxComboHypo.h:64
AthCommonDataStore
Definition: AthCommonDataStore.h:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ComboHypo::ComboHypo
ComboHypo(const std::string &name, ISvcLocator *pSvcLocator)
Definition: ComboHypo.cxx:14
TrigBmuxComboHypo::m_fitAttemptsWarningThreshold
Gaudi::Property< size_t > m_fitAttemptsWarningThreshold
Definition: TrigBmuxComboHypo.h:213
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
TrigCompositeUtils::typelessFindLinks
bool typelessFindLinks(const Decision *start, const std::string &linkName, std::vector< sgkey_t > &keyVec, std::vector< uint32_t > &clidVec, std::vector< uint16_t > &indexVec, std::vector< const Decision * > &sourceVec, const unsigned int behaviour, std::set< const Decision * > *fullyExploredFrom)
search back the TC links for the object of type T linked to the one of TC (recursively) Returns the l...
Definition: TrigCompositeUtilsRoot.cxx:581
lumiFormat.i
int i
Definition: lumiFormat.py:92
ComboHypo::hypoTools
ToolHandleArray< ComboHypoToolBase > & hypoTools()
Definition: ComboHypo.h:44
TrigCompositeUtils::initialRoIString
const std::string & initialRoIString()
Definition: TrigCompositeUtilsRoot.cxx:870
ITrigBphysState::context
const EventContext & context() const
Definition: ITrigBphysState.h:42
TrigCompositeUtils::getLinkToPrevious
const std::vector< ElementLink< DecisionContainer > > getLinkToPrevious(const Decision *d)
returns links to previous decision object 'seed'
Definition: TrigCompositeUtilsRoot.cxx:156
xAOD::TrigBphys_v1::setFity
void setFity(float FitY)
set method: y position of vertex
TrigBmuxComboHypo::m_cascadeChi2
Gaudi::Property< float > m_cascadeChi2
Definition: TrigBmuxComboHypo.h:203
TrigBmuxComboHypo::kDplus
@ kDplus
Definition: TrigBmuxComboHypo.h:101
TrigBmuxComboHypo::m_BsToDs
Gaudi::Property< bool > m_BsToDs
Definition: TrigBmuxComboHypo.h:271
TrigBmuxState::addTriggerObjects
std::vector< xAOD::TrigBphys * > addTriggerObjects(size_t n, size_t muonIndex)
Definition: TrigBmuxComboHypo.h:70
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TrigBmuxComboHypo::getTrkImpactParameterZ0
double getTrkImpactParameterZ0(const EventContext &ctx, const xAOD::TrackParticle &track, const Amg::Vector3D &vertex) const
Returns the longitudinal impact parameter z0 of the track w.r.t.
Definition: TrigBmuxComboHypo.cxx:708
master.flag
bool flag
Definition: master.py:29
TrigBmuxComboHypo::m_trkZ0
Gaudi::Property< double > m_trkZ0
Definition: TrigBmuxComboHypo.h:207
Trk::VxCascadeInfo::fitChi2
double fitChi2() const
Definition: VxCascadeInfo.h:134
ClassID_traits
Default, invalid implementation of ClassID_traits.
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:40
xAOD::TrigBphys_v1::setMass
void setMass(float)
Set the mass of the object.
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
xAOD::TrigBphys_v1::roiId
uint32_t roiId() const
accessor method: ID of L1 RoI
ComboHypo::m_hypoTools
ToolHandleArray< ComboHypoToolBase > m_hypoTools
Definition: ComboHypo.h:108
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
TrigCompositeUtils::decisionToElementLink
ElementLink< DecisionContainer > decisionToElementLink(const Decision *d, const EventContext &ctx)
Takes a raw pointer to a Decision and returns an ElementLink to the Decision.
Definition: TrigCompositeUtilsRoot.cxx:122
xAOD::TauHelpers::trackParticleLinks
std::vector< ElementLink< xAOD::TrackParticleContainer > > trackParticleLinks(const xAOD::TauJet *tau, xAOD::TauJetParameters::TauTrackFlag flag=xAOD::TauJetParameters::TauTrackFlag::classifiedCharged)
Definition: TauxAODHelpers.cxx:22
TrigCompositeUtils::NavGraph
Structure to hold a transient Directed Acyclic Graph (DAG) structure. NavGraph is populated from,...
Definition: NavGraph.h:98
TrigBmuxComboHypo::m_LambdaBToLambdaC_minProtonPt
Gaudi::Property< double > m_LambdaBToLambdaC_minProtonPt
Definition: TrigBmuxComboHypo.h:295
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
xAOD::TrigBphys_v1::fitchi2
float fitchi2() const
accessor method: chi2 from vertex fit
xAOD::TrigBphys_v1::B2D0MUX
@ B2D0MUX
Definition: TrigBphys_v1.h:73
ComboHypo::triggerMultiplicityMap
const Combo::MultiplicityReqMap & triggerMultiplicityMap() const
Definition: ComboHypo.h:42
xAOD::TrackParticle_v1::genvecP4
GenVecFourMom_t genvecP4() const
The full 4-momentum of the particle : GenVector form.
Definition: TrackParticle_v1.cxx:116
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
Trk::ParametersBase
Definition: ParametersBase.h:55
TrigBmuxComboHypo::m_BsToDs_DsMassRange
Gaudi::Property< std::pair< double, double > > m_BsToDs_DsMassRange
Definition: TrigBmuxComboHypo.h:283
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
ComboHypo::m_outputs
SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainer > m_outputs
Definition: ComboHypo.h:50
xAOD::TrigComposite_v1
Class used to describe composite objects in the HLT.
Definition: TrigComposite_v1.h:52
xAOD::TrigBphys_v1::fitmass
float fitmass() const
accessor method: mass from vertex fit
xAOD::TrigBphys_v1::fitz
float fitz() const
accessor method: z position of vertex
SG::AuxElement::index
size_t index() const
Return the index of this element within its container.
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
HLT::Identifier
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:20
xAOD::decisions
decisions
Definition: TrigComposite_v1.cxx:81
PDG20::mProton
static constexpr double mProton
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:19
AthReentrantAlgorithm::m_extendedExtraObjects
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Definition: AthReentrantAlgorithm.h:153
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
TrigBmuxComboHypo::m_BdToD_DMassRange
Gaudi::Property< std::pair< double, double > > m_BdToD_DMassRange
Definition: TrigBmuxComboHypo.h:261
TrigBmuxComboHypo::fit
std::unique_ptr< xAOD::Vertex > fit(const EventContext &context, const std::vector< ElementLink< xAOD::TrackParticleContainer >> &trackParticleLinks, Decay decay) const
Perform a vertex fit on selected tracks.
Definition: TrigBmuxComboHypo.cxx:481
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
xAOD::TrigBphys_v1::initialise
void initialise()
Definition: TrigBphys_v1.cxx:22
TrigCompositeUtils::featureString
const std::string & featureString()
Definition: TrigCompositeUtilsRoot.cxx:886
ComboHypo::initialize
virtual StatusCode initialize() override
Definition: ComboHypo.cxx:23
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
TrigBmuxComboHypo::m_BToD0_LxyBd
Gaudi::Property< float > m_BToD0_LxyBd
Definition: TrigBmuxComboHypo.h:245
TrigBmuxComboHypo::createDecisionObjects
StatusCode createDecisionObjects(TrigBmuxState &) const
Definition: TrigBmuxComboHypo.cxx:447
ComboHypo::m_legToInputCollectionMap
Gaudi::Property< Combo::LegMap > m_legToInputCollectionMap
Definition: ComboHypo.h:59
xAOD::TrigBphys_v1::setTrackParticleLinks
void setTrackParticleLinks(const std::vector< ElementLink< TrackParticleContainer > > &links)
Set the track particle links on the object.
TrigBmuxComboHypo::m_makeCascadeFit
Gaudi::Property< bool > m_makeCascadeFit
Definition: TrigBmuxComboHypo.h:201
TrigBmuxState::trigBphysMuonIndices
std::vector< size_t > trigBphysMuonIndices
Definition: TrigBmuxComboHypo.h:62
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:194
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
xAOD::TrigBphys_v1::EF
@ EF
Definition: TrigBphys_v1.h:85
TrigBmuxComboHypo::m_LambdaBToLambdaC_LxyLb
Gaudi::Property< float > m_LambdaBToLambdaC_LxyLb
Definition: TrigBmuxComboHypo.h:309
Trk::trkMass
@ trkMass
Extended perigee: mass.
Definition: ParamDefs.h:87
TrigBmuxState::muons
std::vector< Muon > muons
Definition: TrigBmuxComboHypo.h:61
TrigCompositeUtils::Decision
xAOD::TrigComposite Decision
Definition: Event/xAOD/xAODTrigger/xAODTrigger/TrigComposite.h:20
AthReentrantAlgorithm::sysInitialize
virtual StatusCode sysInitialize() override
Override sysInitialize.
Definition: AthReentrantAlgorithm.cxx:96
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
TrigBmuxComboHypo::m_BToD0_massRange
Gaudi::Property< std::pair< double, double > > m_BToD0_massRange
Definition: TrigBmuxComboHypo.h:235
item
Definition: ItemListSvc.h:43
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
TrigBmuxComboHypo::fitCascade
std::unique_ptr< Trk::VxCascadeInfo > fitCascade(const EventContext &context, const std::vector< ElementLink< xAOD::TrackParticleContainer >> &trackParticleLinks, Decay decay) const
Perform a cascade vertex fit on selected tracks.
Definition: TrigBmuxComboHypo.cxx:529
Trk::VxCascadeInfo::getParticleMoms
const std::vector< std::vector< TLorentzVector > > & getParticleMoms() const
Definition: VxCascadeInfo.h:131
xAOD::TrigBphys_v1::phi
float phi() const
accessor method: phi
ComboHypo::m_inputs
SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > m_inputs
Definition: ComboHypo.h:49
ITrigBphysState::previousDecisions
const TrigCompositeUtils::DecisionContainer & previousDecisions() const
Definition: ITrigBphysState.h:43
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
Trk::D0
@ D0
Definition: ParameterType.h:18
TrigBmuxComboHypo::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrigBmuxComboHypo.h:321
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
TrigCompositeUtils::seedString
const std::string & seedString()
Definition: TrigCompositeUtilsRoot.cxx:890
TrigCompositeUtils::isLegId
bool isLegId(const HLT::Identifier &legIdentifier)
Recognise whether the chain ID is a leg ID.
Definition: TrigCompositeUtilsRoot.cxx:204
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
TrigBmuxComboHypo::m_BToD0_chi2
Gaudi::Property< float > m_BToD0_chi2
Definition: TrigBmuxComboHypo.h:241
TrigCompositeUtils::NavGraph::finalNodes
std::vector< NavGraphNode * > finalNodes() const
Get all final nodes.
Definition: NavGraph.cxx:99
TrigBmuxComboHypo::fillTriggerObjects
StatusCode fillTriggerObjects(std::vector< xAOD::TrigBphys * > &triggerObjects, xAOD::TrigBphys::pType type, const Trk::VxCascadeInfo &vxCascadeInfo, const Amg::Vector3D &beamSpotPosition) const
Fill the trigger object that may be stored for debugging or matching for a cascade vertex.
Definition: TrigBmuxComboHypo.cxx:641
a
TList * a
Definition: liststreamerinfos.cxx:10
TrigCompositeUtils::getIndexFromLeg
int32_t getIndexFromLeg(const HLT::Identifier &legIdentifier)
Extract the numeric index of a leg identifier.
Definition: TrigCompositeUtilsRoot.cxx:191
TrigCompositeUtils::DecisionIDContainer
std::set< DecisionID > DecisionIDContainer
Definition: TrigComposite_v1.h:28
TrigBmuxComboHypo::Lxy
double Lxy(const Amg::Vector3D &productionVertex, const Amg::Vector3D &decayVertex, const std::vector< TLorentzVector > &momenta) const
Returns the transverse decay length of a particle Lxy in [mm].
Definition: TrigBmuxComboHypo.cxx:715
CaloLCW_tf.group
group
Definition: CaloLCW_tf.py:28
xAOD::Vertex_v1::chiSquared
float chiSquared() const
Returns the of the vertex fit as float.
h
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
TrigBmuxComboHypo::m_BToD0_minDstarPionPt
Gaudi::Property< double > m_BToD0_minDstarPionPt
Definition: TrigBmuxComboHypo.h:231
std::sort
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
Definition: DVL_algorithms.h:623
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TrigBmuxComboHypo::m_BsToDs_LxyDs
Gaudi::Property< float > m_BsToDs_LxyDs
Definition: TrigBmuxComboHypo.h:289
TrigBmuxComboHypo::m_BToD0_makeDstar
Gaudi::Property< bool > m_BToD0_makeDstar
Definition: TrigBmuxComboHypo.h:221
TrigCompositeUtils::NavGraphNode
Transient utility class to represent a node in a graph (m_decisionObject), and a vector of edges (m_f...
Definition: NavGraph.h:20
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TrigBmuxComboHypo::m_BToD0_LxyB
Gaudi::Property< float > m_BToD0_LxyB
Definition: TrigBmuxComboHypo.h:243
TrigBmuxComboHypo::m_BToD0_minD0PionPt
Gaudi::Property< double > m_BToD0_minD0PionPt
Definition: TrigBmuxComboHypo.h:225
TrigBmuxComboHypo::m_BdToD_LxyD
Gaudi::Property< float > m_BdToD_LxyD
Definition: TrigBmuxComboHypo.h:267
TrigBmuxComboHypo::isInSameRoI
bool isInSameRoI(const xAOD::Muon *, const xAOD::TrackParticle *) const
Checks that the given track is close enough to the muon, i.e.
Definition: TrigBmuxComboHypo.cxx:700
DEBUG
#define DEBUG
Definition: page_access.h:11
TrigBmuxComboHypo::m_roiPhiWidth
Gaudi::Property< double > m_roiPhiWidth
Definition: TrigBmuxComboHypo.h:211
TrigBmuxComboHypo::m_trackParticleContainerKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerKey
Definition: TrigBmuxComboHypo.h:191
TrigBmuxComboHypo::m_BToD0_maxDstarPionZ0
Gaudi::Property< double > m_BToD0_maxDstarPionZ0
Definition: TrigBmuxComboHypo.h:233
ITrigBphysState::decisions
TrigCompositeUtils::DecisionContainer & decisions()
Definition: ITrigBphysState.h:44
TrigBmuxComboHypo::isIdenticalTracks
bool isIdenticalTracks(const xAOD::TrackParticle *lhs, const xAOD::TrackParticle *rhs) const
Returns false for the tracks with opposite charges.
Definition: TrigBmuxComboHypo.cxx:693
TrigBmuxComboHypo::m_BToD0_DstarMassRange
Gaudi::Property< std::pair< double, double > > m_BToD0_DstarMassRange
Definition: TrigBmuxComboHypo.h:239
PDG20::mPion
static constexpr double mPion
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:13
TrigCompositeUtils::decisionIDs
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
Definition: TrigCompositeUtilsRoot.cxx:67
charge3
int charge3(const T &p)
Definition: AtlasPID.h:493
HLT::Identifier::name
std::string name() const
reports human redable name if it is enabled or, empty string
Definition: HLTIdentifier.cxx:14
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
TrigBmuxComboHypo::m_BsToDs_minDsPt
Gaudi::Property< double > m_BsToDs_minDsPt
Definition: TrigBmuxComboHypo.h:277
TrigBmuxComboHypo::m_LambdaBToLambdaC_minPionPt
Gaudi::Property< double > m_LambdaBToLambdaC_minPionPt
Definition: TrigBmuxComboHypo.h:299
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:616
ComboHypo::decisionsInput
const SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsInput() const
Definition: ComboHypo.h:40
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
TrigCompositeUtils::roiString
const std::string & roiString()
Definition: TrigCompositeUtilsRoot.cxx:878
TrigCompositeUtils::recursiveGetDecisions
void recursiveGetDecisions(const Decision *start, NavGraph &navGraph, const EventContext &ctx, const DecisionIDContainer &ids, const bool enforceDecisionOnStartNode)
Search back in time from "node" and locate all paths back through Decision objects for a given chain.
Definition: TrigCompositeUtilsRoot.cxx:423
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
TrigBmuxComboHypo::m_LambdaBToLambdaC_massRange
Gaudi::Property< std::pair< double, double > > m_LambdaBToLambdaC_massRange
Definition: TrigBmuxComboHypo.h:303
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
PDG20::mKaon
static constexpr double mKaon
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:15
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
LHEF::Writer
Pythia8::Writer Writer
Definition: Prophecy4fMerger.cxx:12
TrigBmuxComboHypo::m_BdToD_LxyBd
Gaudi::Property< float > m_BdToD_LxyBd
Definition: TrigBmuxComboHypo.h:265
xAOD::TrigBphys_v1::fity
float fity() const
accessor method: y position of vertex
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
xAOD::TrigBphys_v1::lxy
float lxy() const
accessor method: lxy
Definition: TrigBphys_v1.cxx:387
JetTools::FFJetAllowedMassDefEnum::Comb
@ Comb
Track Assisted.
xAOD::TrigComposite_v1::getDetail
bool getDetail(const std::string &name, TYPE &value) const
Get an TYPE detail from the object.
xAOD::TrigBphys_v1::eta
float eta() const
accessor method: eta
xAOD::TrigBphys_v1::DZKPI
@ DZKPI
Definition: TrigBphys_v1.h:69
TrigBmuxComboHypo::kD0
@ kD0
Definition: TrigBmuxComboHypo.h:98
PDG20::mD0
static constexpr double mD0
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:18
TrigBmuxComboHypo::m_allowedIDs
TrigCompositeUtils::DecisionIDContainer m_allowedIDs
Definition: TrigBmuxComboHypo.h:324
TrigBmuxComboHypo::m_BToD0_minD0KaonPt
Gaudi::Property< double > m_BToD0_minD0KaonPt
Definition: TrigBmuxComboHypo.h:223
TrigCompositeUtils::isAnyIDPassing
bool isAnyIDPassing(const Decision *d, const DecisionIDContainer &required)
Checks if any of the DecisionIDs passed in arg required is availble in Decision object.
Definition: TrigCompositeUtilsRoot.cxx:108
xAOD::TrigBphys_v1::LB2LCMUX
@ LB2LCMUX
Definition: TrigBphys_v1.h:77
TrigBmuxComboHypo::m_BsToDs_minPionPt
Gaudi::Property< double > m_BsToDs_minPionPt
Definition: TrigBmuxComboHypo.h:275
python.compressB64.c
def c
Definition: compressB64.py:93
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TrigCompositeUtils::viewString
const std::string & viewString()
Definition: TrigCompositeUtilsRoot.cxx:882
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
TrigBmuxComboHypo::m_LambdaBToLambdaC_LambdaCMassRange
Gaudi::Property< std::pair< double, double > > m_LambdaBToLambdaC_LambdaCMassRange
Definition: TrigBmuxComboHypo.h:305
xAOD::TrigBphys_v1::fitndof
int fitndof() const
accessor method: ndof from vertex fit
xAOD::TrigBphys_v1
Class describing a Bphysics online composite object.
Definition: TrigBphys_v1.h:44
fitman.k
k
Definition: fitman.py:528
common
Definition: common.py:1
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
ITrigBphysState::trigBphysCollection
xAOD::TrigBphysContainer & trigBphysCollection()
Definition: ITrigBphysState.h:45
TrigBmuxComboHypo::m_LambdaBToLambdaC_minLambdaCPt
Gaudi::Property< double > m_LambdaBToLambdaC_minLambdaCPt
Definition: TrigBmuxComboHypo.h:301
TrigBmuxComboHypo::m_BsToDs_massRange
Gaudi::Property< std::pair< double, double > > m_BsToDs_massRange
Definition: TrigBmuxComboHypo.h:279
TrigBmuxComboHypo::m_BdToD
Gaudi::Property< bool > m_BdToD
Definition: TrigBmuxComboHypo.h:251
ServiceHandle< ICondSvc >
drawFromPickle.view
view
Definition: drawFromPickle.py:294
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
xAOD::TrigBphys_v1::setFitx
void setFitx(float FitX)
set method: x position of vertex