ATLAS Offline Software
Loading...
Searching...
No Matches
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.
virtual bool isClonable () const override
 Specify if the algorithm is clonable.
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
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.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () 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::MultiplicityReqMap & triggerMultiplicityMap () const
const Combo::LegMap & legToInputCollectionMap () const
ToolHandleArray< ComboHypoToolBase > & hypoTools ()
const ToolHandleArray< ComboHypoToolBase > & hypoTools () const
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
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.

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.
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.
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.
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.
bool isIdenticalTracks (const xAOD::TrackParticle *lhs, const xAOD::TrackParticle *rhs) const
 Returns false for the tracks with opposite charges.
bool isInSameRoI (const xAOD::Muon *, const xAOD::TrackParticle *) const
 Checks that the given track is close enough to the muon, i.e.
bool isInMassRange (double mass, const std::pair< double, double > &range) const
 Checks that the given mass value falls into the specified range.
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.
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].
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
StatusCode extractFeatureAndRoI (const HLT::Identifier &chainLegId, const ElementLink< TrigCompositeUtils::DecisionContainer > &EL, SG::sgkey_t &featureKey, TrigCompositeUtils::Decision::index_type &featureIndex, SG::sgkey_t &roiKey, TrigCompositeUtils::Decision::index_type &roiIndex, bool &roiFullscan, bool &objectRequestsNoMultiplicityCheck, SG::SGKeyMap< std::set< uint32_t > > &priorFeaturesMap) const
 For a given Decision node from a HypoAlg, extracts type-less identification data on the node's Feature and seeding ROI.
StatusCode fillDecisionsMap (Combo::LegDecisionsMap &dmap, const EventContext &context) const
 iterates over all inputs, associating inputs to legs
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

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::MultiplicityReqMap > m_multiplicitiesReqMap
Gaudi::Property< Combo::LegMap > m_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.
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
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 50 of file TrigBmuxComboHypo.cxx.

51 : ::ComboHypo(name, pSvcLocator) {}
ComboHypo(const std::string &name, ISvcLocator *pSvcLocator)
Definition ComboHypo.cxx:13

◆ TrigBmuxComboHypo() [2/2]

TrigBmuxComboHypo::TrigBmuxComboHypo ( )
delete

Member Function Documentation

◆ cardinality()

unsigned int AthCommonReentrantAlgorithm< Gaudi::Algorithm >::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.

Definition at line 75 of file AthCommonReentrantAlgorithm.cxx.

64{
65 return 0;
66}

◆ 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 86 of file ComboHypo.cxx.

86 {
87 DecisionIDContainer passing;
88 for (auto const& element : passingLegs) {
89 passing.insert(element.first);
90 }
91
92 ATH_MSG_DEBUG( "Copying "<<passing.size()<<" positive decision IDs to outputs");
93
94 for ( size_t input_counter = 0; input_counter < m_inputs.size(); ++input_counter ) {
95 // new output decisions
96 SG::WriteHandle<DecisionContainer> outputHandle = createAndStore(m_outputs.at(input_counter), context );
97 auto outDecisions = outputHandle.ptr();
98 auto inputHandle = SG::makeHandle( m_inputs.at(input_counter), context );
99 if ( inputHandle.isValid() ) {
100
101 for (const Decision* inputDecision : *inputHandle) {
102 auto thisEL = TrigCompositeUtils::decisionToElementLink(inputDecision, context);
103
104 // from all positive decision in the input only the ones that survived counting are passed over
105 const DecisionIDContainer& common = passedDecisionIDs(inputDecision, passing);
106
107 // check if this EL is in the combination map for the passing decIDs:
108 ATH_MSG_DEBUG("Searching this element in the map: ("<<thisEL.dataID() << " , " << thisEL.index()<<")");
109 DecisionIDContainer finalIds;
110 for (const DecisionID c : common){
111 const HLT::Identifier cID = HLT::Identifier(c);
112 // add the decID only if this candidate passed the combination selection
113 const std::vector<ElementLink<DecisionContainer>>& Comb=passingLegs.at(c);
114 if(std::find(Comb.begin(), Comb.end(), thisEL) == Comb.end()) {
115 continue;
116 }
117 ATH_MSG_DEBUG(" Adding "<< cID <<" because EL is found in the passingLegs map");
118 finalIds.insert( cID.numeric() ); // all Ids used by the Filter, including legs
119 if (TrigCompositeUtils::isLegId ( cID )){
120 const HLT::Identifier mainChain = TrigCompositeUtils::getIDFromLeg( cID );
121 finalIds.insert( mainChain.numeric() );
122 ATH_MSG_DEBUG(" Adding "<< mainChain <<" consequently");
123 }
124 }
125
126 Decision* newDec = newDecisionIn( outDecisions, inputDecision, comboHypoAlgNodeName(), context );
127 ATH_MSG_DEBUG("New decision (Container Index:" << input_counter << ", Element Index:"<< newDec->index() <<") has "
129 << " valid initialRoI, "<< TrigCompositeUtils::getLinkToPrevious(newDec).size() <<" previous decisions and "<<finalIds.size()<<" decision IDs") ;
130 insertDecisionIDs( finalIds, newDec );
131
132 }
133 }
134
135 if (msgLvl(MSG::DEBUG)) {
136 ATH_MSG_DEBUG("Output Handle " << m_outputs.at(input_counter).key() << " with " << outputHandle->size() <<" Decision objects");
137 for (const Decision* d : *outputHandle){
138 DecisionIDContainer objDecisions;
139 decisionIDs( d, objDecisions );
140 ATH_MSG_DEBUG(" Decision object #" << d->index() << " with " << objDecisions.size()<<" positive decision IDs");
141 for (const TrigCompositeUtils::DecisionID id : objDecisions ) {
142 ATH_MSG_DEBUG(" --- Passes: " << HLT::Identifier( id ));
143 }
144 }
145 }
146 }
147
148 return StatusCode::SUCCESS;
149}
#define ATH_MSG_DEBUG(x)
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition AtlasPID.h:878
bool msgLvl(const MSG::Level lvl) const
SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainer > m_outputs
Definition ComboHypo.h:51
SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > m_inputs
Definition ComboHypo.h:50
TrigCompositeUtils::DecisionID numeric() const
numeric ID
size_t index() const
Return the index of this element within its container.
pointer_type ptr()
Dereference the pointer.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
unsigned int DecisionID
void insertDecisionIDs(const Decision *src, Decision *dest)
Appends the decision IDs of src to the dest decision object.
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.
const std::vector< ElementLink< DecisionContainer > > getLinkToPrevious(const Decision *d)
returns links to previous decision object 'seed'
DecisionIDContainer passedDecisionIDs(const Decision *d, const T &required)
return DecisionIDs in Decision object that match the required ones
HLT::Identifier getIDFromLeg(const HLT::Identifier &legIdentifier)
Generate the HLT::Identifier which corresponds to the chain name from the leg name.
const std::string & comboHypoAlgNodeName()
std::set< DecisionID > DecisionIDContainer
SG::WriteHandle< DecisionContainer > createAndStore(const SG::WriteHandleKey< DecisionContainer > &key, const EventContext &ctx)
Creates and right away records the DecisionContainer with the key.
LinkInfo< T > findLink(const Decision *start, const std::string &linkName, const bool suppressMultipleLinksWarning=false)
Perform a recursive search for ElementLinks of type T and name 'linkName', starting from Decision obj...
const std::string & initialRoIString()
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
ElementLink< DecisionContainer > decisionToElementLink(const Decision *d, const EventContext &ctx)
Takes a raw pointer to a Decision and returns an ElementLink to the Decision.
bool isLegId(const HLT::Identifier &legIdentifier)
Recognise whether the chain ID is a leg ID.

◆ createDecisionObjects()

StatusCode TrigBmuxComboHypo::createDecisionObjects ( TrigBmuxState & state) const
private

Definition at line 448 of file TrigBmuxComboHypo.cxx.

448 {
449
450 size_t idx = 0;
451 for (const xAOD::TrigBphys* triggerObject : state.trigBphysCollection()) {
452 if (triggerObject->particleType() == xAOD::TrigBphys::UNKNOWNPTYPE) continue;
453
454 ATH_MSG_DEBUG( "Found xAOD::TrigBphys object: mass = " << triggerObject->mass() );
455
456 auto triggerObjectEL = ElementLink<xAOD::TrigBphysContainer>(state.trigBphysCollection(), triggerObject->index());
457 ATH_CHECK( triggerObjectEL.isValid() );
458
459 const auto& muon = state.muons.at(state.trigBphysMuonIndices.at(idx));
460
461 // create a new output Decision object, backed by the 'decisions' container.
463
464 // add link to the previous decision
466
467 // set mandatory link to the trigger object
469
470 std::vector<const DecisionIDContainer*> previousDecisionIDs(1, &muon.decisionIDs);
471 for (const auto& tool : hypoTools()) {
472 ATH_MSG_DEBUG( "Go to " << tool );
473 ATH_CHECK( tool->decideOnSingleObject(decision, previousDecisionIDs) );
474 }
475 ++idx;
476 }
477
478 return StatusCode::SUCCESS;
479}
#define ATH_CHECK
Evaluate an expression and check for errors.
ToolHandleArray< ComboHypoToolBase > & hypoTools()
Definition ComboHypo.h:45
TrigCompositeUtils::DecisionContainer & decisions()
xAOD::TrigBphysContainer & trigBphysCollection()
std::vector< Muon > muons
std::vector< size_t > trigBphysMuonIndices
bool addObjectCollectionLink(const std::string &collectionName, const ElementLink< CONTAINER > &link)
Add a link to a single object within a collection. Performs de-duplication.
bool setObjectLink(const std::string &name, const ElementLink< CONTAINER > &link)
Set the link to an object.
const std::string & featureString()
const std::string & seedString()
TrigBphys_v1 TrigBphys
Definition TrigBphys.h:18
TrigBphysContainer_v1 TrigBphysContainer

◆ decisionsInput()

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

Definition at line 41 of file ComboHypo.h.

41{ return m_inputs; }

◆ decisionsOutput()

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

Definition at line 42 of file ComboHypo.h.

42{ return m_outputs; }

◆ declareGaudiProperty()

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

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

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

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

◆ evtStore()

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.

◆ execute()

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

Reimplemented from ComboHypo.

Definition at line 99 of file TrigBmuxComboHypo.cxx.

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

◆ extractFeatureAndRoI()

StatusCode ComboHypo::extractFeatureAndRoI ( const HLT::Identifier & chainLegId,
const ElementLink< TrigCompositeUtils::DecisionContainer > & EL,
SG::sgkey_t & featureKey,
TrigCompositeUtils::Decision::index_type & featureIndex,
SG::sgkey_t & roiKey,
TrigCompositeUtils::Decision::index_type & roiIndex,
bool & roiFullscan,
bool & objectRequestsNoMultiplicityCheck,
SG::SGKeyMap< std::set< uint32_t > > & priorFeaturesMap ) 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).

Definition at line 378 of file ComboHypo.cxx.

387{
388 // Return collections for the findLinks call.
389 // 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.
390
391 // Construct a sub-graph following just this leg back through the nav
392 DecisionIDContainer chainLegIdSet = {chainLegId.numeric()};
393 TrigCompositeUtils::NavGraph subGraph;
394 recursiveGetDecisions((*dEL), subGraph, chainLegIdSet, /*enforceDecisionOnStartNode =*/ true);
395
396 if (subGraph.finalNodes().size() != 1) {
397 ATH_MSG_ERROR("We are only expecting to search from a single navigation node in extractFeatureAndRoI");
398 return StatusCode::FAILURE;
399 }
400 const NavGraphNode* start = *(subGraph.finalNodes().begin());
401
402 std::vector<SG::sgkey_t> keys;
403 std::vector<uint32_t> clids; // We don't care about the class ID. This part gets ignored.
404 std::vector<Decision::index_type> indicies;
405 std::vector<const Decision*> sources;
406
407 std::set<const Decision*> fullyExploredFrom; // This is a cache which typelessFindLinks will use to avoid re-visiting already explored regions of the graph
408 // Note: This call to typelessFindLinks is exploring from a NavGraphNode* rather than a Decision*,
409 // this indicates that the search is restricted to a sub-graph (specifically, only following one chain-leg)
410 const bool foundFeature = typelessFindLinks(start, featureString(), keys, clids, indicies, sources, TrigDefs::allFeaturesOfType, &fullyExploredFrom);
411
412 const Decision* featureSource = nullptr;
413 // The "most recent" feature (from the step just run) is the one we find first. Hence it's at index 0
414 if (foundFeature) {
415 featureKey = keys.at(0);
416 featureIndex = indicies.at(0);
417 featureSource = sources.at(0);
418 }
419
420 objectRequestsNoMultiplicityCheck = (featureSource and featureSource->hasDetail<int32_t>("noCombo") and featureSource->getDetail<int32_t>("noCombo") == 1);
421
422 if (foundFeature and priorFeaturesMap.count(featureKey + featureIndex) == 0) {
423 const std::string* key_str = evtStore()->keyToString(featureKey);
424 ATH_MSG_DEBUG("Note: Will use feature hash " << featureKey + featureIndex << ", for " << (key_str ? *key_str : "UNKNOWN") << " index=" << featureIndex);
425 // Use the deep-search data to look further back than .at(0)
426 // Here's where we keep the record of the features in previous steps. Step ordering is unimportant, we can use a set.
427 if (keys.size() > 1) {
428 for (size_t i = 1; i < keys.size(); ++i) { // Skip the 1st entry, this will be equal to featureKey and featureIndex from typelessFindLink above.
429 // featureKey + featureIndex should be considered as equivalent to a per-feature hash (featureKey is a real hash, featureIndex is an offset index)
430 if (featureKey + featureIndex == keys.at(i) + indicies.at(i)) {
431 continue; // Do not add the case where a feature is re-attached to more than one step.
432 }
433 priorFeaturesMap[featureKey + featureIndex].insert(keys.at(i) + indicies.at(i));
434 }
435 } else { // Exactly one feature. Make a note of this by inserting an empty set, such that we don't do this search again.
436 priorFeaturesMap.insert( std::pair<uint32_t, std::set<uint32_t>>(featureKey + featureIndex, std::set<uint32_t>()) );
437 }
438 }
439
440 // Try and get seeding ROI data too.
441 uint32_t roiClid{0}; // Unused
442 const Decision* roiSource{nullptr}; // Unused
443 const bool foundROI = typelessFindLink(subGraph, initialRoIString(), roiKey, roiClid, roiIndex, roiSource);
444 if (foundROI) {
445 ElementLink<TrigRoiDescriptorCollection> roiEL(roiKey, roiIndex);
446 ATH_CHECK( roiEL.isValid() );
447 roiIsFullscan = (*(roiEL))->isFullscan();
448 if (!foundFeature) {
449 const std::string* roi_str = evtStore()->keyToString(roiKey);
450 ATH_MSG_DEBUG("Note: Located fallback-ROI, if used this will have feature hash =" << roiKey + roiIndex << ", for " << (roi_str ? *roi_str : "UNKNOWN") << " index=" << roiIndex);
451 }
452 }
453
454 if (!foundFeature && !foundROI) {
455 ATH_MSG_WARNING("Did not find the feature or initialRoI for " << dEL.dataID() << " index " << dEL.index());
456 }
457
458 return StatusCode::SUCCESS;
459}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
const std::vector< NavGraphNode * > & finalNodes() const
Get all final nodes.
Definition NavGraph.cxx:99
bool hasDetail(const std::string &name) const
Check if a given type of detail is available.
bool getDetail(const std::string &name, TYPE &value) const
Get an TYPE detail from the object.
void recursiveGetDecisions(const Decision *start, NavGraph &navGraph, const DecisionIDContainer &ids, const bool enforceDecisionOnStartNode)
Search back in time from "node" and locate all paths back through Decision objects for a given chain.
bool typelessFindLinks(const Decision *start, const std::string &linkName, std::vector< sgkey_t > &keyVec, std::vector< CLID > &clidVec, std::vector< Decision::index_type > &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...
bool typelessFindLink(const Decision *start, const std::string &linkName, sgkey_t &key, CLID &clid, Decision::index_type &index, const Decision *&source, const bool suppressMultipleLinksWarning)
Perform a recursive search for ElementLinks of any time and name 'linkName', starting from Decision o...
static const unsigned int allFeaturesOfType
Run 3 "enum". Return all features along legs (still with type and container checks)
setEventNumber uint32_t

◆ 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 & AthCommonReentrantAlgorithm< Gaudi::Algorithm >::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

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

Definition at line 94 of file AthCommonReentrantAlgorithm.cxx.

90{
91 // If we didn't find any symlinks to add, just return the collection
92 // from the base class. Otherwise, return the extended collection.
93 if (!m_extendedExtraObjects.empty()) {
95 }
97}
An algorithm that can be simultaneously executed in multiple threads.

◆ fillDecisionsMap()

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

iterates over all inputs, associating inputs to legs

Definition at line 462 of file ComboHypo.cxx.

462 {
463 for ( size_t inputContainerIndex = 0; inputContainerIndex < m_inputs.size(); ++inputContainerIndex ) {
464 auto inputHandle = SG::makeHandle( m_inputs.at(inputContainerIndex), context );
465 if ( !inputHandle.isValid() ) {
466 ATH_MSG_ERROR( "No input ReadHandle from " << inputHandle.key() );
467 return StatusCode::FAILURE;
468 }
469 ATH_MSG_DEBUG( "-- Found ReadHandle from " << inputHandle.key() <<" with "<< inputHandle->size() << " elements:" );
470 for ( const Decision* decision : *inputHandle ) {
471 ATH_MSG_DEBUG( "-- -- Input Decision #"<< decision->index() <<" with "<< decisionIDs( decision ).size() << " active IDs. Populating the multiplicity map:" );
472 for ( const DecisionID id: decisionIDs( decision ) ) {
473
474 // Handles regular and multi-leg case
475 const auto& [chainName, chainLeg] = getNameAndIndexFromLeg(HLT::Identifier(id).name());
476
477 // We need to check if we are configured to accept DecisionObjects passing 'chainName' ...
478 Combo::LegMap::const_iterator it = m_legToInputCollectionMap.find(chainName);
479 if (it == m_legToInputCollectionMap.end()) {
480 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.");
481 continue;
482 }
483
484 // ... and if so we need to further check that we are accepting passing IDs for chainLeg on the current inputContainerIndex
485 const std::vector<int>& legToInputCollectionIndex = it->second;
486 const size_t requiredInputContainerIndex = static_cast<size_t>(legToInputCollectionIndex.at(chainLeg));
487 if (requiredInputContainerIndex != inputContainerIndex) {
488 ATH_MSG_VERBOSE("-- -- -- Ignoring the DecisionID " << id << " on leg " << chainLeg << " as we are only permitted to accept passing objects on leg #" << chainLeg << " of " << chainName
489 << " which come from input collection index " << requiredInputContainerIndex << " (which is " << m_inputs.at(requiredInputContainerIndex).key() << ")"
490 << ". Not the current index " << inputContainerIndex << " (which is " << m_inputs.at(inputContainerIndex).key() << ")");
491 continue;
492 }
493
494 ATH_MSG_DEBUG( " ++++ " << HLT::Identifier( id ) );
495 dmap[id].push_back( TrigCompositeUtils::decisionToElementLink(decision, context) );
496 }
497 }
498 }
499
500 if (msgLvl(MSG::DEBUG)){
501 ATH_MSG_DEBUG( "Decision map filled :" );
502 size_t legCount = 0;
503 for (const auto& entry: dmap){
504 ATH_MSG_DEBUG("leg ["<<legCount<<"]: ");
505 const std::vector<ElementLink<DecisionContainer>>& decisions = entry.second;
506 ATH_MSG_DEBUG(" ++++ " << HLT::Identifier( entry.first ) <<" Number Decisions: "<< decisions.size());
507 for (const ElementLink<DecisionContainer>& d : decisions){
508 ATH_MSG_DEBUG(" Decision: (ContainerKey:"<<d.dataID()<<", DecisionElementIndex:"<<d.index()<<")");
509 }
510 legCount++;
511 }
512 }
513
514
515 return StatusCode::SUCCESS;
516}
#define ATH_MSG_VERBOSE(x)
Gaudi::Property< Combo::LegMap > m_legToInputCollectionMap
Definition ComboHypo.h:59
std::pair< std::string, int32_t > getNameAndIndexFromLeg(const std::string &name)
Extract the name and numeric index of a leg identifier.

◆ 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 595 of file TrigBmuxComboHypo.cxx.

599 {
600
601 // refitted track momentum as a 4-vector for mass hypothesis defined by the given decay value
603 std::vector<xAOD::TrackParticle::GenVecFourMom_t> momenta;
604 ATH_CHECK( vertex.vxTrackAtVertexAvailable() );
605 ATH_CHECK( vertex.vxTrackAtVertex().size() == trkMass.size() );
606 for (size_t i = 0; i < vertex.vxTrackAtVertex().size(); ++i) {
607 const Trk::TrackParameters* perigee = vertex.vxTrackAtVertex()[i].perigeeAtVertex();
608 ATH_CHECK( perigee != nullptr );
609 const Amg::Vector3D& p = perigee->momentum();
610 momenta.emplace_back(p.x(), p.y(), p.z(), trkMass[i]);
611 momentum += momenta.back();
612 }
613
614 triggerObject.initialise(0, momentum.Eta(), momentum.Phi(), momentum.Pt(), type, momentum.M(), xAOD::TrigBphys::EF);
615
616 triggerObject.setFitmass(momentum.M());
617 triggerObject.setFitx(vertex.x());
618 triggerObject.setFity(vertex.y());
619 triggerObject.setFitz(vertex.z());
620 triggerObject.setFitchi2(vertex.chiSquared());
621 triggerObject.setFitndof(vertex.numberDoF());
622
623 // set all the particles associated with the decay
624 triggerObject.setTrackParticleLinks(vertex.trackParticleLinks());
625
627 "TrigBphys object:\n\t " <<
628 "roiId: " << triggerObject.roiId() << "\n\t " <<
629 "particleType: " << triggerObject.particleType() << "\n\t " <<
630 "level: " << triggerObject.level() << "\n\t " <<
631 "eta: " << triggerObject.eta() << "\n\t " <<
632 "phi: " << triggerObject.phi() << "\n\t " <<
633 "mass: " << triggerObject.mass() << "\n\t " <<
634 "fitmass: " << triggerObject.fitmass() << "\n\t " <<
635 "chi2/NDF: " << triggerObject.fitchi2() << " / " << triggerObject.fitndof() << "\n\t " <<
636 "vertex: (" << triggerObject.fitx() << ", " << triggerObject.fity() << ", " << triggerObject.fitz() << ")" );
637
638 return StatusCode::SUCCESS;
639}
const Amg::Vector3D & momentum() const
Access method for the momentum.
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzM4D< double > > GenVecFourMom_t
Base 4 Momentum type for TrackParticle.
int fitndof() const
accessor method: ndof from vertex fit
void setFitchi2(float FitChi2)
set method: chi2 from vertex fit
void setFitx(float FitX)
set method: x position of vertex
uint32_t roiId() const
accessor method: ID of L1 RoI
void setFity(float FitY)
set method: y position of vertex
float eta() const
accessor method: eta
pType particleType() const
accessor method: particle Type
float phi() const
accessor method: phi
float fitchi2() const
accessor method: chi2 from vertex fit
void setFitndof(int FitNdof)
set method: ndof from vertex fit
void setFitz(float FitZ)
set method: z position of vertex
float fitx() const
accessor method: x position of vertex
void setFitmass(float FitMass)
set method: mass from vertex fit
float fitz() const
accessor method: z position of vertex
float fitmass() const
accessor method: mass from vertex fit
float mass() const
accessor method: mass
float fity() const
accessor method: y position of vertex
levelType level() const
accessor method: level Type
void setTrackParticleLinks(const std::vector< ElementLink< TrackParticleContainer > > &links)
Set the track particle links on the object.
Eigen::Matrix< double, 3, 1 > Vector3D
@ trkMass
Extended perigee: mass.
Definition ParamDefs.h:81
ParametersBase< TrackParametersDim, Charged > TrackParameters

◆ 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 642 of file TrigBmuxComboHypo.cxx.

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

◆ filterPassed()

virtual bool AthCommonReentrantAlgorithm< Gaudi::Algorithm >::filterPassed ( const EventContext & ctx) const
inlinevirtualinherited

Definition at line 96 of file AthCommonReentrantAlgorithm.h.

96 {
97 return execState( ctx ).filterPassed();
98 }
virtual bool filterPassed(const EventContext &ctx) const

◆ findBmuxCandidates()

StatusCode TrigBmuxComboHypo::findBmuxCandidates ( TrigBmuxState & state) const
private

Definition at line 127 of file TrigBmuxComboHypo.cxx.

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

◆ 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 482 of file TrigBmuxComboHypo.cxx.

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

◆ 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 530 of file TrigBmuxComboHypo.cxx.

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

◆ 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 709 of file TrigBmuxComboHypo.cxx.

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

◆ hypoTools() [1/2]

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

Definition at line 45 of file ComboHypo.h.

45{ return m_hypoTools; }
ToolHandleArray< ComboHypoToolBase > m_hypoTools
Definition ComboHypo.h:104

◆ hypoTools() [2/2]

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

Definition at line 46 of file ComboHypo.h.

46{ return m_hypoTools; }

◆ initialize()

StatusCode TrigBmuxComboHypo::initialize ( )
overridevirtual

Reimplemented from ComboHypo.

Definition at line 54 of file TrigBmuxComboHypo.cxx.

54 {
55 ATH_MSG_DEBUG( "TrigBmuxComboHypo::initialize()" );
56
58
59 ATH_CHECK( m_muonContainerKey.initialize() );
63 ATH_CHECK( m_trigBphysContainerKey.initialize() );
64 ATH_CHECK( m_beamSpotKey.initialize() );
65
66 ATH_CHECK( m_vertexFitter.retrieve() );
68 ATH_CHECK( m_trackToVertexTool.retrieve() );
69
70 // allowed IDs to filter out incoming decisions at L2 level
71 for (const auto& item : triggerMultiplicityMap()) {
72 const HLT::Identifier id = HLT::Identifier(item.first);
73 m_allowedIDs.insert(id.numeric());
74 if (item.second.size() > 1) {
75 for (size_t i = 0; i < item.second.size(); i++) {
76 m_allowedIDs.insert(TrigCompositeUtils::createLegName(id, i).numeric());
77 }
78 }
79 }
80 if (msgLvl(MSG::DEBUG)) {
81 ATH_MSG_DEBUG( "Allowed decisions:" );
82 for (const DecisionID& id : m_allowedIDs) {
83 ATH_MSG_DEBUG( " +++ " << HLT::Identifier(id) );
84 }
85 }
86
87 if (!m_monTool.empty()) {
88 ATH_CHECK( m_monTool.retrieve() );
89 ATH_MSG_DEBUG( "GenericMonitoringTool name:" << m_monTool );
90 }
91 else {
92 ATH_MSG_DEBUG( "No GenericMonitoringTool configured: no monitoring histograms will be available" );
93 }
94
95 return StatusCode::SUCCESS;
96}
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)
const Combo::MultiplicityReqMap & triggerMultiplicityMap() const
Definition ComboHypo.h:43
virtual StatusCode initialize() override
Definition ComboHypo.cxx:22
SG::ReadHandleKey< xAOD::MuonContainer > m_muonContainerKey
HLT::Identifier createLegName(const HLT::Identifier &chainIdentifier, size_t counter)
Generate the HLT::Identifier which corresponds to a specific leg of a given chain.

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

◆ 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 694 of file TrigBmuxComboHypo.cxx.

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

◆ 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 701 of file TrigBmuxComboHypo.cxx.

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

◆ legToInputCollectionMap()

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

Definition at line 44 of file ComboHypo.h.

44{ 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 716 of file TrigBmuxComboHypo.cxx.

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

◆ msg()

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

Definition at line 24 of file AthCommonMsg.h.

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

◆ 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();
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 {
366 }

◆ setFilterPassed()

virtual void AthCommonReentrantAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool state,
const EventContext & ctx ) const
inlinevirtualinherited

Definition at line 100 of file AthCommonReentrantAlgorithm.h.

100 {
102 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const

◆ sysExecute()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::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 85 of file AthCommonReentrantAlgorithm.cxx.

77{
78 return BaseAlg::sysExecute (ctx);
79}

◆ sysInitialize()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::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 HypoBase, and InputMakerBase.

Definition at line 61 of file AthCommonReentrantAlgorithm.cxx.

107 {
109
110 if (sc.isFailure()) {
111 return sc;
112 }
113
114 ServiceHandle<ICondSvc> cs("CondSvc",name());
115 for (auto h : outputHandles()) {
116 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
117 // do this inside the loop so we don't create the CondSvc until needed
118 if ( cs.retrieve().isFailure() ) {
119 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
120 return StatusCode::SUCCESS;
121 }
122 if (cs->regHandle(this,*h).isFailure()) {
124 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
125 << " with CondSvc");
126 }
127 }
128 }
129 return sc;
130}
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ 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 43 of file ComboHypo.h.

43{ return m_multiplicitiesReqMap.value(); }
Gaudi::Property< Combo::MultiplicityReqMap > m_multiplicitiesReqMap
Definition ComboHypo.h:56

◆ 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) {
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.

251 {this,
252 "BdToD", true, "switch on/off B0 -> mu+ nu_mu D-(-> K+ pi- pi-) decay"};

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

263 {this,
264 "BdToD_chi2", 27., "maximum chi2 of the fitted D- vertex"};

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

261 {this,
262 "BdToD_DMassRange", {1750., 2000.}, "D+ mass range"};

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

265 {this,
266 "BdToD_LxyBd", 0.1, "Lxy(B0,BeamSpot) for B0 -> mu+ nu_mu D-"};

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

267 {this,
268 "BdToD_LxyD", 0.05, "Lxy(D-,B0) for D- -> K+ pi- pi-"};

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

259 {this,
260 "BdToD_massRange", {-1., 10000.}, "B0 mass range"};

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

257 {this,
258 "BdToD_minDPt", 4500., "minimum pT of D-"};

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

253 {this,
254 "BdToD_minKaonPt", 1250., "minimum pT of kaon track from D-"};

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

255 {this,
256 "BdToD_minPionPt", 1000., "minimum pT of pion track from D-"};

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

198{this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"};

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

271 {this,
272 "BsToDs", true, "switch on/off B_s0 -> mu+ nu_mu D_s-(->phi(-> K+ K-) pi-) decay"};

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

285 {this,
286 "BsToDs_chi2", 27., "maximum chi2 of the fitted D_s- vertex"};

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

283 {this,
284 "BsToDs_DsMassRange", {1750., 2100.}, "D_s- mass range"};

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

287 {this,
288 "BsToDs_LxyBs", 0.1, "Lxy(B_s0,BeamSpot) for B_s0 -> mu+ nu_mu D_s-"};

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

289 {this,
290 "BsToDs_LxyDs", 0.02, "Lxy(D_s-,B_s0) for D_s- -> phi pi-"};

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

279 {this,
280 "BsToDs_massRange", {-1., 10000.}, "B_s0 mass range"};

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

277 {this,
278 "BsToDs_minDsPt", 5500., "minimum pT of D_s-"};

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

273 {this,
274 "BsToDs_minKaonPt", 1000., "minimum pT of kaon track from phi(1020)"};

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

275 {this,
276 "BsToDs_minPionPt", 1000., "minimum pT of pion track from D_s-"};

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

281 {this,
282 "BsToDs_phiMassRange", {940., 1100.}, "phi(1020) mass range"};

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

219 {this,
220 "BToD0", true, "switch on/off B+ -> mu+ nu_mu anti-D0(-> K+ pi-) decay"};

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

241 {this,
242 "BToD0_chi2", 20., "maximum chi2 of the fitted D0 vertex"};

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

237 {this,
238 "BToD0_D0MassRange", {1750., 2000.}, "D0 mass range"};

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

239 {this,
240 "BToD0_DstarMassRange", {-1., 2110.}, "D*+ mass range"};

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

243 {this,
244 "BToD0_LxyB", 0.1, "Lxy(B+,BeamSpot) for B+ -> mu+ nu_mu anti-D0"};

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

245 {this,
246 "BToD0_LxyBd", 0.05, "Lxy(B0,BeamSpot) for B0 -> mu+ nu_mu D*-"};

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

247 {this,
248 "BToD0_LxyD0", 0., "Lxy(D0,B+/B0) for both B+ and B0 decays"};

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

221 {this,
222 "BToD0_makeDstar", true, "switch on/off B0 -> mu+ nu_mu D*-(-> anti-D0(-> K+ pi-) pi-) decay"};

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

235 {this,
236 "BToD0_massRange", {-1., 10000.}, "B+/B0 mass range"};

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

233 {this,
234 "BToD0_maxDstarPionZ0", 5., "maximum z0 impact parameter of the pion track from D*+ wrt the fitted D0 vertex; no preselection if negative"};

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

223 {this,
224 "BToD0_minD0KaonPt", 1000., "minimum pT of kaon track from D0"};

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

225 {this,
226 "BToD0_minD0PionPt", 1000., "minimum pT of pion track from D0"};

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

227 {this,
228 "BToD0_minD0Pt", -1., "minimum pT of D0"};

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

231 {this,
232 "BToD0_minDstarPionPt", 1000., "minimum pT of pion track from D*-"};

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

229 {this,
230 "BToD0_minDstarPt", 5500., "minimum pT of D*-"};

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

203 {this,
204 "CascadeChi2", 50., "maximum chi2 of the cascade fit"};

◆ m_checkMultiplicityMap

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

Definition at line 62 of file ComboHypo.h.

62 { this, "CheckMultiplicityMap", true,
63 "Perform a consistency check of the MultiplicitiesMap"};

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

205 {this,
206 "DeltaR", 0.01, "minimum deltaR between same-sign tracks (overlap removal)"};

◆ 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 AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

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

Empty if no symlinks were found.

Definition at line 114 of file AthCommonReentrantAlgorithm.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.

215 {this,
216 "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)"};

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

213 {this,
214 "FitAttemptsWarningThreshold", 200, "Events processing this many calls of the vertex fitter will generate a WARNING message (time-out protect)"};

◆ m_hypoTools

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

Definition at line 104 of file ComboHypo.h.

104{this, "ComboHypoTools", {}, "Tools to perform selection"};

◆ m_inputs

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

Definition at line 50 of file ComboHypo.h.

50{ this, "HypoInputDecisions", {}, "Input Decisions" };

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

293 {this,
294 "LambdaBToLambdaC", true, "switch on/off Lambda_b0 -> mu+ nu_mu anti-Lambda_c-(-> anti-p K+ pi-) decay"};

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

307 {this,
308 "LambdaBToLambdaC_chi2", 27., "maximum chi2 of the fitted Lambda_c- vertex"};

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

305 {this,
306 "LambdaBToLambdaC_LambdaCMassRange", {2190., 2390.}, "Lambda_c- mass range"};

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

309 {this,
310 "LambdaBToLambdaC_LxyLb", 0.1, "Lxy(Lambda_b0,BeamSpot) for Lambda_b0 -> mu- anti-nu_mu Lambda_c+"};

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

311 {this,
312 "LambdaBToLambdaC_LxyLc", 0.02, "Lxy(Lambda_c+,Lambda_b0) for Lambda_c+-> p K- pi+"};

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

303 {this,
304 "LambdaBToLambdaC_massRange", {-1., 10000.}, "Lambda_b0 mass range"};

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

297 {this,
298 "LambdaBToLambdaC_minKaonPt", 1250., "minimum pT of kaon track"};

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

301 {this,
302 "LambdaBToLambdaC_minLambdaCPt", 5500., "minimum pT of Lambda_c-"};

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

299 {this,
300 "LambdaBToLambdaC_minPionPt", 1000., "minimum pT of pion track"};

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

295 {this,
296 "LambdaBToLambdaC_minProtonPt", 2750., "minimum pT of proton track"};

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

Definition at line 59 of file ComboHypo.h.

59 {this, "LegToInputCollectionMap", {},
60 "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."};

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

201 {this,
202 "MakeCascadeFit", true, "perform cascade fit of the partially reconstructed decays"};

◆ m_monTool

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

Definition at line 321 of file TrigBmuxComboHypo.h.

321 {this,
322 "MonTool", "", "monitoring tool"};

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

Definition at line 56 of file ComboHypo.h.

56 {this, "MultiplicitiesMap", {},
57 "Map from the chain name to multiplicities required at each input"};

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

193 {this,
194 "MuonCollectionKey", "Muons", "input EF Muon container name"};

◆ m_outputs

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

Definition at line 51 of file ComboHypo.h.

51{ this, "HypoOutputDecisions", {}, "Output Decisions" };

◆ 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 53 of file ComboHypo.h.

53 {this, "RequireUniqueROI", false,
54 "Require each Feature in each leg of the combination to come from a unique L1 seeding ROI."};

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

209 {this,
210 "RoiEtaWidth", 0.75, "extent of the RoI in eta from initial muon, to be check for SuperRoI"};

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

211 {this,
212 "RoiPhiWidth", 0.75, "extent of the RoI in phi from initial muon, to be check for SuperRoI"};

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

191 {this,
192 "TrackCollectionKey", "InDetTrackParticles", "input TrackParticle container name"};

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

319 {this,
320 "TrackToVertexTool", "", "tool to extrapolate track to vertex or beamspot"};

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

195 {this,
196 "TrigBphysCollectionKey", "TrigBphysContainer", "output TrigBphysContainer name"};

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

207 {this,
208 "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"};

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

317 {this,
318 "VertexFitter", "", "VKalVrtFitter tool to fit tracks into the common vertex"};

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

315 {this,
316 "VertexPointEstimator", "", "tool to find starting point for the vertex fitter"};

◆ 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
Initial value:

Definition at line 41 of file TrigBmuxComboHypo.h.

45 : public ::ITrigBphysState {
46 public:
47 TrigBmuxState() = delete;

The documentation for this class was generated from the following files: