|
ATLAS Offline Software
|
#include <TrigMultiTrkComboHypo.h>
|
| TrigMultiTrkComboHypo (const std::string &name, ISvcLocator *pSvcLocator) |
|
| TrigMultiTrkComboHypo ()=delete |
|
virtual StatusCode | initialize () override |
|
virtual StatusCode | execute (const EventContext &context) const override |
|
template<typename T > |
StatusCode | mergeLeptonsFromDecisions (TrigMultiTrkState< T > &state) const |
|
template<typename T > |
StatusCode | findMultiLeptonCandidates (TrigMultiTrkState< T > &state) const |
|
virtual StatusCode | sysInitialize () override |
| Override sysInitialize. More...
|
|
virtual bool | isClonable () const override |
| Specify if the algorithm is clonable. More...
|
|
virtual unsigned int | cardinality () const override |
| Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant. More...
|
|
virtual StatusCode | sysExecute (const EventContext &ctx) override |
| Execute an algorithm. More...
|
|
virtual const DataObjIDColl & | extraOutputDeps () const override |
| Return the list of extra output dependencies. More...
|
|
virtual bool | filterPassed (const EventContext &ctx) const |
|
virtual void | setFilterPassed (bool state, const EventContext &ctx) const |
|
ServiceHandle< StoreGateSvc > & | evtStore () |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | evtStore () const |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | detStore () const |
| The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
|
StatusCode | mergeTracksFromViews (TrigMultiTrkStateBase &) const |
| Go through state.previousDecisions() and fetch xAOD::TrackParticle objects associated with the nearest SG::View. More...
|
|
template<typename CONTAINER > |
StatusCode | mergeTracksFromDecisions (TrigMultiTrkStateBase &) const |
| Go through state.previousDecisions(), fetch xAOD::Muons/xAODElectron objects attached to decisions and save links to the their xAOD::TrackParticle objects in state.tracks(). More...
|
|
template<typename CONTAINER > |
StatusCode | mergeLeptonsFromDecisions (TrigMultiTrkState< CONTAINER > &) const |
| Go through state.previousDecisions(), fetch xAOD::Muons/xAODElectron objects attached to decisions and save links to them in state.leptons(). More...
|
|
template<typename CONTAINER > |
StatusCode | findMultiLeptonCandidates (TrigMultiTrkState< CONTAINER > &) const |
| Make all possible combinations from state.leptons(), fit tracks to the common vertex, create xAOD::TrigBphys objects and put them into state.trigBphysCollection() More...
|
|
StatusCode | filterTrackCombinations (TrigMultiTrkStateBase &) const |
| Make all possible combinations from state.tracks(), fit tracks to the common vertex and set state.isEventAccepted to true if at least one good combination is found; no xAOD::TrigBphys objects will be created. More...
|
|
StatusCode | processMergedElectrons (TrigMultiTrkState< xAOD::ElectronContainer > &) const |
| Make all possible combinations from electrons originating from the same BPH-0DR3-EM7J15 cluster, only one track should pass e5_lhvloose requirements; initialRoI word will be saved into xAOD::TrigBphys objects. More...
|
|
StatusCode | findMuTrkCandidates (TrigMultiTrkState< xAOD::MuonContainer > &) const |
| Build J/psi candidates from muon from SG::View and tracks from the same SG::View, to be used for Tag-and-Probe PEB chains (similar to HLT_mu6_bJpsimutrk_MuonTrkPEB_L1MU5VF) More...
|
|
StatusCode | copyDecisionObjects (TrigMultiTrkStateBase &) const |
| All appropriate decisions from state.previousDecisions() will be copied to state.decisions() if flag state.isEventAccepted() is set by filterTrackCombinations() method; to be used only in Streamer mode. More...
|
|
StatusCode | copyAdditionalDecisionObjects (TrigMultiTrkStateBase &) const |
| For chains from CombinedSlice (similar to 'HLT_e9_lhvloose_e5_lhvloose_bBeeM6000_mu4_L1BPH-0M9-EM7-EM5_MU6') we have decisionsInput().size() > 1, so that we should copy decisions created by EmptySteps from muon part. More...
|
|
StatusCode | createDecisionObjects (TrigMultiTrkStateBase &) const |
| Create a decision for each xAOD::TrigBphys object from state.trigBphysCollection() and save it to state.decisions(); use hypoTools() to assign correct decisionIDs, not compatible with Streamer mode. More...
|
|
std::unique_ptr< xAOD::Vertex > | fit (const std::vector< ElementLink< xAOD::TrackParticleContainer >> &trackParticleLinks, const std::vector< double > &particleMasses, Trk::IVKalState &fitterState) const |
| Perform a vertex fit on selected tracks. More...
|
|
xAOD::TrigBphys * | makeTrigBPhys (const xAOD::Vertex &vertex, const std::vector< double > &particleMasses, const xAOD::Vertex &beamSpot, const Trk::IVKalState &fitterState) const |
| Construct the trigger object that may be stored for debugging or matching. More...
|
|
bool | isIdenticalTracks (const xAOD::TrackParticle *lhs, const xAOD::TrackParticle *rhs) const |
| Attempts to identify identical tracks by selection on DeltaR. More...
|
|
bool | isIdenticalTracks (const xAOD::Muon *lhs, const xAOD::Muon *rhs) const |
|
bool | isIdenticalTracks (const xAOD::Electron *lhs, const xAOD::Electron *rhs) const |
|
bool | isInMassRange (double mass, size_t idx) const |
|
bool | passedDeltaRcut (const std::vector< xAOD::TrackParticle::GenVecFourMom_t > &momenta) const |
|
StatusCode | copyDecisions (const Combo::LegDecisionsMap &passingLegs, const EventContext &context) const |
| iterates over the inputs and for every object (no filtering) crates output object linked to input moving the decisions that are mentioned in the passing set More...
|
|
StatusCode | extractFeatureAndRoI (const HLT::Identifier &chainLegId, const ElementLink< TrigCompositeUtils::DecisionContainer > &EL, SG::sgkey_t &featureKey, 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. More...
|
|
StatusCode | fillDecisionsMap (Combo::LegDecisionsMap &dmap, const EventContext &context) const |
| iterates over all inputs, associating inputs to legs More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &) |
| specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &) |
| specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
|
|
|
SG::ReadHandleKey< xAOD::TrackParticleContainer > | m_trackParticleContainerKey {this, "TrackCollectionKey", "Tracks", "input TrackParticle container name"} |
|
SG::WriteHandleKey< xAOD::TrigBphysContainer > | m_trigBphysContainerKey {this, "TrigBphysCollectionKey", "TrigBphysContainer", "output TrigBphysContainer name"} |
|
SG::ReadCondHandleKey< InDet::BeamSpotData > | m_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"} |
|
Gaudi::Property< std::vector< unsigned int > > | m_nTrk |
|
Gaudi::Property< std::vector< int > > | m_nTrkCharge |
|
Gaudi::Property< std::vector< std::vector< double > > > | m_trkMass |
|
Gaudi::Property< std::vector< std::vector< double > > > | m_trkPt |
|
Gaudi::Property< std::vector< std::pair< double, double > > > | m_massRange |
|
Gaudi::Property< bool > | m_applyOverlapRemoval |
|
Gaudi::Property< bool > | m_combineInputDecisionCollections |
|
Gaudi::Property< bool > | m_useLeptonMomentum |
|
Gaudi::Property< bool > | m_checkMultiplicity |
|
Gaudi::Property< float > | m_deltaR |
|
Gaudi::Property< float > | m_deltaRMax |
|
Gaudi::Property< float > | m_deltaRMin |
|
Gaudi::Property< float > | m_chi2 |
|
Gaudi::Property< bool > | m_isStreamer |
|
Gaudi::Property< bool > | m_isMuTrkMode |
|
Gaudi::Property< bool > | m_doElectrons |
|
Gaudi::Property< std::string > | m_trigLevel |
|
Gaudi::Property< std::vector< std::string > > | m_mergedElectronChains |
|
Gaudi::Property< double > | m_caloClusterEtThreshold |
|
ToolHandle< InDet::VertexPointEstimator > | m_vertexPointEstimator {this, "VertexPointEstimator", "", "tool to find starting point for the vertex fitter"} |
|
ToolHandle< Trk::TrkVKalVrtFitter > | m_vertexFitter {this, "VertexFitter", "", "VKalVrtFitter tool to fit tracks into the common vertex"} |
|
ToolHandle< Trk::V0Tools > | m_v0Tools {this, "V0Tools", "", "tool to calculate Lxy/LxyError of dimuon candidate wrt beam spot"} |
|
ToolHandle< GenericMonitoringTool > | m_monTool {this, "MonTool", "", "monitoring tool"} |
|
TrigCompositeUtils::DecisionIDContainer | m_allowedIDs |
|
TrigCompositeUtils::DecisionIDContainer | m_resolvedElectronIDs |
|
TrigCompositeUtils::DecisionIDContainer | m_mergedElectronIDs |
|
double | m_trkPtMin = 0.0 |
|
SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > | m_inputs { this, "HypoInputDecisions", {}, "Input Decisions" } |
|
SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainer > | m_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< ComboHypoToolBase > | m_hypoTools {this, "ComboHypoTools", {}, "Tools to perform selection"} |
|
DataObjIDColl | m_extendedExtraObjects |
| Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks. More...
|
|
StoreGateSvc_t | m_evtStore |
| Pointer to StoreGate (event store by default) More...
|
|
StoreGateSvc_t | m_detStore |
| Pointer to StoreGate (detector store by default) More...
|
|
std::vector< SG::VarHandleKeyArray * > | m_vhka |
|
bool | m_varHandleArraysDeclared |
|
Definition at line 138 of file TrigMultiTrkComboHypo.h.
◆ StoreGateSvc_t
◆ TrigMultiTrkComboHypo() [1/2]
TrigMultiTrkComboHypo::TrigMultiTrkComboHypo |
( |
const std::string & |
name, |
|
|
ISvcLocator * |
pSvcLocator |
|
) |
| |
◆ TrigMultiTrkComboHypo() [2/2]
TrigMultiTrkComboHypo::TrigMultiTrkComboHypo |
( |
| ) |
|
|
delete |
◆ cardinality()
unsigned int AthReentrantAlgorithm::cardinality |
( |
| ) |
const |
|
overridevirtualinherited |
Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.
Override this to return 0 for reentrant algorithms.
Override this to return 0 for reentrant algorithms.
Definition at line 55 of file AthReentrantAlgorithm.cxx.
◆ copyAdditionalDecisionObjects()
For chains from CombinedSlice (similar to 'HLT_e9_lhvloose_e5_lhvloose_bBeeM6000_mu4_L1BPH-0M9-EM7-EM5_MU6') we have decisionsInput().size() > 1, so that we should copy decisions created by EmptySteps from muon part.
Definition at line 881 of file TrigMultiTrkComboHypo.cxx.
888 CHECK( previousDecisionsHandle.isValid() );
889 ATH_MSG_DEBUG(
"Running with "<< previousDecisionsHandle->size() <<
" previous decisions" );
891 for (
const Decision* previousDecision : *previousDecisionsHandle) {
906 return StatusCode::SUCCESS;
◆ copyDecisionObjects()
◆ copyDecisions()
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.
88 for (
auto const& element : passingLegs) {
89 passing.insert(element.first);
92 ATH_MSG_DEBUG(
"Copying "<<passing.size()<<
" positive decision IDs to outputs");
94 for (
size_t input_counter = 0; input_counter <
m_inputs.size(); ++input_counter ) {
97 auto outDecisions = outputHandle.
ptr();
99 if ( inputHandle.isValid() ) {
101 for (
const Decision* inputDecision : *inputHandle) {
108 ATH_MSG_DEBUG(
"Searching this element in the map: ("<<thisEL.dataID() <<
" , " << thisEL.index()<<
")");
113 const std::vector<ElementLink<DecisionContainer>>&
Comb=passingLegs.at(
c);
117 ATH_MSG_DEBUG(
" Adding "<< cID <<
" because EL is found in the passingLegs map");
118 finalIds.insert( cID.
numeric() );
121 finalIds.insert( mainChain.
numeric() );
127 ATH_MSG_DEBUG(
"New decision (Container Index:" << input_counter <<
", Element Index:"<< newDec->
index() <<
") has "
136 ATH_MSG_DEBUG(
"Output Handle " <<
m_outputs.at(input_counter).key() <<
" with " << outputHandle->
size() <<
" Decision objects");
140 ATH_MSG_DEBUG(
" Decision object #" <<
d->index() <<
" with " << objDecisions.size()<<
" positive decision IDs");
148 return StatusCode::SUCCESS;
◆ createDecisionObjects()
Create a decision for each xAOD::TrigBphys object from state.trigBphysCollection() and save it to state.decisions(); use hypoTools() to assign correct decisionIDs, not compatible with Streamer mode.
Definition at line 842 of file TrigMultiTrkComboHypo.cxx.
846 ATH_MSG_DEBUG(
"Found xAOD::TrigBphys: mass / chi2 = " << triggerObject->mass() <<
" / " << triggerObject->fitchi2() );
854 std::vector<const DecisionIDContainer*> previousDecisionIDs;
865 decision->setDetail<int32_t>(
"noCombo", 1);
877 return StatusCode::SUCCESS;
◆ decisionsInput()
◆ decisionsOutput()
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleBase
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 245 of file AthCommonDataStore.h.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleKey
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 221 of file AthCommonDataStore.h.
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This is the generic version, for types that do not derive from SG::VarHandleKey
. It just forwards to the base class version of declareProperty
.
Definition at line 333 of file AthCommonDataStore.h.
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This dispatches to either the generic declareProperty
or the one for VarHandle/Key/KeyArray.
Definition at line 352 of file AthCommonDataStore.h.
◆ declareProperty() [6/6]
◆ detStore()
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ execute()
StatusCode TrigMultiTrkComboHypo::execute |
( |
const EventContext & |
context | ) |
const |
|
overridevirtual |
Reimplemented from ComboHypo.
Definition at line 193 of file TrigMultiTrkComboHypo.cxx.
199 CHECK( previousDecisionsHandle.isValid() );
200 ATH_MSG_DEBUG(
"Running with "<< previousDecisionsHandle->size() <<
" previous decisions" );
208 beamSpotData = *beamSpotHandle;
211 std::unique_ptr<TrigMultiTrkState<xAOD::MuonContainer>> muonState;
212 std::unique_ptr<TrigMultiTrkState<xAOD::ElectronContainer>> electronState;
215 electronState = std::make_unique<TrigMultiTrkState<xAOD::ElectronContainer>>(context, *previousDecisionsHandle, *outputDecisionsHandle,
nullptr, beamSpotData);
216 commonState = electronState.get();
219 muonState = std::make_unique<TrigMultiTrkState<xAOD::MuonContainer>>(context, *previousDecisionsHandle, *outputDecisionsHandle,
nullptr, beamSpotData);
220 commonState = muonState.get();
228 ATH_CHECK( mergeTracksFromDecisions<xAOD::L2CombinedMuonContainer>(*commonState) );
231 ATH_CHECK( (
m_doElectrons ? mergeTracksFromDecisions<xAOD::ElectronContainer>(*commonState) : mergeTracksFromDecisions<xAOD::MuonContainer>(*commonState)) );
238 ATH_CHECK( trigBphysHandle.record(std::make_unique<xAOD::TrigBphysContainer>(),
239 std::make_unique<xAOD::TrigBphysAuxContainer>()) );
240 commonState->setTrigBphysCollection(trigBphysHandle.ptr());
257 ATH_MSG_DEBUG(
"TrigMultiTrkHypo::execute() terminates with StatusCode::SUCCESS" );
258 return StatusCode::SUCCESS;
◆ extractFeatureAndRoI()
For a given Decision node from a HypoAlg, extracts type-less identification data on the node's Feature and seeding ROI.
- Parameters
-
[in] | chainLegId | The HLT::Identifer of the chain (leg) we're extracting features for. |
[in] | EL | The 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] | featureKey | Type-less SG Key hash of the collection hosting the Decision node's feature . |
[out] | featureIndex | Index inside the featureKey collection. |
[out] | roiKey | Type-less SG Key hash of the collection hosting the Decision node's initial ROI collection. |
[out] | roiIndex | Index inside the roiKey collection. |
[out] | roiIsFullscan | Flag 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] | objectRequestsNoMultiplicityCheck | Flag 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] | priorFeaturesMap | Data structure collating for a given feature (key) what the prior features were integrated over all previous steps (value set). |
Definition at line 379 of file ComboHypo.cxx.
398 ATH_MSG_ERROR(
"We are only expecting to search from a single navigation node in extractFeatureAndRoI");
399 return StatusCode::FAILURE;
403 std::vector<SG::sgkey_t>
keys;
404 std::vector<uint32_t> clids;
405 std::vector<Decision::index_type> indicies;
406 std::vector<const Decision*> sources;
408 std::set<const Decision*> fullyExploredFrom;
413 const Decision* featureSource =
nullptr;
416 featureKey =
keys.at(0);
417 featureIndex = indicies.at(0);
418 featureSource = sources.at(0);
421 objectRequestsNoMultiplicityCheck = (featureSource and featureSource->
hasDetail<int32_t>(
"noCombo") and featureSource->
getDetail<int32_t>(
"noCombo") == 1);
423 if (foundFeature and priorFeaturesMap.count(featureKey + featureIndex) == 0) {
424 const std::string* key_str =
evtStore()->keyToString(featureKey);
425 ATH_MSG_DEBUG(
"Note: Will use feature hash " << featureKey + featureIndex <<
", for " << (key_str ? *key_str :
"UNKNOWN") <<
" index=" << featureIndex);
428 if (
keys.size() > 1) {
429 for (
size_t i = 1;
i <
keys.size(); ++
i) {
431 if (featureKey + featureIndex ==
keys.at(
i) + indicies.at(
i)) {
434 priorFeaturesMap[featureKey + featureIndex].insert(
keys.at(
i) + indicies.at(
i));
437 priorFeaturesMap.insert( std::pair<
uint32_t, std::set<uint32_t>>(featureKey + featureIndex, std::set<uint32_t>()) );
448 roiIsFullscan = (*(roiEL))->isFullscan();
450 const std::string* roi_str =
evtStore()->keyToString(roiKey);
451 ATH_MSG_DEBUG(
"Note: Located fallback-ROI, if used this will have feature hash =" << roiKey + roiIndex <<
", for " << (roi_str ? *roi_str :
"UNKNOWN") <<
" index=" << roiIndex);
455 if (!foundFeature && !foundROI) {
456 ATH_MSG_WARNING(
"Did not find the feature or initialRoI for " << dEL.dataID() <<
" index " << dEL.index());
459 return StatusCode::SUCCESS;
◆ extraDeps_update_handler()
Add StoreName to extra input/output deps as needed.
use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given
◆ extraOutputDeps()
const DataObjIDColl & AthReentrantAlgorithm::extraOutputDeps |
( |
| ) |
const |
|
overridevirtualinherited |
Return the list of extra output dependencies.
This list is extended to include symlinks implied by inheritance relations.
Definition at line 79 of file AthReentrantAlgorithm.cxx.
86 return Algorithm::extraOutputDeps();
◆ fillDecisionsMap()
iterates over all inputs, associating inputs to legs
Definition at line 463 of file ComboHypo.cxx.
464 for (
size_t inputContainerIndex = 0; inputContainerIndex <
m_inputs.size(); ++inputContainerIndex ) {
466 if ( !inputHandle.isValid() ) {
467 ATH_MSG_ERROR(
"No input ReadHandle from " << inputHandle.key() );
468 return StatusCode::FAILURE;
470 ATH_MSG_DEBUG(
"-- Found ReadHandle from " << inputHandle.key() <<
" with "<< inputHandle->size() <<
" elements:" );
471 for (
const Decision* decision : *inputHandle ) {
472 ATH_MSG_DEBUG(
"-- -- Input Decision #"<< decision->index() <<
" with "<<
decisionIDs( decision ).
size() <<
" active IDs. Populating the multiplicity map:" );
475 int32_t chainLeg = 0;
484 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.");
489 const std::vector<int>& legToInputCollectionIndex =
it->second;
490 const size_t requiredInputContainerIndex =
static_cast<size_t>(legToInputCollectionIndex.at(chainLeg));
491 if (requiredInputContainerIndex != inputContainerIndex) {
492 ATH_MSG_VERBOSE(
"-- -- -- Ignoring the DecisionID " <<
id <<
" on leg " << chainLeg <<
" as we are only permitted to accept passing objects on leg #" << chainLeg <<
" of " << chainID.
name()
493 <<
" which come from input collection index " << requiredInputContainerIndex <<
" (which is " <<
m_inputs.at(requiredInputContainerIndex).key() <<
")"
494 <<
". Not the current index " << inputContainerIndex <<
" (which is " <<
m_inputs.at(inputContainerIndex).key() <<
")");
507 for (
const auto&
entry: dmap){
509 const std::vector<ElementLink<DecisionContainer>>&
decisions =
entry.second;
512 ATH_MSG_DEBUG(
" Decision: (ContainerKey:"<<
d.dataID()<<
", DecisionElementIndex:"<<
d.index()<<
")");
519 return StatusCode::SUCCESS;
◆ filterPassed()
virtual bool AthReentrantAlgorithm::filterPassed |
( |
const EventContext & |
ctx | ) |
const |
|
inlinevirtualinherited |
◆ filterTrackCombinations()
Make all possible combinations from state.tracks(), fit tracks to the common vertex and set state.isEventAccepted to true if at least one good combination is found; no xAOD::TrigBphys objects will be created.
Definition at line 475 of file TrigMultiTrkComboHypo.cxx.
477 const auto& tracks = state.
tracks();
487 mon_nAcceptedTrk, mon_nVertexFitterCalls, mon_isEventAccepted,
490 for (
size_t iTrk = 0; iTrk <
m_nTrk.size(); ++iTrk) {
492 size_t nTrk =
m_nTrk[iTrk];
494 if (tracks.size() < nTrk) {
495 ATH_MSG_DEBUG(
"Could not build a subset of " << nTrk <<
" tracks from collection which contains only " << tracks.size() <<
" objects" );
498 ATH_MSG_DEBUG(
"Consider combinations of " << nTrk <<
" tracks from collection which contains " << tracks.size() <<
" objects until find a good one" );
500 std::vector<ElementLink<xAOD::TrackParticleContainer>> tracklist(nTrk);
501 std::vector<xAOD::TrackParticle::GenVecFourMom_t>
p(nTrk);
505 std::vector<char>
idx(tracks.size(), 0);
509 bool isValidCombination =
true;
512 for (
size_t i = 0;
i <
idx.size(); ++
i) {
513 if (!
idx[
i])
continue;
514 const auto& trackEL = tracks[
i];
515 tracklist[j] = trackEL;
516 const auto track = *trackEL;
519 totalCharge +=
static_cast<int>(
track->charge());
521 isValidCombination =
false;
529 ATH_MSG_DEBUG(
"Dump found tracks before vertex fit: pT / eta / phi / charge" );
530 for (
size_t i = 0;
i < tracklist.size(); ++
i) {
531 const auto track = *tracklist[
i];
543 ++mon_nVertexFitterCalls;
546 ATH_MSG_DEBUG(
"Filter found a subset of tracks which passed the rough selection: stop looking for other combinations" );
550 }
while (std::prev_permutation(
idx.begin(),
idx.end()));
554 ATH_MSG_DEBUG(
"Filter could not find a good subset of tracks" );
559 return StatusCode::SUCCESS;
◆ findMultiLeptonCandidates() [1/2]
template<typename CONTAINER >
StatusCode TrigMultiTrkComboHypo::findMultiLeptonCandidates |
( |
TrigMultiTrkState< CONTAINER > & |
| ) |
const |
|
private |
Make all possible combinations from state.leptons(), fit tracks to the common vertex, create xAOD::TrigBphys objects and put them into state.trigBphysCollection()
combination is a selection of items from a collection, such that the order of items does not matter leptons/tracks have already been sorted over pT, the algorithm will keep this order in created subsets of tracks, i.e. for nTrk = 2 combinations are [0, 1], [0, 2], ..., [1, 2], [1, 3], ... for nTrk = 3 combinations are [0, 1, 2], [0, 1, 3], ..., [0, 2, 3], [0, 2, 4], ..., [1, 2, 3], [1, 2, 4], ...
◆ findMultiLeptonCandidates() [2/2]
template<typename T >
StatusCode TrigMultiTrkComboHypo::findMultiLeptonCandidates |
( |
TrigMultiTrkState< T > & |
state | ) |
const |
Definition at line 564 of file TrigMultiTrkComboHypo.cxx.
567 const auto& leptons = state.
leptons();
575 std::vector<float> trkMassBeforeFit;
576 std::vector<float> bphysMass;
577 std::vector<float> d0track1, d0track2;
578 std::vector<float> pttrack1, pttrack2;
579 std::vector<float> etatrack1, etatrack2;
580 std::vector<int> bphysCharge;
597 mon_nAcceptedTrk, mon_nCombination, mon_nCombinationBeforeFit, mon_nBPhysObject,
598 mon_trkMassBeforeFit, mon_bphysChi2, mon_bphysLxy, mon_bphysFitMass, mon_bphysMass, mon_bphysCharge, mon_d0track1, mon_d0track2,
599 mon_timer, mon_pttrack1, mon_pttrack2, mon_etatrack1, mon_etatrack2);
601 for (
size_t iTrk = 0; iTrk <
m_nTrk.size(); ++iTrk) {
602 size_t nTrk =
m_nTrk[iTrk];
604 if (leptons.size() < nTrk) {
605 ATH_MSG_DEBUG(
"Could not build a subset of " << nTrk <<
" legs from collection which contains only " << leptons.size() <<
" objects" );
608 ATH_MSG_DEBUG(
"Consider all combinations of " << nTrk <<
" legs from collection which contains " << leptons.size() <<
" objects" );
610 std::vector<size_t> leptonIndices(nTrk);
611 std::vector<ElementLink<xAOD::TrackParticleContainer>> tracklist(nTrk);
612 std::vector<xAOD::TrackParticle::GenVecFourMom_t>
p(nTrk);
614 std::vector<char> combination(leptons.size(), 0);
615 std::fill(combination.begin(), combination.begin() + nTrk, 1);
618 bool isValidCombination =
true;
621 for (
size_t i = 0;
i < combination.size(); ++
i) {
622 if (!combination[
i])
continue;
623 leptonIndices[j] =
i;
624 auto leg = *leptons[
i].link;
625 charge +=
static_cast<int>(lround(
leg->charge()));
628 trackEL =
leg->inDetTrackParticleLink();
631 trackEL =
leg->trackParticleLink();
633 tracklist[j] = trackEL;
635 p[j] =
leg->genvecP4();
639 p[j] = (*trackEL)->genvecP4();
643 isValidCombination =
false;
651 ATH_MSG_DEBUG(
"Dump found leptons before vertex fit: pT / eta / phi / charge" );
652 for (
size_t i = 0;
i < tracklist.size(); ++
i) {
653 const auto track = *tracklist[
i];
662 trkMassBeforeFit.push_back(
mass * 0.001);
665 mon_nCombinationBeforeFit++;
674 bphysMass.push_back(
mass * 0.001);
675 bphysCharge.push_back(
charge);
676 d0track1.push_back((*tracklist[0])->
d0());
677 d0track2.push_back((*tracklist[1])->
d0());
678 pttrack1.push_back((*tracklist[0])->
pt() * 0.001);
679 pttrack2.push_back((*tracklist[1])->
pt() * 0.001);
680 etatrack1.push_back((*tracklist[0])->
eta());
681 etatrack2.push_back((*tracklist[1])->
eta());
683 }
while (std::prev_permutation(combination.begin(), combination.end()));
685 return StatusCode::SUCCESS;
◆ findMuTrkCandidates()
Build J/psi candidates from muon from SG::View and tracks from the same SG::View, to be used for Tag-and-Probe PEB chains (similar to HLT_mu6_bJpsimutrk_MuonTrkPEB_L1MU5VF)
Definition at line 749 of file TrigMultiTrkComboHypo.cxx.
751 ATH_MSG_DEBUG(
"Try to find muon + track combinations from the same SG::View" );
756 const std::vector<double> particleMasses(2,
PDG::mMuon);
764 const auto muon = *muonEL;
765 if (!
muon->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle))
continue;
766 if (!
muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle))
continue;
767 const auto muonInDetTrack =
muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
768 auto muonMomentum = muonInDetTrack->genvecP4();
774 muons.push_back({muonEL, std::vector<ElementLink<DecisionContainer>>(1, decisionEL),
decisionIDs});
776 ATH_MSG_DEBUG(
"Found muon (CombinedTrackParticle): " <<
muon->pt() <<
" / " <<
muon->eta() <<
" / " <<
muon->phi() <<
" / " <<
muon->charge() );
780 auto view = *viewLinkInfo.link;
787 std::vector<ElementLink<xAOD::TrackParticleContainer>> tracklist(2);
788 tracklist[0] =
muon->inDetTrackParticleLink();
789 for (
size_t idx = 0;
idx < tracksHandle->size(); ++
idx) {
796 if (
m_nTrkCharge[0] >= 0 && muonInDetTrack->charge() *
track->charge() > 0.)
continue;
798 tracklist[1] = ViewHelper::makeLink<xAOD::TrackParticleContainer>(
view, tracksHandle,
idx);
800 ATH_MSG_DEBUG(
"Dump found muon+track pair before vertex fit: pT / eta / phi / charge" <<
endmsg <<
801 " muon: " << muonMomentum.Pt() <<
" / " << muonMomentum.Eta() <<
" / " << muonMomentum.Phi() <<
" / " <<
muon->charge() <<
endmsg <<
805 auto vertex =
fit(tracklist, particleMasses, *fitterState);
813 return StatusCode::SUCCESS;
◆ fit()
Perform a vertex fit on selected tracks.
- Parameters
-
trackParticleLinks | the trackParticles to fit |
trkMass | Track mass hypothesis for mass calculations |
fitterState | The temporary state object |
- Returns
- The fitted vertex - null if fit fails or is very low quality
Definition at line 910 of file TrigMultiTrkComboHypo.cxx.
916 std::vector<const xAOD::TrackParticle*> tracklist(
trackParticleLinks.size(),
nullptr);
920 const Trk::Perigee& perigee1 = tracklist[0]->perigeeParameters();
921 const Trk::Perigee& perigee2 = tracklist[1]->perigeeParameters();
926 ATH_MSG_DEBUG(
"Starting point: (" << startingPoint(0) <<
", " << startingPoint(1) <<
", " << startingPoint(2) <<
")" );
928 m_vertexFitter->setMassInputParticles(particleMasses, fitterState);
929 std::unique_ptr<xAOD::Vertex>
vertex(
m_vertexFitter->fit(tracklist, startingPoint, fitterState));
935 ATH_MSG_DEBUG(
"Fit is successful, but vertex chi2 is too high, we are not going to save it (chi2 = " <<
vertex->chiSquared() <<
" > " <<
m_chi2.value() <<
")" );
◆ hypoTools() [1/2]
◆ hypoTools() [2/2]
◆ initialize()
StatusCode TrigMultiTrkComboHypo::initialize |
( |
| ) |
|
|
overridevirtual |
Reimplemented from ComboHypo.
Definition at line 54 of file TrigMultiTrkComboHypo.cxx.
63 ATH_MSG_INFO(
"totalCharge value is not specified, no charge selection for track combinations will be used" );
68 ATH_MSG_INFO(
"trackMasses value is not specified, muon/electron mass will be used" );
74 ATH_MSG_INFO(
"trackPtThresholds value is not specified" );
76 m_trkPt.value().emplace_back(std::vector<double>(
n, -100.));
87 for (
size_t i = 0;
i <
m_nTrk.size(); ++
i) {
99 for (
size_t i = 0;
i <
m_nTrk.size(); ++
i) {
101 for (
size_t j = 0; j <
m_nTrk[
i]; ++j) {
113 ATH_MSG_DEBUG(
"Configured to run in a streamer mode: no trigger objects will be created" );
116 ATH_MSG_ERROR(
"Could not create trigger objects from tracks or L2 CB muons, use the streamer mode for L2 step" );
117 return StatusCode::FAILURE;
131 return StatusCode::FAILURE;
145 if (
item.second.size() > 1) {
146 for (
size_t i = 0;
i <
item.second.size();
i++) {
160 bool isMergedElectronChain =
false;
163 isMergedElectronChain =
true;
186 ATH_MSG_DEBUG(
"No GenericMonitoringTool configured: no monitoring histograms will be available" );
189 return StatusCode::SUCCESS;
◆ inputHandles()
Return this algorithm's input handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ isClonable()
bool AthReentrantAlgorithm::isClonable |
( |
| ) |
const |
|
overridevirtualinherited |
Specify if the algorithm is clonable.
Reentrant algorithms are clonable.
Reimplemented in Simulation::BeamEffectsAlg, InDet::SiTrackerSpacePointFinder, InDet::SCT_Clusterization, InDet::SiSPSeededTrackFinder, SCTRawDataProvider, InDet::GNNSeedingTrackMaker, SCT_PrepDataToxAOD, RoIBResultToxAOD, InDet::SiSPGNNTrackMaker, SCT_CablingCondAlgFromCoraCool, SCT_ReadCalibDataTestAlg, SCT_CablingCondAlgFromText, SCT_ReadCalibChipDataTestAlg, SCT_TestCablingAlg, SCT_ConfigurationConditionsTestAlg, ITkPixelCablingAlg, ITkStripCablingAlg, SCTEventFlagWriter, SCT_ConditionsSummaryTestAlg, SCT_ModuleVetoTestAlg, SCT_MonitorConditionsTestAlg, SCT_LinkMaskingTestAlg, SCT_MajorityConditionsTestAlg, SCT_RODVetoTestAlg, SCT_SensorsTestAlg, SCT_TdaqEnabledTestAlg, SCT_SiliconConditionsTestAlg, SCTSiLorentzAngleTestAlg, SCT_ByteStreamErrorsTestAlg, SCT_ConditionsParameterTestAlg, SCT_FlaggedConditionTestAlg, SCT_StripVetoTestAlg, SCT_RawDataToxAOD, and SCTSiPropertiesTestAlg.
Definition at line 44 of file AthReentrantAlgorithm.cxx.
◆ isIdenticalTracks() [1/3]
◆ isIdenticalTracks() [2/3]
◆ isIdenticalTracks() [3/3]
Attempts to identify identical tracks by selection on DeltaR.
- Returns
- true if 'identical', false otherwise
Definition at line 998 of file TrigMultiTrkComboHypo.cxx.
◆ isInMassRange()
bool TrigMultiTrkComboHypo::isInMassRange |
( |
double |
mass, |
|
|
size_t |
idx |
|
) |
| const |
|
private |
◆ legToInputCollectionMap()
◆ makeTrigBPhys()
Construct the trigger object that may be stored for debugging or matching.
- Parameters
-
vertex | Fitted Vertex object |
particleMasses | Track mass hypothesis for mass calculations |
beamSpot | The beamspot vertex |
fitterState | Vertexer state object |
- Returns
- Pointer to the TrigBphys object
Definition at line 946 of file TrigMultiTrkComboHypo.cxx.
952 double invariantMass = 0.;
953 double invariantMassError = 0.;
954 if (!
m_vertexFitter->VKalGetMassError(invariantMass, invariantMassError, fitterState).isSuccess()) {
955 ATH_MSG_DEBUG(
"Warning from TrkVKalVrtFitter: can not calculate uncertainties" );
956 invariantMass = -9999.;
960 for (
size_t i = 0;
i <
vertex.nTrackParticles(); ++
i) {
961 auto p =
vertex.trackParticle(
i)->genvecP4();
962 p.SetM(particleMasses[
i]);
967 result->makePrivateStore();
971 result->setFitmass(invariantMass);
977 result->setTrackParticleLinks(
vertex.trackParticleLinks());
982 "TrigBphys objects:\n\t " <<
983 "roiId: " <<
result->roiId() <<
"\n\t " <<
984 "particleType: " <<
result->particleType() <<
"\n\t " <<
985 "level: " <<
result->level() <<
"\n\t " <<
986 "eta: " <<
result->eta() <<
"\n\t " <<
987 "phi: " <<
result->phi() <<
"\n\t " <<
988 "mass: " <<
result->mass() <<
"\n\t " <<
989 "fitmass: " <<
result->fitmass() <<
"\n\t " <<
990 "chi2/NDF: " <<
result->fitchi2() <<
" / " <<
result->fitndof() <<
"\n\t " <<
991 "vertex: (" <<
result->fitx() <<
", " <<
result->fity() <<
", " <<
result->fitz() <<
")\n\t " <<
992 "Lxy/LxyError: " <<
result->lxy() <<
" / " <<
result->lxyError() );
◆ mergeLeptonsFromDecisions() [1/2]
template<typename CONTAINER >
StatusCode TrigMultiTrkComboHypo::mergeLeptonsFromDecisions |
( |
TrigMultiTrkState< CONTAINER > & |
| ) |
const |
|
private |
Go through state.previousDecisions(), fetch xAOD::Muons/xAODElectron objects attached to decisions and save links to them in state.leptons().
◆ mergeLeptonsFromDecisions() [2/2]
template<typename T >
StatusCode TrigMultiTrkComboHypo::mergeLeptonsFromDecisions |
( |
TrigMultiTrkState< T > & |
state | ) |
const |
Definition at line 263 of file TrigMultiTrkComboHypo.cxx.
265 auto& leptons = state.
leptons();
269 std::map<const Decision*, int> decisionToInputCollectionIndexMap;
270 for (
const auto& decision : previousDecisions) decisionToInputCollectionIndexMap.emplace(decision, 0);
274 CHECK( previousDecisionsHandle.isValid() );
276 for (
const Decision* decision : *previousDecisionsHandle) {
277 previousDecisions.push_back(decision);
278 decisionToInputCollectionIndexMap.emplace(decision,
static_cast<int>(
k));
284 for (
const Decision* decision : previousDecisions) {
294 leptonEL = leptonLinkInfo.link;
297 const auto lepton = *leptonEL;
299 if (!lepton->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle))
continue;
300 if (!lepton->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle))
continue;
303 if (!lepton->trackParticle())
continue;
306 ATH_MSG_ERROR(
"mergeLeptonsFromDecisions(): no scenario for the provided CONTAINER is specified" );
307 return StatusCode::FAILURE;
311 auto itr = leptons.end();
313 itr = std::find_if(leptons.begin(), leptons.end(),
314 [
this, lepton = lepton](
const auto&
x){ return this->isIdenticalTracks(lepton, *x.link); });
316 if (itr == leptons.end()) {
317 leptons.push_back({leptonEL, std::vector<ElementLink<DecisionContainer>>(1, decisionEL),
DecisionIDContainer()});
320 (*itr).decisionLinks.push_back(decisionEL);
326 std::sort(leptons.begin(), leptons.end(), [](
const auto& lhs,
const auto& rhs){ return ((*lhs.link)->pt() > (*rhs.link)->pt()); });
330 for (
auto&
item : leptons) {
333 auto decisionIndex = decisionToInputCollectionIndexMap[*decisionEL];
338 if (legToInputCollectionIndexMap.at(
chain).at(legIndex) == decisionIndex)
item.decisionIDs.insert(
id);
348 ATH_MSG_DEBUG(
"Dump found leptons before vertex fit: " << leptons.size() <<
" candidates" );
349 for (
const auto&
item : leptons) {
350 const auto lepton = *
item.link;
353 track = lepton->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
356 track = lepton->trackParticle();
359 ATH_MSG_DEBUG(
" lepton pt (muon: CombinedTrackParticle): " << lepton->pt() <<
" / " << lepton->eta() <<
" / " << lepton->phi() <<
" / " << lepton->charge() );
367 return StatusCode::SUCCESS;
◆ mergeTracksFromDecisions()
template<typename CONTAINER >
Go through state.previousDecisions(), fetch xAOD::Muons/xAODElectron objects attached to decisions and save links to the their xAOD::TrackParticle objects in state.tracks().
Definition at line 422 of file TrigMultiTrkComboHypo.cxx.
424 auto& tracks = state.
tracks();
433 const auto lepton = *leptonEL;
437 if (!lepton->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle))
continue;
438 if (!lepton->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle))
continue;
439 trackEL = lepton->inDetTrackParticleLink();
442 if (!lepton->idTrack())
continue;
443 trackEL = lepton->idTrackLink();
446 if (!lepton->trackParticle())
continue;
447 trackEL = lepton->trackParticleLink();
450 ATH_MSG_ERROR(
"mergeTracksFromDecisions(): no scenario for the provided CONTAINER is specified" );
451 return StatusCode::FAILURE;
454 if (!trackEL.
isValid())
continue;
456 std::find_if(tracks.begin(), tracks.end(),
457 [
this,
track = *trackEL](
const auto&
x){ return this->isIdenticalTracks(track, *x); }) == tracks.end()) {
458 tracks.emplace_back(trackEL);
461 std::sort(tracks.begin(), tracks.end(), [](
const auto& lhs,
const auto& rhs){ return ((*lhs)->pt() > (*rhs)->pt()); });
464 ATH_MSG_DEBUG(
"Dump found tracks before vertex fit: " << tracks.size() <<
" candidates" );
465 for (
const auto& trackEL : tracks) {
471 return StatusCode::SUCCESS;
◆ mergeTracksFromViews()
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().
Definition at line 371 of file TrigMultiTrkComboHypo.cxx.
373 auto& tracks = state.
tracks();
376 std::set<const SG::View*> views;
383 if (views.find(
view) != views.end())
continue;
389 std::vector<ElementLink<xAOD::TrackParticleContainer>> tracksFromView;
390 tracksFromView.reserve(tracksHandle->size());
391 for (
size_t idx = 0;
idx < tracksHandle->size(); ++
idx) {
392 tracksFromView.emplace_back(ViewHelper::makeLink<xAOD::TrackParticleContainer>(
view, tracksHandle,
idx));
395 for (
const auto& trackEL : tracksFromView) {
400 std::find_if(tracks.begin(), tracks.end(),
401 [
this,
track](
const auto&
x){ return isIdenticalTracks(track, *x); }) == tracks.end()) {
402 tracks.emplace_back(trackEL);
407 std::sort(tracks.begin(), tracks.end(), [](
const auto& lhs,
const auto& rhs){ return ((*lhs)->pt() > (*rhs)->pt()); });
410 ATH_MSG_DEBUG(
"Dump found tracks before vertex fit: " << tracks.size() <<
" candidates" );
411 for (
const auto& trackEL : tracks) {
417 return StatusCode::SUCCESS;
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ outputHandles()
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.
◆ passedDeltaRcut()
◆ processMergedElectrons()
Make all possible combinations from electrons originating from the same BPH-0DR3-EM7J15 cluster, only one track should pass e5_lhvloose requirements; initialRoI word will be saved into xAOD::TrigBphys objects.
Definition at line 689 of file TrigMultiTrkComboHypo.cxx.
691 ATH_MSG_DEBUG(
"Try to find electrons originating from the same EM cluster" );
694 auto& leptons = state.
leptons();
697 ATH_MSG_DEBUG(
"no chains similar to BPH-0DR3-EM7J15 have been requested, should not look for close-by electrons" );
698 return StatusCode::SUCCESS;
710 if (!
electron->trackParticle())
continue;
719 leptons.push_back({electronEL, std::vector<ElementLink<DecisionContainer>>(1, decisionEL),
decisionIDs});
724 auto initialRoI = *roiInfo.link;
727 std::vector<ElementLink<xAOD::TrackParticleContainer>> tracklist(2);
728 tracklist[0] =
electron->trackParticleLink();
731 if (electronFromView ==
electron)
continue;
732 if (!electronFromView->trackParticle())
continue;
734 tracklist[1] = electronFromView->trackParticleLink();
737 auto vertex =
fit(tracklist, particleMasses, *fitterState);
740 trigBphys->
setRoiId(initialRoI->roiWord());
745 return StatusCode::SUCCESS;
◆ renounce()
◆ renounceArray()
◆ setFilterPassed()
virtual void AthReentrantAlgorithm::setFilterPassed |
( |
bool |
state, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
inlinevirtualinherited |
◆ sysExecute()
StatusCode AthReentrantAlgorithm::sysExecute |
( |
const EventContext & |
ctx | ) |
|
|
overridevirtualinherited |
Execute an algorithm.
We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.
Definition at line 67 of file AthReentrantAlgorithm.cxx.
69 return Gaudi::Algorithm::sysExecute (ctx);
◆ sysInitialize()
StatusCode AthReentrantAlgorithm::sysInitialize |
( |
| ) |
|
|
overridevirtualinherited |
Override sysInitialize.
Override sysInitialize from the base class.
Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc
Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc
Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.
Reimplemented in InputMakerBase, and HypoBase.
Definition at line 96 of file AthReentrantAlgorithm.cxx.
107 if ( cs.retrieve().isFailure() ) {
109 return StatusCode::SUCCESS;
111 if (cs->regHandle(
this,*
h).isFailure()) {
112 sc = StatusCode::FAILURE;
113 ATH_MSG_ERROR(
"unable to register WriteCondHandle " <<
h->fullKey()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ triggerMultiplicityMap()
◆ updateVHKA()
◆ m_allowedIDs
◆ m_applyOverlapRemoval
Gaudi::Property<bool> TrigMultiTrkComboHypo::m_applyOverlapRemoval |
|
private |
Initial value:{this, "applyOverlapRemoval", true,
"apply overlap removal for the close-by same-sign objects from different views"}
Definition at line 274 of file TrigMultiTrkComboHypo.h.
◆ m_beamSpotKey
◆ m_caloClusterEtThreshold
Gaudi::Property<double> TrigMultiTrkComboHypo::m_caloClusterEtThreshold |
|
private |
Initial value:{this, "caloClusterEtThreshold", 5.,
"minimum transverse energy of the cluster, associated with close-by electron"}
Definition at line 300 of file TrigMultiTrkComboHypo.h.
◆ m_checkMultiplicity
Gaudi::Property<bool> TrigMultiTrkComboHypo::m_checkMultiplicity |
|
private |
Initial value:{this, "checkMultiplicity", false,
"check that we have enough leptons to fire the chain, needed for HLT_mu6_2mu4_bJpsi_L1MU5VF_3MU3VF"}
Definition at line 280 of file TrigMultiTrkComboHypo.h.
◆ m_checkMultiplicityMap
Gaudi::Property<bool> ComboHypo::m_checkMultiplicityMap |
|
privateinherited |
Initial value:{ this, "CheckMultiplicityMap", true,
"Perform a consistency check of the MultiplicitiesMap"}
Definition at line 64 of file ComboHypo.h.
◆ m_chi2
Gaudi::Property<float> TrigMultiTrkComboHypo::m_chi2 |
|
private |
◆ m_combineInputDecisionCollections
Gaudi::Property<bool> TrigMultiTrkComboHypo::m_combineInputDecisionCollections |
|
private |
Initial value:{this, "combineInputDecisionCollections", false,
"combine objects attached to decisions from different input collections, needed for HLT_mu4_ivarloose_mu4_b10invmAB120vtx20_L12MU3V chains"}
Definition at line 276 of file TrigMultiTrkComboHypo.h.
◆ m_deltaR
Gaudi::Property<float> TrigMultiTrkComboHypo::m_deltaR |
|
private |
Initial value:{this, "deltaR", 0.01,
"minimum deltaR between same-sign tracks (overlap removal)"}
Definition at line 282 of file TrigMultiTrkComboHypo.h.
◆ m_deltaRMax
Gaudi::Property<float> TrigMultiTrkComboHypo::m_deltaRMax |
|
private |
◆ m_deltaRMin
Gaudi::Property<float> TrigMultiTrkComboHypo::m_deltaRMin |
|
private |
Initial value:{this, "deltaRMin", std::numeric_limits<float>::lowest(),
"maximum deltaR between tracks in a candidate"}
Definition at line 286 of file TrigMultiTrkComboHypo.h.
◆ m_detStore
◆ m_doElectrons
Gaudi::Property<bool> TrigMultiTrkComboHypo::m_doElectrons |
|
private |
Initial value:{this, "doElectrons", false,
"use electrons if true, otherwise use muons"}
Definition at line 294 of file TrigMultiTrkComboHypo.h.
◆ m_evtStore
◆ m_extendedExtraObjects
DataObjIDColl AthReentrantAlgorithm::m_extendedExtraObjects |
|
privateinherited |
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Empty if no symlinks were found.
Definition at line 153 of file AthReentrantAlgorithm.h.
◆ m_hypoTools
◆ m_inputs
◆ m_isMuTrkMode
Gaudi::Property<bool> TrigMultiTrkComboHypo::m_isMuTrkMode |
|
private |
Initial value:{this, "isMuTrkMode", false,
"make pairs between muon from SG::View and tracks from the same SG::View"}
Definition at line 292 of file TrigMultiTrkComboHypo.h.
◆ m_isStreamer
Gaudi::Property<bool> TrigMultiTrkComboHypo::m_isStreamer |
|
private |
Initial value:{this, "isStreamer", false,
"if true we do not create trigger objects, just copy all appropriate decisions to the next step or break the chain"}
Definition at line 290 of file TrigMultiTrkComboHypo.h.
◆ m_legToInputCollectionMap
Gaudi::Property< Combo::LegMap > ComboHypo::m_legToInputCollectionMap |
|
privateinherited |
Initial value:{this, "LegToInputCollectionMap", {},
"Map from the chain name to the per-leg index in this algorithm's ReadHandleKeyArray which should be used as the source of incoming Decision Objects on the leg.",
"mapMergeNoReplace<std::string, std::vector<int>>"}
Definition at line 60 of file ComboHypo.h.
◆ m_massRange
Gaudi::Property<std::vector<std::pair<double, double> > > TrigMultiTrkComboHypo::m_massRange |
|
private |
Initial value:{this, "massRange", { {0., 100000.} },
"range of the invariant mass of the track combinations"}
Definition at line 272 of file TrigMultiTrkComboHypo.h.
◆ m_mergedElectronChains
Gaudi::Property<std::vector<std::string> > TrigMultiTrkComboHypo::m_mergedElectronChains |
|
private |
Initial value:{this, "mergedElectronChains", {"BPH-0DR3-EM7J15"},
"patterns for BPH-0DR3-EM7J15 like chains"}
Definition at line 298 of file TrigMultiTrkComboHypo.h.
◆ m_mergedElectronIDs
◆ m_monTool
ToolHandle<GenericMonitoringTool> TrigMultiTrkComboHypo::m_monTool {this, "MonTool", "", "monitoring tool"} |
|
private |
◆ m_multiplicitiesReqMap
Initial value:{this, "MultiplicitiesMap", {},
"Map from the chain name to multiplicities required at each input",
"mapMergeNoReplace<std::string, std::vector<int>>"}
Definition at line 56 of file ComboHypo.h.
◆ m_nTrk
Gaudi::Property<std::vector<unsigned int> > TrigMultiTrkComboHypo::m_nTrk |
|
private |
Initial value:{this, "nTracks", {2},
"number of tracks to be fitted into the common vertex"}
Definition at line 264 of file TrigMultiTrkComboHypo.h.
◆ m_nTrkCharge
Gaudi::Property<std::vector<int> > TrigMultiTrkComboHypo::m_nTrkCharge |
|
private |
Initial value:{this, "totalCharge", {},
"magnitude of the total charge to accept, negative is none"}
Definition at line 266 of file TrigMultiTrkComboHypo.h.
◆ m_outputs
◆ 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.
◆ m_resolvedElectronIDs
◆ m_trackParticleContainerKey
◆ m_trigBphysContainerKey
◆ m_trigLevel
Gaudi::Property<std::string> TrigMultiTrkComboHypo::m_trigLevel |
|
private |
Initial value:{this, "trigLevel", "EF",
"trigger Level to set for created TrigBphys objects: L2, L2IO, L2MT or EF"}
Definition at line 296 of file TrigMultiTrkComboHypo.h.
◆ m_trkMass
Gaudi::Property<std::vector<std::vector<double> > > TrigMultiTrkComboHypo::m_trkMass |
|
private |
Initial value:{this, "trackMasses", {},
"track masses for vertex reco (one per track); muon mass is used by default"}
Definition at line 268 of file TrigMultiTrkComboHypo.h.
◆ m_trkPt
Gaudi::Property<std::vector<std::vector<double> > > TrigMultiTrkComboHypo::m_trkPt |
|
private |
Initial value:{this, "trackPtThresholds", { {3650., 3650.} },
"minimum track transverse momenta (one per track, sorted descending)"}
Definition at line 270 of file TrigMultiTrkComboHypo.h.
◆ m_trkPtMin
double TrigMultiTrkComboHypo::m_trkPtMin = 0.0 |
|
private |
◆ m_useLeptonMomentum
Gaudi::Property<bool> TrigMultiTrkComboHypo::m_useLeptonMomentum |
|
private |
Initial value:{this, "useLeptonMomentum", false,
"use 4-momentum of the xAOD::Muon to make fast calculation of the xAOD::TrigBphys mass, needed for consistency with TrigComboHypoTool::compute()"}
Definition at line 278 of file TrigMultiTrkComboHypo.h.
◆ m_v0Tools
ToolHandle<Trk::V0Tools> TrigMultiTrkComboHypo::m_v0Tools {this, "V0Tools", "", "tool to calculate Lxy/LxyError of dimuon candidate wrt beam spot"} |
|
private |
◆ m_varHandleArraysDeclared
◆ m_vertexFitter
ToolHandle<Trk::TrkVKalVrtFitter> TrigMultiTrkComboHypo::m_vertexFitter {this, "VertexFitter", "", "VKalVrtFitter tool to fit tracks into the common vertex"} |
|
private |
◆ m_vertexPointEstimator
ToolHandle<InDet::VertexPointEstimator> TrigMultiTrkComboHypo::m_vertexPointEstimator {this, "VertexPointEstimator", "", "tool to find starting point for the vertex fitter"} |
|
private |
◆ m_vhka
The documentation for this class was generated from the following files:
const std::string trackMomentum
Gaudi::Property< Combo::MultiplicityReqMap > m_multiplicitiesReqMap
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzM4D< double > > GenVecFourMom_t
Base 4 Momentum type for TrackParticle.
TrigCompositeUtils::DecisionIDContainer m_mergedElectronIDs
StatusCode createDecisionObjects(TrigMultiTrkStateBase &) const
Create a decision for each xAOD::TrigBphys object from state.trigBphysCollection() and save it to sta...
xAOD::ElectronContainer * electronContainer
Group
Properties of a chain group.
const xAOD::Vertex & beamSpot() const
const SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsOutput() const
StatusCode filterTrackCombinations(TrigMultiTrkStateBase &) const
Make all possible combinations from state.tracks(), fit tracks to the common vertex and set state....
bool passed(DecisionID id, const DecisionIDContainer &idSet)
checks if required decision ID is in the set of IDs in the container
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.
Gaudi::Property< float > m_deltaR
std::string find(const std::string &s)
return a remapped string
TrigCompositeUtils::DecisionID numeric() const
numeric ID
Gaudi::Property< bool > m_combineInputDecisionCollections
StatusCode mergeLeptonsFromDecisions(TrigMultiTrkState< CONTAINER > &) const
Go through state.previousDecisions(), fetch xAOD::Muons/xAODElectron objects attached to decisions an...
float charge() const
Returns the charge.
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.
Scalar eta() const
pseudorapidity method
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
const std::vector< NavGraphNode * > & finalNodes() const
Get all final nodes.
StatusCode copyDecisionObjects(TrigMultiTrkStateBase &) const
All appropriate decisions from state.previousDecisions() will be copied to state.decisions() if flag ...
Gaudi::Property< float > m_deltaRMin
Gaudi::Property< bool > m_isStreamer
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
Gaudi::Property< bool > m_doElectrons
SG::ReadHandle< T > makeHandle(const SG::View *view, const SG::ReadHandleKey< T > &rhKey, const EventContext &context)
navigate from the TrigComposite to nearest view and fetch object from it
static constexpr double mMuon
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)
Gaudi::Property< std::vector< std::vector< double > > > m_trkMass
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
void insertDecisionIDs(const Decision *src, Decision *dest)
Appends the decision IDs of src to the dest decision object.
Gaudi::Property< std::string > m_trigLevel
DecisionIDContainer passedDecisionIDs(const Decision *d, const T &required)
return DecisionIDs in Decision object that match the required ones
bool msgLvl(const MSG::Level lvl) const
bool hasDetail(const std::string &name) const
Check if a given type of detail is available.
const std::string & comboHypoAlgNodeName()
SG::WriteHandle< DecisionContainer > createAndStore(const SG::WriteHandleKey< DecisionContainer > &key, const EventContext &ctx)
Creates and right away records the DecisionContainer with the key.
std::unique_ptr< xAOD::Vertex > fit(const std::vector< ElementLink< xAOD::TrackParticleContainer >> &trackParticleLinks, const std::vector< double > &particleMasses, Trk::IVKalState &fitterState) const
Perform a vertex fit on selected tracks.
std::vector< LEPTON > & leptons()
Gaudi::Property< bool > m_checkMultiplicity
Gaudi::Property< bool > m_applyOverlapRemoval
Gaudi::Property< std::vector< int > > m_nTrkCharge
#define ATH_MSG_VERBOSE(x)
std::vector< ElementLink< xAOD::TrackParticleContainer > > & tracks()
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
StatusCode processMergedElectrons(TrigMultiTrkState< xAOD::ElectronContainer > &) const
Make all possible combinations from electrons originating from the same BPH-0DR3-EM7J15 cluster,...
bool isValid() const
Test to see if the link can be dereferenced.
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
ToolHandle< InDet::VertexPointEstimator > m_vertexPointEstimator
Gaudi::Property< std::vector< std::string > > m_mergedElectronChains
virtual void setOwner(IDataHandleHolder *o)=0
StatusCode mergeTracksFromViews(TrigMultiTrkStateBase &) const
Go through state.previousDecisions() and fetch xAOD::TrackParticle objects associated with the neares...
const ElementLink< TrackParticleContainer > & trackParticleLink(size_t index=0) const
ElementLink to the xAOD::TrackParticle/s that match the electron candidate.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerKey
void setRoiId(uint32_t id)
set method: roiId
ComboHypo(const std::string &name, ISvcLocator *pSvcLocator)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
Gaudi::Property< double > m_caloClusterEtThreshold
ToolHandleArray< ComboHypoToolBase > & hypoTools()
const std::string & initialRoIString()
ToolHandle< GenericMonitoringTool > m_monTool
const EventContext & context() const
const std::vector< ElementLink< DecisionContainer > > getLinkToPrevious(const Decision *d)
returns links to previous decision object 'seed'
bool typelessFindLinks(const Decision *start, const std::string &linkName, std::vector< sgkey_t > &keyVec, std::vector< uint32_t > &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...
::StatusCode StatusCode
StatusCode definition for legacy code.
pointer_type ptr()
Dereference the pointer.
Default, invalid implementation of ClassID_traits.
Gaudi::Property< bool > m_useLeptonMomentum
void setMass(float)
Set the mass of the object.
Gaudi::Property< bool > m_isMuTrkMode
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
ToolHandleArray< ComboHypoToolBase > m_hypoTools
ElementLink< DecisionContainer > decisionToElementLink(const Decision *d, const EventContext &ctx)
Takes a raw pointer to a Decision and returns an ElementLink to the Decision.
std::vector< ElementLink< xAOD::TrackParticleContainer > > trackParticleLinks(const xAOD::TauJet *tau, xAOD::TauJetParameters::TauTrackFlag flag=xAOD::TauJetParameters::TauTrackFlag::classifiedCharged)
Structure to hold a transient Directed Acyclic Graph (DAG) structure. NavGraph is populated from,...
std::vector< std::vector< size_t > > & trigBphysLegIndices()
bool isInMassRange(double mass, size_t idx) const
#define CHECK(...)
Evaluate an expression and check for errors.
float fitchi2() const
accessor method: chi2 from vertex fit
TrigCompositeUtils::DecisionIDContainer m_allowedIDs
const Combo::MultiplicityReqMap & triggerMultiplicityMap() const
GenVecFourMom_t genvecP4() const
The full 4-momentum of the particle : GenVector form.
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
xAOD::TrigBphys * makeTrigBPhys(const xAOD::Vertex &vertex, const std::vector< double > &particleMasses, const xAOD::Vertex &beamSpot, const Trk::IVKalState &fitterState) const
Construct the trigger object that may be stored for debugging or matching.
SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainer > m_outputs
virtual TrigCompositeUtils::DecisionIDContainer & getDecisionIDs(size_t)=0
Class used to describe composite objects in the HLT.
size_t index() const
Return the index of this element within its container.
StatusCode copyAdditionalDecisionObjects(TrigMultiTrkStateBase &) const
For chains from CombinedSlice (similar to 'HLT_e9_lhvloose_e5_lhvloose_bBeeM6000_mu4_L1BPH-0M9-EM7-EM...
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
static constexpr double mElectron
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
void fill(H5::Group &out_file, size_t iterations)
ElementLink implementation for ROOT usage.
const std::string & featureString()
virtual StatusCode initialize() override
virtual void addTrigBphysObject(xAOD::TrigBphys *trigBphysObject, const std::vector< size_t > &legIndices) override final
Gaudi::Property< Combo::LegMap > m_legToInputCollectionMap
xAOD::TrigComposite Decision
virtual StatusCode sysInitialize() override
Override sysInitialize.
Gaudi::Property< std::vector< std::pair< double, double > > > m_massRange
StatusCode findMuTrkCandidates(TrigMultiTrkState< xAOD::MuonContainer > &) const
Build J/psi candidates from muon from SG::View and tracks from the same SG::View, to be used for Tag-...
double charge(const T &p)
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
StatusCode initialize(bool used=true)
Eigen::Matrix< double, 3, 1 > Vector3D
SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > m_inputs
bool isIdenticalTracks(const xAOD::TrackParticle *lhs, const xAOD::TrackParticle *rhs) const
Attempts to identify identical tracks by selection on DeltaR.
Gaudi::Property< std::vector< std::vector< double > > > m_trkPt
StatusCode findMultiLeptonCandidates(TrigMultiTrkState< CONTAINER > &) const
Make all possible combinations from state.leptons(), fit tracks to the common vertex,...
const TrigCompositeUtils::DecisionContainer & previousDecisions() const
HLT::Identifier createLegName(const HLT::Identifier &chainIdentifier, size_t counter)
Generate the HLT::Identifier which corresponds to a specific leg of a given chain.
Gaudi::Property< float > m_deltaRMax
ToolHandle< Trk::V0Tools > m_v0Tools
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
void linkToPrevious(Decision *d, const std::string &previousCollectionKey, size_t previousIndex)
Links to the previous object, location of previous 'seed' decision supplied by hand.
const ElementLink< TrackParticleContainer > & inDetTrackParticleLink() const
Returns an ElementLink to the InnerDetector TrackParticle used in identification of this muon.
const std::string & seedString()
bool isLegId(const HLT::Identifier &legIdentifier)
Recognise whether the chain ID is a leg ID.
int32_t getIndexFromLeg(const HLT::Identifier &legIdentifier)
Extract the numeric index of a leg identifier.
std::set< DecisionID > DecisionIDContainer
const Combo::LegMap & legToInputCollectionMap() const
Gaudi::Property< std::vector< unsigned int > > m_nTrk
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
#define ATH_MSG_WARNING(x)
void setEventAccepted(bool flag=true)
Transient utility class to represent a node in a graph (m_decisionObject), and a vector of edges (m_f...
TrigCompositeUtils::DecisionContainer & decisions()
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
TrigCompositeUtils::DecisionIDContainer m_resolvedElectronIDs
std::string name() const
reports human redable name if it is enabled or, empty string
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
const SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsInput() const
virtual bool checkMultiplicity(const std::vector< int > &legMultiplicity, const std::vector< HLT::Identifier > &legDecisionIDs) const =0
AthConfigFlags beamSpot(AthConfigFlags flags, str instanceName, str recoMode)
virtual std::vector< ElementLink< TrigCompositeUtils::DecisionContainer > > & getDecisionLinks(size_t)=0
bool passedDeltaRcut(const std::vector< xAOD::TrackParticle::GenVecFourMom_t > &momenta) const
HLT::Identifier getIDFromLeg(const HLT::Identifier &legIdentifier)
Generate the HLT::Identifier which corresponds to the chain name from the leg name.
Class describing a TrackParticle.
const T * at(size_type n) const
Access an element, as an rvalue.
Declare a monitored scalar variable.
float lxy() const
accessor method: lxy
bool getDetail(const std::string &name, TYPE &value) const
Get an TYPE detail from the object.
Set * set_intersection(Set *set1, Set *set2)
Perform an intersection of two sets.
int isEventAccepted() const
std::vector< size_t > & getTrigBphysLegIndices(size_t idx)
bool isAnyIDPassing(const Decision *d, const DecisionIDContainer &required)
Checks if any of the DecisionIDs passed in arg required is availble in Decision object.
size_type size() const noexcept
Returns the number of elements in the collection.
const std::string & viewString()
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Class describing a Bphysics online composite object.
SG::WriteHandleKey< xAOD::TrigBphysContainer > m_trigBphysContainerKey
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
xAOD::TrigBphysContainer & trigBphysCollection()
ToolHandle< Trk::TrkVKalVrtFitter > m_vertexFitter
bool typelessFindLink(const Decision *start, const std::string &linkName, sgkey_t &key, uint32_t &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...
Gaudi::Property< float > m_chi2