ATLAS Offline Software
Loading...
Searching...
No Matches
TrigBhhComboHypo Class Reference

EF hypothesis algorithm for B -> h+ h- decays (h = K, pi): B0 -> K+ pi- B_s0 -> K+ K- etc. More...

#include <TrigBhhComboHypo.h>

Inheritance diagram for TrigBhhComboHypo:
Collaboration diagram for TrigBhhComboHypo:

Public Member Functions

 TrigBhhComboHypo (const std::string &name, ISvcLocator *pSvcLocator)
 TrigBhhComboHypo ()=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 mergeMuonsFromDecisions (TrigBhhState &) const
 Go through state.previousDecisions(), fetch xAOD::Muons objects attached to decisions and save links to them in state.muons().
StatusCode mergeTracksFromViews (TrigBhhState &) const
 Go through state.previousDecisions() and fetch xAOD::TrackParticle objects associated with the nearest SG::View.
StatusCode findBhhCandidates (TrigBhhState &) const
 Make all possible combinations from state.tracks(), fit tracks to the common vertex, create xAOD::TrigBphys objects and put them into state.trigBphysCollection()
StatusCode createDecisionObjects (TrigBhhState &) const
 Create a decision for each xAOD::TrigBphys object from state.trigBphysCollection() and use hypoTools() to assign correct decisionIDs.
std::unique_ptr< xAOD::Vertexfit (const EventContext &context, const std::vector< ElementLink< xAOD::TrackParticleContainer > > &trackParticleLinks, const std::vector< double > &trkMass={PDG::mKaon, PDG::mKaon}) const
 Perform a vertex fit on selected tracks.
StatusCode fillTriggerObject (xAOD::TrigBphys &triggerObject, const xAOD::Vertex &vertex, const Amg::Vector3D &productionVertex, const std::vector< double > &trkMass={PDG::mKaon, PDG::mKaon}) const
 Fill the trigger object that may be stored for debugging or matching.
bool isIdenticalTracks (const xAOD::TrackParticle *lhs, const xAOD::TrackParticle *rhs) const
 Returns false for the tracks with opposite charges.
bool isIdenticalTracks (const xAOD::Muon *lhs, const xAOD::Muon *rhs) const
double Lxy (const Amg::Vector3D &productionVertex, const Amg::Vector3D &decayVertex, const std::vector< xAOD::TrackParticle::GenVecFourMom_t > &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::WriteHandleKey< xAOD::TrigBphysContainerm_trigBphysContainerKey
SG::ReadCondHandleKey< InDet::BeamSpotDatam_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"}
Gaudi::Property< bool > m_applyMuonRemoval
Gaudi::Property< double > m_deltaR
Gaudi::Property< double > m_trkPt
Gaudi::Property< std::pair< double, double > > m_massRange
Gaudi::Property< double > m_chi2
Gaudi::Property< size_t > m_fitAttemptsWarningThreshold
Gaudi::Property< size_t > m_fitAttemptsBreakThreshold
ToolHandle< InDet::VertexPointEstimatorm_vertexPointEstimator
ToolHandle< Trk::TrkVKalVrtFitterm_vertexFitter
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

Detailed Description

EF hypothesis algorithm for B -> h+ h- decays (h = K, pi): B0 -> K+ pi- B_s0 -> K+ K- etc.

Definition at line 74 of file TrigBhhComboHypo.h.

Member Typedef Documentation

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ TrigBhhComboHypo() [1/2]

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

Definition at line 39 of file TrigBhhComboHypo.cxx.

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

◆ TrigBhhComboHypo() [2/2]

TrigBhhComboHypo::TrigBhhComboHypo ( )
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 TrigBhhComboHypo::createDecisionObjects ( TrigBhhState & state) const
private

Create a decision for each xAOD::TrigBphys object from state.trigBphysCollection() and use hypoTools() to assign correct decisionIDs.

Definition at line 326 of file TrigBhhComboHypo.cxx.

326 {
327
328 // state.muons() are common seeds for all B -> hh candidates
329 std::vector<ElementLink<TrigCompositeUtils::DecisionContainer>> previousDecisionLinks;
331 std::vector<const DecisionIDContainer*> previousDecisionIDs = { &decisionIDs };
332
333 for (const Decision* previousDecision : state.previousDecisions()) {
334 if (!TrigCompositeUtils::isAnyIDPassing(previousDecision, m_allowedIDs)) continue;
335
336 previousDecisionLinks.emplace_back(TrigCompositeUtils::decisionToElementLink(previousDecision, state.context()));
338 }
339
340 for (const xAOD::TrigBphys* triggerObject : state.trigBphysCollection()) {
341 ATH_MSG_DEBUG( "Found xAOD::TrigBphys object: fitMass = " << triggerObject->fitmass() << ", chi2 = " << triggerObject->fitchi2() );
342
343 auto triggerObjectEL = ElementLink<xAOD::TrigBphysContainer>(state.trigBphysCollection(), triggerObject->index());
344 ATH_CHECK( triggerObjectEL.isValid() );
345
346 // create a new output Decision object, backed by the 'decisions' container.
348
349 // attach all previous decisions, no need to use TrigCompositeUtils::linkToPrevious()
350 decision->addObjectCollectionLinks(TrigCompositeUtils::seedString(), previousDecisionLinks);
351
352 // set mandatory link to the trigger object
354
355 for (const auto& tool : hypoTools()) {
356 ATH_MSG_DEBUG( "Go to " << tool );
357 ATH_CHECK( tool->decideOnSingleObject(decision, previousDecisionIDs) );
358 }
359 }
360
361 return StatusCode::SUCCESS;
362}
#define ATH_CHECK
Evaluate an expression and check for errors.
void decisionIDs(const Decision *d, DecisionIDContainer &id)
Extracts DecisionIDs stored in the Decision object.
ToolHandleArray< ComboHypoToolBase > & hypoTools()
Definition ComboHypo.h:45
TrigCompositeUtils::DecisionContainer & decisions()
const TrigCompositeUtils::DecisionContainer & previousDecisions() const
xAOD::TrigBphysContainer & trigBphysCollection()
const EventContext & context() const
TrigCompositeUtils::DecisionIDContainer m_allowedIDs
bool setObjectLink(const std::string &name, const ElementLink< CONTAINER > &link)
Set the link to an object.
bool addObjectCollectionLinks(const std::string &collectionName, const std::vector< ElementLink< CONTAINER > > &links)
Add links to multiple objects within a collection. Performs de-duplication.
const std::string & featureString()
const std::string & seedString()
bool isAnyIDPassing(const Decision *d, const DecisionIDContainer &required)
Checks if any of the DecisionIDs passed in arg required is availble in Decision object.
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 TrigBhhComboHypo::execute ( const EventContext & context) const
overridevirtual

Reimplemented from ComboHypo.

Definition at line 85 of file TrigBhhComboHypo.cxx.

85 {
86
87 ATH_MSG_DEBUG( "TrigBhhComboHypo::execute() starts" );
88
89 ATH_MSG_DEBUG( "decision input key: " << decisionsInput().at(0).key() );
90 auto previousDecisionsHandle = SG::makeHandle(decisionsInput().at(0), context);
91 ATH_CHECK( previousDecisionsHandle.isValid() );
92 ATH_MSG_DEBUG( "Running with " << previousDecisionsHandle->size() << " previous decisions" );
93
94 SG::WriteHandle<DecisionContainer> outputDecisionsHandle = TrigCompositeUtils::createAndStore(decisionsOutput().at(0), context);
95
96 auto trigBphysHandle = SG::makeHandle(m_trigBphysContainerKey, context);
97 ATH_CHECK( trigBphysHandle.record(std::make_unique<xAOD::TrigBphysContainer>(), std::make_unique<xAOD::TrigBphysAuxContainer>()) );
98
99 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle {m_beamSpotKey, context};
100 ATH_CHECK( beamSpotHandle.isValid() );
101
102 auto state = std::make_unique<TrigBhhState>(context, *previousDecisionsHandle, *outputDecisionsHandle, trigBphysHandle.ptr(), *beamSpotHandle);
103
106 ATH_CHECK( findBhhCandidates(*state) );
108
109 ATH_MSG_DEBUG( "TrigBhhComboHypo::execute() terminates with StatusCode::SUCCESS" );
110 return StatusCode::SUCCESS;
111}
const SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsOutput() const
Definition ComboHypo.h:42
const SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsInput() const
Definition ComboHypo.h:41
StatusCode mergeMuonsFromDecisions(TrigBhhState &) const
Go through state.previousDecisions(), fetch xAOD::Muons objects attached to decisions and save links ...
SG::WriteHandleKey< xAOD::TrigBphysContainer > m_trigBphysContainerKey
StatusCode findBhhCandidates(TrigBhhState &) const
Make all possible combinations from state.tracks(), fit tracks to the common vertex,...
StatusCode mergeTracksFromViews(TrigBhhState &) const
Go through state.previousDecisions() and fetch xAOD::TrackParticle objects associated with the neares...
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
StatusCode createDecisionObjects(TrigBhhState &) const
Create a decision for each xAOD::TrigBphys object from state.trigBphysCollection() and use hypoTools(...

◆ 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 TrigBhhComboHypo::fillTriggerObject ( xAOD::TrigBphys & triggerObject,
const xAOD::Vertex & vertex,
const Amg::Vector3D & productionVertex,
const std::vector< double > & trkMass = {PDG::mKaonPDG::mKaon} ) const
private

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

Parameters
triggerObjectthe trigger object
vertexthe fitted decay vertex
productionVertexposition of the beamspot
trkMasstrack mass hypothesis for mass calculations
Returns
StatusCode to indicate success or failure

Definition at line 413 of file TrigBhhComboHypo.cxx.

417 {
418
419 // refitted track momentum as a 4-vector for mass hypothesis defined by the given decay value
421 std::vector<xAOD::TrackParticle::GenVecFourMom_t> momenta;
422 ATH_CHECK( vertex.vxTrackAtVertexAvailable() );
423 ATH_CHECK( vertex.vxTrackAtVertex().size() == trkMass.size() );
424 for (size_t i = 0; i < vertex.vxTrackAtVertex().size(); ++i) {
425 const Trk::TrackParameters* perigee = vertex.vxTrackAtVertex()[i].perigeeAtVertex();
426 ATH_CHECK( perigee != nullptr );
427 const Amg::Vector3D& p = perigee->momentum();
428 momenta.emplace_back(p.x(), p.y(), p.z(), trkMass[i]);
429 momentum += momenta.back();
430 }
431
432 triggerObject.initialise(0, momentum.Eta(), momentum.Phi(), momentum.Pt(), xAOD::TrigBphys::BHH, momentum.M(), xAOD::TrigBphys::EF);
433
434 triggerObject.setFitmass(momentum.M());
435 triggerObject.setFitx(vertex.x());
436 triggerObject.setFity(vertex.y());
437 triggerObject.setFitz(vertex.z());
438 triggerObject.setFitchi2(vertex.chiSquared());
439 triggerObject.setFitndof(vertex.numberDoF());
440 triggerObject.setLxy(Lxy(productionVertex, vertex.position(), momenta));
441
442 // set all the particles associated with the decay
443 triggerObject.setTrackParticleLinks(vertex.trackParticleLinks());
444
446 "TrigBphys object:\n\t " <<
447 "roiId: " << triggerObject.roiId() << "\n\t " <<
448 "particleType: " << triggerObject.particleType() << "\n\t " <<
449 "level: " << triggerObject.level() << "\n\t " <<
450 "eta: " << triggerObject.eta() << "\n\t " <<
451 "phi: " << triggerObject.phi() << "\n\t " <<
452 "mass: " << triggerObject.mass() << "\n\t " <<
453 "fitmass: " << triggerObject.fitmass() << "\n\t " <<
454 "chi2/NDF: " << triggerObject.fitchi2() << " / " << triggerObject.fitndof() << "\n\t " <<
455 "vertex: (" << triggerObject.fitx() << ", " << triggerObject.fity() << ", " << triggerObject.fitz() << ")" );
456
457 return StatusCode::SUCCESS;
458}
double Lxy(const Amg::Vector3D &productionVertex, const Amg::Vector3D &decayVertex, const std::vector< xAOD::TrackParticle::GenVecFourMom_t > &momenta) const
Returns the transverse decay length of a particle Lxy in [mm].
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 setLxy(float v)
set method: lxy
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

◆ 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

◆ findBhhCandidates()

StatusCode TrigBhhComboHypo::findBhhCandidates ( TrigBhhState & state) const
private

Make all possible combinations from state.tracks(), fit tracks to the common vertex, create xAOD::TrigBphys objects and put them into state.trigBphysCollection()

Definition at line 259 of file TrigBhhComboHypo.cxx.

259 {
260
261 // monitored variables
262 auto mon_nMuon = Monitored::Scalar<int>("nMuon", 0);
263 auto mon_nTrk = Monitored::Scalar<int>("nTrk", 0);
264 auto mon_nBPhysObject = Monitored::Scalar<int>("nBPhysObject", 0);
265
266 auto group = Monitored::Group(m_monTool,
267 mon_nMuon, mon_nTrk, mon_nBPhysObject);
268
269 const auto& tracks = state.tracks;
270
271 size_t iterations = 0;
272 bool isOverWarningThreshold = false;
273
274 std::vector<ElementLink<xAOD::TrackParticleContainer>> trackParticleLinks(2);
275 for (size_t itrk1 = 0; itrk1 < tracks.size(); ++itrk1) {
276 trackParticleLinks[0] = tracks[itrk1];
277 const xAOD::TrackParticle* trk1 = *trackParticleLinks[0];
278 auto p_trk1 = trk1->genvecP4();
279 auto charge1 = trk1->charge();
280
281 for (size_t itrk2 = itrk1 + 1; itrk2 < tracks.size(); ++itrk2) {
282 trackParticleLinks[1] = tracks[itrk2];
283 const xAOD::TrackParticle* trk2 = *trackParticleLinks[1];
284 auto p_trk2 = trk2->genvecP4();
285 auto charge2 = trk2->charge();
286
287 auto mKK = (p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mKaon)).M();
288 auto mPiPi = (p_trk1.SetM(PDG::mPion) + p_trk2.SetM(PDG::mPion)).M();
289
290 if (charge1 * charge2 > 0. || mKK < m_massRange.value().first || mPiPi > m_massRange.value().second) continue;
291
292 // fit tracks to the common vertex
293 auto vertex = fit(state.context(), trackParticleLinks);
294 iterations++;
295 if (!vertex) continue;
296
298 xAOD::TrigBphys* triggerObject = state.trigBphysCollection().back();
299
300 ATH_CHECK( fillTriggerObject(*triggerObject, *vertex, state.beamSpotPosition()) );
301 triggerObject->setMass(mKK);
302
303 ATH_MSG_DEBUG( "Found B -> h+ h- candidate: M(K+,K-) = " << mKK << " M(pi+,pi-) = " << mPiPi );
304
305 if (iterations > m_fitAttemptsWarningThreshold && !isOverWarningThreshold) {
306 ATH_MSG_WARNING( "B -> hh: " << state.trigBphysCollection().size() << " vertices created after " << iterations << " vertex fitter calls" );
307 isOverWarningThreshold = true;
308 }
309 if (iterations > m_fitAttemptsBreakThreshold) {
310 ATH_MSG_WARNING( "b -> hh: the number of fit attempts has exceeded the limit, breaking the loop at this point" );
311 itrk1 = tracks.size();
312 break;
313 }
314
315 }
316 }
317
318 mon_nMuon = state.muons.size();
319 mon_nTrk = tracks.size();
320 mon_nBPhysObject = state.trigBphysCollection().size();
321
322 return StatusCode::SUCCESS;
323}
const T * back() const
Access the last element in the collection as an rvalue.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
Amg::Vector3D beamSpotPosition() const
StatusCode fillTriggerObject(xAOD::TrigBphys &triggerObject, const xAOD::Vertex &vertex, const Amg::Vector3D &productionVertex, const std::vector< double > &trkMass={PDG::mKaon, PDG::mKaon}) const
Fill the trigger object that may be stored for debugging or matching.
Gaudi::Property< std::pair< double, double > > m_massRange
ToolHandle< GenericMonitoringTool > m_monTool
Gaudi::Property< size_t > m_fitAttemptsBreakThreshold
std::unique_ptr< xAOD::Vertex > fit(const EventContext &context, const std::vector< ElementLink< xAOD::TrackParticleContainer > > &trackParticleLinks, const std::vector< double > &trkMass={PDG::mKaon, PDG::mKaon}) const
Perform a vertex fit on selected tracks.
Gaudi::Property< size_t > m_fitAttemptsWarningThreshold
std::vector< ElementLink< xAOD::TrackParticleContainer > > tracks
std::vector< Muon > muons
GenVecFourMom_t genvecP4() const
The full 4-momentum of the particle : GenVector form.
float charge() const
Returns the charge.
void setMass(float)
Set the mass of the object.
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:

◆ fit()

std::unique_ptr< xAOD::Vertex > TrigBhhComboHypo::fit ( const EventContext & context,
const std::vector< ElementLink< xAOD::TrackParticleContainer > > & trackParticleLinks,
const std::vector< double > & trkMass = {PDG::mKaonPDG::mKaon} ) const
private

Perform a vertex fit on selected tracks.

Parameters
contextthe event context used to make the vertex threadsafe
trackParticleLinksthe trackParticles to fit
trkMasstrack mass hypothesis for mass calculations
Returns
The fitted vertex - null if fit fails or is very low quality

Definition at line 365 of file TrigBhhComboHypo.cxx.

368 {
369
370 ATH_MSG_DEBUG( "Perform vertex fit" );
371
372 if (trackParticleLinks.size() != 2) {
373 ATH_MSG_WARNING( "Exactly two tracks should be given to the vertex fitter" );
374 return std::unique_ptr<xAOD::Vertex>(nullptr);
375 }
376
377 std::vector<const xAOD::TrackParticle*> tracklist(trackParticleLinks.size(), nullptr);
378 std::transform(trackParticleLinks.begin(), trackParticleLinks.end(), tracklist.begin(),
379 [](const ElementLink<xAOD::TrackParticleContainer>& link){ return *link; });
380
381 Amg::Vector3D startingPoint = Amg::Vector3D::Zero(3);
382 int flag = 0;
383 int errorcode = 0;
384 const Trk::Perigee& perigee1 = tracklist[0]->perigeeParameters();
385 const Trk::Perigee& perigee2 = tracklist[1]->perigeeParameters();
386 startingPoint = m_vertexPointEstimator->getCirclesIntersectionPoint(&perigee1, &perigee2, flag, errorcode);
387 if (errorcode != 0) startingPoint = Amg::Vector3D::Zero(3);
388 ATH_MSG_DEBUG( "Starting point: (" << startingPoint(0) << ", " << startingPoint(1) << ", " << startingPoint(2) << ")" );
389
390 auto fitterState = m_vertexFitter->makeState(context);
391 m_vertexFitter->setMassInputParticles(trkMass, *fitterState);
392
393 std::unique_ptr<xAOD::Vertex> vertex(m_vertexFitter->fit(tracklist, startingPoint, *fitterState));
394 if (!vertex) {
395 ATH_MSG_DEBUG( "Vertex fit fails" );
396 return vertex;
397 }
398 if (vertex->chiSquared() > m_chi2) {
399 ATH_MSG_DEBUG( "Fit is successful, but vertex chi2 is too high, we are not going to save it (chi2 = " << vertex->chiSquared() << ")" );
400 vertex.reset();
401 return vertex;
402 }
403 ATH_MSG_DEBUG( "Fit is successful" );
404
405 // update trackParticleLinks()
406 vertex->clearTracks();
407 vertex->setTrackParticleLinks(trackParticleLinks);
408
409 return vertex;
410}
ToolHandle< InDet::VertexPointEstimator > m_vertexPointEstimator
Gaudi::Property< double > m_chi2
ToolHandle< Trk::TrkVKalVrtFitter > m_vertexFitter
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
bool flag
Definition master.py:29

◆ 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 TrigBhhComboHypo::initialize ( )
overridevirtual

Reimplemented from ComboHypo.

Definition at line 43 of file TrigBhhComboHypo.cxx.

43 {
44 ATH_MSG_DEBUG( "TrigBhhComboHypo::initialize()" );
45
47
50 ATH_CHECK( m_trigBphysContainerKey.initialize() );
51 ATH_CHECK( m_beamSpotKey.initialize() );
52
53 ATH_CHECK( m_vertexFitter.retrieve() );
55
56 // allowed IDs to filter out incoming decisions at L2 level
57 for (const auto& item : triggerMultiplicityMap()) {
58 const HLT::Identifier id = HLT::Identifier(item.first);
59 m_allowedIDs.insert(id.numeric());
60 if (item.second.size() > 1) {
61 for (size_t i = 0; i < item.second.size(); i++) {
62 m_allowedIDs.insert(TrigCompositeUtils::createLegName(id, i).numeric());
63 }
64 }
65 }
66 if (msgLvl(MSG::DEBUG)) {
67 ATH_MSG_DEBUG( "Allowed decisions:" );
68 for (const DecisionID& id : m_allowedIDs) {
69 ATH_MSG_DEBUG( " +++ " << HLT::Identifier(id) );
70 }
71 }
72
73 if (!m_monTool.empty()) {
74 ATH_CHECK( m_monTool.retrieve() );
75 ATH_MSG_DEBUG( "GenericMonitoringTool name:" << m_monTool );
76 }
77 else {
78 ATH_MSG_DEBUG( "No GenericMonitoringTool configured: no monitoring histograms will be available" );
79 }
80
81 return StatusCode::SUCCESS;
82}
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::TrackParticleContainer > m_trackParticleContainerKey
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() [1/2]

bool TrigBhhComboHypo::isIdenticalTracks ( const xAOD::Muon * lhs,
const xAOD::Muon * rhs ) const
private

◆ isIdenticalTracks() [2/2]

bool TrigBhhComboHypo::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 and to resolve ambiguity for muons from different views.

Definition at line 461 of file TrigBhhComboHypo.cxx.

461 {
462
463 if (lhs->charge() * rhs->charge() < 0.) return false;
464 return (ROOT::Math::VectorUtil::DeltaR(lhs->genvecP4(), rhs->genvecP4()) < m_deltaR);
465}
Gaudi::Property< double > m_deltaR

◆ legToInputCollectionMap()

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

Definition at line 44 of file ComboHypo.h.

44{ return m_legToInputCollectionMap.value(); }

◆ Lxy()

double TrigBhhComboHypo::Lxy ( const Amg::Vector3D & productionVertex,
const Amg::Vector3D & decayVertex,
const std::vector< xAOD::TrackParticle::GenVecFourMom_t > & 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 474 of file TrigBhhComboHypo.cxx.

474 {
475
476 XYVector R(decayVertex.x() - productionVertex.x(), decayVertex.y() - productionVertex.y());
477 XYVector pT;
478 for (const auto& p : momenta) {
479 pT += XYVector(p.x(), p.y());
480 }
481 return R.Dot(pT.unit());
482}
double R(const INavigable4Momentum *p1, const double v_eta, const double v_phi)

◆ mergeMuonsFromDecisions()

StatusCode TrigBhhComboHypo::mergeMuonsFromDecisions ( TrigBhhState & state) const
private

Go through state.previousDecisions(), fetch xAOD::Muons objects attached to decisions and save links to them in state.muons().

Definition at line 114 of file TrigBhhComboHypo.cxx.

114 {
115
116 auto& muons = state.muons;
117 muons.clear();
118
119 // all muons from views are already connected with previous decisions by TrigMuonEFHypoAlg
120 for (const Decision* decision : state.previousDecisions()) {
121 if (!TrigCompositeUtils::isAnyIDPassing(decision, m_allowedIDs)) continue;
122
124 auto muonEL = decision->objectLink<xAOD::MuonContainer>(TrigCompositeUtils::featureString());
125 const xAOD::Muon* muon = *muonEL;
126 if (!muon->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle)) continue;
127
128 auto decisionEL = TrigCompositeUtils::decisionToElementLink(decision, state.context());
129 auto itr = std::find_if(muons.begin(), muons.end(), [this, muon](const auto& x){ return isIdenticalTracks(muon, *x.link); });
130 if (itr == muons.end()) {
131 muons.push_back({muonEL, std::vector<ElementLink<DecisionContainer>>(1, decisionEL), DecisionIDContainer()});
132 }
133 else {
134 (*itr).decisionLinks.push_back(decisionEL);
135 }
136 }
137
138 // muon->pt() is equal to muon->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle)->pt()
139 // and the later is used by TrigMuonEFHypoTool for classification of muEFCB candidates
140 std::sort(muons.begin(), muons.end(), [](const auto& lhs, const auto& rhs){ return ((*lhs.link)->pt() > (*rhs.link)->pt()); });
141
142 // for each muon we extract DecisionIDs stored in the associated Decision objects and copy them at muon.decisionIDs
143 for (auto& item : muons) {
144 for (const ElementLink<xAOD::TrigCompositeContainer>& decisionEL : item.decisionLinks) {
145 TrigCompositeUtils::decisionIDs(*decisionEL, item.decisionIDs);
146 }
147 }
148
149 if (msgLvl(MSG::DEBUG)) {
150 ATH_MSG_DEBUG( "Dump found muons before vertex fit: " << muons.size() << " candidates" );
151 for (const auto& item : muons) {
152 const xAOD::Muon* muon = *item.link;
153 const xAOD::TrackParticle* track = *muon->inDetTrackParticleLink();
154 ATH_MSG_DEBUG( " -- muon InDetTrackParticle pt/eta/phi/q: " << track->pt() << " / " << track->eta() << " / " << track->phi() << " / " << track->charge() );
155 ATH_MSG_DEBUG( " muon CombinedTrackParticle pt: " << muon->pt() );
156 ATH_MSG_DEBUG( " allowed decisions:" );
157 for (const DecisionID& id : item.decisionIDs) {
158 ATH_MSG_DEBUG( " +++ " << HLT::Identifier(id) );
159 }
160 }
161 }
162
163 return StatusCode::SUCCESS;
164}
#define x
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
Muon_v1 Muon
Reference the current persistent version:
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".

◆ mergeTracksFromViews()

StatusCode TrigBhhComboHypo::mergeTracksFromViews ( TrigBhhState & state) const
private

Go through state.previousDecisions() and fetch xAOD::TrackParticle objects associated with the nearest SG::View.

Enable overlap removal to get collection of unique objects at state.tracks(). Tracks associated with state.muons() are also removed from track collection.

Definition at line 167 of file TrigBhhComboHypo.cxx.

167 {
168
169 const auto& muons = state.muons;
170 auto& tracks = state.tracks;
171 tracks.clear();
172
173 size_t viewCounter = 0;
174 for (const Decision* decision : state.previousDecisions()) {
175 if (!TrigCompositeUtils::isAnyIDPassing(decision, m_allowedIDs)) continue;
176
178 ATH_CHECK( viewLinkInfo.isValid() );
179 auto view = *viewLinkInfo.link;
180
182 ATH_CHECK( roiLinkInfo.isValid() );
183 const auto roi = *roiLinkInfo.link;
184
185 auto tracksHandle = ViewHelper::makeHandle(view, m_trackParticleContainerKey, state.context());
186 ATH_CHECK( tracksHandle.isValid() );
187 ATH_MSG_DEBUG( "tracks handle " << m_trackParticleContainerKey << " size: " << tracksHandle->size() );
188
189 std::vector<ElementLink<xAOD::TrackParticleContainer>> tracksFromView;
190 tracksFromView.reserve(tracksHandle->size());
191 for (size_t idx = 0; idx < tracksHandle->size(); ++idx) {
192 tracksFromView.emplace_back(ViewHelper::makeLink<xAOD::TrackParticleContainer>(view, tracksHandle, idx));
193 }
194
195 for (const auto& trackEL : tracksFromView) {
196 const xAOD::TrackParticle* track = *trackEL;
197 if (track->definingParametersCovMatrixVec().empty()) continue;
198
199 if (viewCounter == 0 ||
200 std::find_if(tracks.begin(), tracks.end(),
201 [this, track](const auto& x){ return isIdenticalTracks(track, *x); }) == tracks.end()) {
202 tracks.emplace_back(trackEL);
203 }
204 }
205 viewCounter++;
206 if (roi->composite()) {
207 break;
208 }
209 }
210
211 if (msgLvl(MSG::DEBUG)) {
212 std::sort(tracks.begin(), tracks.end(), [](const auto& lhs, const auto& rhs){ return ((*lhs)->pt() > (*rhs)->pt()); });
213 ATH_MSG_DEBUG( "Found " << tracks.size() << " tracks" );
214 for (const auto& trackEL : tracks) {
215 const xAOD::TrackParticle* track = *trackEL;
216 ATH_MSG_DEBUG( " -- track pt/eta/phi/q: " << track->pt() << " / " << track->eta() << " / " << track->phi() << " / " << track->charge() );
217 }
218 }
219
220 if (tracks.size() < 2) {
221 tracks.clear();
222 return StatusCode::SUCCESS;
223 }
224
225 // remove muon duplicates
226 if (m_applyMuonRemoval) {
227 for (size_t i = 0; i < muons.size(); ++i) {
228 const xAOD::Muon* muon = *muons[i].link;
229 const xAOD::TrackParticle* track = *muon->inDetTrackParticleLink();
230 std::sort(tracks.begin(), tracks.end(), [p_mu=track->genvecP4()](const auto& lhs, const auto& rhs){ return ROOT::Math::VectorUtil::DeltaR(p_mu, (*lhs)->genvecP4()) > ROOT::Math::VectorUtil::DeltaR(p_mu, (*rhs)->genvecP4()); });
231 if (isIdenticalTracks(track, *tracks.back())) tracks.pop_back();
232 }
233 std::sort(tracks.begin(), tracks.end(), [](const auto& lhs, const auto& rhs){ return ((*lhs)->pt() > (*rhs)->pt()); });
234
235 if (msgLvl(MSG::DEBUG)) {
236 ATH_MSG_DEBUG( "Found " << tracks.size() << " tracks after muon removal" );
237 for (const auto& trackEL : tracks) {
238 const xAOD::TrackParticle* track = *trackEL;
239 ATH_MSG_DEBUG( " -- track pt/eta/phi/q: " << track->pt() << " / " << track->eta() << " / " << track->phi() << " / " << track->charge() );
240 }
241 }
242 }
243
244 // apply pT threshold cut
245 std::sort(tracks.begin(), tracks.end(), [](const auto& lhs, const auto& rhs){ return ((*lhs)->pt() > (*rhs)->pt()); });
246 tracks.erase(std::upper_bound(tracks.begin(), tracks.end(), m_trkPt, [](double trkPt, const auto& trackEL){ return trkPt > (*trackEL)->pt(); }), tracks.end());
247
248 if (msgLvl(MSG::DEBUG)) {
249 ATH_MSG_DEBUG( "Found " << tracks.size() << " tracks after pT threshold cut" );
250 for (const auto& trackEL : tracks) {
251 const xAOD::TrackParticle* track = *trackEL;
252 ATH_MSG_DEBUG( " -- track pt/eta/phi/q: " << track->pt() << " / " << track->eta() << " / " << track->phi() << " / " << track->charge() );
253 }
254 }
255 return StatusCode::SUCCESS;
256}
Gaudi::Property< double > m_trkPt
bool isIdenticalTracks(const xAOD::TrackParticle *lhs, const xAOD::TrackParticle *rhs) const
Returns false for the tracks with opposite charges.
Gaudi::Property< bool > m_applyMuonRemoval
const std::string & viewString()
const std::string & roiString()
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

◆ 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 TrigBhhComboHypo::m_allowedIDs
private

Definition at line 179 of file TrigBhhComboHypo.h.

◆ m_applyMuonRemoval

Gaudi::Property<bool> TrigBhhComboHypo::m_applyMuonRemoval
private
Initial value:
{this, "ApplyMuonRemoval", false,
"if True, remove tracks accosiated with muons from m_trackParticleContainer"}

Definition at line 156 of file TrigBhhComboHypo.h.

156 {this, "ApplyMuonRemoval", false,
157 "if True, remove tracks accosiated with muons from m_trackParticleContainer"};

◆ m_beamSpotKey

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

Definition at line 153 of file TrigBhhComboHypo.h.

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

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

Gaudi::Property<double> TrigBhhComboHypo::m_chi2
private
Initial value:
{this,
"Bhh_chi2", 20., "maximum chi2 of the fitted B0 vertex"}

Definition at line 164 of file TrigBhhComboHypo.h.

164 {this,
165 "Bhh_chi2", 20., "maximum chi2 of the fitted B0 vertex"};

◆ m_deltaR

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

Definition at line 158 of file TrigBhhComboHypo.h.

158 {this,
159 "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> TrigBhhComboHypo::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 168 of file TrigBhhComboHypo.h.

168 {this,
169 "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> TrigBhhComboHypo::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 166 of file TrigBhhComboHypo.h.

166 {this,
167 "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_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_massRange

Gaudi::Property<std::pair<double, double> > TrigBhhComboHypo::m_massRange
private
Initial value:
{this,
"Bhh_massRange", {4500., 6500.}, "B0/B_s0 mass range"}

Definition at line 162 of file TrigBhhComboHypo.h.

162 {this,
163 "Bhh_massRange", {4500., 6500.}, "B0/B_s0 mass range"};

◆ m_monTool

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

Definition at line 176 of file TrigBhhComboHypo.h.

176 {this,
177 "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_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_trackParticleContainerKey

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

Definition at line 148 of file TrigBhhComboHypo.h.

148 {this,
149 "TrackCollectionKey", "InDetTrackParticles", "input TrackParticle container name"};

◆ m_trigBphysContainerKey

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

Definition at line 150 of file TrigBhhComboHypo.h.

150 {this,
151 "TrigBphysCollectionKey", "TrigBphysContainer", "output TrigBphysContainer name"};

◆ m_trkPt

Gaudi::Property<double> TrigBhhComboHypo::m_trkPt
private
Initial value:
{this,
"Bhh_trackPtThreshold", 2000., "minimum track transverse momenta"}

Definition at line 160 of file TrigBhhComboHypo.h.

160 {this,
161 "Bhh_trackPtThreshold", 2000., "minimum track transverse momenta"};

◆ m_varHandleArraysDeclared

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

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vertexFitter

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

Definition at line 174 of file TrigBhhComboHypo.h.

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

◆ m_vertexPointEstimator

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

Definition at line 172 of file TrigBhhComboHypo.h.

172 {this,
173 "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.


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