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

#include <TrigMultiTrkComboHypo.h>

Inheritance diagram for TrigMultiTrkComboHypo:
Collaboration diagram for TrigMultiTrkComboHypo:

Public Member Functions

 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
 

Protected Member Functions

const SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsInput () const
 
const SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsOutput () const
 
const Combo::MultiplicityReqMaptriggerMultiplicityMap () const
 
const Combo::LegMaplegToInputCollectionMap () const
 
ToolHandleArray< ComboHypoToolBase > & hypoTools ()
 
const ToolHandleArray< ComboHypoToolBase > & hypoTools () const
 
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
 
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed. More...
 

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

StatusCode 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::Vertexfit (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::TrigBphysmakeTrigBPhys (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...
 

Private Attributes

SG::ReadHandleKey< xAOD::TrackParticleContainerm_trackParticleContainerKey {this, "TrackCollectionKey", "Tracks", "input TrackParticle container name"}
 
SG::WriteHandleKey< xAOD::TrigBphysContainerm_trigBphysContainerKey {this, "TrigBphysCollectionKey", "TrigBphysContainer", "output TrigBphysContainer name"}
 
SG::ReadCondHandleKey< InDet::BeamSpotDatam_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::VertexPointEstimatorm_vertexPointEstimator {this, "VertexPointEstimator", "", "tool to find starting point for the vertex fitter"}
 
ToolHandle< Trk::TrkVKalVrtFitterm_vertexFitter {this, "VertexFitter", "", "VKalVrtFitter tool to fit tracks into the common vertex"}
 
ToolHandle< Trk::V0Toolsm_v0Tools {this, "V0Tools", "", "tool to calculate Lxy/LxyError of dimuon candidate wrt beam spot"}
 
ToolHandle< GenericMonitoringToolm_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::DecisionContainerm_inputs { this, "HypoInputDecisions", {}, "Input Decisions" }
 
SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainerm_outputs { this, "HypoOutputDecisions", {}, "Output Decisions" }
 
Gaudi::Property< bool > m_requireUniqueROI
 
Gaudi::Property< Combo::MultiplicityReqMapm_multiplicitiesReqMap
 
Gaudi::Property< Combo::LegMapm_legToInputCollectionMap
 
Gaudi::Property< bool > m_checkMultiplicityMap
 
ToolHandleArray< ComboHypoToolBasem_hypoTools {this, "ComboHypoTools", {}, "Tools to perform selection"}
 
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks. More...
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

Definition at line 138 of file TrigMultiTrkComboHypo.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

◆ TrigMultiTrkComboHypo() [1/2]

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

Definition at line 50 of file TrigMultiTrkComboHypo.cxx.

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

◆ TrigMultiTrkComboHypo() [2/2]

TrigMultiTrkComboHypo::TrigMultiTrkComboHypo ( )
delete

Member Function Documentation

◆ cardinality()

unsigned int AthReentrantAlgorithm::cardinality ( ) const
overridevirtualinherited

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

Override this to return 0 for reentrant algorithms.

Override this to return 0 for reentrant algorithms.

Definition at line 55 of file AthReentrantAlgorithm.cxx.

56 {
57  return 0;
58 }

◆ copyAdditionalDecisionObjects()

StatusCode TrigMultiTrkComboHypo::copyAdditionalDecisionObjects ( TrigMultiTrkStateBase state) const
private

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.

881  {
882 
883  if (decisionsInput().size() > 1) {
884  ATH_MSG_DEBUG( "Found more than one decision input key, decisionsInput().size = " << decisionsInput().size() );
885  for (size_t i = 1; i < decisionsInput().size(); ++i) {
886  ATH_MSG_DEBUG( "Copying decisions from " << decisionsInput().at(i).key() << " to " << decisionsOutput().at(i).key() );
887  auto previousDecisionsHandle = SG::makeHandle(decisionsInput().at(i), state.context());
888  CHECK( previousDecisionsHandle.isValid() );
889  ATH_MSG_DEBUG( "Running with "<< previousDecisionsHandle->size() << " previous decisions" );
891  for (const Decision* previousDecision : *previousDecisionsHandle) {
892  if (!TrigCompositeUtils::isAnyIDPassing(previousDecision, m_allowedIDs)) continue;
893 
894  DecisionIDContainer previousDecisionIDs;
895  TrigCompositeUtils::decisionIDs(previousDecision, previousDecisionIDs);
897  std::set_intersection(previousDecisionIDs.begin(), previousDecisionIDs.end(), m_allowedIDs.begin(), m_allowedIDs.end(),
898  std::inserter(decisionIDs, decisionIDs.begin()));
899 
901  TrigCompositeUtils::linkToPrevious(decision, previousDecision, state.context());
903  }
904  }
905  }
906  return StatusCode::SUCCESS;
907 }

◆ copyDecisionObjects()

StatusCode TrigMultiTrkComboHypo::copyDecisionObjects ( TrigMultiTrkStateBase state) const
private

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.

Definition at line 817 of file TrigMultiTrkComboHypo.cxx.

817  {
818 
819  if (state.isEventAccepted()) {
820  ATH_MSG_DEBUG( "Copying decisions from " << decisionsInput().at(0).key() << " to " << decisionsOutput().at(0).key() );
821  for (const Decision* previousDecision : state.previousDecisions()) {
822  if (!TrigCompositeUtils::isAnyIDPassing(previousDecision, m_allowedIDs)) continue;
823 
824  DecisionIDContainer previousDecisionIDs;
825  TrigCompositeUtils::decisionIDs(previousDecision, previousDecisionIDs);
827  std::set_intersection(previousDecisionIDs.begin(), previousDecisionIDs.end(), m_allowedIDs.begin(), m_allowedIDs.end(),
828  std::inserter(decisionIDs, decisionIDs.begin()));
829 
831  TrigCompositeUtils::linkToPrevious(decision, previousDecision, state.context());
833  }
834 
835  // copy additional decisions for combined chains, as 'HLT_e9_lhvloose_e5_lhvloose_bBeeM6000_mu4_L1BPH-0M9-EM7-EM5_MU6'
837  }
838  return StatusCode::SUCCESS;
839 }

◆ 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 "
128  << (TrigCompositeUtils::findLink<TrigRoiDescriptorCollection>(newDec, initialRoIString())).isValid()
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 }

◆ createDecisionObjects()

StatusCode TrigMultiTrkComboHypo::createDecisionObjects ( TrigMultiTrkStateBase state) const
private

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.

842  {
843 
844  size_t idx = 0;
845  for (const xAOD::TrigBphys* triggerObject : state.trigBphysCollection()) {
846  ATH_MSG_DEBUG( "Found xAOD::TrigBphys: mass / chi2 = " << triggerObject->mass() << " / " << triggerObject->fitchi2() );
847 
848  auto triggerObjectEL = ElementLink<xAOD::TrigBphysContainer>(state.trigBphysCollection(), triggerObject->index());
849  ATH_CHECK( triggerObjectEL.isValid() );
850 
851  // create a new output Decision object, backed by the 'decisions' container.
853 
854  std::vector<const DecisionIDContainer*> previousDecisionIDs;
855  for (const size_t& i : state.getTrigBphysLegIndices(idx)) {
856 
857  // attach all previous decisions: if the same previous decision is called twice, that's fine - internally takes care of that
858  // we already have an array of links to the previous decisions, so there is no need to use TrigCompositeUtils::linkToPrevious()
859  decision->addObjectCollectionLinks(TrigCompositeUtils::seedString(), state.getDecisionLinks(i));
860  previousDecisionIDs.push_back(&state.getDecisionIDs(i));
861  }
862 
863  // set mandatory feature ElementLink to xAOD::TrigBphys object
864  decision->setObjectLink<xAOD::TrigBphysContainer>(TrigCompositeUtils::featureString(), triggerObjectEL);
865  decision->setDetail<int32_t>("noCombo", 1);
866 
867  for (const auto& tool : hypoTools()) {
868  ATH_MSG_DEBUG( "Go to " << tool );
869  if (!m_checkMultiplicity || state.checkMultiplicity(tool->legMultiplicity(), tool->legDecisionIds())) ATH_CHECK( tool->decideOnSingleObject(decision, previousDecisionIDs) );
870  }
871  ++idx;
872  }
873 
874  // copy additional decisions from Empty muon step for Combined chains, as 'HLT_e9_lhvloose_e5_lhvloose_bBeeM6000_mu4_L1BPH-0M9-EM7-EM5_MU6'
876 
877  return StatusCode::SUCCESS;
878 }

◆ 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() [1/4]

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

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

Definition at line 170 of file AthCommonDataStore.h.

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

◆ declareGaudiProperty() [2/4]

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

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

Definition at line 156 of file AthCommonDataStore.h.

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

◆ declareGaudiProperty() [3/4]

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

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

Definition at line 184 of file AthCommonDataStore.h.

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

◆ declareGaudiProperty() [4/4]

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

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

Definition at line 199 of file AthCommonDataStore.h.

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

◆ declareProperty() [1/6]

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

Declare a new Gaudi property.

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

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

Definition at line 245 of file AthCommonDataStore.h.

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

◆ declareProperty() [2/6]

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

Declare a new Gaudi property.

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

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

Definition at line 221 of file AthCommonDataStore.h.

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

◆ declareProperty() [3/6]

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

Definition at line 259 of file AthCommonDataStore.h.

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

◆ declareProperty() [4/6]

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

Declare a new Gaudi property.

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

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

Definition at line 333 of file AthCommonDataStore.h.

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

◆ declareProperty() [5/6]

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

Declare a new Gaudi property.

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

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

Definition at line 352 of file AthCommonDataStore.h.

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

◆ declareProperty() [6/6]

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

Definition at line 145 of file AthCommonDataStore.h.

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

◆ detStore()

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

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

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ evtStore() [1/2]

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

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

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

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

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

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ execute()

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

Reimplemented from ComboHypo.

Definition at line 193 of file TrigMultiTrkComboHypo.cxx.

193  {
194 
195  ATH_MSG_DEBUG( "TrigMultiTrkHypo::execute() starts" );
196 
197  ATH_MSG_DEBUG( "decision input key: " << decisionsInput().at(0).key() );
198  auto previousDecisionsHandle = SG::makeHandle(decisionsInput().at(0), context);
199  CHECK( previousDecisionsHandle.isValid() );
200  ATH_MSG_DEBUG( "Running with "<< previousDecisionsHandle->size() << " previous decisions" );
201 
203 
204  const InDet::BeamSpotData* beamSpotData = nullptr;
205  if (!m_isStreamer) {
206  SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle {m_beamSpotKey, context};
207  ATH_CHECK( beamSpotHandle.isValid() );
208  beamSpotData = *beamSpotHandle;
209  }
210 
211  std::unique_ptr<TrigMultiTrkState<xAOD::MuonContainer>> muonState;
212  std::unique_ptr<TrigMultiTrkState<xAOD::ElectronContainer>> electronState;
213  TrigMultiTrkStateBase* commonState = nullptr;
214  if (m_doElectrons) {
215  electronState = std::make_unique<TrigMultiTrkState<xAOD::ElectronContainer>>(context, *previousDecisionsHandle, *outputDecisionsHandle, nullptr, beamSpotData);
216  commonState = electronState.get();
217  }
218  else {
219  muonState = std::make_unique<TrigMultiTrkState<xAOD::MuonContainer>>(context, *previousDecisionsHandle, *outputDecisionsHandle, nullptr, beamSpotData);
220  commonState = muonState.get();
221  }
222 
223  if (m_isStreamer) {
224  if (m_trigLevel == "L2") {
225  ATH_CHECK( mergeTracksFromViews(*commonState) );
226  }
227  else if (m_trigLevel == "L2IO" || m_trigLevel == "L2MT") {
228  ATH_CHECK( mergeTracksFromDecisions<xAOD::L2CombinedMuonContainer>(*commonState) );
229  }
230  else if (m_trigLevel == "EF") {
231  ATH_CHECK( (m_doElectrons ? mergeTracksFromDecisions<xAOD::ElectronContainer>(*commonState) : mergeTracksFromDecisions<xAOD::MuonContainer>(*commonState)) );
232  }
233  ATH_CHECK( filterTrackCombinations(*commonState) );
234  ATH_CHECK( copyDecisionObjects(*commonState) );
235  }
236  else {
237  auto trigBphysHandle = SG::makeHandle(m_trigBphysContainerKey, context);
238  ATH_CHECK( trigBphysHandle.record(std::make_unique<xAOD::TrigBphysContainer>(),
239  std::make_unique<xAOD::TrigBphysAuxContainer>()) );
240  commonState->setTrigBphysCollection(trigBphysHandle.ptr());
241 
242  if (m_doElectrons) {
243  ATH_CHECK( mergeLeptonsFromDecisions(*electronState) );
244  ATH_CHECK( findMultiLeptonCandidates(*electronState) );
245  ATH_CHECK( processMergedElectrons(*electronState) );
246  }
247  else if (m_isMuTrkMode) {
248  ATH_CHECK( findMuTrkCandidates(*muonState) );
249  }
250  else {
251  ATH_CHECK( mergeLeptonsFromDecisions(*muonState) );
252  ATH_CHECK( findMultiLeptonCandidates(*muonState) );
253  }
254  ATH_CHECK( createDecisionObjects(*commonState) );
255  }
256 
257  ATH_MSG_DEBUG( "TrigMultiTrkHypo::execute() terminates with StatusCode::SUCCESS" );
258  return StatusCode::SUCCESS;
259 }

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

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

◆ extraDeps_update_handler()

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

Add StoreName to extra input/output deps as needed.

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

◆ extraOutputDeps()

const DataObjIDColl & AthReentrantAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

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

Definition at line 79 of file AthReentrantAlgorithm.cxx.

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

◆ fillDecisionsMap()

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

iterates over all inputs, associating inputs to legs

Definition at line 463 of file ComboHypo.cxx.

463  {
464  for ( size_t inputContainerIndex = 0; inputContainerIndex < m_inputs.size(); ++inputContainerIndex ) {
465  auto inputHandle = SG::makeHandle( m_inputs.at(inputContainerIndex), context );
466  if ( !inputHandle.isValid() ) {
467  ATH_MSG_ERROR( "No input ReadHandle from " << inputHandle.key() );
468  return StatusCode::FAILURE;
469  }
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:" );
473  for ( const DecisionID id: decisionIDs( decision ) ) {
474  HLT::Identifier chainID = HLT::Identifier(id);
475  int32_t chainLeg = 0; // Assume initially that the chain is not multi-leg, and update these two values if it is.
476  if (isLegId(id)) {
477  chainID = getIDFromLeg(id);
478  chainLeg = getIndexFromLeg(id);
479  }
480 
481  // We need to check if we are configured to accept DecisionObjects passing 'chainID' ...
482  Combo::LegMap::const_iterator it = m_legToInputCollectionMap.find(chainID.name());
483  if (it == m_legToInputCollectionMap.end()) {
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.");
485  continue;
486  }
487 
488  // ... and if so we need to further check that we are accepting passing IDs for chainLeg on the current inputContainerIndex
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() << ")");
495  continue;
496  }
497 
498  ATH_MSG_DEBUG( " ++++ " << HLT::Identifier( id ) );
499  dmap[id].push_back( TrigCompositeUtils::decisionToElementLink(decision, context) );
500  }
501  }
502  }
503 
504  if (msgLvl(MSG::DEBUG)){
505  ATH_MSG_DEBUG( "Decision map filled :" );
506  size_t legCount = 0;
507  for (const auto& entry: dmap){
508  ATH_MSG_DEBUG("leg ["<<legCount<<"]: ");
509  const std::vector<ElementLink<DecisionContainer>>& decisions = entry.second;
510  ATH_MSG_DEBUG(" ++++ " << HLT::Identifier( entry.first ) <<" Number Decisions: "<< decisions.size());
512  ATH_MSG_DEBUG(" Decision: (ContainerKey:"<<d.dataID()<<", DecisionElementIndex:"<<d.index()<<")");
513  }
514  legCount++;
515  }
516  }
517 
518 
519  return StatusCode::SUCCESS;
520 }

◆ filterPassed()

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

Definition at line 135 of file AthReentrantAlgorithm.h.

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

◆ filterTrackCombinations()

StatusCode TrigMultiTrkComboHypo::filterTrackCombinations ( TrigMultiTrkStateBase state) const
private

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.

475  {
476 
477  const auto& tracks = state.tracks();
478  state.setEventAccepted(false);
479 
480  // monitored variables
481  auto mon_nAcceptedTrk = Monitored::Scalar<int>("nAcceptedTrk", tracks.size());
482  auto mon_nVertexFitterCalls = Monitored::Scalar<int>("nVertexFitterCalls", 0);
483  auto mon_isEventAccepted = Monitored::Scalar<int>("acceptance", 0);
484  auto mon_timer = Monitored::Timer( "TIME_all" );
485 
487  mon_nAcceptedTrk, mon_nVertexFitterCalls, mon_isEventAccepted,
488  mon_timer);
489 
490  for (size_t iTrk = 0; iTrk < m_nTrk.size(); ++iTrk) {
491  if (state.isEventAccepted()) break;
492  size_t nTrk = m_nTrk[iTrk];
493 
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" );
496  continue;
497  }
498  ATH_MSG_DEBUG( "Consider combinations of " << nTrk << " tracks from collection which contains " << tracks.size() << " objects until find a good one" );
499 
500  std::vector<ElementLink<xAOD::TrackParticleContainer>> tracklist(nTrk);
501  std::vector<xAOD::TrackParticle::GenVecFourMom_t> p(nTrk);
502 
503  // tracks from the current combination will have non-zero value against their position in the 'idx' vector
504  // consider first nTrk tracks as an initial combination, then get the next one with std::prev_permutation()
505  std::vector<char> idx(tracks.size(), 0);
506  std::fill(idx.begin(), idx.begin() + nTrk, 1);
507  do {
508  // fill tracklist and momenta of tracks, also check that the track pT passes the threshold value
509  bool isValidCombination = true;
510  int totalCharge = 0;
511  size_t j = 0;
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;
517  p[j] = track->genvecP4();
518  p[j].SetM(m_trkMass[iTrk][j]);
519  totalCharge += static_cast<int>(track->charge());
520  if (p[j].Pt() < m_trkPt[iTrk][j]) {
521  isValidCombination = false;
522  break;
523  }
524  ++j;
525  }
526  if (!isValidCombination || (m_nTrkCharge[iTrk] >= 0 && totalCharge != m_nTrkCharge[iTrk]) || !passedDeltaRcut(p)) continue;
527 
528  if (msgLvl(MSG::DEBUG)) {
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];
532  ATH_MSG_DEBUG( "track " << i + 1 << ": " << p[i].Pt() << " / " << p[i].Eta() << " / " << p[i].Phi() << " / " << track->charge() );
533  }
534  }
535 
536  auto mass = (std::accumulate(p.begin(), p.end(), xAOD::TrackParticle::GenVecFourMom_t())).M();
537  ATH_MSG_DEBUG( "invariant mass: " << mass );
538 
539  if (!isInMassRange(mass, iTrk)) continue;
540 
541  auto fitterState = m_vertexFitter->makeState(state.context());
542  auto vertex = fit(tracklist, m_trkMass[iTrk], *fitterState);
543  ++mon_nVertexFitterCalls;
544  if (!vertex) continue;
545 
546  ATH_MSG_DEBUG( "Filter found a subset of tracks which passed the rough selection: stop looking for other combinations" );
547  state.setEventAccepted(true);
548  break;
549 
550  } while (std::prev_permutation(idx.begin(), idx.end()));
551  }
552 
553  if (!state.isEventAccepted()) {
554  ATH_MSG_DEBUG( "Filter could not find a good subset of tracks" );
555  }
556 
557  mon_isEventAccepted = state.isEventAccepted();
558 
559  return StatusCode::SUCCESS;
560 }

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

564  {
565 
566  state.trigBphysLegIndices().clear();
567  const auto& leptons = state.leptons();
568 
569  // monitored variables
570  auto mon_nAcceptedTrk = Monitored::Scalar<int>("nAcceptedTrk", leptons.size());
571  auto mon_nCombination = Monitored::Scalar<int>("nCombination", 0);
572  auto mon_nCombinationBeforeFit = Monitored::Scalar<int>("nCombinationBeforeFit", 0);
573  auto mon_nBPhysObject = Monitored::Scalar<int>("nBPhysObject", 0);
574 
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;
581  auto mon_trkMassBeforeFit = Monitored::Collection("trkMassBeforeFit", trkMassBeforeFit);
582  auto mon_bphysChi2 = Monitored::Collection("bphysChi2", state.trigBphysCollection(), &xAOD::TrigBphys::fitchi2);
583  auto mon_bphysLxy = Monitored::Collection("bphysLxy", state.trigBphysCollection(), &xAOD::TrigBphys::lxy);
584  auto mon_bphysFitMass = Monitored::Collection("bphysFitMass", state.trigBphysCollection(), [](const xAOD::TrigBphys* x){ return x->fitmass()*0.001; });
585  auto mon_bphysMass = Monitored::Collection("bphysMass", bphysMass);
586  auto mon_d0track1 = Monitored::Collection("bphysd0_trk1", d0track1);
587  auto mon_d0track2 = Monitored::Collection("bphysd0_trk2", d0track2);
588  auto mon_pttrack1 = Monitored::Collection("bphysPt_trk1", pttrack1);
589  auto mon_pttrack2 = Monitored::Collection("bphysPt_trk2", pttrack2);
590  auto mon_etatrack1 = Monitored::Collection("bphysEtatrack1", etatrack1);
591  auto mon_etatrack2 = Monitored::Collection("bphysEtatrack2", etatrack2);
592  auto mon_bphysCharge = Monitored::Collection("bphysCharge", bphysCharge);
593 
594  auto mon_timer = Monitored::Timer( "TIME_all" );
595 
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);
600 
601  for (size_t iTrk = 0; iTrk < m_nTrk.size(); ++iTrk) {
602  size_t nTrk = m_nTrk[iTrk];
603 
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" );
606  continue;
607  }
608  ATH_MSG_DEBUG( "Consider all combinations of " << nTrk << " legs from collection which contains " << leptons.size() << " objects" );
609 
610  std::vector<size_t> leptonIndices(nTrk);
611  std::vector<ElementLink<xAOD::TrackParticleContainer>> tracklist(nTrk);
612  std::vector<xAOD::TrackParticle::GenVecFourMom_t> p(nTrk);
613 
614  std::vector<char> combination(leptons.size(), 0);
615  std::fill(combination.begin(), combination.begin() + nTrk, 1);
616  do {
617  // fill tracklist and momenta of muons in the current subset
618  bool isValidCombination = true;
619  int charge = 0;
620  size_t j = 0;
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();
629  }
630  else {
631  trackEL = leg->trackParticleLink();
632  }
633  tracklist[j] = trackEL;
634  if (m_useLeptonMomentum) {
635  p[j] = leg->genvecP4();
636  p[j].SetM(0.); // to keep consistency with TrigComboHypoTool::compute()
637  }
638  else {
639  p[j] = (*trackEL)->genvecP4();
640  p[j].SetM(m_trkMass[iTrk][j]);
641  }
642  if (p[j].Pt() < m_trkPt[iTrk][j]) {
643  isValidCombination = false;
644  break;
645  }
646  ++j;
647  }
648  if (!isValidCombination || (m_nTrkCharge[iTrk] >= 0 && charge != m_nTrkCharge[iTrk]) || !passedDeltaRcut(p)) continue;
649 
650  if (msgLvl(MSG::DEBUG)) {
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];
654  ATH_MSG_DEBUG( "legs " << i + 1 << ": " << p[i].Pt() << " / " << p[i].Eta() << " / " << p[i].Phi() << " / " << track->charge() );
655  }
656  }
657 
658  auto mass = (std::accumulate(p.begin(), p.end(), xAOD::TrackParticle::GenVecFourMom_t())).M();
659  ATH_MSG_DEBUG( "invariant mass: " << mass );
660 
661  mon_nCombination++;
662  trkMassBeforeFit.push_back(mass * 0.001);
663  if (!isInMassRange(mass, iTrk)) continue;
664 
665  mon_nCombinationBeforeFit++;
666  auto fitterState = m_vertexFitter->makeState(state.context());
667  auto vertex = fit(tracklist, m_trkMass[iTrk], *fitterState);
668  if (!vertex) continue;
669  xAOD::TrigBphys* trigBphys = makeTrigBPhys(*vertex, m_trkMass[iTrk], state.beamSpot(), *fitterState);
670  if (m_useLeptonMomentum) trigBphys->setMass(mass);
671  state.addTrigBphysObject(trigBphys, leptonIndices);
672 
673  mon_nBPhysObject++;
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());
682 
683  } while (std::prev_permutation(combination.begin(), combination.end()));
684  }
685  return StatusCode::SUCCESS;
686 }

◆ findMuTrkCandidates()

StatusCode TrigMultiTrkComboHypo::findMuTrkCandidates ( TrigMultiTrkState< xAOD::MuonContainer > &  state) const
private

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.

749  {
750 
751  ATH_MSG_DEBUG( "Try to find muon + track combinations from the same SG::View" );
752 
753  auto& muons = state.leptons();
754  muons.clear();
755 
756  const std::vector<double> particleMasses(2, PDG::mMuon);
757 
758  for (const Decision* decision : state.previousDecisions()) {
759  if (!TrigCompositeUtils::isAnyIDPassing(decision, m_allowedIDs)) continue;
760 
761  auto decisionEL = TrigCompositeUtils::decisionToElementLink(decision, state.context());
763  auto muonEL = decision->objectLink<xAOD::MuonContainer>(TrigCompositeUtils::featureString());
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();
769  muonMomentum.SetM(PDG::mMuon);
770 
771  // add muon from decision to state.leptons
774  muons.push_back({muonEL, std::vector<ElementLink<DecisionContainer>>(1, decisionEL), decisionIDs});
775 
776  ATH_MSG_DEBUG( "Found muon (CombinedTrackParticle): " << muon->pt() << " / " << muon->eta() << " / " << muon->phi() << " / " << muon->charge() );
777 
778  auto viewLinkInfo = TrigCompositeUtils::findLink<ViewContainer>(decision, TrigCompositeUtils::viewString(), true);
779  ATH_CHECK( viewLinkInfo.isValid() );
780  auto view = *viewLinkInfo.link;
781 
782  auto tracksHandle = ViewHelper::makeHandle(view, m_trackParticleContainerKey, state.context());
783  ATH_CHECK( tracksHandle.isValid() );
784  ATH_MSG_DEBUG( "Tracks container " << m_trackParticleContainerKey << " size: " << tracksHandle->size() );
785 
786  // try to fit muon and track into common vertex: first track is always muon, second tracks comes from the same SG::View
787  std::vector<ElementLink<xAOD::TrackParticleContainer>> tracklist(2);
788  tracklist[0] = muon->inDetTrackParticleLink();
789  for (size_t idx = 0; idx < tracksHandle->size(); ++idx) {
790  const xAOD::TrackParticle* track = tracksHandle->at(idx);
791 
792  if (track->pt() < m_trkPt[0][1] || isIdenticalTracks(track, muonInDetTrack)) continue;
793  auto trackMomentum = track->genvecP4();
795  if (!isInMassRange((muonMomentum + trackMomentum).M(), 0)) continue;
796  if (m_nTrkCharge[0] >= 0 && muonInDetTrack->charge() * track->charge() > 0.) continue;
797 
798  tracklist[1] = ViewHelper::makeLink<xAOD::TrackParticleContainer>(view, tracksHandle, idx);
799 
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 <<
802  " track: " << trackMomentum.Pt() << " / " << trackMomentum.Eta() << " / " << trackMomentum.Phi() << " / " << track->charge() );
803 
804  auto fitterState = m_vertexFitter->makeState(state.context());
805  auto vertex = fit(tracklist, particleMasses, *fitterState);
806  if (!vertex) continue;
807  xAOD::TrigBphys* trigBphys = makeTrigBPhys(*vertex, particleMasses, state.beamSpot(), *fitterState);
808  // trigBphys->setRoiId(initialRoI->roiWord());
809  state.addTrigBphysObject(trigBphys, std::vector<size_t>(1, muons.size() - 1));
810  }
811  }
812 
813  return StatusCode::SUCCESS;
814 }

◆ fit()

std::unique_ptr< xAOD::Vertex > TrigMultiTrkComboHypo::fit ( const std::vector< ElementLink< xAOD::TrackParticleContainer >> &  trackParticleLinks,
const std::vector< double > &  particleMasses,
Trk::IVKalState fitterState 
) const
private

Perform a vertex fit on selected tracks.

Parameters
trackParticleLinksthe trackParticles to fit
trkMassTrack mass hypothesis for mass calculations
fitterStateThe temporary state object
Returns
The fitted vertex - null if fit fails or is very low quality

Definition at line 910 of file TrigMultiTrkComboHypo.cxx.

913  {
914 
915  ATH_MSG_DEBUG( "Perform vertex fit" );
916  std::vector<const xAOD::TrackParticle*> tracklist(trackParticleLinks.size(), nullptr);
917  std::transform(trackParticleLinks.begin(), trackParticleLinks.end(), tracklist.begin(),
918  [](const ElementLink<xAOD::TrackParticleContainer>& link){ return *link; });
919 
920  const Trk::Perigee& perigee1 = tracklist[0]->perigeeParameters();
921  const Trk::Perigee& perigee2 = tracklist[1]->perigeeParameters();
922  int flag = 0;
923  int errorcode = 0;
924  Amg::Vector3D startingPoint = m_vertexPointEstimator->getCirclesIntersectionPoint(&perigee1, &perigee2, flag, errorcode);
925  if (errorcode != 0) startingPoint = Amg::Vector3D::Zero(3);
926  ATH_MSG_DEBUG( "Starting point: (" << startingPoint(0) << ", " << startingPoint(1) << ", " << startingPoint(2) << ")" );
927 
928  m_vertexFitter->setMassInputParticles(particleMasses, fitterState);
929  std::unique_ptr<xAOD::Vertex> vertex(m_vertexFitter->fit(tracklist, startingPoint, fitterState));
930  if (!vertex) {
931  ATH_MSG_DEBUG( "Vertex fit fails" );
932  return vertex;
933  }
934  if (vertex->chiSquared() > m_chi2) {
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() << ")" );
936  vertex.reset();
937  return vertex;
938  }
939  ATH_MSG_DEBUG( "Fit is successful" );
940  vertex->clearTracks();
941  vertex->setTrackParticleLinks(trackParticleLinks);
942  return vertex;
943 }

◆ hypoTools() [1/2]

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

Definition at line 45 of file ComboHypo.h.

45 { return m_hypoTools; }

◆ hypoTools() [2/2]

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

Definition at line 46 of file ComboHypo.h.

46 { return m_hypoTools; }

◆ initialize()

StatusCode TrigMultiTrkComboHypo::initialize ( )
overridevirtual

Reimplemented from ComboHypo.

Definition at line 54 of file TrigMultiTrkComboHypo.cxx.

54  {
55  ATH_MSG_DEBUG( "TrigMultiTrkHypo::initialize()" );
56 
58 
59  // check consistency of the properties
60  ATH_CHECK( !m_nTrk.empty() );
61 
62  if (m_nTrkCharge.empty()) {
63  ATH_MSG_INFO( "totalCharge value is not specified, no charge selection for track combinations will be used" );
64  m_nTrkCharge = std::vector<int>(m_nTrk.size(), -1);
65  }
66 
67  if (m_trkMass.empty()) {
68  ATH_MSG_INFO( "trackMasses value is not specified, muon/electron mass will be used" );
69  for (const auto& n : m_nTrk) {
70  m_trkMass.value().emplace_back(std::vector<double>(n, (m_doElectrons ? PDG::mElectron : PDG::mMuon)));
71  }
72  }
73  if (m_trkPt.empty()) {
74  ATH_MSG_INFO( "trackPtThresholds value is not specified" );
75  for (const auto& n : m_nTrk) {
76  m_trkPt.value().emplace_back(std::vector<double>(n, -100.));
77  }
78  }
79  m_trkPtMin = m_trkPt[0].back();
80  for (size_t i = 0; i < m_trkPt.size(); ++i) {
82  }
83 
84  ATH_CHECK( m_trkMass.size() == m_nTrk.size() );
85  ATH_CHECK( m_trkPt.size() == m_nTrk.size() );
86 
87  for (size_t i = 0; i < m_nTrk.size(); ++i) {
88  ATH_CHECK( m_trkMass[i].size() == m_nTrk[i] );
89  ATH_CHECK( m_trkPt[i].size() == m_nTrk[i] );
90  ATH_CHECK( std::is_sorted(m_trkPt[i].begin(), m_trkPt[i].end(), std::greater<>()) );
91  }
92 
93  for (const auto& range : m_massRange.value()) {
94  ATH_CHECK( range.first < range.second );
95  }
96 
97  // dump numerical values
98  if (msgLvl(MSG::DEBUG)) {
99  for (size_t i = 0; i < m_nTrk.size(); ++i) {
100  ATH_MSG_DEBUG( "vertex topology: nTrk = " << m_nTrk[i] );
101  for (size_t j = 0; j < m_nTrk[i]; ++j) {
102  ATH_MSG_DEBUG( " " << j + 1 << " trk: mass = " << m_trkMass[i][j] << ", Pt > " << m_trkPt[i][j] );
103  }
104  }
105  msg() << MSG::DEBUG << " mass range: {";
106  for (const auto& range : m_massRange.value()) {
107  msg() << MSG::DEBUG << " { " << range.first << ", " << range.second << " }";
108  }
109  msg() << MSG::DEBUG << " }" << std::endl;
110  }
111 
112  if (m_isStreamer) {
113  ATH_MSG_DEBUG( "Configured to run in a streamer mode: no trigger objects will be created" );
114  }
115  if (!m_isStreamer && m_trigLevel != "EF") {
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;
118  }
119 
120  ATH_CHECK( !((m_trigLevel == "L2IO" || m_trigLevel == "L2MT") && m_doElectrons) );
121 
122  if (m_trigLevel == "L2" || (m_trigLevel == "EF" && m_isMuTrkMode)) {
125  }
126  else if (m_trigLevel == "L2IO" || m_trigLevel == "L2MT" || m_trigLevel == "EF") {
128  }
129  else {
130  ATH_MSG_ERROR( "trigLevel should be L2, L2IO, L2MT or EF, but " << m_trigLevel << " provided" );
131  return StatusCode::FAILURE;
132  }
133 
134  ATH_CHECK( m_trigBphysContainerKey.initialize(!m_isStreamer.value()) );
135  ATH_CHECK( m_beamSpotKey.initialize(!m_isStreamer.value()) ); // need beamSpot only to create xAOD::TrigBphys object
136 
137  ATH_CHECK( m_vertexFitter.retrieve() );
138  ATH_CHECK( m_vertexPointEstimator.retrieve() );
139  ATH_CHECK( m_v0Tools.retrieve() );
140 
141  // allowed IDs to filter out incoming decisions at L2 level
142  for (const auto& item : triggerMultiplicityMap()) {
143  const HLT::Identifier id = HLT::Identifier(item.first);
144  m_allowedIDs.insert(id.numeric());
145  if (item.second.size() > 1) {
146  for (size_t i = 0; i < item.second.size(); i++) {
147  m_allowedIDs.insert(TrigCompositeUtils::createLegName(id, i).numeric());
148  }
149  }
150  }
151  if (msgLvl(MSG::DEBUG)) {
152  ATH_MSG_DEBUG( "Allowed decisions:" );
153  for (const DecisionID& id : m_allowedIDs) {
154  ATH_MSG_DEBUG( " +++ " << HLT::Identifier(id) );
155  }
156  }
157  if (m_doElectrons) {
158  for (const DecisionID& id : m_allowedIDs) {
159  std::string name = HLT::Identifier(id).name();
160  bool isMergedElectronChain = false;
161  for (size_t i = 0; i < m_mergedElectronChains.size(); ++i) {
162  if (name.find(m_mergedElectronChains.value().at(i)) != std::string::npos) {
163  isMergedElectronChain = true;
164  break;
165  }
166  }
167  (isMergedElectronChain ? m_mergedElectronIDs.insert(id) : m_resolvedElectronIDs.insert(id));
168  }
169  if (msgLvl(MSG::DEBUG)) {
170  ATH_MSG_DEBUG( "Well-separated electron decisions:" );
171  for (const DecisionID& id : m_resolvedElectronIDs) {
172  ATH_MSG_DEBUG( " +++ " << HLT::Identifier(id) );
173  }
174  ATH_MSG_DEBUG( "Overlapping electron decisions:" );
175  for (const DecisionID& id : m_mergedElectronIDs) {
176  ATH_MSG_DEBUG( " +++ " << HLT::Identifier(id) );
177  }
178  }
179  }
180 
181  if (!m_monTool.empty()) {
182  ATH_CHECK( m_monTool.retrieve() );
183  ATH_MSG_DEBUG( "GenericMonitoringTool name:" << m_monTool );
184  }
185  else {
186  ATH_MSG_DEBUG( "No GenericMonitoringTool configured: no monitoring histograms will be available" );
187  }
188 
189  return StatusCode::SUCCESS;
190 }

◆ inputHandles()

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

Return this algorithm's input handles.

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

◆ isClonable()

bool AthReentrantAlgorithm::isClonable ( ) const
overridevirtualinherited

◆ isIdenticalTracks() [1/3]

bool TrigMultiTrkComboHypo::isIdenticalTracks ( const xAOD::Electron lhs,
const xAOD::Electron rhs 
) const
private

Definition at line 1010 of file TrigMultiTrkComboHypo.cxx.

1010  {
1011 
1012  return isIdenticalTracks(*lhs->trackParticleLink(), *rhs->trackParticleLink());
1013 }

◆ isIdenticalTracks() [2/3]

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

Definition at line 1005 of file TrigMultiTrkComboHypo.cxx.

1005  {
1006 
1008 }

◆ isIdenticalTracks() [3/3]

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

Attempts to identify identical tracks by selection on DeltaR.

Returns
true if 'identical', false otherwise

Definition at line 998 of file TrigMultiTrkComboHypo.cxx.

998  {
999 
1000  if (lhs->charge() * rhs->charge() < 0.) return false;
1001  return (ROOT::Math::VectorUtil::DeltaR(lhs->genvecP4(), rhs->genvecP4()) < m_deltaR);
1002 }

◆ isInMassRange()

bool TrigMultiTrkComboHypo::isInMassRange ( double  mass,
size_t  idx 
) const
private

Definition at line 1016 of file TrigMultiTrkComboHypo.cxx.

1016  {
1017 
1018  const auto& range = m_massRange[idx];
1019  return (mass > range.first && mass < range.second);
1020 }

◆ legToInputCollectionMap()

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

Definition at line 44 of file ComboHypo.h.

44 { return m_legToInputCollectionMap.value(); }

◆ makeTrigBPhys()

xAOD::TrigBphys * TrigMultiTrkComboHypo::makeTrigBPhys ( const xAOD::Vertex vertex,
const std::vector< double > &  particleMasses,
const xAOD::Vertex beamSpot,
const Trk::IVKalState fitterState 
) const
private

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

Parameters
vertexFitted Vertex object
particleMassesTrack mass hypothesis for mass calculations
beamSpotThe beamspot vertex
fitterStateVertexer state object
Returns
Pointer to the TrigBphys object

Definition at line 946 of file TrigMultiTrkComboHypo.cxx.

950  {
951 
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.;
957  }
958 
960  for (size_t i = 0; i < vertex.nTrackParticles(); ++i) {
961  auto p = vertex.trackParticle(i)->genvecP4();
962  p.SetM(particleMasses[i]);
963  momentum += p;
964  }
965 
967  result->makePrivateStore();
968  result->initialise(0, momentum.Eta(), momentum.Phi(), momentum.Pt(), xAOD::TrigBphys::MULTIMU, momentum.M(), xAOD::TrigBphys::EF);
969 
970  if (m_doElectrons) result->setParticleType(xAOD::TrigBphys::JPSIEE);
971  result->setFitmass(invariantMass);
972  result->setFitchi2(vertex.chiSquared());
973  result->setFitndof(vertex.numberDoF());
974  result->setFitx(vertex.x());
975  result->setFity(vertex.y());
976  result->setFitz(vertex.z());
977  result->setTrackParticleLinks(vertex.trackParticleLinks());
978  result->setLxy(m_v0Tools->lxy(&vertex, &beamSpot));
979  result->setLxyError(m_v0Tools->lxyError(&vertex, &beamSpot));
980 
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() );
993 
994  return result;
995 }

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

263  {
264 
265  auto& leptons = state.leptons();
266  leptons.clear();
267 
268  std::vector<const Decision*> previousDecisions(state.previousDecisions().begin(), state.previousDecisions().end());
269  std::map<const Decision*, int> decisionToInputCollectionIndexMap;
270  for (const auto& decision : previousDecisions) decisionToInputCollectionIndexMap.emplace(decision, 0);
272  for (size_t k = 1; k < decisionsInput().size(); ++k) {
273  auto previousDecisionsHandle = SG::makeHandle(decisionsInput().at(k), state.context());
274  CHECK( previousDecisionsHandle.isValid() );
275  ATH_MSG_DEBUG( "Adding " << previousDecisionsHandle->size() << " decisions from " << decisionsInput().at(k).key() );
276  for (const Decision* decision : *previousDecisionsHandle) {
277  previousDecisions.push_back(decision);
278  decisionToInputCollectionIndexMap.emplace(decision, static_cast<int>(k));
279  }
280  }
281  }
282 
283  // all muons/electrons from views are already connected with previous decisions by TrigMuonEFHypoAlg
284  for (const Decision* decision : previousDecisions) {
286 
287  ElementLink<T> leptonEL;
288  if (decision->hasObjectLink(TrigCompositeUtils::featureString(), ClassID_traits<T>::ID())) {
289  leptonEL = decision->objectLink<T>(TrigCompositeUtils::featureString());
290  }
291  else {
292  auto leptonLinkInfo = TrigCompositeUtils::findLink<T>(decision, TrigCompositeUtils::featureString(), true);
293  ATH_CHECK( leptonLinkInfo.isValid() );
294  leptonEL = leptonLinkInfo.link;
295  }
296 
297  const auto lepton = *leptonEL;
299  if (!lepton->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle)) continue;
300  if (!lepton->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)) continue;
301  }
303  if (!lepton->trackParticle()) continue;
304  }
305  else {
306  ATH_MSG_ERROR( "mergeLeptonsFromDecisions(): no scenario for the provided CONTAINER is specified" );
307  return StatusCode::FAILURE;
308  }
309  auto decisionEL = TrigCompositeUtils::decisionToElementLink(decision, state.context());
310 
311  auto itr = leptons.end();
312  if (m_applyOverlapRemoval) {
313  itr = std::find_if(leptons.begin(), leptons.end(),
314  [this, lepton = lepton](const auto& x){ return this->isIdenticalTracks(lepton, *x.link); });
315  }
316  if (itr == leptons.end()) {
317  leptons.push_back({leptonEL, std::vector<ElementLink<DecisionContainer>>(1, decisionEL), DecisionIDContainer()});
318  }
319  else {
320  (*itr).decisionLinks.push_back(decisionEL);
321  }
322  }
323 
324  // muon->pt() is equal to muon->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle)->pt()
325  // and the later is used by TrigMuonEFHypoTool for classification of muEFCB candidates
326  std::sort(leptons.begin(), leptons.end(), [](const auto& lhs, const auto& rhs){ return ((*lhs.link)->pt() > (*rhs.link)->pt()); });
327 
328  // for each muon we extract DecisionIDs stored in the associated Decision objects and copy them at muon.decisionIDs
329  const auto& legToInputCollectionIndexMap = legToInputCollectionMap();
330  for (auto& item : leptons) {
331  for (const ElementLink<xAOD::TrigCompositeContainer>& decisionEL : item.decisionLinks) {
333  auto decisionIndex = decisionToInputCollectionIndexMap[*decisionEL];
334  for (const auto& id : TrigCompositeUtils::decisionIDs(*decisionEL)) {
336  auto legIndex = static_cast<size_t>(TrigCompositeUtils::getIndexFromLeg(id));
337  std::string chain = TrigCompositeUtils::getIDFromLeg(id).name();
338  if (legToInputCollectionIndexMap.at(chain).at(legIndex) == decisionIndex) item.decisionIDs.insert(id);
339  }
340  }
341  else {
342  TrigCompositeUtils::decisionIDs(*decisionEL, item.decisionIDs);
343  }
344  }
345  }
346 
347  if (msgLvl(MSG::DEBUG)) {
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;
351  const xAOD::TrackParticle* track;
353  track = lepton->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
354  }
355  else {
356  track = lepton->trackParticle();
357  }
358  ATH_MSG_DEBUG( " -- lepton InDetTrackParticle pt/eta/phi/q: " << track->pt() << " / " << track->eta() << " / " << track->phi() << " / " << track->charge() );
359  ATH_MSG_DEBUG( " lepton pt (muon: CombinedTrackParticle): " << lepton->pt() << " / " << lepton->eta() << " / " << lepton->phi() << " / " << lepton->charge() );
360  ATH_MSG_DEBUG( " allowed decisions:" );
361  for (const DecisionID& id : item.decisionIDs) {
362  ATH_MSG_DEBUG( " +++ " << HLT::Identifier(id) );
363  }
364  }
365  }
366 
367  return StatusCode::SUCCESS;
368 }

◆ mergeTracksFromDecisions()

template<typename CONTAINER >
StatusCode TrigMultiTrkComboHypo::mergeTracksFromDecisions ( TrigMultiTrkStateBase state) const
private

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.

422  {
423 
424  auto& tracks = state.tracks();
425  tracks.clear();
426 
427  // all muons/electrons from views are already connected with previous decisions by TrigMuonEFHypoAlg or by TrigEgammaPrecisionElectronHypoAlg
428  for (const Decision* decision : state.previousDecisions()) {
429  if (!TrigCompositeUtils::isAnyIDPassing(decision, m_allowedIDs)) continue;
430 
432  auto leptonEL = decision->objectLink<CONTAINER>(TrigCompositeUtils::featureString());
433  const auto lepton = *leptonEL;
434 
437  if (!lepton->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle)) continue;
438  if (!lepton->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)) continue;
439  trackEL = lepton->inDetTrackParticleLink();
440  }
442  if (!lepton->idTrack()) continue;
443  trackEL = lepton->idTrackLink();
444  }
446  if (!lepton->trackParticle()) continue;
447  trackEL = lepton->trackParticleLink();
448  }
449  else {
450  ATH_MSG_ERROR( "mergeTracksFromDecisions(): no scenario for the provided CONTAINER is specified" );
451  return StatusCode::FAILURE;
452  }
453 
454  if (!trackEL.isValid()) continue;
455  if (!m_applyOverlapRemoval ||
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);
459  }
460  }
461  std::sort(tracks.begin(), tracks.end(), [](const auto& lhs, const auto& rhs){ return ((*lhs)->pt() > (*rhs)->pt()); });
462 
463  if (msgLvl(MSG::DEBUG)) {
464  ATH_MSG_DEBUG( "Dump found tracks before vertex fit: " << tracks.size() << " candidates" );
465  for (const auto& trackEL : tracks) {
466  const xAOD::TrackParticle* track = *trackEL;
467  ATH_MSG_DEBUG( " -- track pt/eta/phi/q: " << track->pt() << " / " << track->eta() << " / " << track->phi() << " / " << track->charge() );
468  }
469  }
470 
471  return StatusCode::SUCCESS;
472 }

◆ mergeTracksFromViews()

StatusCode TrigMultiTrkComboHypo::mergeTracksFromViews ( TrigMultiTrkStateBase 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().

Definition at line 371 of file TrigMultiTrkComboHypo.cxx.

371  {
372 
373  auto& tracks = state.tracks();
374  tracks.clear();
375 
376  std::set<const SG::View*> views;
377  for (const Decision* decision : state.previousDecisions()) {
378  if (!TrigCompositeUtils::isAnyIDPassing(decision, m_allowedIDs)) continue;
379 
380  auto viewLinkInfo = TrigCompositeUtils::findLink<ViewContainer>(decision, TrigCompositeUtils::viewString(), true);
381  ATH_CHECK( viewLinkInfo.isValid() );
382  const SG::View* view = *viewLinkInfo.link;
383  if (views.find(view) != views.end()) continue; // tracks from this view have already been fetched
384 
385  auto tracksHandle = ViewHelper::makeHandle(view, m_trackParticleContainerKey, state.context());
386  ATH_CHECK( tracksHandle.isValid() );
387  ATH_MSG_DEBUG( "tracks handle " << m_trackParticleContainerKey << " size: " << tracksHandle->size() );
388 
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));
393  }
394 
395  for (const auto& trackEL : tracksFromView) {
396  const xAOD::TrackParticle* track = *trackEL;
397  if (track->definingParametersCovMatrixVec().empty() || track->pt() < m_trkPtMin) continue;
398 
399  if (views.empty() || !m_applyOverlapRemoval ||
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);
403  }
404  }
405  views.insert(view);
406  }
407  std::sort(tracks.begin(), tracks.end(), [](const auto& lhs, const auto& rhs){ return ((*lhs)->pt() > (*rhs)->pt()); });
408 
409  if (msgLvl(MSG::DEBUG)) {
410  ATH_MSG_DEBUG( "Dump found tracks before vertex fit: " << tracks.size() << " candidates" );
411  for (const auto& trackEL : tracks) {
412  const xAOD::TrackParticle* track = *trackEL;
413  ATH_MSG_DEBUG( " -- track pt/eta/phi/q: " << track->pt() << " / " << track->eta() << " / " << track->phi() << " / " << track->charge() );
414  }
415  }
416 
417  return StatusCode::SUCCESS;
418 }

◆ msg() [1/2]

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

Definition at line 24 of file AthCommonMsg.h.

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

◆ msg() [2/2]

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

Definition at line 27 of file AthCommonMsg.h.

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

◆ msgLvl()

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

Definition at line 30 of file AthCommonMsg.h.

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

◆ outputHandles()

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

Return this algorithm's output handles.

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

◆ passedDeltaRcut()

bool TrigMultiTrkComboHypo::passedDeltaRcut ( const std::vector< xAOD::TrackParticle::GenVecFourMom_t > &  momenta) const
private

Definition at line 1023 of file TrigMultiTrkComboHypo.cxx.

1023  {
1024 
1025  if (m_deltaRMax == std::numeric_limits<float>::max() && m_deltaRMin == std::numeric_limits<float>::lowest()) {
1026  return true;
1027  }
1028  for (size_t i = 0; i < p.size(); ++i) {
1029  for (size_t j = i + 1; j < p.size(); ++j) {
1030  double deltaR = ROOT::Math::VectorUtil::DeltaR(p[i], p[j]);
1031  if (deltaR > m_deltaRMax || deltaR < m_deltaRMin) return false;
1032  }
1033  }
1034  return true;
1035 }

◆ processMergedElectrons()

StatusCode TrigMultiTrkComboHypo::processMergedElectrons ( TrigMultiTrkState< xAOD::ElectronContainer > &  state) const
private

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.

689  {
690 
691  ATH_MSG_DEBUG( "Try to find electrons originating from the same EM cluster" );
692 
693  // some electrons can be already attached to the list, add electrons from BPH-0DR3-EM7J15 clusters to the end
694  auto& leptons = state.leptons();
695 
696  if (m_mergedElectronIDs.empty()) {
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;
699  }
700 
701  const std::vector<double> particleMasses(2, PDG::mElectron);
702 
703  for (const Decision* decision : state.previousDecisions()) {
705 
706  auto decisionEL = TrigCompositeUtils::decisionToElementLink(decision, state.context());
708  auto electronEL = decision->objectLink<xAOD::ElectronContainer>(TrigCompositeUtils::featureString());
709  const auto electron = *electronEL;
710  if (!electron->trackParticle()) continue;
711 
712  // get all electrons from the same SG::View, i.e. from the same initialRoI
713  const auto electronContainer = electronEL.getStorableObjectPointer();
714  if (electronContainer->size() <= 1) continue;
715 
716  // add electron from decision to state.leptons
719  leptons.push_back({electronEL, std::vector<ElementLink<DecisionContainer>>(1, decisionEL), decisionIDs});
720 
721  // get initialRoI this electron originating from
722  auto roiInfo = TrigCompositeUtils::findLink<TrigRoiDescriptorCollection>(decision, TrigCompositeUtils::initialRoIString(), true);
723  ATH_CHECK( roiInfo.isValid() );
724  auto initialRoI = *roiInfo.link;
725 
726  // try to build di-electron pairs: first electron is always from decision, second from the same SG::View
727  std::vector<ElementLink<xAOD::TrackParticleContainer>> tracklist(2);
728  tracklist[0] = electron->trackParticleLink();
729  for (size_t i = 0; i < electronContainer->size(); ++i) {
730  const auto electronFromView = electronContainer->at(i);
731  if (electronFromView == electron) continue;
732  if (!electronFromView->trackParticle()) continue;
733  if (!electronFromView->caloCluster() || electronFromView->caloCluster()->et() < m_caloClusterEtThreshold) continue;
734  tracklist[1] = electronFromView->trackParticleLink();
735 
736  auto fitterState = m_vertexFitter->makeState(state.context());
737  auto vertex = fit(tracklist, particleMasses, *fitterState);
738  if (!vertex) continue;
739  xAOD::TrigBphys* trigBphys = makeTrigBPhys(*vertex, particleMasses, state.beamSpot(), *fitterState);
740  trigBphys->setRoiId(initialRoI->roiWord());
741  state.addTrigBphysObject(trigBphys, std::vector<size_t>(1, leptons.size() - 1));
742  }
743  }
744 
745  return StatusCode::SUCCESS;
746 }

◆ renounce()

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

Definition at line 380 of file AthCommonDataStore.h.

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

◆ renounceArray()

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

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ setFilterPassed()

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

Definition at line 139 of file AthReentrantAlgorithm.h.

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

◆ sysExecute()

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

Execute an algorithm.

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

Definition at line 67 of file AthReentrantAlgorithm.cxx.

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

◆ sysInitialize()

StatusCode AthReentrantAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

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

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

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

Reimplemented in InputMakerBase, and HypoBase.

Definition at line 96 of file AthReentrantAlgorithm.cxx.

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

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

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

◆ triggerMultiplicityMap()

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

Definition at line 43 of file ComboHypo.h.

43 { return m_multiplicitiesReqMap.value(); }

◆ updateVHKA()

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

Definition at line 308 of file AthCommonDataStore.h.

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

Member Data Documentation

◆ m_allowedIDs

TrigCompositeUtils::DecisionIDContainer TrigMultiTrkComboHypo::m_allowedIDs
private

Definition at line 309 of file TrigMultiTrkComboHypo.h.

◆ 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

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

Definition at line 262 of file TrigMultiTrkComboHypo.h.

◆ 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
Initial value:
{this, "chi2", 150.,
"chi2 cut for the fitted vertex"}

Definition at line 288 of file TrigMultiTrkComboHypo.h.

◆ 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
Initial value:
{this, "deltaRMax", std::numeric_limits<float>::max(),
"maximum deltaR between tracks in a candidate"}

Definition at line 284 of file TrigMultiTrkComboHypo.h.

◆ 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

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_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

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

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthReentrantAlgorithm::m_extendedExtraObjects
privateinherited

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

Empty if no symlinks were found.

Definition at line 153 of file AthReentrantAlgorithm.h.

◆ m_hypoTools

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

Definition at line 106 of file ComboHypo.h.

◆ m_inputs

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

Definition at line 50 of file ComboHypo.h.

◆ 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

TrigCompositeUtils::DecisionIDContainer TrigMultiTrkComboHypo::m_mergedElectronIDs
private

Definition at line 311 of file TrigMultiTrkComboHypo.h.

◆ m_monTool

ToolHandle<GenericMonitoringTool> TrigMultiTrkComboHypo::m_monTool {this, "MonTool", "", "monitoring tool"}
private

Definition at line 307 of file TrigMultiTrkComboHypo.h.

◆ m_multiplicitiesReqMap

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

Definition at line 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

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

Definition at line 51 of file ComboHypo.h.

◆ m_requireUniqueROI

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

Definition at line 53 of file ComboHypo.h.

◆ m_resolvedElectronIDs

TrigCompositeUtils::DecisionIDContainer TrigMultiTrkComboHypo::m_resolvedElectronIDs
private

Definition at line 310 of file TrigMultiTrkComboHypo.h.

◆ m_trackParticleContainerKey

SG::ReadHandleKey<xAOD::TrackParticleContainer> TrigMultiTrkComboHypo::m_trackParticleContainerKey {this, "TrackCollectionKey", "Tracks", "input TrackParticle container name"}
private

Definition at line 256 of file TrigMultiTrkComboHypo.h.

◆ m_trigBphysContainerKey

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

Definition at line 259 of file TrigMultiTrkComboHypo.h.

◆ 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

Definition at line 313 of file TrigMultiTrkComboHypo.h.

◆ 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

Definition at line 305 of file TrigMultiTrkComboHypo.h.

◆ m_varHandleArraysDeclared

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

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vertexFitter

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

Definition at line 304 of file TrigMultiTrkComboHypo.h.

◆ m_vertexPointEstimator

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

Definition at line 303 of file TrigMultiTrkComboHypo.h.

◆ 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:
str::trackMomentum
const std::string trackMomentum
Definition: BTagTrackIpAccessor.cxx:15
ComboHypo::m_multiplicitiesReqMap
Gaudi::Property< Combo::MultiplicityReqMap > m_multiplicitiesReqMap
Definition: ComboHypo.h:56
xAOD::TrackParticle_v1::GenVecFourMom_t
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzM4D< double > > GenVecFourMom_t
Base 4 Momentum type for TrackParticle.
Definition: TrackParticle_v1.h:78
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:195
TrigMultiTrkComboHypo::m_mergedElectronIDs
TrigCompositeUtils::DecisionIDContainer m_mergedElectronIDs
Definition: TrigMultiTrkComboHypo.h:311
TrigMultiTrkComboHypo::createDecisionObjects
StatusCode createDecisionObjects(TrigMultiTrkStateBase &) const
Create a decision for each xAOD::TrigBphys object from state.trigBphysCollection() and save it to sta...
Definition: TrigMultiTrkComboHypo.cxx:842
electronContainer
xAOD::ElectronContainer * electronContainer
Definition: TrigGlobEffCorrValidation.cxx:187
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
get_generator_info.result
result
Definition: get_generator_info.py:21
ITrigBphysState::beamSpot
const xAOD::Vertex & beamSpot() const
Definition: ITrigBphysState.h:48
runLayerRecalibration.chain
chain
Definition: runLayerRecalibration.py:175
TrigCompositeUtils::DecisionID
unsigned int DecisionID
Definition: TrigComposite_v1.h:27
ComboHypo::decisionsOutput
const SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsOutput() const
Definition: ComboHypo.h:42
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
TrigMultiTrkComboHypo::filterTrackCombinations
StatusCode filterTrackCombinations(TrigMultiTrkStateBase &) const
Make all possible combinations from state.tracks(), fit tracks to the common vertex and set state....
Definition: TrigMultiTrkComboHypo.cxx:475
TrigCompositeUtils::passed
bool passed(DecisionID id, const DecisionIDContainer &idSet)
checks if required decision ID is in the set of IDs in the container
Definition: TrigCompositeUtilsRoot.cxx:117
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TrigCompositeUtils::recursiveGetDecisions
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.
Definition: TrigCompositeUtilsRoot.cxx:422
TrigMultiTrkComboHypo::m_deltaR
Gaudi::Property< float > m_deltaR
Definition: TrigMultiTrkComboHypo.h:282
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
HLT::Identifier::numeric
TrigCompositeUtils::DecisionID numeric() const
numeric ID
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:47
TrigMultiTrkComboHypo::m_combineInputDecisionCollections
Gaudi::Property< bool > m_combineInputDecisionCollections
Definition: TrigMultiTrkComboHypo.h:276
Base_Fragment.mass
mass
Definition: Sherpa_i/share/common/Base_Fragment.py:59
TrigMultiTrkComboHypo::mergeLeptonsFromDecisions
StatusCode mergeLeptonsFromDecisions(TrigMultiTrkState< CONTAINER > &) const
Go through state.previousDecisions(), fetch xAOD::Muons/xAODElectron objects attached to decisions an...
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
xAOD::TrackParticle_v1::charge
float charge() const
Returns the charge.
Definition: TrackParticle_v1.cxx:150
TrigCompositeUtils::newDecisionIn
Decision * newDecisionIn(DecisionContainer *dc, const std::string &name)
Helper method to create a Decision object, place it in the container and return a pointer to it.
Definition: TrigCompositeUtilsRoot.cxx:46
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
hist_file_dump.d
d
Definition: hist_file_dump.py:137
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
TrigMultiTrkStateBase
Definition: TrigMultiTrkComboHypo.h:59
TrigCompositeUtils::NavGraph::finalNodes
const std::vector< NavGraphNode * > & finalNodes() const
Get all final nodes.
Definition: NavGraph.cxx:100
TrigMultiTrkComboHypo::copyDecisionObjects
StatusCode copyDecisionObjects(TrigMultiTrkStateBase &) const
All appropriate decisions from state.previousDecisions() will be copied to state.decisions() if flag ...
Definition: TrigMultiTrkComboHypo.cxx:817
TrigMultiTrkComboHypo::m_deltaRMin
Gaudi::Property< float > m_deltaRMin
Definition: TrigMultiTrkComboHypo.h:286
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
TrigMultiTrkComboHypo::m_isStreamer
Gaudi::Property< bool > m_isStreamer
Definition: TrigMultiTrkComboHypo.h:290
met::DeltaR
@ DeltaR
Definition: METRecoCommon.h:11
xAOD::TrigBphys_v1::JPSIEE
@ JPSIEE
Definition: TrigBphys_v1.h:53
accumulate
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
Definition: FPGATrackSimMatrixAccumulator.cxx:22
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
TrigMultiTrkComboHypo::m_doElectrons
Gaudi::Property< bool > m_doElectrons
Definition: TrigMultiTrkComboHypo.h:294
ViewHelper::makeHandle
SG::ReadHandle< T > makeHandle(const SG::View *view, const SG::ReadHandleKey< T > &rhKey, const EventContext &context)
navigate from the TrigComposite to nearest view and fetch object from it
Definition: ViewHelper.h:265
PDG20::mMuon
static constexpr double mMuon
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:12
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
Definition: AthCommonDataStore.h:380
TrigMultiTrkComboHypo::m_trkMass
Gaudi::Property< std::vector< std::vector< double > > > m_trkMass
Definition: TrigMultiTrkComboHypo.h:268
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
python.TrigCompositeUtils.isLegId
def isLegId(chainName)
Definition: DecisionHandling/python/TrigCompositeUtils.py:18
skel.it
it
Definition: skel.GENtoEVGEN.py:396
test_pyathena.pt
pt
Definition: test_pyathena.py:11
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
TrigCompositeUtils::insertDecisionIDs
void insertDecisionIDs(const Decision *src, Decision *dest)
Appends the decision IDs of src to the dest decision object.
Definition: TrigCompositeUtilsRoot.cxx:80
TrigMultiTrkComboHypo::m_trigLevel
Gaudi::Property< std::string > m_trigLevel
Definition: TrigMultiTrkComboHypo.h:296
TrigCompositeUtils::passedDecisionIDs
DecisionIDContainer passedDecisionIDs(const Decision *d, const T &required)
return DecisionIDs in Decision object that match the required ones
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
athena.value
value
Definition: athena.py:124
xAOD::TrigComposite_v1::hasDetail
bool hasDetail(const std::string &name) const
Check if a given type of detail is available.
TrigCompositeUtils::comboHypoAlgNodeName
const std::string & comboHypoAlgNodeName()
Definition: TrigCompositeUtilsRoot.cxx:908
TrigCompositeUtils::createAndStore
SG::WriteHandle< DecisionContainer > createAndStore(const SG::WriteHandleKey< DecisionContainer > &key, const EventContext &ctx)
Creates and right away records the DecisionContainer with the key.
Definition: TrigCompositeUtilsRoot.cxx:30
TrigMultiTrkComboHypo::fit
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.
Definition: TrigMultiTrkComboHypo.cxx:910
TrigMultiTrkState::leptons
std::vector< LEPTON > & leptons()
Definition: TrigMultiTrkComboHypo.h:106
TrigMultiTrkComboHypo::m_checkMultiplicity
Gaudi::Property< bool > m_checkMultiplicity
Definition: TrigMultiTrkComboHypo.h:280
Phi
@ Phi
Definition: RPCdef.h:8
TrigMultiTrkComboHypo::m_applyOverlapRemoval
Gaudi::Property< bool > m_applyOverlapRemoval
Definition: TrigMultiTrkComboHypo.h:274
TrigMultiTrkComboHypo::m_nTrkCharge
Gaudi::Property< std::vector< int > > m_nTrkCharge
Definition: TrigMultiTrkComboHypo.h:266
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
TrigMultiTrkStateBase::tracks
std::vector< ElementLink< xAOD::TrackParticleContainer > > & tracks()
Definition: TrigMultiTrkComboHypo.h:79
isValid
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition: AtlasPID.h:620
TrigMultiTrkComboHypo::processMergedElectrons
StatusCode processMergedElectrons(TrigMultiTrkState< xAOD::ElectronContainer > &) const
Make all possible combinations from electrons originating from the same BPH-0DR3-EM7J15 cluster,...
Definition: TrigMultiTrkComboHypo.cxx:689
x
#define x
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
TrigMultiTrkComboHypo::m_vertexPointEstimator
ToolHandle< InDet::VertexPointEstimator > m_vertexPointEstimator
Definition: TrigMultiTrkComboHypo.h:303
TrigMultiTrkComboHypo::m_mergedElectronChains
Gaudi::Property< std::vector< std::string > > m_mergedElectronChains
Definition: TrigMultiTrkComboHypo.h:298
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
TrigMultiTrkComboHypo::mergeTracksFromViews
StatusCode mergeTracksFromViews(TrigMultiTrkStateBase &) const
Go through state.previousDecisions() and fetch xAOD::TrackParticle objects associated with the neares...
Definition: TrigMultiTrkComboHypo.cxx:371
xAOD::Electron_v1::trackParticleLink
const ElementLink< TrackParticleContainer > & trackParticleLink(size_t index=0) const
ElementLink to the xAOD::TrackParticle/s that match the electron candidate.
Definition: Electron_v1.cxx:68
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
TrigMultiTrkComboHypo::m_trackParticleContainerKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerKey
Definition: TrigMultiTrkComboHypo.h:256
xAOD::TrigBphys_v1::setRoiId
void setRoiId(uint32_t id)
set method: roiId
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
AthCommonDataStore
Definition: AthCommonDataStore.h:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ComboHypo::ComboHypo
ComboHypo(const std::string &name, ISvcLocator *pSvcLocator)
Definition: ComboHypo.cxx:13
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
TrigMultiTrkComboHypo::m_caloClusterEtThreshold
Gaudi::Property< double > m_caloClusterEtThreshold
Definition: TrigMultiTrkComboHypo.h:300
lumiFormat.i
int i
Definition: lumiFormat.py:85
ComboHypo::hypoTools
ToolHandleArray< ComboHypoToolBase > & hypoTools()
Definition: ComboHypo.h:45
TrigCompositeUtils::initialRoIString
const std::string & initialRoIString()
Definition: TrigCompositeUtilsRoot.cxx:868
TrigMultiTrkComboHypo::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrigMultiTrkComboHypo.h:307
ITrigBphysState::context
const EventContext & context() const
Definition: ITrigBphysState.h:42
TrigCompositeUtils::getLinkToPrevious
const std::vector< ElementLink< DecisionContainer > > getLinkToPrevious(const Decision *d)
returns links to previous decision object 'seed'
Definition: TrigCompositeUtilsRoot.cxx:156
TrigCompositeUtils::typelessFindLinks
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...
Definition: TrigCompositeUtilsRoot.cxx:579
beamspotman.n
n
Definition: beamspotman.py:731
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
master.flag
bool flag
Definition: master.py:29
ClassID_traits
Default, invalid implementation of ClassID_traits.
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:40
TrigMultiTrkComboHypo::m_useLeptonMomentum
Gaudi::Property< bool > m_useLeptonMomentum
Definition: TrigMultiTrkComboHypo.h:278
xAOD::TrigBphys_v1::setMass
void setMass(float)
Set the mass of the object.
TrigMultiTrkComboHypo::m_isMuTrkMode
Gaudi::Property< bool > m_isMuTrkMode
Definition: TrigMultiTrkComboHypo.h:292
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
ComboHypo::m_hypoTools
ToolHandleArray< ComboHypoToolBase > m_hypoTools
Definition: ComboHypo.h:106
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
TrigCompositeUtils::decisionToElementLink
ElementLink< DecisionContainer > decisionToElementLink(const Decision *d, const EventContext &ctx)
Takes a raw pointer to a Decision and returns an ElementLink to the Decision.
Definition: TrigCompositeUtilsRoot.cxx:122
xAOD::TauHelpers::trackParticleLinks
std::vector< ElementLink< xAOD::TrackParticleContainer > > trackParticleLinks(const xAOD::TauJet *tau, xAOD::TauJetParameters::TauTrackFlag flag=xAOD::TauJetParameters::TauTrackFlag::classifiedCharged)
Definition: TauxAODHelpers.cxx:22
TrigCompositeUtils::NavGraph
Structure to hold a transient Directed Acyclic Graph (DAG) structure. NavGraph is populated from,...
Definition: NavGraph.h:111
TrigMultiTrkStateBase::trigBphysLegIndices
std::vector< std::vector< size_t > > & trigBphysLegIndices()
Definition: TrigMultiTrkComboHypo.h:77
compute_lumi.leg
leg
Definition: compute_lumi.py:95
TrigMultiTrkComboHypo::isInMassRange
bool isInMassRange(double mass, size_t idx) const
Definition: TrigMultiTrkComboHypo.cxx:1016
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
xAOD::TrigBphys_v1::fitchi2
float fitchi2() const
accessor method: chi2 from vertex fit
TrigMultiTrkComboHypo::m_allowedIDs
TrigCompositeUtils::DecisionIDContainer m_allowedIDs
Definition: TrigMultiTrkComboHypo.h:309
ComboHypo::triggerMultiplicityMap
const Combo::MultiplicityReqMap & triggerMultiplicityMap() const
Definition: ComboHypo.h:43
xAOD::TrackParticle_v1::genvecP4
GenVecFourMom_t genvecP4() const
The full 4-momentum of the particle : GenVector form.
Definition: TrackParticle_v1.cxx:116
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
TrigMultiTrkComboHypo::makeTrigBPhys
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.
Definition: TrigMultiTrkComboHypo.cxx:946
ComboHypo::m_outputs
SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainer > m_outputs
Definition: ComboHypo.h:51
TrigMultiTrkStateBase::getDecisionIDs
virtual TrigCompositeUtils::DecisionIDContainer & getDecisionIDs(size_t)=0
xAOD::TrigComposite_v1
Class used to describe composite objects in the HLT.
Definition: TrigComposite_v1.h:52
SG::AuxElement::index
size_t index() const
Return the index of this element within its container.
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
HLT::Identifier
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:20
TrigMultiTrkComboHypo::copyAdditionalDecisionObjects
StatusCode copyAdditionalDecisionObjects(TrigMultiTrkStateBase &) const
For chains from CombinedSlice (similar to 'HLT_e9_lhvloose_e5_lhvloose_bBeeM6000_mu4_L1BPH-0M9-EM7-EM...
Definition: TrigMultiTrkComboHypo.cxx:881
xAOD::decisions
decisions
Definition: TrigComposite_v1.cxx:101
AthReentrantAlgorithm::m_extendedExtraObjects
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Definition: AthReentrantAlgorithm.h:153
PDG20::mElectron
static constexpr double mElectron
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:11
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
fill
void fill(H5::Group &out_file, size_t iterations)
Definition: test-hdf5-writer.cxx:95
TrigCompositeUtils::featureString
const std::string & featureString()
Definition: TrigCompositeUtilsRoot.cxx:884
ComboHypo::initialize
virtual StatusCode initialize() override
Definition: ComboHypo.cxx:22
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
TrigMultiTrkState::addTrigBphysObject
virtual void addTrigBphysObject(xAOD::TrigBphys *trigBphysObject, const std::vector< size_t > &legIndices) override final
Definition: TrigMultiTrkComboHypo.h:113
ComboHypo::m_legToInputCollectionMap
Gaudi::Property< Combo::LegMap > m_legToInputCollectionMap
Definition: ComboHypo.h:60
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:227
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
xAOD::TrigBphys_v1::EF
@ EF
Definition: TrigBphys_v1.h:85
TrigCompositeUtils::Decision
xAOD::TrigComposite Decision
Definition: Event/xAOD/xAODTrigger/xAODTrigger/TrigComposite.h:20
AthReentrantAlgorithm::sysInitialize
virtual StatusCode sysInitialize() override
Override sysInitialize.
Definition: AthReentrantAlgorithm.cxx:96
TrigMultiTrkComboHypo::m_massRange
Gaudi::Property< std::vector< std::pair< double, double > > > m_massRange
Definition: TrigMultiTrkComboHypo.h:272
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
TrigMultiTrkComboHypo::findMuTrkCandidates
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-...
Definition: TrigMultiTrkComboHypo.cxx:749
charge
double charge(const T &p)
Definition: AtlasPID.h:756
TrigMultiTrkComboHypo::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: TrigMultiTrkComboHypo.h:262
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
item
Definition: ItemListSvc.h:43
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
ComboHypo::m_inputs
SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > m_inputs
Definition: ComboHypo.h:50
TrigMultiTrkComboHypo::isIdenticalTracks
bool isIdenticalTracks(const xAOD::TrackParticle *lhs, const xAOD::TrackParticle *rhs) const
Attempts to identify identical tracks by selection on DeltaR.
Definition: TrigMultiTrkComboHypo.cxx:998
TrigMultiTrkComboHypo::m_trkPt
Gaudi::Property< std::vector< std::vector< double > > > m_trkPt
Definition: TrigMultiTrkComboHypo.h:270
TrigMultiTrkComboHypo::findMultiLeptonCandidates
StatusCode findMultiLeptonCandidates(TrigMultiTrkState< CONTAINER > &) const
Make all possible combinations from state.leptons(), fit tracks to the common vertex,...
ITrigBphysState::previousDecisions
const TrigCompositeUtils::DecisionContainer & previousDecisions() const
Definition: ITrigBphysState.h:43
TrigCompositeUtils::createLegName
HLT::Identifier createLegName(const HLT::Identifier &chainIdentifier, size_t counter)
Generate the HLT::Identifier which corresponds to a specific leg of a given chain.
Definition: TrigCompositeUtilsRoot.cxx:166
TrigMultiTrkComboHypo::m_deltaRMax
Gaudi::Property< float > m_deltaRMax
Definition: TrigMultiTrkComboHypo.h:284
TrigMultiTrkComboHypo::m_v0Tools
ToolHandle< Trk::V0Tools > m_v0Tools
Definition: TrigMultiTrkComboHypo.h:305
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
TrigCompositeUtils::linkToPrevious
void linkToPrevious(Decision *d, const std::string &previousCollectionKey, size_t previousIndex)
Links to the previous object, location of previous 'seed' decision supplied by hand.
Definition: TrigCompositeUtilsRoot.cxx:139
xAOD::Muon_v1::inDetTrackParticleLink
const ElementLink< TrackParticleContainer > & inDetTrackParticleLink() const
Returns an ElementLink to the InnerDetector TrackParticle used in identification of this muon.
TrigCompositeUtils::seedString
const std::string & seedString()
Definition: TrigCompositeUtilsRoot.cxx:888
TrigCompositeUtils::isLegId
bool isLegId(const HLT::Identifier &legIdentifier)
Recognise whether the chain ID is a leg ID.
Definition: TrigCompositeUtilsRoot.cxx:204
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
InDet::BeamSpotData
Definition: BeamSpotData.h:21
Prompt::Def::Pt
@ Pt
Definition: VarHolder.h:76
a
TList * a
Definition: liststreamerinfos.cxx:10
TrigCompositeUtils::getIndexFromLeg
int32_t getIndexFromLeg(const HLT::Identifier &legIdentifier)
Extract the numeric index of a leg identifier.
Definition: TrigCompositeUtilsRoot.cxx:191
TrigCompositeUtils::DecisionIDContainer
std::set< DecisionID > DecisionIDContainer
Definition: TrigComposite_v1.h:28
CaloLCW_tf.group
group
Definition: CaloLCW_tf.py:28
ComboHypo::legToInputCollectionMap
const Combo::LegMap & legToInputCollectionMap() const
Definition: ComboHypo.h:44
h
TrigMultiTrkComboHypo::m_nTrk
Gaudi::Property< std::vector< unsigned int > > m_nTrk
Definition: TrigMultiTrkComboHypo.h:264
TrigMultiTrkComboHypo::m_trkPtMin
double m_trkPtMin
Definition: TrigMultiTrkComboHypo.h:313
std::sort
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
Definition: DVL_algorithms.h:623
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TrigMultiTrkStateBase::setEventAccepted
void setEventAccepted(bool flag=true)
Definition: TrigMultiTrkComboHypo.h:75
TrigCompositeUtils::NavGraphNode
Transient utility class to represent a node in a graph (m_decisionObject), and a vector of edges (m_f...
Definition: NavGraph.h:20
DEBUG
#define DEBUG
Definition: page_access.h:11
ITrigBphysState::decisions
TrigCompositeUtils::DecisionContainer & decisions()
Definition: ITrigBphysState.h:44
AthCommonMsg< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
TrigCompositeUtils::decisionIDs
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
Definition: TrigCompositeUtilsRoot.cxx:67
TrigMultiTrkComboHypo::m_resolvedElectronIDs
TrigCompositeUtils::DecisionIDContainer m_resolvedElectronIDs
Definition: TrigMultiTrkComboHypo.h:310
xAOD::EgammaParameters::electron
@ electron
Definition: EgammaEnums.h:18
HLT::Identifier::name
std::string name() const
reports human redable name if it is enabled or, empty string
Definition: HLTIdentifier.cxx:14
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:623
ComboHypo::decisionsInput
const SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsInput() const
Definition: ComboHypo.h:41
TrigMultiTrkStateBase::checkMultiplicity
virtual bool checkMultiplicity(const std::vector< int > &legMultiplicity, const std::vector< HLT::Identifier > &legDecisionIDs) const =0
python.BuildSignatureFlags.beamSpot
AthConfigFlags beamSpot(AthConfigFlags flags, str instanceName, str recoMode)
Definition: BuildSignatureFlags.py:454
TrigMultiTrkStateBase::getDecisionLinks
virtual std::vector< ElementLink< TrigCompositeUtils::DecisionContainer > > & getDecisionLinks(size_t)=0
TrigMultiTrkComboHypo::passedDeltaRcut
bool passedDeltaRcut(const std::vector< xAOD::TrackParticle::GenVecFourMom_t > &momenta) const
Definition: TrigMultiTrkComboHypo.cxx:1023
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
xAOD::TrigBphys
TrigBphys_v1 TrigBphys
Definition: TrigBphys.h:18
TrigCompositeUtils::getIDFromLeg
HLT::Identifier getIDFromLeg(const HLT::Identifier &legIdentifier)
Generate the HLT::Identifier which corresponds to the chain name from the leg name.
Definition: TrigCompositeUtilsRoot.cxx:180
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
LHEF::Writer
Pythia8::Writer Writer
Definition: Prophecy4fMerger.cxx:12
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
xAOD::TrigBphys_v1::lxy
float lxy() const
accessor method: lxy
Definition: TrigBphys_v1.cxx:387
JetTools::FFJetAllowedMassDefEnum::Comb
@ Comb
Track Assisted.
xAOD::TrigComposite_v1::getDetail
bool getDetail(const std::string &name, TYPE &value) const
Get an TYPE detail from the object.
xAOD::TrigBphys_v1::MULTIMU
@ MULTIMU
Definition: TrigBphys_v1.h:55
set_intersection
Set * set_intersection(Set *set1, Set *set2)
Perform an intersection of two sets.
SG::View
Definition: View.h:25
TrigMultiTrkStateBase::isEventAccepted
int isEventAccepted() const
Definition: TrigMultiTrkComboHypo.h:76
TrigMultiTrkStateBase::getTrigBphysLegIndices
std::vector< size_t > & getTrigBphysLegIndices(size_t idx)
Definition: TrigMultiTrkComboHypo.h:78
TrigCompositeUtils::isAnyIDPassing
bool isAnyIDPassing(const Decision *d, const DecisionIDContainer &required)
Checks if any of the DecisionIDs passed in arg required is availble in Decision object.
Definition: TrigCompositeUtilsRoot.cxx:108
makeComparison.deltaR
float deltaR
Definition: makeComparison.py:36
python.compressB64.c
def c
Definition: compressB64.py:93
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TrigCompositeUtils::viewString
const std::string & viewString()
Definition: TrigCompositeUtilsRoot.cxx:880
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
Monitored::Timer
A monitored timer.
Definition: MonitoredTimer.h:32
xAOD::TrigBphys_v1
Class describing a Bphysics online composite object.
Definition: TrigBphys_v1.h:44
Eta
@ Eta
Definition: RPCdef.h:8
TrigMultiTrkComboHypo::m_trigBphysContainerKey
SG::WriteHandleKey< xAOD::TrigBphysContainer > m_trigBphysContainerKey
Definition: TrigMultiTrkComboHypo.h:259
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
fitman.k
k
Definition: fitman.py:528
common
Definition: common.py:1
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
ITrigBphysState::trigBphysCollection
xAOD::TrigBphysContainer & trigBphysCollection()
Definition: ITrigBphysState.h:45
ServiceHandle< ICondSvc >
TrigMultiTrkComboHypo::m_vertexFitter
ToolHandle< Trk::TrkVKalVrtFitter > m_vertexFitter
Definition: TrigMultiTrkComboHypo.h:304
drawFromPickle.view
view
Definition: drawFromPickle.py:294
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
TrigCompositeUtils::typelessFindLink
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...
Definition: TrigCompositeUtilsRoot.cxx:723
TrigMultiTrkComboHypo::m_chi2
Gaudi::Property< float > m_chi2
Definition: TrigMultiTrkComboHypo.h:288