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

EF hypothesis algorithm for B -> mu+ mu- X decays: B+ -> mu+ mu- K+ B_c+ -> J/psi(-> mu+ mu-) pi+ B_s0 -> mu+ mu- phi1020(-> K+, K-) B0 -> mu+ mu- K*0(-> K+ pi-) Lambda_b0 -> J/psi(-> mu+ mu-) p K- B_c+ -> J/psi(-> mu+ mu-) D_s+(->phi(-> K+ K-) pi+) B_c+ -> J/psi(-> mu+ mu-) D+(-> K- pi+ pi+) B_c+ -> J/psi(-> mu+ mu-) D*+(-> D0(-> K- pi+) pi+) partial (lost pion from D*+) and full reconstruction. More...

#include <TrigBmumuxComboHypo.h>

Inheritance diagram for TrigBmumuxComboHypo:
Collaboration diagram for TrigBmumuxComboHypo:

Public Types

enum  Decay : size_t {
  kPsi_2mu, kB_2mu1trk, kB_2mu2trk, kDs,
  kDplus, kD0, kB_PsiPi, kFastFit_2trk,
  kFastFit_2mu1trk
}
 

Public Member Functions

 TrigBmumuxComboHypo (const std::string &name, ISvcLocator *pSvcLocator)
 
 TrigBmumuxComboHypo ()=delete
 
virtual StatusCode initialize () override
 
virtual StatusCode execute (const EventContext &context) const override
 
virtual StatusCode sysInitialize () override
 Override sysInitialize. More...
 
virtual bool isClonable () const override
 Specify if the algorithm is clonable. More...
 
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant. More...
 
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm. More...
 
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies. More...
 
virtual bool filterPassed (const EventContext &ctx) const
 
virtual void setFilterPassed (bool state, const EventContext &ctx) const
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 

Protected Member Functions

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

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

StatusCode mergeMuonsFromDecisions (TrigBmumuxState &) const
 Go through state.previousDecisions(), fetch xAOD::Muons objects attached to decisions and save links to them in state.muons(). More...
 
StatusCode mergeTracksFromViews (TrigBmumuxState &) const
 Go through state.previousDecisions() and fetch xAOD::TrackParticle objects associated with the nearest SG::View. More...
 
StatusCode findDimuonCandidates (TrigBmumuxState &) const
 Make all possible dimuon combinations from state.muons(), fit muon InDet tracks to the common vertex, dimuon vertices are stored in state.dimuons() and in state.trigBphysCollection() (as xAOD::TrigBphys objects). More...
 
StatusCode findBmumuxCandidates (TrigBmumuxState &) const
 Find B decays by appling next three subprocedures to each found dimuon candidate. More...
 
StatusCode findBmumuxCandidates_selectTracks (TrigBmumuxState &, size_t dimuonIndex) const
 Select tracks in vicinity of given dimuon vertex. More...
 
StatusCode findBmumuxCandidates_fastFit (TrigBmumuxState &, size_t dimuonIndex) const
 Go through (dimuon+track) and (track+track) combinations found by findBmumuxCandidates_fit(makeCombinations = true) Perform fast fit if combination occurred more than five times. More...
 
StatusCode findBmumuxCandidates_fit (TrigBmumuxState &, size_t dimuonIndex, bool makeCombinations=false) const
 Perform fit of B decays for the topologies described above if makeCombinations = false. More...
 
StatusCode createDecisionObjects (TrigBmumuxState &) const
 Create a decision for each xAOD::TrigBphys object from state.trigBphysCollection() and save it to state.decisions(); use hypoTools() to assign correct decisionIDs according to xAOD::TrigBphys::particleType() More...
 
std::unique_ptr< xAOD::Vertexfit (const EventContext &context, const std::vector< ElementLink< xAOD::TrackParticleContainer >> &trackParticleLinks, Decay decay=kPsi_2mu, const xAOD::Vertex *dimuon=nullptr) const
 Perform a vertex fit on selected tracks. More...
 
xAOD::TrigBphysmakeTriggerObject (TrigBmumuxState &state, const xAOD::Vertex &vertex, xAOD::TrigBphys::pType type=xAOD::TrigBphys::MULTIMU, const std::vector< double > &trkMass={PDG::mMuon, PDG::mMuon}, const ElementLink< xAOD::TrigBphysContainer > &dimuonLink=ElementLink< xAOD::TrigBphysContainer >()) 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 isInSameRoI (const xAOD::Muon *, const xAOD::TrackParticle *) const
 Attempts to identify if the track is in the same RoI as the muon by comparing the angle with the RoI limits. More...
 
bool passDimuonTrigger (const std::vector< const TrigCompositeUtils::DecisionIDContainer * > &previousDecisionIDs) const
 
bool isInMassRange (double mass, const std::pair< double, double > &range) const
 Checks that the given mass value falls into the specified range. More...
 
double Lxy (const Amg::Vector3D &productionVertex, const xAOD::Vertex &decayVertex) const
 Calculate the Lxy (~distance between vertices) It is defined as the transverse distance between the production and decay vertices projected along the transverse momentum of the particle. More...
 
xAOD::TrackParticle::GenVecFourMom_t momentum (const xAOD::Vertex &vertex, const std::vector< double > &trkMass) const
 Calculate 4-momentum of the fitted vertex particle assuming the given masses. More...
 
StatusCode copyDecisions (const Combo::LegDecisionsMap &passingLegs, const EventContext &context) const
 iterates over the inputs and for every object (no filtering) crates output object linked to input moving the decisions that are mentioned in the passing set More...
 
StatusCode extractFeatureAndRoI (const HLT::Identifier &chainLegId, const ElementLink< TrigCompositeUtils::DecisionContainer > &EL, SG::sgkey_t &featureKey, uint16_t &featureIndex, SG::sgkey_t &roiKey, uint16_t &roiIndex, bool &roiFullscan, bool &objectRequestsNoMultiplicityCheck, SG::SGKeyMap< std::set< uint32_t >> &priorFeaturesMap, const EventContext &ctx) const
 For a given Decision node from a HypoAlg, extracts type-less identification data on the node's Feature and seeding ROI. More...
 
StatusCode fillDecisionsMap (Combo::LegDecisionsMap &dmap, const EventContext &context) const
 iterates over all inputs, associating inputs to legs More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Private Attributes

SG::ReadHandleKey< xAOD::TrackParticleContainerm_trackParticleContainerKey
 
SG::ReadHandleKey< xAOD::MuonContainerm_muonContainerKey
 
SG::WriteHandleKey< xAOD::TrigBphysContainerm_trigBphysContainerKey
 
SG::ReadCondHandleKey< InDet::BeamSpotDatam_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"}
 
Gaudi::Property< double > m_deltaR
 
Gaudi::Property< double > m_trkZ0
 
Gaudi::Property< double > m_roiEtaWidth
 
Gaudi::Property< double > m_roiPhiWidth
 
Gaudi::Property< size_t > m_fitAttemptsWarningThreshold
 
Gaudi::Property< size_t > m_fitAttemptsBreakThreshold
 
Gaudi::Property< double > m_fastFit_2trk_chi2
 
Gaudi::Property< double > m_fastFit_2mu1trk_chi2
 
Gaudi::Property< bool > m_dimuon_rejectSameChargeTracks
 
Gaudi::Property< std::pair< double, double > > m_dimuon_massRange
 
Gaudi::Property< double > m_dimuon_chi2
 
Gaudi::Property< bool > m_BplusToMuMuKaon
 
Gaudi::Property< double > m_BplusToMuMuKaon_minKaonPt
 
Gaudi::Property< std::pair< double, double > > m_BplusToMuMuKaon_massRange
 
Gaudi::Property< float > m_BplusToMuMuKaon_chi2
 
Gaudi::Property< bool > m_BplusToMuMuKaon_useFastFit
 
Gaudi::Property< bool > m_BcToMuMuPion
 
Gaudi::Property< double > m_BcToMuMuPion_minPionPt
 
Gaudi::Property< std::pair< double, double > > m_BcToMuMuPion_dimuonMassRange
 
Gaudi::Property< std::pair< double, double > > m_BcToMuMuPion_massRange
 
Gaudi::Property< float > m_BcToMuMuPion_chi2
 
Gaudi::Property< bool > m_BcToMuMuPion_useFastFit
 
Gaudi::Property< bool > m_BsToMuMuPhi1020
 
Gaudi::Property< bool > m_BsToMuMuPhi1020_rejectSameChargeTracks
 
Gaudi::Property< double > m_BsToMuMuPhi1020_minKaonPt
 
Gaudi::Property< std::pair< double, double > > m_BsToMuMuPhi1020_massRange
 
Gaudi::Property< std::pair< double, double > > m_BsToMuMuPhi1020_phiMassRange
 
Gaudi::Property< float > m_BsToMuMuPhi1020_chi2
 
Gaudi::Property< bool > m_BsToMuMuPhi1020_useFastFit
 
Gaudi::Property< bool > m_BdToMuMuKstar0
 
Gaudi::Property< bool > m_BdToMuMuKstar0_rejectSameChargeTracks
 
Gaudi::Property< double > m_BdToMuMuKstar0_minKaonPt
 
Gaudi::Property< double > m_BdToMuMuKstar0_minPionPt
 
Gaudi::Property< std::pair< double, double > > m_BdToMuMuKstar0_massRange
 
Gaudi::Property< std::pair< double, double > > m_BdToMuMuKstar0_KstarMassRange
 
Gaudi::Property< float > m_BdToMuMuKstar0_chi2
 
Gaudi::Property< bool > m_BdToMuMuKstar0_useFastFit
 
Gaudi::Property< bool > m_LambdaBToMuMuProtonKaon
 
Gaudi::Property< bool > m_LambdaBToMuMuProtonKaon_rejectSameChargeTracks
 
Gaudi::Property< double > m_LambdaBToMuMuProtonKaon_minProtonPt
 
Gaudi::Property< double > m_LambdaBToMuMuProtonKaon_minKaonPt
 
Gaudi::Property< double > m_LambdaBToMuMuProtonKaon_minKstarMass
 
Gaudi::Property< std::pair< double, double > > m_LambdaBToMuMuProtonKaon_dimuonMassRange
 
Gaudi::Property< std::pair< double, double > > m_LambdaBToMuMuProtonKaon_massRange
 
Gaudi::Property< float > m_LambdaBToMuMuProtonKaon_chi2
 
Gaudi::Property< bool > m_LambdaBToMuMuProtonKaon_useFastFit
 
Gaudi::Property< bool > m_BcToDsMuMu
 
Gaudi::Property< double > m_BcToDsMuMu_minKaonPt
 
Gaudi::Property< double > m_BcToDsMuMu_minPionPt
 
Gaudi::Property< std::pair< double, double > > m_BcToDsMuMu_massRange
 
Gaudi::Property< std::pair< double, double > > m_BcToDsMuMu_dimuonMassRange
 
Gaudi::Property< std::pair< double, double > > m_BcToDsMuMu_phiMassRange
 
Gaudi::Property< std::pair< double, double > > m_BcToDsMuMu_DsMassRange
 
Gaudi::Property< float > m_BcToDsMuMu_chi2
 
Gaudi::Property< bool > m_BcToDsMuMu_useFastFit
 
Gaudi::Property< bool > m_BcToDplusMuMu
 
Gaudi::Property< double > m_BcToDplusMuMu_minKaonPt
 
Gaudi::Property< double > m_BcToDplusMuMu_minPionPt
 
Gaudi::Property< std::pair< double, double > > m_BcToDplusMuMu_massRange
 
Gaudi::Property< std::pair< double, double > > m_BcToDplusMuMu_dimuonMassRange
 
Gaudi::Property< std::pair< double, double > > m_BcToDplusMuMu_DplusMassRange
 
Gaudi::Property< float > m_BcToDplusMuMu_chi2
 
Gaudi::Property< bool > m_BcToDplusMuMu_useFastFit
 
Gaudi::Property< bool > m_BcToDstarMuMu
 
Gaudi::Property< bool > m_BcToDstarMuMu_makeDstar
 
Gaudi::Property< double > m_BcToDstarMuMu_minD0KaonPt
 
Gaudi::Property< double > m_BcToDstarMuMu_minD0PionPt
 
Gaudi::Property< double > m_BcToDstarMuMu_minDstarPionPt
 
Gaudi::Property< double > m_BcToDstarMuMu_maxDstarPionZ0
 
Gaudi::Property< std::pair< double, double > > m_BcToDstarMuMu_massRange
 
Gaudi::Property< std::pair< double, double > > m_BcToDstarMuMu_dimuonMassRange
 
Gaudi::Property< std::pair< double, double > > m_BcToDstarMuMu_D0MassRange
 
Gaudi::Property< std::pair< double, double > > m_BcToDstarMuMu_DstarMassRange
 
Gaudi::Property< float > m_BcToDstarMuMu_chi2
 
ToolHandle< InDet::VertexPointEstimatorm_vertexPointEstimator
 
ToolHandle< Trk::TrkVKalVrtFitterm_vertexFitter
 
ToolHandle< Reco::ITrackToVertexm_trackToVertexTool
 
ToolHandle< GenericMonitoringToolm_monTool
 
TrigCompositeUtils::DecisionIDContainer m_allowedIDs
 
SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainerm_inputs { this, "HypoInputDecisions", {}, "Input Decisions" }
 
SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainerm_outputs { this, "HypoOutputDecisions", {}, "Output Decisions" }
 
Gaudi::Property< bool > m_requireUniqueROI
 
Gaudi::Property< Combo::MultiplicityReqMapm_multiplicitiesReqMap
 
Gaudi::Property< Combo::LegMapm_legToInputCollectionMap
 
Gaudi::Property< bool > m_checkMultiplicityMap
 
ToolHandleArray< ComboHypoToolBasem_hypoTools {this, "ComboHypoTools", {}, "Tools to perform selection"}
 
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks. More...
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Static Private Attributes

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

Detailed Description

EF hypothesis algorithm for B -> mu+ mu- X decays: B+ -> mu+ mu- K+ B_c+ -> J/psi(-> mu+ mu-) pi+ B_s0 -> mu+ mu- phi1020(-> K+, K-) B0 -> mu+ mu- K*0(-> K+ pi-) Lambda_b0 -> J/psi(-> mu+ mu-) p K- B_c+ -> J/psi(-> mu+ mu-) D_s+(->phi(-> K+ K-) pi+) B_c+ -> J/psi(-> mu+ mu-) D+(-> K- pi+ pi+) B_c+ -> J/psi(-> mu+ mu-) D*+(-> D0(-> K- pi+) pi+) partial (lost pion from D*+) and full reconstruction.

Definition at line 115 of file TrigBmumuxComboHypo.h.

Member Typedef Documentation

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ Decay

Enumerator
kPsi_2mu 
kB_2mu1trk 
kB_2mu2trk 
kDs 
kDplus 
kD0 
kB_PsiPi 
kFastFit_2trk 
kFastFit_2mu1trk 

Definition at line 123 of file TrigBmumuxComboHypo.h.

123  : size_t {
124  kPsi_2mu, // psi -> mu+ mu-
125  kB_2mu1trk, // B -> mu+ mu- trk1
126  kB_2mu2trk, // B -> mu+ mu- trk1 trk2
127  kDs, // D_s+ -> K+ K- pi+
128  kDplus, // D+ -> K- pi+ pi+
129  kD0, // D0 -> K- pi+
130  kB_PsiPi, // psi + pion from D*+
131  kFastFit_2trk, // trk1 + trk2
132  kFastFit_2mu1trk // dimuon + trk1
133  };

Constructor & Destructor Documentation

◆ TrigBmumuxComboHypo() [1/2]

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

Definition at line 51 of file TrigBmumuxComboHypo.cxx.

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

◆ TrigBmumuxComboHypo() [2/2]

TrigBmumuxComboHypo::TrigBmumuxComboHypo ( )
delete

Member Function Documentation

◆ cardinality()

unsigned int AthReentrantAlgorithm::cardinality ( ) const
overridevirtualinherited

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

Override this to return 0 for reentrant algorithms.

Override this to return 0 for reentrant algorithms.

Definition at line 55 of file AthReentrantAlgorithm.cxx.

56 {
57  return 0;
58 }

◆ copyDecisions()

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

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

Definition at line 87 of file ComboHypo.cxx.

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

◆ createDecisionObjects()

StatusCode TrigBmumuxComboHypo::createDecisionObjects ( TrigBmumuxState 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 according to xAOD::TrigBphys::particleType()

Definition at line 816 of file TrigBmumuxComboHypo.cxx.

816  {
817 
818  for (const xAOD::TrigBphys* triggerObject : state.trigBphysCollection()) {
819  // skip the first vertex of the cascade decay B_c+(-> mu+ mu- D*+), it is already linked to the xAOD::TrigBphys::BCDSTMUMU trigger object via lowerChainLink()
820  if (triggerObject->particleType() == xAOD::TrigBphys::DSTDZPI) continue;
821 
822  ATH_MSG_DEBUG( "Found xAOD::TrigBphys object: mass = " << triggerObject->mass() );
823 
824  auto triggerObjectEL = ElementLink<xAOD::TrigBphysContainer>(state.trigBphysCollection(), triggerObject->index());
825  ATH_CHECK( triggerObjectEL.isValid() );
826 
827  const xAOD::TrigBphys* dimuonTriggerObject = (triggerObject->particleType() == xAOD::TrigBphys::MULTIMU ? triggerObject : triggerObject->lowerChain());
828  if (triggerObject->particleType() == xAOD::TrigBphys::BCDSTMUMU && dimuonTriggerObject) dimuonTriggerObject = dimuonTriggerObject->lowerChain();
829  if (!dimuonTriggerObject) {
830  ATH_MSG_ERROR( "Failed to found a valid link for preceding dimuon trigger object" );
831  return StatusCode::FAILURE;
832  }
833 
834  // need to get the references to the original muon objects used to build the dimuon vertex
835  // the position of this vertex in state.dimuons container is the same as for dimuonTriggerObject in trigBphysCollection
836  // dimuon vertex has already been decorated with muon indices
837  auto dimuonIndex = dimuonTriggerObject->index();
838  const xAOD::Vertex* dimuon = state.dimuons.get(dimuonIndex);
839  if ( !dimuon || dimuonIndex >= state.trigBphysMuonIndices.size() ) {
840  ATH_MSG_ERROR( "Failed to find original muons the dimuon vertex had been built from" );
841  return StatusCode::FAILURE;
842  }
843 
844  // create a new output Decision object, backed by the 'decisions' container.
846 
847  std::vector<const DecisionIDContainer*> previousDecisionIDs;
848  for (const size_t& i : state.trigBphysMuonIndices.at(dimuonIndex)) {
849  const auto& muon = state.muons.at(i);
850  // attach all previous decisions: if the same previous decision is called twice, that's fine - internally takes care of that
851  // we already have an array of links to the previous decisions, so there is no need to use TrigCompositeUtils::linkToPrevious()
852  decision->addObjectCollectionLinks(TrigCompositeUtils::seedString(), muon.decisionLinks);
853  previousDecisionIDs.push_back(&muon.decisionIDs);
854  }
855 
856  // set mandatory link to the trigger object
857  decision->setObjectLink<xAOD::TrigBphysContainer>(TrigCompositeUtils::featureString(), triggerObjectEL);
858 
859  for (const auto& tool : hypoTools()) {
860  ATH_MSG_DEBUG( "Go to " << tool );
861  ATH_CHECK( tool->decideOnSingleObject(decision, previousDecisionIDs) );
862  }
863  }
864 
865  return StatusCode::SUCCESS;
866 }

◆ decisionsInput()

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

Definition at line 40 of file ComboHypo.h.

40 { return m_inputs; }

◆ decisionsOutput()

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

Definition at line 41 of file ComboHypo.h.

41 { return m_outputs; }

◆ declareGaudiProperty() [1/4]

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

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

Definition at line 170 of file AthCommonDataStore.h.

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

◆ declareGaudiProperty() [2/4]

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

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

Definition at line 156 of file AthCommonDataStore.h.

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

◆ declareGaudiProperty() [3/4]

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

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

Definition at line 184 of file AthCommonDataStore.h.

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

◆ declareGaudiProperty() [4/4]

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

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

Definition at line 199 of file AthCommonDataStore.h.

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

◆ declareProperty() [1/6]

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

Declare a new Gaudi property.

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

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

Definition at line 245 of file AthCommonDataStore.h.

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

◆ declareProperty() [2/6]

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

Declare a new Gaudi property.

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

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

Definition at line 221 of file AthCommonDataStore.h.

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

◆ declareProperty() [3/6]

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

Definition at line 259 of file AthCommonDataStore.h.

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

◆ declareProperty() [4/6]

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

Declare a new Gaudi property.

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

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

Definition at line 333 of file AthCommonDataStore.h.

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

◆ declareProperty() [5/6]

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

Declare a new Gaudi property.

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

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

Definition at line 352 of file AthCommonDataStore.h.

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

◆ declareProperty() [6/6]

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

Definition at line 145 of file AthCommonDataStore.h.

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

◆ detStore()

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

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

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ evtStore() [1/2]

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

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

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

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

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

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ execute()

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

Reimplemented from ComboHypo.

Definition at line 100 of file TrigBmumuxComboHypo.cxx.

100  {
101 
102  ATH_MSG_DEBUG( "TrigBmumuxComboHypo::execute() starts" );
103 
104  ATH_MSG_DEBUG( "decision input key: " << decisionsInput().at(0).key() );
105  auto previousDecisionsHandle = SG::makeHandle(decisionsInput().at(0), context);
106  ATH_CHECK( previousDecisionsHandle.isValid() );
107  ATH_MSG_DEBUG( "Running with " << previousDecisionsHandle->size() << " previous decisions" );
108 
110 
111  auto trigBphysHandle = SG::makeHandle(m_trigBphysContainerKey, context);
112  ATH_CHECK( trigBphysHandle.record(std::make_unique<xAOD::TrigBphysContainer>(),
113  std::make_unique<xAOD::TrigBphysAuxContainer>()) );
114 
115  SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle {m_beamSpotKey, context};
116  ATH_CHECK( beamSpotHandle.isValid() );
117 
118  auto state = std::make_unique<TrigBmumuxState>(context, *previousDecisionsHandle, *outputDecisionsHandle, trigBphysHandle.ptr(), *beamSpotHandle);
119 
121  ATH_CHECK( findDimuonCandidates(*state) );
122 
123  if (!state->dimuons.empty()) {
124  ATH_CHECK( mergeTracksFromViews(*state) );
125  ATH_CHECK( findBmumuxCandidates(*state) );
126  ATH_CHECK( createDecisionObjects(*state) );
127  }
128 
129  ATH_MSG_DEBUG( "TrigBmumuxComboHypo::execute() terminates with StatusCode::SUCCESS" );
130  return StatusCode::SUCCESS;
131 }

◆ extractFeatureAndRoI()

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

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

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

Definition at line 381 of file ComboHypo.cxx.

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

◆ extraDeps_update_handler()

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

Add StoreName to extra input/output deps as needed.

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

◆ extraOutputDeps()

const DataObjIDColl & AthReentrantAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

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

Definition at line 79 of file AthReentrantAlgorithm.cxx.

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

◆ fillDecisionsMap()

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

iterates over all inputs, associating inputs to legs

Definition at line 466 of file ComboHypo.cxx.

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

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

◆ findBmumuxCandidates()

StatusCode TrigBmumuxComboHypo::findBmumuxCandidates ( TrigBmumuxState state) const
private

Find B decays by appling next three subprocedures to each found dimuon candidate.

Definition at line 311 of file TrigBmumuxComboHypo.cxx.

311  {
312 
313  std::vector<int> nSelectedTrk;
314  auto mon_nTrk = Monitored::Scalar<int>("nTrk", 0);
315  auto mon_nSelectedTrk = Monitored::Collection("nSelectedTrk", nSelectedTrk);
316  auto mon_nBPhysObject = Monitored::Scalar<int>("nBPhysObject", 0);
317  auto group = Monitored::Group(m_monTool, mon_nTrk, mon_nSelectedTrk, mon_nBPhysObject);
318 
319  for (size_t dimuonIndex = 0; dimuonIndex < state.dimuons.size(); ++dimuonIndex) {
320 
321  ATH_CHECK( findBmumuxCandidates_selectTracks(state, dimuonIndex) );
322  if (state.selectedTracks.empty()) continue;
323  nSelectedTrk.push_back(state.selectedTracks.size());
324 
325  ATH_CHECK( findBmumuxCandidates_fit(state, dimuonIndex, true) );
326  ATH_CHECK( findBmumuxCandidates_fastFit(state, dimuonIndex) );
327  ATH_CHECK( findBmumuxCandidates_fit(state, dimuonIndex) );
328  }
329 
330  mon_nTrk = state.tracks.size();
331  mon_nBPhysObject = state.trigBphysCollection().size() - state.dimuons.size();
332 
333  return StatusCode::SUCCESS;
334 }

◆ findBmumuxCandidates_fastFit()

StatusCode TrigBmumuxComboHypo::findBmumuxCandidates_fastFit ( TrigBmumuxState state,
size_t  dimuonIndex 
) const
private

Go through (dimuon+track) and (track+track) combinations found by findBmumuxCandidates_fit(makeCombinations = true) Perform fast fit if combination occurred more than five times.

If fast fit fails, put combination into state.badTrackCombinations().

Definition at line 776 of file TrigBmumuxComboHypo.cxx.

776  {
777 
778  state.badTrackCombinations.clear();
779 
780  const xAOD::Vertex* dimuon = state.dimuons.get(dimuonIndex);
781 
782  // {mu1, mu2, trk1}
783  std::vector<ElementLink<xAOD::TrackParticleContainer>> trackParticleLinks_2mu1trk(dimuon->trackParticleLinks());
784  trackParticleLinks_2mu1trk.emplace_back();
785 
786  // {trk1, trk2}
787  std::vector<ElementLink<xAOD::TrackParticleContainer>> trackParticleLinks_2trk(2);
788 
789  size_t n = state.selectedTracks.size();
790  size_t iterations = 0;
791  for (const auto& item : state.trackCombinations) {
792  if (item.second < 5) continue;
793 
794  size_t key = item.first;
795  if (key < n) { // dimuon + track
796  trackParticleLinks_2mu1trk[2] = state.selectedTracks[key];
797  auto vertex = fit(state.context(), trackParticleLinks_2mu1trk, kFastFit_2mu1trk, dimuon);
798  iterations++;
799  if (!vertex || vertex->chiSquared() > m_fastFit_2mu1trk_chi2) state.badTrackCombinations.push_back(key);
800  }
801  else { // track + track
802  trackParticleLinks_2trk[0] = state.selectedTracks[key % n];
803  trackParticleLinks_2trk[1] = state.selectedTracks[key / n];
804  auto vertex = fit(state.context(), trackParticleLinks_2trk, kFastFit_2trk);
805  iterations++;
806  if (!vertex || vertex->chiSquared() > m_fastFit_2trk_chi2) state.badTrackCombinations.push_back(key);
807  }
808  }
809  std::sort(state.badTrackCombinations.begin(), state.badTrackCombinations.end());
810  ATH_MSG_DEBUG( "Fast fit found " << state.badTrackCombinations.size() << " bad combinations after " << iterations << " iterations" );
811 
812  return StatusCode::SUCCESS;
813 }

◆ findBmumuxCandidates_fit()

StatusCode TrigBmumuxComboHypo::findBmumuxCandidates_fit ( TrigBmumuxState state,
size_t  dimuonIndex,
bool  makeCombinations = false 
) const
private

Perform fit of B decays for the topologies described above if makeCombinations = false.

Otherwise add simple combinations to state.trackCombinations().

Definition at line 394 of file TrigBmumuxComboHypo.cxx.

394  {
395 
396  const auto& selectedTracks = state.selectedTracks;
397  if (makeCombinations) state.trackCombinations.clear();
398 
399  const xAOD::Vertex* dimuon = state.dimuons.get(dimuonIndex);
400  auto dimuonTriggerObjectEL = ElementLink<xAOD::TrigBphysContainer>(state.trigBphysCollection(), dimuonIndex);
401  ATH_CHECK( dimuonTriggerObjectEL.isValid() );
402 
403  // vtx1 = {mu1, mu2, trk1}
404  std::vector<ElementLink<xAOD::TrackParticleContainer>> trackParticleLinks_vtx1(dimuon->trackParticleLinks());
405  trackParticleLinks_vtx1.emplace_back();
406 
407  // vtx2 = {mu1, mu2, trk1, trk2}
408  std::vector<ElementLink<xAOD::TrackParticleContainer>> trackParticleLinks_vtx2(trackParticleLinks_vtx1);
409  trackParticleLinks_vtx2.emplace_back();
410 
411  // vtx3 = {trk1, trk2, trk3}
412  std::vector<ElementLink<xAOD::TrackParticleContainer>> trackParticleLinks_vtx3(3);
413 
414  const xAOD::TrackParticle* mu1 = *trackParticleLinks_vtx1[0];
415  const xAOD::TrackParticle* mu2 = *trackParticleLinks_vtx1[1];
416  auto p_dimuon = mu1->genvecP4().SetM(PDG::mMuon) + mu2->genvecP4().SetM(PDG::mMuon);
417 
418  size_t iterations = 0;
419  size_t nTrigBphysObjects = state.trigBphysCollection().size();
420  bool isOverWarningThreshold = false;
421  // dimuon + 1 track
422  for (size_t itrk1 = 0; itrk1 < selectedTracks.size(); ++itrk1) {
423  const xAOD::TrackParticle* trk1 = *selectedTracks[itrk1];
424 
425  trackParticleLinks_vtx1[2] = selectedTracks[itrk1];
426  auto p_trk1 = trk1->genvecP4();
427  auto charge1 = trk1->charge();
428 
429  std::unique_ptr<xAOD::Vertex> vtx1;
430  bool makeFit_vtx1 = !makeCombinations;
431  bool passFastFit_vtx1 = (!makeCombinations && !state.isBadCombination(itrk1));
432 
433  // B+ -> mu+ mu- K+
434  if (m_BplusToMuMuKaon &&
435  p_trk1.Pt() > m_BplusToMuMuKaon_minKaonPt &&
436  isInMassRange((p_dimuon + p_trk1.SetM(PDG::mKaon)).M(), m_BplusToMuMuKaon_massRange)) {
437 
438  if (makeCombinations && m_BplusToMuMuKaon_useFastFit) state.addTrackCombination(itrk1);
439  if (!vtx1 && makeFit_vtx1 && (passFastFit_vtx1 || !m_BplusToMuMuKaon_useFastFit)) {
440  vtx1 = fit(state.context(), trackParticleLinks_vtx1, kB_2mu1trk, dimuon);
441  makeFit_vtx1 = false;
442  ++iterations;
443  }
444  if (vtx1 && vtx1->chiSquared() < m_BplusToMuMuKaon_chi2) {
445  xAOD::TrigBphys* trigBphys = makeTriggerObject(state, *vtx1, xAOD::TrigBphys::BKMUMU, {PDG::mMuon, PDG::mMuon, PDG::mKaon}, dimuonTriggerObjectEL);
446  ATH_CHECK( state.addTriggerObject(trigBphys) );
447  }
448  }
449 
450  // B_c+ -> J/psi(-> mu+ mu-) pi+
451  if (m_BcToMuMuPion &&
452  p_trk1.Pt() > m_BcToMuMuPion_minPionPt &&
454  isInMassRange((p_dimuon + p_trk1.SetM(PDG::mPion)).M() - p_dimuon.M() + PDG::mJpsi, m_BcToMuMuPion_massRange)) {
455 
456  if (makeCombinations && m_BcToMuMuPion_useFastFit) state.addTrackCombination(itrk1);
457  if (!vtx1 && makeFit_vtx1 && (passFastFit_vtx1 || !m_BcToMuMuPion_useFastFit)) {
458  vtx1 = fit(state.context(), trackParticleLinks_vtx1, kB_2mu1trk, dimuon);
459  makeFit_vtx1 = false;
460  ++iterations;
461  }
462  if (vtx1 && vtx1->chiSquared() < m_BcToMuMuPion_chi2) {
463  xAOD::TrigBphys* trigBphys = makeTriggerObject(state, *vtx1, xAOD::TrigBphys::BCPIMUMU, {PDG::mMuon, PDG::mMuon, PDG::mPion}, dimuonTriggerObjectEL);
464  ATH_CHECK( state.addTriggerObject(trigBphys) );
465  }
466  }
467  vtx1.reset();
468 
469  // dimuon + 2 tracks
470  for (size_t itrk2 = itrk1 + 1; itrk2 < selectedTracks.size(); ++itrk2) {
471  const xAOD::TrackParticle* trk2 = *selectedTracks[itrk2];
472 
473  trackParticleLinks_vtx2[2] = selectedTracks[itrk1];
474  trackParticleLinks_vtx2[3] = selectedTracks[itrk2];
475  auto p_trk2 = trk2->genvecP4();
476  auto charge2 = trk2->charge();
477 
478  std::unique_ptr<xAOD::Vertex> vtx2;
479  bool makeFit_vtx2 = !makeCombinations;
480  bool passFastFit_vtx2 = (!makeCombinations && !state.isBadCombination(itrk1) && !state.isBadCombination(itrk2));
481 
482  // B_s0 -> mu+ mu- phi(-> K+ K-)
483  if (m_BsToMuMuPhi1020 &&
484  (!m_BsToMuMuPhi1020_rejectSameChargeTracks || charge1 * charge2 < 0.) &&
485  p_trk1.Pt() > m_BsToMuMuPhi1020_minKaonPt &&
486  p_trk2.Pt() > m_BsToMuMuPhi1020_minKaonPt &&
487  isInMassRange((p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mKaon)).M(), m_BsToMuMuPhi1020_phiMassRange) &&
488  isInMassRange((p_dimuon + p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mKaon)).M(), m_BsToMuMuPhi1020_massRange)) {
489 
490  if (makeCombinations && m_BsToMuMuPhi1020_useFastFit) {
491  state.addTrackCombination(itrk1);
492  state.addTrackCombination(itrk2);
493  }
494  if (!vtx2 && makeFit_vtx2 && (passFastFit_vtx2 || !m_BsToMuMuPhi1020_useFastFit)) {
495  vtx2 = fit(state.context(), trackParticleLinks_vtx2, kB_2mu2trk, dimuon);
496  makeFit_vtx2 = false;
497  ++iterations;
498  }
499  if (vtx2 && vtx2->chiSquared() < m_BsToMuMuPhi1020_chi2) {
500  xAOD::TrigBphys* trigBphys = makeTriggerObject(state, *vtx2, xAOD::TrigBphys::BSPHIMUMU, {PDG::mMuon, PDG::mMuon, PDG::mKaon, PDG::mKaon}, dimuonTriggerObjectEL);
501  ATH_CHECK( state.addTriggerObject(trigBphys) );
502  }
503  }
504 
505  // B0 -> mu+ mu- K*0(-> K+ pi-)
506  if (m_BdToMuMuKstar0 &&
507  (!m_BdToMuMuKstar0_rejectSameChargeTracks || charge1 * charge2 < 0.) &&
508  p_trk1.Pt() > m_BdToMuMuKstar0_minKaonPt &&
509  p_trk2.Pt() > m_BdToMuMuKstar0_minPionPt &&
510  isInMassRange((p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mPion)).M(), m_BdToMuMuKstar0_KstarMassRange) &&
511  isInMassRange((p_dimuon + p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mPion)).M(), m_BdToMuMuKstar0_massRange)) {
512 
513  if (makeCombinations && m_BdToMuMuKstar0_useFastFit) {
514  state.addTrackCombination(itrk1);
515  state.addTrackCombination(itrk2);
516  }
517  if (!vtx2 && makeFit_vtx2 && (passFastFit_vtx2 || !m_BdToMuMuKstar0_useFastFit)) {
518  vtx2 = fit(state.context(), trackParticleLinks_vtx2, kB_2mu2trk, dimuon);
519  makeFit_vtx2 = false;
520  ++iterations;
521  }
522  if (vtx2 && vtx2->chiSquared() < m_BdToMuMuKstar0_chi2) {
523  xAOD::TrigBphys* trigBphys = makeTriggerObject(state, *vtx2, xAOD::TrigBphys::BDKSTMUMU, {PDG::mMuon, PDG::mMuon, PDG::mKaon, PDG::mPion}, dimuonTriggerObjectEL);
524  ATH_CHECK( state.addTriggerObject(trigBphys) );
525  }
526  }
527  // anti-B0 -> mu+ mu- anti-K*0(-> K- pi+)
528  if (m_BdToMuMuKstar0 &&
529  (!m_BdToMuMuKstar0_rejectSameChargeTracks || charge1 * charge2 < 0.) &&
530  p_trk1.Pt() > m_BdToMuMuKstar0_minPionPt &&
531  p_trk2.Pt() > m_BdToMuMuKstar0_minKaonPt &&
532  isInMassRange((p_trk1.SetM(PDG::mPion) + p_trk2.SetM(PDG::mKaon)).M(), m_BdToMuMuKstar0_KstarMassRange) &&
533  isInMassRange((p_dimuon + p_trk1.SetM(PDG::mPion) + p_trk2.SetM(PDG::mKaon)).M(), m_BdToMuMuKstar0_massRange)) {
534 
535  if (makeCombinations && m_BdToMuMuKstar0_useFastFit) {
536  state.addTrackCombination(itrk1);
537  state.addTrackCombination(itrk2);
538  }
539  if (!vtx2 && makeFit_vtx2 && (passFastFit_vtx2 || !m_BdToMuMuKstar0_useFastFit)) {
540  vtx2 = fit(state.context(), trackParticleLinks_vtx2, kB_2mu2trk, dimuon);
541  makeFit_vtx2 = false;
542  ++iterations;
543  }
544  if (vtx2 && vtx2->chiSquared() < m_BdToMuMuKstar0_chi2) {
545  xAOD::TrigBphys* trigBphys = makeTriggerObject(state, *vtx2, xAOD::TrigBphys::BDKSTMUMU, {PDG::mMuon, PDG::mMuon, PDG::mPion, PDG::mKaon}, dimuonTriggerObjectEL);
546  ATH_CHECK( state.addTriggerObject(trigBphys) );
547  }
548  }
549 
550  // Lambda_b0 -> J/psi(-> mu+ mu-) p K-
553  p_trk2.Pt() > m_LambdaBToMuMuProtonKaon_minKaonPt &&
554  (p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mPion)).M() > m_LambdaBToMuMuProtonKaon_minKstarMass &&
555  (p_trk1.SetM(PDG::mPion) + p_trk2.SetM(PDG::mKaon)).M() > m_LambdaBToMuMuProtonKaon_minKstarMass &&
557  isInMassRange((p_dimuon + p_trk1.SetM(PDG::mProton) + p_trk2.SetM(PDG::mKaon)).M() - p_dimuon.M() + PDG::mJpsi, m_LambdaBToMuMuProtonKaon_massRange)) {
558 
559  if (makeCombinations && m_LambdaBToMuMuProtonKaon_useFastFit) {
560  state.addTrackCombination(itrk1);
561  state.addTrackCombination(itrk2);
562  }
563  if (!vtx2 && makeFit_vtx2 && (passFastFit_vtx2 || !m_LambdaBToMuMuProtonKaon_useFastFit)) {
564  vtx2 = fit(state.context(), trackParticleLinks_vtx2, kB_2mu2trk, dimuon);
565  makeFit_vtx2 = false;
566  ++iterations;
567  }
568  if (vtx2 && vtx2->chiSquared() < m_LambdaBToMuMuProtonKaon_chi2 && Lxy(state.beamSpotPosition(), *vtx2) > 0.) {
569  xAOD::TrigBphys* trigBphys = makeTriggerObject(state, *vtx2, xAOD::TrigBphys::LBPQMUMU, {PDG::mMuon, PDG::mMuon, PDG::mProton, PDG::mKaon}, dimuonTriggerObjectEL);
570  ATH_CHECK( state.addTriggerObject(trigBphys) );
571  }
572  }
573  // anti-Lambda_b0 -> J/psi(-> mu+ mu-) anti-p K+
575  p_trk1.Pt() > m_LambdaBToMuMuProtonKaon_minKaonPt &&
577  (p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mPion)).M() > m_LambdaBToMuMuProtonKaon_minKstarMass &&
578  (p_trk1.SetM(PDG::mPion) + p_trk2.SetM(PDG::mKaon)).M() > m_LambdaBToMuMuProtonKaon_minKstarMass &&
580  isInMassRange((p_dimuon + p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mProton)).M() - p_dimuon.M() + PDG::mJpsi, m_LambdaBToMuMuProtonKaon_massRange)) {
581 
582  if (makeCombinations && m_LambdaBToMuMuProtonKaon_useFastFit) {
583  state.addTrackCombination(itrk1);
584  state.addTrackCombination(itrk2);
585  }
586  if (!vtx2 && makeFit_vtx2 && (passFastFit_vtx2 || !m_LambdaBToMuMuProtonKaon_useFastFit)) {
587  vtx2 = fit(state.context(), trackParticleLinks_vtx2, kB_2mu2trk, dimuon);
588  makeFit_vtx2 = false;
589  ++iterations;
590  }
591  if (vtx2 && vtx2->chiSquared() < m_LambdaBToMuMuProtonKaon_chi2 && Lxy(state.beamSpotPosition(), *vtx2) > 0.) {
592  xAOD::TrigBphys* trigBphys = makeTriggerObject(state, *vtx2, xAOD::TrigBphys::LBPQMUMU, {PDG::mMuon, PDG::mMuon, PDG::mKaon, PDG::mProton}, dimuonTriggerObjectEL);
593  ATH_CHECK( state.addTriggerObject(trigBphys) );
594  }
595  }
596  vtx2.reset();
597 
598  for (size_t itrk3 = 0; itrk3 < selectedTracks.size(); ++itrk3) {
599  const xAOD::TrackParticle* trk3 = *selectedTracks[itrk3];
600  if (itrk3 == itrk1 || itrk3 == itrk2) continue;
601 
602  trackParticleLinks_vtx3[0] = selectedTracks[itrk1];
603  trackParticleLinks_vtx3[1] = selectedTracks[itrk2];
604  trackParticleLinks_vtx3[2] = selectedTracks[itrk3];
605  auto p_trk3 = trk3->genvecP4();
606  auto charge3 = trk3->charge();
607 
608  std::unique_ptr<xAOD::Vertex> vtx3;
609  bool makeFit_vtx3 = !makeCombinations;
610  bool passFastFit_vtx3 = (!makeCombinations && !state.isBadCombination(itrk1, itrk2, itrk3));
611 
612  // B_c+ -> J/psi(-> mu+ mu-) D_s+(->phi(-> K+ K-) pi+)
613  p_trk1.SetM(PDG::mKaon); // D_s+.phi.K+
614  p_trk2.SetM(PDG::mKaon); // D_s+.phi.K-
615  p_trk3.SetM(PDG::mPion); // D_s+.pi+
616  if (m_BcToDsMuMu &&
617  charge1 * charge2 < 0. &&
618  p_trk1.Pt() > m_BcToDsMuMu_minKaonPt &&
619  p_trk2.Pt() > m_BcToDsMuMu_minKaonPt &&
620  p_trk3.Pt() > m_BcToDsMuMu_minPionPt &&
622  isInMassRange((p_trk1 + p_trk2).M(), m_BcToDsMuMu_phiMassRange) &&
623  isInMassRange((p_trk1 + p_trk2 + p_trk3).M(), m_BcToDsMuMu_DsMassRange) &&
624  isInMassRange((p_dimuon + p_trk1 + p_trk2 + p_trk3).M() - p_dimuon.M() + PDG::mJpsi, m_BcToDsMuMu_massRange)) {
625 
626  if (makeCombinations && m_BcToDsMuMu_useFastFit) state.addTrackCombination(itrk1, itrk2, itrk3);
627  if (!vtx3 && makeFit_vtx3 && (passFastFit_vtx3 || !m_BcToDsMuMu_useFastFit)) {
628  vtx3 = fit(state.context(), trackParticleLinks_vtx3, kDs, dimuon);
629  makeFit_vtx3 = false;
630  ++iterations;
631  }
632  if (vtx3 && vtx3->chiSquared() < m_BcToDsMuMu_chi2) {
633  xAOD::TrigBphys* trigBphys = makeTriggerObject(state, *vtx3, xAOD::TrigBphys::BCDSMUMU, {PDG::mKaon, PDG::mKaon, PDG::mPion}, dimuonTriggerObjectEL);
634  ATH_CHECK( state.addTriggerObject(trigBphys) );
635  }
636  }
637 
638  // B_c+ -> J/psi(-> mu+ mu-) D+(-> K- pi+ pi+)
639  p_trk1.SetM(PDG::mPion); // D+.pi+
640  p_trk2.SetM(PDG::mPion); // D+.pi+
641  p_trk3.SetM(PDG::mKaon); // D+.K-
642  if (m_BcToDplusMuMu &&
643  charge1 * charge2 > 0. && charge1 * charge3 < 0. &&
644  p_trk1.Pt() > m_BcToDplusMuMu_minPionPt &&
645  p_trk2.Pt() > m_BcToDplusMuMu_minPionPt &&
646  p_trk3.Pt() > m_BcToDplusMuMu_minKaonPt &&
648  isInMassRange((p_trk1 + p_trk2 + p_trk3).M(), m_BcToDplusMuMu_DplusMassRange) &&
649  isInMassRange((p_dimuon + p_trk1 + p_trk2 + p_trk3).M() - p_dimuon.M() + PDG::mJpsi, m_BcToDplusMuMu_massRange)) {
650 
651  if (makeCombinations && m_BcToDplusMuMu_useFastFit) state.addTrackCombination(itrk1, itrk2, itrk3);
652  if (!vtx3 && makeFit_vtx3 && (passFastFit_vtx3 || !m_BcToDplusMuMu_useFastFit)) {
653  vtx3 = fit(state.context(), trackParticleLinks_vtx3, kDplus, dimuon);
654  makeFit_vtx3 = false;
655  ++iterations;
656  }
657  if (vtx3 && vtx3->chiSquared() < m_BcToDplusMuMu_chi2 && Lxy(dimuon->position(), *vtx3) > 0.) {
658  xAOD::TrigBphys* trigBphys = makeTriggerObject(state, *vtx3, xAOD::TrigBphys::BCDPMUMU, {PDG::mPion, PDG::mPion, PDG::mKaon}, dimuonTriggerObjectEL);
659  ATH_CHECK( state.addTriggerObject(trigBphys) );
660  }
661  }
662  vtx3.reset();
663 
664  }
665  }
666 
667  if (iterations > m_fitAttemptsWarningThreshold && !isOverWarningThreshold) {
668  ATH_MSG_WARNING( "Dimuon + tracks: " << state.trigBphysCollection().size() - nTrigBphysObjects << " vertices created after " << iterations << " vertex fitter calls" );
669  isOverWarningThreshold = true;
670  }
671  if (iterations > m_fitAttemptsBreakThreshold) {
672  ATH_MSG_WARNING( "Dimuon + tracks: the number of fit attempts has exceeded the limit; breaking the loop at this point" );
673  break;
674  }
675  }
676  ATH_MSG_DEBUG( "Dimuon + tracks: " << state.trigBphysCollection().size() - nTrigBphysObjects << " vertices created after " << iterations << " vertex fitter calls" );
677 
678  iterations = 0;
679  nTrigBphysObjects = state.trigBphysCollection().size();
680  isOverWarningThreshold = false;
681  // B_c+ -> J/psi(-> mu+ mu-) D*+(-> D0(-> K- pi+) pi+)
682  if (!makeCombinations && m_BcToDstarMuMu && isInMassRange(p_dimuon.M(), m_BcToDstarMuMu_dimuonMassRange)) {
683  std::vector<ElementLink<xAOD::TrackParticleContainer>> trackParticleLinks_D0(2); // {K-, pi+}
684 
685  for (size_t itrk1 = 0; itrk1 < selectedTracks.size(); ++itrk1) {
686  const xAOD::TrackParticle* trk1 = *selectedTracks[itrk1];
687 
688  trackParticleLinks_D0[0] = selectedTracks[itrk1];
689  auto p_trk1 = trk1->genvecP4();
690  p_trk1.SetM(PDG::mKaon);
691  auto charge1 = trk1->charge();
692 
693  for (size_t itrk2 = 0; itrk2 < selectedTracks.size(); ++itrk2) {
694  if (itrk2 == itrk1) continue;
695  const xAOD::TrackParticle* trk2 = *selectedTracks[itrk2];
696 
697  trackParticleLinks_D0[1] = selectedTracks[itrk2];
698  auto p_trk2 = trk2->genvecP4();
699  p_trk2.SetM(PDG::mPion);
700  auto charge2 = trk2->charge();
701 
702  std::unique_ptr<xAOD::Vertex> D0;
703  if (charge1 * charge2 < 0. &&
704  p_trk1.Pt() > m_BcToDstarMuMu_minD0KaonPt &&
705  p_trk2.Pt() > m_BcToDstarMuMu_minD0PionPt &&
706  isInMassRange((p_trk1 + p_trk2).M(), m_BcToDstarMuMu_D0MassRange) &&
707  isInMassRange((p_dimuon + p_trk1 + p_trk2).M() - p_dimuon.M() + PDG::mJpsi, m_BcToDstarMuMu_massRange)) {
708  D0 = fit(state.context(), trackParticleLinks_D0, kD0, dimuon);
709  ++iterations;
710  }
711  bool isValidD0 = false;
712  if (D0 && D0->chiSquared() < m_BcToDstarMuMu_chi2 && Lxy(dimuon->position(), *D0) > 0.) {
713  isValidD0 = true;
714  ATH_MSG_DEBUG( "Partially reconstructed B_c+(-> mu+ mu- D0 X) candidate has been created" );
715  xAOD::TrigBphys* trigBphys = makeTriggerObject(state, *D0, xAOD::TrigBphys::DZKPI, s_trkMass[kD0], dimuonTriggerObjectEL);
716  ATH_CHECK( state.addTriggerObject(trigBphys) );
717  }
718 
719  if (m_BcToDstarMuMu_makeDstar && isValidD0) { // full B_c+ reconstruction
721 
722  for (size_t itrk3 = 0; itrk3 < selectedTracks.size(); ++itrk3) {
723  const xAOD::TrackParticle* trk3 = *selectedTracks[itrk3];
724  if (itrk3 == itrk1 || itrk3 == itrk2) continue;
725 
726  // J/psi + pion from D*+
727  trackParticleLinks_vtx1[2] = selectedTracks[itrk3];
728  auto p_trk3 = trk3->genvecP4();
729  p_trk3.SetM(PDG::mPion);
730 
731  if (p_trk3.Pt() > m_BcToDstarMuMu_minDstarPionPt &&
733  isInMassRange((p_D0 + p_trk3).M() - p_D0.M() + PDG::mD0, m_BcToDstarMuMu_DstarMassRange)) {
734  auto Bc_vtx1 = fit(state.context(), trackParticleLinks_vtx1, kB_PsiPi);
735  ++iterations;
736 
737  if (Bc_vtx1 && Bc_vtx1->chiSquared() < m_BcToDstarMuMu_chi2) {
738  ATH_MSG_DEBUG( "Decay vertex(mu+ mu- D*+.pi+) for B_c+ candidate has been created" );
739  xAOD::TrigBphys* triggerObject_vtx1 = makeTriggerObject(state, *Bc_vtx1, xAOD::TrigBphys::DSTDZPI, s_trkMass[kB_PsiPi], dimuonTriggerObjectEL);
740  auto triggerObjectEL_vtx1 = ElementLink<xAOD::TrigBphysContainer>(state.trigBphysCollection(), state.trigBphysCollection().size());
741  ATH_CHECK( state.addTriggerObject(triggerObject_vtx1) );
742  ATH_CHECK( triggerObjectEL_vtx1.isValid() );
743 
744  // refit D0 vertex
745  auto Bc_vtx2 = fit(state.context(), trackParticleLinks_D0, kD0, Bc_vtx1.get());
746  ++iterations;
747  if (Bc_vtx2 && Bc_vtx2->chiSquared() < m_BcToDstarMuMu_chi2) {
748  ATH_MSG_DEBUG( "Fully reconstructed B_c+(-> mu+ mu- D*+) candidate has been created" );
749  xAOD::TrigBphys* triggerObject_vtx2 = makeTriggerObject(state, *Bc_vtx2, xAOD::TrigBphys::BCDSTMUMU, s_trkMass[kD0], triggerObjectEL_vtx1);
750  ATH_CHECK( state.addTriggerObject(triggerObject_vtx2) );
751  }
752  }
753  }
754  }
755  } // end of full B_c+ reconstruction
756 
757  }
758 
759  if (iterations > m_fitAttemptsWarningThreshold && !isOverWarningThreshold) {
760  ATH_MSG_WARNING( "B_c+ -> mu+ mu- D*+: " << state.trigBphysCollection().size() - nTrigBphysObjects << " vertices created after " << iterations << " vertex fitter calls" );
761  isOverWarningThreshold = true;
762  }
763  if (iterations > m_fitAttemptsBreakThreshold) {
764  ATH_MSG_WARNING( "B_c+ -> mu+ mu- D*+: the number of fit attempts has exceeded the limit; breaking the loop at this point" );
765  break;
766  }
767  }
768  ATH_MSG_DEBUG( "B_c+ -> mu+ mu- D*+: " << state.trigBphysCollection().size() - nTrigBphysObjects << " vertices created after " << iterations << " vertex fitter calls" );
769 
770  } // end of B_c+ -> J/psi D*+ topology
771 
772  return StatusCode::SUCCESS;
773 }

◆ findBmumuxCandidates_selectTracks()

StatusCode TrigBmumuxComboHypo::findBmumuxCandidates_selectTracks ( TrigBmumuxState state,
size_t  dimuonIndex 
) const
private

Select tracks in vicinity of given dimuon vertex.

Definition at line 337 of file TrigBmumuxComboHypo.cxx.

337  {
338 
339  auto& selectedTracks = state.selectedTracks;
340  auto& selectedTrackZ0 = state.selectedTrackZ0;
341 
342  selectedTracks.clear();
343  selectedTrackZ0.clear();
344 
345  const xAOD::Vertex* dimuon = state.dimuons.get(dimuonIndex);
346 
347  std::vector<const xAOD::Muon*> muons(2, nullptr);
348  const auto& muonIndices = state.trigBphysMuonIndices.at(dimuonIndex);
349  for (size_t i = 0; i < 2; ++i) {
350  const auto& muon = state.muons.at(muonIndices[i]);
351  muons[i] = *muon.link;
352  }
353 
354  const xAOD::TrackParticle* mu1 = dimuon->trackParticle(0);
355  const xAOD::TrackParticle* mu2 = dimuon->trackParticle(1);
356 
357  // check impact parameter of the track with respect to the fitted dimuon vertex
358  // we can safely omit tracks with large z0
359  state.selectedTracks.reserve(state.tracks.size());
360  for (const auto& trackEL : state.tracks) {
361  if (state.isCompositeRoI && !isInSameRoI(muons[0], *trackEL) && !isInSameRoI(muons[1], *trackEL)) continue;
362  if (m_trkZ0 > 0.) {
363  std::unique_ptr<const Trk::Perigee> perigee(m_trackToVertexTool->perigeeAtVertex(state.context(), **trackEL, dimuon->position()));
364  if (perigee && std::abs(perigee->parameters()[Trk::z0]) < m_trkZ0) {
365  selectedTracks.push_back(trackEL);
366  selectedTrackZ0[*trackEL] = perigee->parameters()[Trk::z0];
367  }
368  }
369  else {
370  selectedTracks.push_back(trackEL);
371  selectedTrackZ0[*trackEL] = -1000.;
372  }
373  }
374 
375  // remove muon duplicates
376  if (selectedTracks.size() < 2) {
377  ATH_MSG_DEBUG( "Found no tracks consistent with dimuon vertex " << dimuonIndex );
378  selectedTracks.clear();
379  selectedTrackZ0.clear();
380  return StatusCode::SUCCESS;
381  }
382  std::sort(selectedTracks.begin(), selectedTracks.end(), [p_mu=mu1->genvecP4()](const auto& lhs, const auto& rhs){ return ROOT::Math::VectorUtil::DeltaR(p_mu, (*lhs)->genvecP4()) > ROOT::Math::VectorUtil::DeltaR(p_mu, (*rhs)->genvecP4()); });
383  if (isIdenticalTracks(mu1, *selectedTracks.back())) selectedTracks.pop_back();
384  std::sort(selectedTracks.begin(), selectedTracks.end(), [p_mu=mu2->genvecP4()](const auto& lhs, const auto& rhs){ return ROOT::Math::VectorUtil::DeltaR(p_mu, (*lhs)->genvecP4()) > ROOT::Math::VectorUtil::DeltaR(p_mu, (*rhs)->genvecP4()); });
385  if (isIdenticalTracks(mu2, *selectedTracks.back())) selectedTracks.pop_back();
386  std::sort(selectedTracks.begin(), selectedTracks.end(), [](const auto& lhs, const auto& rhs){ return ((*lhs)->pt() > (*rhs)->pt()); });
387 
388  ATH_MSG_DEBUG( "Found " << selectedTracks.size() << " tracks consistent with dimuon vertex " << dimuonIndex );
389 
390  return StatusCode::SUCCESS;
391 }

◆ findDimuonCandidates()

StatusCode TrigBmumuxComboHypo::findDimuonCandidates ( TrigBmumuxState state) const
private

Make all possible dimuon combinations from state.muons(), fit muon InDet tracks to the common vertex, dimuon vertices are stored in state.dimuons() and in state.trigBphysCollection() (as xAOD::TrigBphys objects).

Definition at line 239 of file TrigBmumuxComboHypo.cxx.

239  {
240 
241  auto mon_nDimuon = Monitored::Scalar<int>("nDimuon", 0);
242  auto group = Monitored::Group(m_monTool, mon_nDimuon);
243 
244  const auto& muons = state.muons;
245  std::vector<ElementLink<xAOD::TrackParticleContainer>> trackParticleLinks(2);
246  std::vector<const DecisionIDContainer*> previousDecisionIDs(2, nullptr);
247 
248  for (size_t itrk1 = 0; itrk1 < muons.size(); ++itrk1) {
249  const xAOD::Muon* mu1 = *muons[itrk1].link;
251  previousDecisionIDs[0] = &muons[itrk1].decisionIDs;
252  const xAOD::TrackParticle* trk1 = *trackParticleLinks[0];
253  auto p1 = trk1->genvecP4();
254  p1.SetM(PDG::mMuon);
255  auto charge1 = trk1->charge();
256 
257  for (size_t itrk2 = itrk1 + 1; itrk2 < muons.size(); ++itrk2) {
258  const xAOD::Muon* mu2 = *muons[itrk2].link;
260  previousDecisionIDs[1] = &muons[itrk2].decisionIDs;
261  const xAOD::TrackParticle* trk2 = *trackParticleLinks[1];
262  auto p2 = trk2->genvecP4();
263  p2.SetM(PDG::mMuon);
264  auto charge2 = trk2->charge();
265 
266  double mass = (p1 + p2).M();
267 
268  ATH_MSG_DEBUG( "muon 1: " << p1.Pt()<< " / " << p1.Eta() << " / " << p1.Phi() << " / " << trk1->charge() );
269  ATH_MSG_DEBUG( "muon 2: " << p2.Pt()<< " / " << p2.Eta() << " / " << p2.Phi() << " / " << trk2->charge() );
270  ATH_MSG_DEBUG( "track pair mass: " << mass );
271 
272  if (m_dimuon_rejectSameChargeTracks && charge1 * charge2 > 0.) {
273  ATH_MSG_DEBUG( "muon pair is rejected by opposite charge check" );
274  continue;
275  }
276 
277  if (!passDimuonTrigger(previousDecisionIDs)) {
278  ATH_MSG_DEBUG( "muon pair did not pass passDimuonTrigger() check" );
279  continue;
280  }
281 
283  ATH_MSG_DEBUG( "muon pair is out of the requested mass range" );
284  continue;
285  }
286 
287  // fit muons to the common vertex and pass this vertex to the dimuons collection which also takes the ownership of the created object
288  auto vertex = fit(state.context(), trackParticleLinks);
289  if (!vertex) continue;
290 
291  // convert vertex to trigger object and add it to the output xAOD::TrigBphysContainer
292  xAOD::TrigBphys* trigBphys = makeTriggerObject(state, *vertex);
293  if (!trigBphys) {
294  ATH_MSG_ERROR( "xAOD::Vertex could not be converted to xAOD::TrigBphys object: please enable MakeExtendedVertex option in vertex fitter " << m_vertexFitter->name() );
295  return StatusCode::FAILURE;
296  }
297 
298  // the dimuon vertex in the xAOD::TrigBphysContainer is used as a reference for the upcoming B-candidates and to fire bBmumux_idperf chain
299  state.dimuons.push_back(vertex.release());
300  state.trigBphysMuonIndices.emplace_back(std::array<size_t, 2>{itrk1, itrk2});
301  state.trigBphysCollection().push_back(trigBphys);
302  }
303  }
304  mon_nDimuon = state.dimuons.size();
305  ATH_MSG_DEBUG( "Found " << state.dimuons.size() << " dimuon candidates" );
306 
307  return StatusCode::SUCCESS;
308 }

◆ fit()

std::unique_ptr< xAOD::Vertex > TrigBmumuxComboHypo::fit ( const EventContext &  context,
const std::vector< ElementLink< xAOD::TrackParticleContainer >> &  trackParticleLinks,
Decay  decay = kPsi_2mu,
const xAOD::Vertex dimuon = nullptr 
) const
private

Perform a vertex fit on selected tracks.

Parameters
contextthe event context used to make the vertex threadsafe.
trackParticleLinksthe trackParticles to fit
decaythe decay enumerator to specify the mass contraints
dimuonThe dimuon vertex position can be used as the initial position to increase effeciency
Returns
The fitted vertex - null if fit fails or is very low quality

Definition at line 869 of file TrigBmumuxComboHypo.cxx.

873  {
874 
875  ATH_MSG_VERBOSE( "Perform vertex fit" );
876 
877  if (trackParticleLinks.size() < 2) {
878  ATH_MSG_WARNING( "At least two tracks should be given to the vertex fitter" );
879  return nullptr;
880  }
881 
882  std::vector<const xAOD::TrackParticle*> tracklist(trackParticleLinks.size(), nullptr);
883  std::transform(trackParticleLinks.begin(), trackParticleLinks.end(), tracklist.begin(),
884  [](const ElementLink<xAOD::TrackParticleContainer>& link){ return *link; });
885 
886  Amg::Vector3D startingPoint = Amg::Vector3D::Zero(3);
887  if (dimuon) {
888  startingPoint = Amg::Vector3D(dimuon->x(), dimuon->y(), dimuon->z());
889  }
890  else {
891  if (decay != Decay::kPsi_2mu && decay != Decay::kB_PsiPi && decay != Decay::kFastFit_2trk) {
892  ATH_MSG_WARNING( "Already fitted dimuon vertex should be provided for B -> mu1 mu2 trk1 .. trkN decay as a starting point for fitter" );
893  }
894  int flag = 0;
895  int errorcode = 0;
896  const Trk::Perigee& perigee1 = tracklist[0]->perigeeParameters();
897  const Trk::Perigee& perigee2 = tracklist[1]->perigeeParameters();
898  startingPoint = m_vertexPointEstimator->getCirclesIntersectionPoint(&perigee1, &perigee2, flag, errorcode);
899  if (errorcode != 0) startingPoint = Amg::Vector3D::Zero(3);
900  }
901  ATH_MSG_VERBOSE( "Starting point: (" << startingPoint(0) << ", " << startingPoint(1) << ", " << startingPoint(2) << ")" );
902 
903  auto fitterState = m_vertexFitter->makeState(context);
904  m_vertexFitter->setMassInputParticles(s_trkMass[static_cast<size_t>(decay)], *fitterState);
905 
906  // the combined momentum of D+/D_s+ candidate is constrained to point to the dimuon vertex
907  if (decay == Decay::kDs || decay == Decay::kDplus || decay == Decay::kD0) {
908  m_vertexFitter->setVertexForConstraint(*dimuon, *fitterState);
909  m_vertexFitter->setCnstType(8, *fitterState);
910  }
911 
912  std::unique_ptr<xAOD::Vertex> vertex(m_vertexFitter->fit(tracklist, startingPoint, *fitterState));
913  if (!vertex) {
914  ATH_MSG_VERBOSE( "Vertex fit fails" );
915  return vertex;
916  }
917  if (vertex->chiSquared() > 150. || (decay == Decay::kPsi_2mu && vertex->chiSquared() > m_dimuon_chi2)) {
918  ATH_MSG_VERBOSE( "Fit is successful, but vertex chi2 is too high, we are not going to save it (chi2 = " << vertex->chiSquared() << ")" );
919  vertex.reset();
920  return vertex;
921  }
922  ATH_MSG_VERBOSE( "Fit is successful" );
923 
924  // update trackParticleLinks()
925  vertex->clearTracks();
926  vertex->setTrackParticleLinks(trackParticleLinks);
927 
928  return vertex;
929 }

◆ hypoTools() [1/2]

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

Definition at line 44 of file ComboHypo.h.

44 { return m_hypoTools; }

◆ hypoTools() [2/2]

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

Definition at line 45 of file ComboHypo.h.

45 { return m_hypoTools; }

◆ initialize()

StatusCode TrigBmumuxComboHypo::initialize ( )
overridevirtual

Reimplemented from ComboHypo.

Definition at line 55 of file TrigBmumuxComboHypo.cxx.

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

◆ 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/2]

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

Definition at line 1012 of file TrigBmumuxComboHypo.cxx.

1012  {
1013 
1015 }

◆ isIdenticalTracks() [2/2]

bool TrigBmumuxComboHypo::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 1005 of file TrigBmumuxComboHypo.cxx.

1005  {
1006 
1007  if (lhs->charge() * rhs->charge() < 0.) return false;
1008  return (ROOT::Math::VectorUtil::DeltaR(lhs->genvecP4(), rhs->genvecP4()) < m_deltaR);
1009 }

◆ isInMassRange()

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

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

Definition at line 229 of file TrigBmumuxComboHypo.h.

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

◆ isInSameRoI()

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

Attempts to identify if the track is in the same RoI as the muon by comparing the angle with the RoI limits.

Returns
true if in same RoI

Definition at line 1018 of file TrigBmumuxComboHypo.cxx.

1018  {
1019 
1020  auto p_mu = muon->genvecP4();
1021  auto p_trk = track->genvecP4();
1022  return (ROOT::Math::VectorUtil::DeltaPhi(p_mu, p_trk) < m_roiPhiWidth && std::abs(p_mu.eta() - p_trk.eta()) < m_roiEtaWidth);
1023 }

◆ legToInputCollectionMap()

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

Definition at line 43 of file ComboHypo.h.

43 { return m_legToInputCollectionMap.value(); }

◆ Lxy()

double TrigBmumuxComboHypo::Lxy ( const Amg::Vector3D productionVertex,
const xAOD::Vertex decayVertex 
) const
private

Calculate the Lxy (~distance between vertices) It is defined as the transverse distance between the production and decay vertices projected along the transverse momentum of the particle.

Returns
The Lxy value in [mm]

Definition at line 1026 of file TrigBmumuxComboHypo.cxx.

1026  {
1027 
1028  XYVector R(decayVertex.x() - productionVertex.x(), decayVertex.y() - productionVertex.y());
1029  XYVector pT;
1030 
1031  if (!decayVertex.vxTrackAtVertexAvailable()) return -100.;
1032  const auto& tracks = decayVertex.vxTrackAtVertex();
1033  for (const auto& track : tracks) {
1034  const Trk::TrackParameters* perigee = track.perigeeAtVertex();
1035  if (!perigee) return -100.;
1036  const Amg::Vector3D& momentum = perigee->momentum();
1037  pT += XYVector(momentum.x(), momentum.y());
1038  }
1039  return R.Dot(pT.unit());
1040 }

◆ makeTriggerObject()

xAOD::TrigBphys * TrigBmumuxComboHypo::makeTriggerObject ( TrigBmumuxState state,
const xAOD::Vertex vertex,
xAOD::TrigBphys::pType  type = xAOD::TrigBphys::MULTIMU,
const std::vector< double > &  trkMass = {PDG::mMuonPDG::mMuon},
const ElementLink< xAOD::TrigBphysContainer > &  dimuonLink = ElementLink<xAOD::TrigBphysContainer>() 
) const
private

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

Parameters
stateEvent object containing the current events selections
typedecay type enumerator. Corresponds to EDM definitions
trkMassTrack mass hypothesis for mass calculations
dimuonLinkAssociated dimuon container
Returns
Pointer to the TrigBphys object

Definition at line 932 of file TrigBmumuxComboHypo.cxx.

937  {
938 
939  const xAOD::TrigBphys* dimuon = (type != xAOD::TrigBphys::MULTIMU ? *dimuonLink : nullptr);
941 
942  // refitted track momentum as a 4-vector for mass hypothesis defined by the given decay value
944  std::vector<xAOD::TrackParticle::GenVecFourMom_t> momenta;
945  if (!vertex.vxTrackAtVertexAvailable()) return nullptr;
946  for (size_t i = 0; i < vertex.vxTrackAtVertex().size(); ++i) {
947  const Trk::TrackParameters* perigee = vertex.vxTrackAtVertex()[i].perigeeAtVertex();
948  if (!perigee) return nullptr;
949  const Amg::Vector3D& p = perigee->momentum();
950  momenta.emplace_back(p.x(), p.y(), p.z(), trkMass[i]);
951  momentum += momenta.back();
952  }
953  if (isCascadeDecay) {
954  momentum += ROOT::Math::PtEtaPhiMVector(dimuon->pt(), dimuon->eta(), dimuon->phi(), dimuon->mass());
955  }
956 
957  auto result = new xAOD::TrigBphys();
958  result->makePrivateStore();
959 
960  float mass = momentum.M();
962  mass += PDG::mD0 - (momenta[0] + momenta[1]).M();
963  }
964  else if (type != xAOD::TrigBphys::MULTIMU) {
965  mass += PDG::mJpsi - (isCascadeDecay ? dimuon->mass() : (momenta[0] + momenta[1]).M());
966  }
967 
968  result->initialise(0, momentum.Eta(), momentum.Phi(), momentum.Pt(), type, mass, xAOD::TrigBphys::EF);
969 
970  result->setFitmass(momentum.M());
971  result->setFitx(vertex.x());
972  result->setFity(vertex.y());
973  result->setFitz(vertex.z());
974  result->setFitchi2(vertex.chiSquared());
975  result->setFitndof(vertex.numberDoF());
976 
977  Amg::Vector3D productionVertex = (isCascadeDecay ? Amg::Vector3D(dimuon->fitx(), dimuon->fity(), dimuon->fitz()) : state.beamSpotPosition());
978  result->setLxy(Lxy(productionVertex, vertex));
979 
980  // set all the particles associated with the decay
981  result->setTrackParticleLinks(vertex.trackParticleLinks());
982 
983  // use lowerChainLink() as a link to the preceding dimuon trigger object
985  result->setLowerChainLink(dimuonLink);
986  }
987 
989  "TrigBphys object:\n\t " <<
990  "roiId: " << result->roiId() << "\n\t " <<
991  "particleType: " << result->particleType() << "\n\t " <<
992  "level: " << result->level() << "\n\t " <<
993  "eta: " << result->eta() << "\n\t " <<
994  "phi: " << result->phi() << "\n\t " <<
995  "mass: " << result->mass() << "\n\t " <<
996  "fitmass: " << result->fitmass() << "\n\t " <<
997  "chi2/NDF: " << result->fitchi2() << " / " << result->fitndof() << "\n\t " <<
998  "vertex: (" << result->fitx() << ", " << result->fity() << ", " << result->fitz() << ")" << "\n\t " <<
999  "Lxy: " << result->lxy() );
1000 
1001  return result;
1002 }

◆ mergeMuonsFromDecisions()

StatusCode TrigBmumuxComboHypo::mergeMuonsFromDecisions ( TrigBmumuxState state) const
private

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

Definition at line 134 of file TrigBmumuxComboHypo.cxx.

134  {
135 
136  auto& muons = state.muons;
137  muons.clear();
138 
139  // all muons from views are already connected with previous decisions by TrigMuonEFHypoAlg
140  for (const Decision* decision : state.previousDecisions()) {
142  auto muonEL = decision->objectLink<xAOD::MuonContainer>(TrigCompositeUtils::featureString());
143  const xAOD::Muon* muon = *muonEL;
144  if (!muon->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle)) continue;
145 
146  auto decisionEL = TrigCompositeUtils::decisionToElementLink(decision, state.context());
147  auto itr = std::find_if(muons.begin(), muons.end(), [this, muon](const auto& x){ return isIdenticalTracks(muon, *x.link); });
148  if (itr == muons.end()) {
149  muons.push_back({muonEL, std::vector<ElementLink<DecisionContainer>>(1, decisionEL), DecisionIDContainer()});
150  }
151  else {
152  (*itr).decisionLinks.push_back(decisionEL);
153  }
154  }
155 
156  // muon->pt() is equal to muon->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle)->pt()
157  // and the later is used by TrigMuonEFHypoTool for classification of muEFCB candidates
158  std::sort(muons.begin(), muons.end(), [](const auto& lhs, const auto& rhs){ return ((*lhs.link)->pt() > (*rhs.link)->pt()); });
159 
160  // for each muon we extract DecisionIDs stored in the associated Decision objects and copy them at muon.decisionIDs
161  for (auto& item : muons) {
162  for (const ElementLink<xAOD::TrigCompositeContainer>& decisionEL : item.decisionLinks) {
163  TrigCompositeUtils::decisionIDs(*decisionEL, item.decisionIDs);
164  }
165  }
166 
167  if (msgLvl(MSG::DEBUG)) {
168  ATH_MSG_DEBUG( "Dump found muons before vertex fit: " << muons.size() << " candidates" );
169  for (const auto& item : muons) {
170  const xAOD::Muon* muon = *item.link;
171  const xAOD::TrackParticle* track = *muon->inDetTrackParticleLink();
172  ATH_MSG_DEBUG( " -- muon InDetTrackParticle pt/eta/phi/q: " << track->pt() << " / " << track->eta() << " / " << track->phi() << " / " << track->charge() );
173  ATH_MSG_DEBUG( " muon CombinedTrackParticle pt: " << muon->pt() );
174  ATH_MSG_DEBUG( " allowed decisions:" );
175  for (const DecisionID& id : item.decisionIDs) {
176  ATH_MSG_DEBUG( " +++ " << HLT::Identifier(id) );
177  }
178  }
179  }
180 
181  return StatusCode::SUCCESS;
182 }

◆ mergeTracksFromViews()

StatusCode TrigBmumuxComboHypo::mergeTracksFromViews ( TrigBmumuxState 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 185 of file TrigBmumuxComboHypo.cxx.

185  {
186 
187  auto& tracks = state.tracks;
188  tracks.clear();
189 
190  size_t viewCounter = 0;
191  for (const Decision* decision : state.previousDecisions()) {
192  auto viewLinkInfo = TrigCompositeUtils::findLink<ViewContainer>(decision, TrigCompositeUtils::viewString(), true);
193  ATH_CHECK( viewLinkInfo.isValid() );
194  auto view = *viewLinkInfo.link;
195 
196  auto roiLinkInfo = TrigCompositeUtils::findLink<TrigRoiDescriptorCollection>(decision, TrigCompositeUtils::roiString(), true);
197  ATH_CHECK( roiLinkInfo.isValid() );
198  const auto roi = *roiLinkInfo.link;
199 
200  auto tracksHandle = ViewHelper::makeHandle(view, m_trackParticleContainerKey, state.context());
201  ATH_CHECK( tracksHandle.isValid() );
202  ATH_MSG_DEBUG( "tracks handle " << m_trackParticleContainerKey << " size: " << tracksHandle->size() );
203 
204  std::vector<ElementLink<xAOD::TrackParticleContainer>> tracksFromView;
205  tracksFromView.reserve(tracksHandle->size());
206  for (size_t idx = 0; idx < tracksHandle->size(); ++idx) {
207  tracksFromView.emplace_back(ViewHelper::makeLink<xAOD::TrackParticleContainer>(view, tracksHandle, idx));
208  }
209 
210  for (const auto& trackEL : tracksFromView) {
211  const xAOD::TrackParticle* track = *trackEL;
212  if (track->definingParametersCovMatrixVec().empty()) continue;
213 
214  if (viewCounter == 0 ||
215  std::find_if(tracks.begin(), tracks.end(),
216  [this, track](const auto& x){ return isIdenticalTracks(track, *x); }) == tracks.end()) {
217  tracks.emplace_back(trackEL);
218  }
219  }
220  viewCounter++;
221  if (roi->composite()) {
222  state.isCompositeRoI = true;
223  break;
224  }
225  }
226  std::sort(tracks.begin(), tracks.end(), [](const auto& lhs, const auto& rhs){ return ((*lhs)->pt() > (*rhs)->pt()); });
227 
228  if (msgLvl(MSG::DEBUG)) {
229  ATH_MSG_DEBUG( "Dump found tracks before vertex fit: " << tracks.size() << " candidates" );
230  for (const auto& trackEL : tracks) {
231  const xAOD::TrackParticle* track = *trackEL;
232  ATH_MSG_DEBUG( " -- track pt/eta/phi/q: " << track->pt() << " / " << track->eta() << " / " << track->phi() << " / " << track->charge() );
233  }
234  }
235  return StatusCode::SUCCESS;
236 }

◆ momentum()

xAOD::TrackParticle::GenVecFourMom_t TrigBmumuxComboHypo::momentum ( const xAOD::Vertex vertex,
const std::vector< double > &  trkMass 
) const
private

Calculate 4-momentum of the fitted vertex particle assuming the given masses.

Parameters
vertexthe fitted vertex linking to the original tracks
themass hypothesis for the given tracks in the vertex
Returns
The 4-momentum of the vertexed hypothesis

Definition at line 1043 of file TrigBmumuxComboHypo.cxx.

1043  {
1044 
1046  for (size_t i = 0; i < vertex.vxTrackAtVertex().size(); ++i) {
1047  const Trk::TrackParameters* perigee = vertex.vxTrackAtVertex()[i].perigeeAtVertex();
1048  const Amg::Vector3D& p = perigee->momentum();
1050  }
1051  return momentum;
1052 }

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

◆ passDimuonTrigger()

bool TrigBmumuxComboHypo::passDimuonTrigger ( const std::vector< const TrigCompositeUtils::DecisionIDContainer * > &  previousDecisionIDs) const
private

Definition at line 1055 of file TrigBmumuxComboHypo.cxx.

1055  {
1056 
1057  if (previousDecisionIDs.size() != 2) {
1058  ATH_MSG_WARNING( "TrigBmumuxComboHypo::passDimuonTrigger() expects exactly two containers with previous decision IDs" );
1059  return false;
1060  }
1061 
1062  for (const auto& tool : hypoTools()) {
1063  const std::vector<HLT::Identifier>& legDecisionIDs = tool->legDecisionIds();
1064  if (legDecisionIDs.size() == 1 && tool->legMultiplicity().at(0) >= 2) {
1065  // trigger with symmetric legs like HLT_2mu4_bBmumux_BsmumuPhi_L12MU4
1066  const DecisionID id = legDecisionIDs[0].numeric();
1067  if (TrigCompositeUtils::passed(id, *previousDecisionIDs[0]) && TrigCompositeUtils::passed(id, *previousDecisionIDs[1])) return true;
1068  }
1069  else if (legDecisionIDs.size() == 2) {
1070  // trigger with asymmetric legs like HLT_mu6_mu4_bBmumux_BsmumuPhi_L1MU6_2MU4
1071  bool direct = true;
1072  bool inverse = true;
1073  for (size_t i = 0; i < 2; ++i) {
1074  if (direct && !TrigCompositeUtils::passed(legDecisionIDs[i].numeric(), *previousDecisionIDs[i])) direct = false;
1075  if (inverse && !TrigCompositeUtils::passed(legDecisionIDs[i].numeric(), *previousDecisionIDs[1-i])) inverse = false;
1076  }
1077  if (direct || inverse) return true;
1078  }
1079  else {
1080  ATH_MSG_WARNING( "TrigBmumuxComboHypo can not check decisions for " << tool->name() );
1081  }
1082  }
1083  return false;
1084 }

◆ renounce()

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

Definition at line 380 of file AthCommonDataStore.h.

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

◆ renounceArray()

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

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ setFilterPassed()

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

Definition at line 139 of file AthReentrantAlgorithm.h.

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

◆ sysExecute()

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

Execute an algorithm.

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

Definition at line 67 of file AthReentrantAlgorithm.cxx.

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

◆ sysInitialize()

StatusCode AthReentrantAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

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

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

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

Reimplemented in InputMakerBase, and HypoBase.

Definition at line 96 of file AthReentrantAlgorithm.cxx.

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

◆ sysStart()

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

Handle START transition.

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

◆ triggerMultiplicityMap()

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

Definition at line 42 of file ComboHypo.h.

42 { return m_multiplicitiesReqMap.value(); }

◆ updateVHKA()

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

Definition at line 308 of file AthCommonDataStore.h.

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

Member Data Documentation

◆ m_allowedIDs

TrigCompositeUtils::DecisionIDContainer TrigBmumuxComboHypo::m_allowedIDs
private

Definition at line 432 of file TrigBmumuxComboHypo.h.

◆ m_BcToDplusMuMu

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BcToDplusMuMu
private
Initial value:
{this,
"BcToDplusMuMu", true, "switch on/off B_c+ -> J/psi(-> mu+ mu-) D+(-> K- pi+ pi+) decay"}

Definition at line 381 of file TrigBmumuxComboHypo.h.

◆ m_BcToDplusMuMu_chi2

Gaudi::Property<float> TrigBmumuxComboHypo::m_BcToDplusMuMu_chi2
private
Initial value:
{this,
"BcToDplusMuMu_chi2", 60., "maximum chi2 of the fitted B_c+ vertex"}

Definition at line 393 of file TrigBmumuxComboHypo.h.

◆ m_BcToDplusMuMu_dimuonMassRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BcToDplusMuMu_dimuonMassRange
private
Initial value:
{this,
"BcToDplusMuMu_dimuonMassRange", {2500., 4300.}, "dimuon mass range for B_c+ -> J/psi D+ decay"}

Definition at line 389 of file TrigBmumuxComboHypo.h.

◆ m_BcToDplusMuMu_DplusMassRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BcToDplusMuMu_DplusMassRange
private
Initial value:
{this,
"BcToDplusMuMu_DplusMassRange", {1750., 2000.}, "D+ mass range"}

Definition at line 391 of file TrigBmumuxComboHypo.h.

◆ m_BcToDplusMuMu_massRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BcToDplusMuMu_massRange
private
Initial value:
{this,
"BcToDplusMuMu_massRange", {5500., 7300.}, "B_c+ mass range"}

Definition at line 387 of file TrigBmumuxComboHypo.h.

◆ m_BcToDplusMuMu_minKaonPt

Gaudi::Property<double> TrigBmumuxComboHypo::m_BcToDplusMuMu_minKaonPt
private
Initial value:
{this,
"BcToDplusMuMu_minKaonPt", 1000., "minimum pT of kaon track from D+"}

Definition at line 383 of file TrigBmumuxComboHypo.h.

◆ m_BcToDplusMuMu_minPionPt

Gaudi::Property<double> TrigBmumuxComboHypo::m_BcToDplusMuMu_minPionPt
private
Initial value:
{this,
"BcToDplusMuMu_minPionPt", 1000., "minimum pT of pion track from D+"}

Definition at line 385 of file TrigBmumuxComboHypo.h.

◆ m_BcToDplusMuMu_useFastFit

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BcToDplusMuMu_useFastFit
private
Initial value:
{this,
"BcToDplusMuMu_useFastFit", true, "true: perform vertex fit depending on only if fast fit; false: always perform vertex fit"}

Definition at line 395 of file TrigBmumuxComboHypo.h.

◆ m_BcToDsMuMu

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BcToDsMuMu
private
Initial value:
{this,
"BcToDsMuMu", true, "switch on/off B_c+ -> J/psi(-> mu+ mu-) D_s+(->phi(-> K+ K-) pi+) decay"}

Definition at line 361 of file TrigBmumuxComboHypo.h.

◆ m_BcToDsMuMu_chi2

Gaudi::Property<float> TrigBmumuxComboHypo::m_BcToDsMuMu_chi2
private
Initial value:
{this,
"BcToDsMuMu_chi2", 60., "maximum chi2 of the fitted B_c+ vertex"}

Definition at line 375 of file TrigBmumuxComboHypo.h.

◆ m_BcToDsMuMu_dimuonMassRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BcToDsMuMu_dimuonMassRange
private
Initial value:
{this,
"BcToDsMuMu_dimuonMassRange", {2500., 4300.}, "dimuon mass range for B_c+ -> J/psi D_s+ decay"}

Definition at line 369 of file TrigBmumuxComboHypo.h.

◆ m_BcToDsMuMu_DsMassRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BcToDsMuMu_DsMassRange
private
Initial value:
{this,
"BcToDsMuMu_DsMassRange", {1750., 2100.}, "D_s+ mass range"}

Definition at line 373 of file TrigBmumuxComboHypo.h.

◆ m_BcToDsMuMu_massRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BcToDsMuMu_massRange
private
Initial value:
{this,
"BcToDsMuMu_massRange", {5500., 7300.}, "B_c+ mass range"}

Definition at line 367 of file TrigBmumuxComboHypo.h.

◆ m_BcToDsMuMu_minKaonPt

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

Definition at line 363 of file TrigBmumuxComboHypo.h.

◆ m_BcToDsMuMu_minPionPt

Gaudi::Property<double> TrigBmumuxComboHypo::m_BcToDsMuMu_minPionPt
private
Initial value:
{this,
"BcToDsMuMu_minPionPt", 1000., "minimum pT of pion track from D_s+"}

Definition at line 365 of file TrigBmumuxComboHypo.h.

◆ m_BcToDsMuMu_phiMassRange

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

Definition at line 371 of file TrigBmumuxComboHypo.h.

◆ m_BcToDsMuMu_useFastFit

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BcToDsMuMu_useFastFit
private
Initial value:
{this,
"BcToDsMuMu_useFastFit", true, "true: perform vertex fit depending on only if fast fit; false: always perform vertex fit"}

Definition at line 377 of file TrigBmumuxComboHypo.h.

◆ m_BcToDstarMuMu

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BcToDstarMuMu
private
Initial value:
{this,
"BcToDstarMuMu", true, "switch on/off partial reconstruction of B_c+ -> J/psi(-> mu+ mu-) D0(-> K- pi+) X decay"}

Definition at line 399 of file TrigBmumuxComboHypo.h.

◆ m_BcToDstarMuMu_chi2

Gaudi::Property<float> TrigBmumuxComboHypo::m_BcToDstarMuMu_chi2
private
Initial value:
{this,
"BcToDstarMuMu_chi2", 60., "maximum chi2 of the fitted B_c+ vertex"}

Definition at line 419 of file TrigBmumuxComboHypo.h.

◆ m_BcToDstarMuMu_D0MassRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BcToDstarMuMu_D0MassRange
private
Initial value:
{this,
"BcToDstarMuMu_D0MassRange", {1750., 2000.}, "D0 mass range"}

Definition at line 415 of file TrigBmumuxComboHypo.h.

◆ m_BcToDstarMuMu_dimuonMassRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BcToDstarMuMu_dimuonMassRange
private
Initial value:
{this,
"BcToDstarMuMu_dimuonMassRange", {2500., 4300.}, "dimuon mass range for B_c+ -> J/psi D+ decay"}

Definition at line 413 of file TrigBmumuxComboHypo.h.

◆ m_BcToDstarMuMu_DstarMassRange

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

Definition at line 417 of file TrigBmumuxComboHypo.h.

◆ m_BcToDstarMuMu_makeDstar

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BcToDstarMuMu_makeDstar
private
Initial value:
{this,
"BcToDstarMuMu_makeDstar", true, "switch on/off full reconstruction of B_c+ -> J/psi(-> mu+ mu-) D*+(-> D0(-> K- pi+) pi+) decay"}

Definition at line 401 of file TrigBmumuxComboHypo.h.

◆ m_BcToDstarMuMu_massRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BcToDstarMuMu_massRange
private
Initial value:
{this,
"BcToDstarMuMu_massRange", {5500., 7300.}, "B_c+ mass range"}

Definition at line 411 of file TrigBmumuxComboHypo.h.

◆ m_BcToDstarMuMu_maxDstarPionZ0

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

Definition at line 409 of file TrigBmumuxComboHypo.h.

◆ m_BcToDstarMuMu_minD0KaonPt

Gaudi::Property<double> TrigBmumuxComboHypo::m_BcToDstarMuMu_minD0KaonPt
private
Initial value:
{this,
"BcToDstarMuMu_minD0KaonPt", 1000., "minimum pT of kaon track from D0"}

Definition at line 403 of file TrigBmumuxComboHypo.h.

◆ m_BcToDstarMuMu_minD0PionPt

Gaudi::Property<double> TrigBmumuxComboHypo::m_BcToDstarMuMu_minD0PionPt
private
Initial value:
{this,
"BcToDstarMuMu_minD0PionPt", 1000., "minimum pT of pion track from D0"}

Definition at line 405 of file TrigBmumuxComboHypo.h.

◆ m_BcToDstarMuMu_minDstarPionPt

Gaudi::Property<double> TrigBmumuxComboHypo::m_BcToDstarMuMu_minDstarPionPt
private
Initial value:
{this,
"BcToDstarMuMu_minDstarPionPt", 500., "minimum pT of pion track from D*+"}

Definition at line 407 of file TrigBmumuxComboHypo.h.

◆ m_BcToMuMuPion

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BcToMuMuPion
private
Initial value:
{this,
"BcToMuMuPion", true, "switch on/off B_c+ -> J/psi(-> mu+ mu-) pi+ decay"}

Definition at line 293 of file TrigBmumuxComboHypo.h.

◆ m_BcToMuMuPion_chi2

Gaudi::Property<float> TrigBmumuxComboHypo::m_BcToMuMuPion_chi2
private
Initial value:
{this,
"BcToMuMuPion_chi2", 50., "maximum chi2 of the fitted B_c+ vertex"}

Definition at line 301 of file TrigBmumuxComboHypo.h.

◆ m_BcToMuMuPion_dimuonMassRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BcToMuMuPion_dimuonMassRange
private
Initial value:
{this,
"BcToMuMuPion_dimuonMassRange", {2500., 4300.}, "dimuon mass range for B_c+ decay"}

Definition at line 297 of file TrigBmumuxComboHypo.h.

◆ m_BcToMuMuPion_massRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BcToMuMuPion_massRange
private
Initial value:
{this,
"BcToMuMuPion_massRange", {5500., 7300.}, "B_c+ mass range"}

Definition at line 299 of file TrigBmumuxComboHypo.h.

◆ m_BcToMuMuPion_minPionPt

Gaudi::Property<double> TrigBmumuxComboHypo::m_BcToMuMuPion_minPionPt
private
Initial value:
{this,
"BcToMuMuPion_minPionPt", 2000., "minimum pT of pion track"}

Definition at line 295 of file TrigBmumuxComboHypo.h.

◆ m_BcToMuMuPion_useFastFit

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BcToMuMuPion_useFastFit
private
Initial value:
{this,
"BcToMuMuPion_useFastFit", false, "true: perform vertex fit depending on only if fast fit; false: always perform vertex fit"}

Definition at line 303 of file TrigBmumuxComboHypo.h.

◆ m_BdToMuMuKstar0

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BdToMuMuKstar0
private
Initial value:
{this,
"BdToMuMuKstar0", true, "switch on/off B0 -> mu+ mu- K*0(-> K+ pi-) decay"}

Definition at line 323 of file TrigBmumuxComboHypo.h.

◆ m_BdToMuMuKstar0_chi2

Gaudi::Property<float> TrigBmumuxComboHypo::m_BdToMuMuKstar0_chi2
private
Initial value:
{this,
"BdToMuMuKstar0_chi2", 60., "maximum chi2 of the fitted B0 vertex"}

Definition at line 335 of file TrigBmumuxComboHypo.h.

◆ m_BdToMuMuKstar0_KstarMassRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BdToMuMuKstar0_KstarMassRange
private
Initial value:
{this,
"BdToMuMuKstar0_KstarMassRange", {700., 1100.}, "K*0 mass range"}

Definition at line 333 of file TrigBmumuxComboHypo.h.

◆ m_BdToMuMuKstar0_massRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BdToMuMuKstar0_massRange
private
Initial value:
{this,
"BdToMuMuKstar0_massRange", {4600., 5900.}, "B0 mass range"}

Definition at line 331 of file TrigBmumuxComboHypo.h.

◆ m_BdToMuMuKstar0_minKaonPt

Gaudi::Property<double> TrigBmumuxComboHypo::m_BdToMuMuKstar0_minKaonPt
private
Initial value:
{this,
"BdToMuMuKstar0_minKaonPt", 100., "minimum pT of kaon track"}

Definition at line 327 of file TrigBmumuxComboHypo.h.

◆ m_BdToMuMuKstar0_minPionPt

Gaudi::Property<double> TrigBmumuxComboHypo::m_BdToMuMuKstar0_minPionPt
private
Initial value:
{this,
"BdToMuMuKstar0_minPionPt", 100., "minimum pT of pion track"}

Definition at line 329 of file TrigBmumuxComboHypo.h.

◆ m_BdToMuMuKstar0_rejectSameChargeTracks

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BdToMuMuKstar0_rejectSameChargeTracks
private
Initial value:
{this,
"BdToMuMuKstar0_rejectSameChargeTracks", true, "if true, the only (K+, pi-) and (K-, pi+) pairs will be kept (no wrong-charge combinations)"}

Definition at line 325 of file TrigBmumuxComboHypo.h.

◆ m_BdToMuMuKstar0_useFastFit

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BdToMuMuKstar0_useFastFit
private
Initial value:
{this,
"BdToMuMuKstar0_useFastFit", true, "true: perform vertex fit depending on only if fast fit; false: always perform vertex fit"}

Definition at line 337 of file TrigBmumuxComboHypo.h.

◆ m_beamSpotKey

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

Definition at line 252 of file TrigBmumuxComboHypo.h.

◆ m_BplusToMuMuKaon

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BplusToMuMuKaon
private
Initial value:
{this,
"BplusToMuMuKaon", true, "switch on/off B+ -> mu+ mu- K+ decay"}

Definition at line 281 of file TrigBmumuxComboHypo.h.

◆ m_BplusToMuMuKaon_chi2

Gaudi::Property<float> TrigBmumuxComboHypo::m_BplusToMuMuKaon_chi2
private
Initial value:
{this,
"BplusToMuMuKaon_chi2", 50., "maximum chi2 of the fitted B+ vertex"}

Definition at line 287 of file TrigBmumuxComboHypo.h.

◆ m_BplusToMuMuKaon_massRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BplusToMuMuKaon_massRange
private
Initial value:
{this,
"BplusToMuMuKaon_massRange", {4500., 5900.}, "B+ mass range"}

Definition at line 285 of file TrigBmumuxComboHypo.h.

◆ m_BplusToMuMuKaon_minKaonPt

Gaudi::Property<double> TrigBmumuxComboHypo::m_BplusToMuMuKaon_minKaonPt
private
Initial value:
{this,
"BplusToMuMuKaon_minKaonPt", 100., "minimum pT of kaon track"}

Definition at line 283 of file TrigBmumuxComboHypo.h.

◆ m_BplusToMuMuKaon_useFastFit

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BplusToMuMuKaon_useFastFit
private
Initial value:
{this,
"BplusToMuMuKaon_useFastFit", false, "true: perform vertex fit depending on only if fast fit; false: always perform vertex fit"}

Definition at line 289 of file TrigBmumuxComboHypo.h.

◆ m_BsToMuMuPhi1020

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BsToMuMuPhi1020
private
Initial value:
{this,
"BsToMuMuPhi1020", true, "switch on/off B_s0 -> mu+ mu- phi(-> K+ K-) decay"}

Definition at line 307 of file TrigBmumuxComboHypo.h.

◆ m_BsToMuMuPhi1020_chi2

Gaudi::Property<float> TrigBmumuxComboHypo::m_BsToMuMuPhi1020_chi2
private
Initial value:
{this,
"BsToMuMuPhi1020_chi2", 60., "maximum chi2 of the fitted B+ vertex"}

Definition at line 317 of file TrigBmumuxComboHypo.h.

◆ m_BsToMuMuPhi1020_massRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BsToMuMuPhi1020_massRange
private
Initial value:
{this,
"BsToMuMuPhi1020_massRange", {4800., 5800.}, "B_s0 mass range"}

Definition at line 313 of file TrigBmumuxComboHypo.h.

◆ m_BsToMuMuPhi1020_minKaonPt

Gaudi::Property<double> TrigBmumuxComboHypo::m_BsToMuMuPhi1020_minKaonPt
private
Initial value:
{this,
"BsToMuMuPhi1020_minKaonPt", 100., "minimum pT of kaon tracks"}

Definition at line 311 of file TrigBmumuxComboHypo.h.

◆ m_BsToMuMuPhi1020_phiMassRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_BsToMuMuPhi1020_phiMassRange
private
Initial value:
{this,
"BsToMuMuPhi1020_phiMassRange", {940., 1100.}, "phi1020 mass range"}

Definition at line 315 of file TrigBmumuxComboHypo.h.

◆ m_BsToMuMuPhi1020_rejectSameChargeTracks

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BsToMuMuPhi1020_rejectSameChargeTracks
private
Initial value:
{this,
"BsToMuMuPhi1020_rejectSameChargeTracks", true, "if true, the only (K+, K-) pairs will be kept (no wrong-charge combinations)"}

Definition at line 309 of file TrigBmumuxComboHypo.h.

◆ m_BsToMuMuPhi1020_useFastFit

Gaudi::Property<bool> TrigBmumuxComboHypo::m_BsToMuMuPhi1020_useFastFit
private
Initial value:
{this,
"BsToMuMuPhi1020_useFastFit", false, "true: perform vertex fit depending on only if fast fit; false: always perform vertex fit"}

Definition at line 319 of file TrigBmumuxComboHypo.h.

◆ m_checkMultiplicityMap

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

Definition at line 63 of file ComboHypo.h.

◆ m_deltaR

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

Definition at line 255 of file TrigBmumuxComboHypo.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_dimuon_chi2

Gaudi::Property<double> TrigBmumuxComboHypo::m_dimuon_chi2
private
Initial value:
{this,
"Dimuon_chi2", 20., "maximum chi2 of the dimuon vertex"}

Definition at line 277 of file TrigBmumuxComboHypo.h.

◆ m_dimuon_massRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_dimuon_massRange
private
Initial value:
{this,
"Dimuon_massRange", {100., 5500.}, "dimuon mass range"}

Definition at line 275 of file TrigBmumuxComboHypo.h.

◆ m_dimuon_rejectSameChargeTracks

Gaudi::Property<bool> TrigBmumuxComboHypo::m_dimuon_rejectSameChargeTracks
private
Initial value:
{this,
"Dimuon_rejectSameChargeTracks", true, "if true, the only (mu+, mu-) pairs will be kept (no wrong-charge combinations)"}

Definition at line 273 of file TrigBmumuxComboHypo.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_fastFit_2mu1trk_chi2

Gaudi::Property<double> TrigBmumuxComboHypo::m_fastFit_2mu1trk_chi2
private
Initial value:
{this,
"FastFit_2mu1trk_chi2", 60., "maximum chi2 for fast fit of dimuon + trk1"}

Definition at line 269 of file TrigBmumuxComboHypo.h.

◆ m_fastFit_2trk_chi2

Gaudi::Property<double> TrigBmumuxComboHypo::m_fastFit_2trk_chi2
private
Initial value:
{this,
"FastFit_2trk_chi2", 50., "maximum chi2 for fast fit of trk1 + trk2"}

Definition at line 267 of file TrigBmumuxComboHypo.h.

◆ m_fitAttemptsBreakThreshold

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

Definition at line 265 of file TrigBmumuxComboHypo.h.

◆ m_fitAttemptsWarningThreshold

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

Definition at line 263 of file TrigBmumuxComboHypo.h.

◆ m_hypoTools

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

Definition at line 108 of file ComboHypo.h.

◆ m_inputs

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

Definition at line 49 of file ComboHypo.h.

◆ m_LambdaBToMuMuProtonKaon

Gaudi::Property<bool> TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon
private
Initial value:
{this,
"LambdaBToMuMuProtonKaon", true, "switch on/off Lambda_b0 -> J/psi(-> mu+ mu-) p K- decay"}

Definition at line 341 of file TrigBmumuxComboHypo.h.

◆ m_LambdaBToMuMuProtonKaon_chi2

Gaudi::Property<float> TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon_chi2
private
Initial value:
{this,
"LambdaBToMuMuProtonKaon_chi2", 60., "maximum chi2 of the fitted Lambda_b0 vertex"}

Definition at line 355 of file TrigBmumuxComboHypo.h.

◆ m_LambdaBToMuMuProtonKaon_dimuonMassRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon_dimuonMassRange
private
Initial value:
{this,
"LambdaBToMuMuProtonKaon_dimuonMassRange", {2500., 4300.}, "dimuon mass range for Lambda_b0 decay"}

Definition at line 351 of file TrigBmumuxComboHypo.h.

◆ m_LambdaBToMuMuProtonKaon_massRange

Gaudi::Property<std::pair<double, double> > TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon_massRange
private
Initial value:
{this,
"LambdaBToMuMuProtonKaon_massRange", {4800., 6400.}, "Lambda_b0 mass range"}

Definition at line 353 of file TrigBmumuxComboHypo.h.

◆ m_LambdaBToMuMuProtonKaon_minKaonPt

Gaudi::Property<double> TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon_minKaonPt
private
Initial value:
{this,
"LambdaBToMuMuProtonKaon_minKaonPt", 1000., "minimum pT of kaon track"}

Definition at line 347 of file TrigBmumuxComboHypo.h.

◆ m_LambdaBToMuMuProtonKaon_minKstarMass

Gaudi::Property<double> TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon_minKstarMass
private
Initial value:
{this,
"LambdaBToMuMuProtonKaon_minKstarMass", 1300., "min value for both mass(trk1=kaon, trk2=pion) and mass(trk1=pion, trk2=kaon)"}

Definition at line 349 of file TrigBmumuxComboHypo.h.

◆ m_LambdaBToMuMuProtonKaon_minProtonPt

Gaudi::Property<double> TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon_minProtonPt
private
Initial value:
{this,
"LambdaBToMuMuProtonKaon_minProtonPt", 1000., "minimum pT of proton track"}

Definition at line 345 of file TrigBmumuxComboHypo.h.

◆ m_LambdaBToMuMuProtonKaon_rejectSameChargeTracks

Gaudi::Property<bool> TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon_rejectSameChargeTracks
private
Initial value:
{this,
"LambdaBToMuMuProtonKaon_rejectSameChargeTracks", false, "if true, the only (p, K-) and (anti-p, K+) pairs will be kept (no wrong-charge combinations)"}

Definition at line 343 of file TrigBmumuxComboHypo.h.

◆ m_LambdaBToMuMuProtonKaon_useFastFit

Gaudi::Property<bool> TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon_useFastFit
private
Initial value:
{this,
"LambdaBToMuMuProtonKaon_useFastFit", true, "true: perform vertex fit depending on only if fast fit; false: always perform vertex fit"}

Definition at line 357 of file TrigBmumuxComboHypo.h.

◆ m_legToInputCollectionMap

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

Definition at line 59 of file ComboHypo.h.

◆ m_monTool

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

Definition at line 429 of file TrigBmumuxComboHypo.h.

◆ m_multiplicitiesReqMap

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

Definition at line 55 of file ComboHypo.h.

◆ m_muonContainerKey

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

Definition at line 247 of file TrigBmumuxComboHypo.h.

◆ m_outputs

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

Definition at line 50 of file ComboHypo.h.

◆ m_requireUniqueROI

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

Definition at line 52 of file ComboHypo.h.

◆ m_roiEtaWidth

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

Definition at line 259 of file TrigBmumuxComboHypo.h.

◆ m_roiPhiWidth

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

Definition at line 261 of file TrigBmumuxComboHypo.h.

◆ m_trackParticleContainerKey

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

Definition at line 245 of file TrigBmumuxComboHypo.h.

◆ m_trackToVertexTool

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

Definition at line 427 of file TrigBmumuxComboHypo.h.

◆ m_trigBphysContainerKey

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

Definition at line 249 of file TrigBmumuxComboHypo.h.

◆ m_trkZ0

Gaudi::Property<double> TrigBmumuxComboHypo::m_trkZ0
private
Initial value:
{this,
"TrkZ0", 50., "maximum z0 impact parameter of the track wrt the fitted dimuon vertex; no preselection if negative"}

Definition at line 257 of file TrigBmumuxComboHypo.h.

◆ m_varHandleArraysDeclared

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

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vertexFitter

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

Definition at line 425 of file TrigBmumuxComboHypo.h.

◆ m_vertexPointEstimator

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

Definition at line 423 of file TrigBmumuxComboHypo.h.

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.

◆ s_trkMass

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

The documentation for this class was generated from the following files:
TrigBmumuxComboHypo::m_fastFit_2trk_chi2
Gaudi::Property< double > m_fastFit_2trk_chi2
Definition: TrigBmumuxComboHypo.h:267
ComboHypo::m_multiplicitiesReqMap
Gaudi::Property< Combo::MultiplicityReqMap > m_multiplicitiesReqMap
Definition: ComboHypo.h:55
TrigBmumuxComboHypo::m_BcToDsMuMu_phiMassRange
Gaudi::Property< std::pair< double, double > > m_BcToDsMuMu_phiMassRange
Definition: TrigBmumuxComboHypo.h:371
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
TrigBmumuxComboHypo::m_BcToDplusMuMu_massRange
Gaudi::Property< std::pair< double, double > > m_BcToDplusMuMu_massRange
Definition: TrigBmumuxComboHypo.h:387
TrigBmumuxComboHypo::m_BcToDstarMuMu_minDstarPionPt
Gaudi::Property< double > m_BcToDstarMuMu_minDstarPionPt
Definition: TrigBmumuxComboHypo.h:407
TrigBmumuxState::addTriggerObject
StatusCode addTriggerObject(xAOD::TrigBphys *triggerObject)
Definition: TrigBmumuxComboHypo.h:92
TrigBmumuxComboHypo::s_trkMass
static const std::vector< std::vector< double > > s_trkMass
Definition: TrigBmumuxComboHypo.h:434
TrigBmumuxComboHypo::m_BsToMuMuPhi1020_useFastFit
Gaudi::Property< bool > m_BsToMuMuPhi1020_useFastFit
Definition: TrigBmumuxComboHypo.h:319
xAOD::Vertex_v1::x
float x() const
Returns the x position.
CalculateHighPtTerm.pT
pT
Definition: ICHEP2016/CalculateHighPtTerm.py:57
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:195
DeMoSetup.direct
string direct
Definition: DeMoSetup.py:111
TrigBmumuxComboHypo::m_BsToMuMuPhi1020_chi2
Gaudi::Property< float > m_BsToMuMuPhi1020_chi2
Definition: TrigBmumuxComboHypo.h:317
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
TrigBmumuxComboHypo::m_BcToDstarMuMu
Gaudi::Property< bool > m_BcToDstarMuMu
Definition: TrigBmumuxComboHypo.h:399
get_generator_info.result
result
Definition: get_generator_info.py:21
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
TrigBmumuxComboHypo::m_BcToDsMuMu_minKaonPt
Gaudi::Property< double > m_BcToDsMuMu_minKaonPt
Definition: TrigBmumuxComboHypo.h:363
TrigCompositeUtils::DecisionID
unsigned int DecisionID
Definition: TrigComposite_v1.h:27
ComboHypo::decisionsOutput
const SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsOutput() const
Definition: ComboHypo.h:41
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
xAOD::TrigBphys_v1::BDKSTMUMU
@ BDKSTMUMU
Definition: TrigBphys_v1.h:57
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
IDTPM::R
float R(const U &p)
Definition: TrackParametersHelper.h:101
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
TrigCompositeUtils::typelessFindLink
bool typelessFindLink(const Decision *start, const std::string &linkName, sgkey_t &key, uint32_t &clid, uint16_t &index, const Decision *&source, const bool suppressMultipleLinksWarning)
Perform a recursive search for ElementLinks of any time and name 'linkName', starting from Decision o...
Definition: TrigCompositeUtilsRoot.cxx:725
xAOD::TrigBphys_v1::BSPHIMUMU
@ BSPHIMUMU
Definition: TrigBphys_v1.h:58
HLT::Identifier::numeric
TrigCompositeUtils::DecisionID numeric() const
numeric ID
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:47
TrigBmumuxComboHypo::m_roiPhiWidth
Gaudi::Property< double > m_roiPhiWidth
Definition: TrigBmumuxComboHypo.h:261
TrigBmumuxComboHypo::m_BcToDstarMuMu_minD0KaonPt
Gaudi::Property< double > m_BcToDstarMuMu_minD0KaonPt
Definition: TrigBmumuxComboHypo.h:403
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
xAOD::TrigBphys_v1::LBPQMUMU
@ LBPQMUMU
Definition: TrigBphys_v1.h:72
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
TrigBmumuxComboHypo::m_BcToMuMuPion_minPionPt
Gaudi::Property< double > m_BcToMuMuPion_minPionPt
Definition: TrigBmumuxComboHypo.h:295
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon
Gaudi::Property< bool > m_LambdaBToMuMuProtonKaon
Definition: TrigBmumuxComboHypo.h:341
hist_file_dump.d
d
Definition: hist_file_dump.py:137
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
TrigBmumuxComboHypo::m_fitAttemptsBreakThreshold
Gaudi::Property< size_t > m_fitAttemptsBreakThreshold
Definition: TrigBmumuxComboHypo.h:265
TrigBmumuxComboHypo::m_BdToMuMuKstar0_rejectSameChargeTracks
Gaudi::Property< bool > m_BdToMuMuKstar0_rejectSameChargeTracks
Definition: TrigBmumuxComboHypo.h:325
xAOD::Vertex_v1::trackParticleLinks
const TrackParticleLinks_t & trackParticleLinks() const
Get all the particles associated with the vertex.
TrigBmumuxComboHypo::m_BcToDplusMuMu_minPionPt
Gaudi::Property< double > m_BcToDplusMuMu_minPionPt
Definition: TrigBmumuxComboHypo.h:385
met::DeltaR
@ DeltaR
Definition: METRecoCommon.h:11
xAOD::TrigBphys_v1::DSTDZPI
@ DSTDZPI
Definition: TrigBphys_v1.h:67
TrigBmumuxComboHypo::findBmumuxCandidates_fit
StatusCode findBmumuxCandidates_fit(TrigBmumuxState &, size_t dimuonIndex, bool makeCombinations=false) const
Perform fit of B decays for the topologies described above if makeCombinations = false.
Definition: TrigBmumuxComboHypo.cxx:394
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
ViewHelper::makeHandle
SG::ReadHandle< T > makeHandle(const SG::View *view, const SG::ReadHandleKey< T > &rhKey, const EventContext &context)
navigate from the TrigComposite to nearest view and fetch object from it
Definition: ViewHelper.h:258
TrigBmumuxComboHypo::kPsi_2mu
@ kPsi_2mu
Definition: TrigBmumuxComboHypo.h:124
PDG20::mMuon
static constexpr double mMuon
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:12
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
Definition: AthCommonDataStore.h:380
xAOD::TrigBphys_v1::fitx
float fitx() const
accessor method: x position of vertex
TrigBmumuxComboHypo::m_BplusToMuMuKaon_chi2
Gaudi::Property< float > m_BplusToMuMuKaon_chi2
Definition: TrigBmumuxComboHypo.h:287
TrigBmumuxComboHypo::m_BcToDstarMuMu_minD0PionPt
Gaudi::Property< double > m_BcToDstarMuMu_minD0PionPt
Definition: TrigBmumuxComboHypo.h:405
TrigBmumuxState::trigBphysMuonIndices
std::vector< std::array< size_t, 2 > > trigBphysMuonIndices
Definition: TrigBmumuxComboHypo.h:73
python.TrigCompositeUtils.isLegId
def isLegId(chainName)
Definition: DecisionHandling/python/TrigCompositeUtils.py:18
skel.it
it
Definition: skel.GENtoEVGEN.py:423
TrigBmumuxComboHypo::isInSameRoI
bool isInSameRoI(const xAOD::Muon *, const xAOD::TrackParticle *) const
Attempts to identify if the track is in the same RoI as the muon by comparing the angle with the RoI ...
Definition: TrigBmumuxComboHypo.cxx:1018
TrigBmumuxComboHypo::isIdenticalTracks
bool isIdenticalTracks(const xAOD::TrackParticle *lhs, const xAOD::TrackParticle *rhs) const
Attempts to identify identical tracks by selection on DeltaR.
Definition: TrigBmumuxComboHypo.cxx:1005
TrigBmumuxComboHypo::m_BplusToMuMuKaon
Gaudi::Property< bool > m_BplusToMuMuKaon
Definition: TrigBmumuxComboHypo.h:281
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
TrigBmumuxComboHypo::kDplus
@ kDplus
Definition: TrigBmumuxComboHypo.h:128
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
TrigCompositeUtils::insertDecisionIDs
void insertDecisionIDs(const Decision *src, Decision *dest)
Appends the decision IDs of src to the dest decision object.
Definition: TrigCompositeUtilsRoot.cxx:80
TrigCompositeUtils::passedDecisionIDs
DecisionIDContainer passedDecisionIDs(const Decision *d, const T &required)
return DecisionIDs in Decision object that match the required ones
DataVector::get
const T * get(size_type n) const
Access an element, as an rvalue.
Trk::z0
@ z0
Definition: ParamDefs.h:70
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
TrigBmumuxComboHypo::kFastFit_2mu1trk
@ kFastFit_2mu1trk
Definition: TrigBmumuxComboHypo.h:132
TrigBmumuxState::dimuons
xAOD::VertexContainer dimuons
Definition: TrigBmumuxComboHypo.h:71
xAOD::TrigComposite_v1::hasDetail
bool hasDetail(const std::string &name) const
Check if a given type of detail is available.
TrigBmumuxState::selectedTracks
std::vector< ElementLink< xAOD::TrackParticleContainer > > selectedTracks
Definition: TrigBmumuxComboHypo.h:76
TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon_minKaonPt
Gaudi::Property< double > m_LambdaBToMuMuProtonKaon_minKaonPt
Definition: TrigBmumuxComboHypo.h:347
TrigCompositeUtils::comboHypoAlgNodeName
const std::string & comboHypoAlgNodeName()
Definition: TrigCompositeUtilsRoot.cxx:910
TrigCompositeUtils::createAndStore
SG::WriteHandle< DecisionContainer > createAndStore(const SG::WriteHandleKey< DecisionContainer > &key, const EventContext &ctx)
Creates and right away records the DecisionContainer with the key.
Definition: TrigCompositeUtilsRoot.cxx:30
TrigBmumuxComboHypo::m_BsToMuMuPhi1020_phiMassRange
Gaudi::Property< std::pair< double, double > > m_BsToMuMuPhi1020_phiMassRange
Definition: TrigBmumuxComboHypo.h:315
xAOD::Vertex_v1::position
const Amg::Vector3D & position() const
Returns the 3-pos.
xAOD::TrigBphys_v1::mass
float mass() const
accessor method: mass
TrigBmumuxComboHypo::m_BcToDplusMuMu_minKaonPt
Gaudi::Property< double > m_BcToDplusMuMu_minKaonPt
Definition: TrigBmumuxComboHypo.h:383
TrigBmumuxComboHypo::m_BcToMuMuPion_chi2
Gaudi::Property< float > m_BcToMuMuPion_chi2
Definition: TrigBmumuxComboHypo.h:301
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
isValid
bool isValid(const T &p)
Definition: AtlasPID.h:214
ITrigBphysState::beamSpotPosition
Amg::Vector3D beamSpotPosition() const
Definition: ITrigBphysState.h:47
TrigBmumuxComboHypo::kD0
@ kD0
Definition: TrigBmumuxComboHypo.h:129
x
#define x
xAOD::TrigBphys_v1::BKMUMU
@ BKMUMU
Definition: TrigBphys_v1.h:56
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
TrigBmumuxComboHypo::m_BcToDsMuMu_massRange
Gaudi::Property< std::pair< double, double > > m_BcToDsMuMu_massRange
Definition: TrigBmumuxComboHypo.h:367
dqt_zlumi_pandas.mass
mass
Definition: dqt_zlumi_pandas.py:170
xAOD::TrigBphys_v1::pt
float pt() const
accessor method: pt
Definition: TrigBphys_v1.cxx:362
TrigBmumuxComboHypo::fit
std::unique_ptr< xAOD::Vertex > fit(const EventContext &context, const std::vector< ElementLink< xAOD::TrackParticleContainer >> &trackParticleLinks, Decay decay=kPsi_2mu, const xAOD::Vertex *dimuon=nullptr) const
Perform a vertex fit on selected tracks.
Definition: TrigBmumuxComboHypo.cxx:869
TrigBmumuxComboHypo::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: TrigBmumuxComboHypo.h:252
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
TrigBmumuxComboHypo::kDs
@ kDs
Definition: TrigBmumuxComboHypo.h:127
TrigBmumuxComboHypo::m_BcToDplusMuMu_DplusMassRange
Gaudi::Property< std::pair< double, double > > m_BcToDplusMuMu_DplusMassRange
Definition: TrigBmumuxComboHypo.h:391
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:269
TrigBmumuxComboHypo::m_BcToDsMuMu_minPionPt
Gaudi::Property< double > m_BcToDsMuMu_minPionPt
Definition: TrigBmumuxComboHypo.h:365
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
xAOD::TrigBphys_v1::BCDSTMUMU
@ BCDSTMUMU
Definition: TrigBphys_v1.h:64
TrigBmumuxComboHypo::m_BsToMuMuPhi1020_massRange
Gaudi::Property< std::pair< double, double > > m_BsToMuMuPhi1020_massRange
Definition: TrigBmumuxComboHypo.h:313
TrigBmumuxComboHypo::m_BdToMuMuKstar0_massRange
Gaudi::Property< std::pair< double, double > > m_BdToMuMuKstar0_massRange
Definition: TrigBmumuxComboHypo.h:331
TrigBmumuxComboHypo::m_BsToMuMuPhi1020
Gaudi::Property< bool > m_BsToMuMuPhi1020
Definition: TrigBmumuxComboHypo.h:307
TrigBmumuxComboHypo::m_BcToDstarMuMu_maxDstarPionZ0
Gaudi::Property< double > m_BcToDstarMuMu_maxDstarPionZ0
Definition: TrigBmumuxComboHypo.h:409
TrigBmumuxComboHypo::m_BsToMuMuPhi1020_minKaonPt
Gaudi::Property< double > m_BsToMuMuPhi1020_minKaonPt
Definition: TrigBmumuxComboHypo.h:311
AthCommonDataStore
Definition: AthCommonDataStore.h:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ComboHypo::ComboHypo
ComboHypo(const std::string &name, ISvcLocator *pSvcLocator)
Definition: ComboHypo.cxx:14
TrigBmumuxComboHypo::m_trigBphysContainerKey
SG::WriteHandleKey< xAOD::TrigBphysContainer > m_trigBphysContainerKey
Definition: TrigBmumuxComboHypo.h:249
TrigBmumuxState::muons
std::vector< Muon > muons
Definition: TrigBmumuxComboHypo.h:64
TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon_dimuonMassRange
Gaudi::Property< std::pair< double, double > > m_LambdaBToMuMuProtonKaon_dimuonMassRange
Definition: TrigBmumuxComboHypo.h:351
TrigBmumuxComboHypo::m_BdToMuMuKstar0_chi2
Gaudi::Property< float > m_BdToMuMuKstar0_chi2
Definition: TrigBmumuxComboHypo.h:335
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
TrigCompositeUtils::typelessFindLinks
bool typelessFindLinks(const Decision *start, const std::string &linkName, std::vector< sgkey_t > &keyVec, std::vector< uint32_t > &clidVec, std::vector< uint16_t > &indexVec, std::vector< const Decision * > &sourceVec, const unsigned int behaviour, std::set< const Decision * > *fullyExploredFrom)
search back the TC links for the object of type T linked to the one of TC (recursively) Returns the l...
Definition: TrigCompositeUtilsRoot.cxx:581
TrigBmumuxComboHypo::findBmumuxCandidates_fastFit
StatusCode findBmumuxCandidates_fastFit(TrigBmumuxState &, size_t dimuonIndex) const
Go through (dimuon+track) and (track+track) combinations found by findBmumuxCandidates_fit(makeCombin...
Definition: TrigBmumuxComboHypo.cxx:776
lumiFormat.i
int i
Definition: lumiFormat.py:92
ComboHypo::hypoTools
ToolHandleArray< ComboHypoToolBase > & hypoTools()
Definition: ComboHypo.h:44
TrigBmumuxComboHypo::m_BcToDstarMuMu_dimuonMassRange
Gaudi::Property< std::pair< double, double > > m_BcToDstarMuMu_dimuonMassRange
Definition: TrigBmumuxComboHypo.h:413
TrigCompositeUtils::initialRoIString
const std::string & initialRoIString()
Definition: TrigCompositeUtilsRoot.cxx:870
ITrigBphysState::context
const EventContext & context() const
Definition: ITrigBphysState.h:42
TrigCompositeUtils::getLinkToPrevious
const std::vector< ElementLink< DecisionContainer > > getLinkToPrevious(const Decision *d)
returns links to previous decision object 'seed'
Definition: TrigCompositeUtilsRoot.cxx:156
beamspotman.n
n
Definition: beamspotman.py:731
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
TrigBmumuxComboHypo::createDecisionObjects
StatusCode createDecisionObjects(TrigBmumuxState &) const
Create a decision for each xAOD::TrigBphys object from state.trigBphysCollection() and save it to sta...
Definition: TrigBmumuxComboHypo.cxx:816
TrigBmumuxComboHypo::m_vertexPointEstimator
ToolHandle< InDet::VertexPointEstimator > m_vertexPointEstimator
Definition: TrigBmumuxComboHypo.h:423
TrigBmumuxComboHypo::m_BplusToMuMuKaon_minKaonPt
Gaudi::Property< double > m_BplusToMuMuKaon_minKaonPt
Definition: TrigBmumuxComboHypo.h:283
master.flag
bool flag
Definition: master.py:29
TrigBmumuxComboHypo::m_fitAttemptsWarningThreshold
Gaudi::Property< size_t > m_fitAttemptsWarningThreshold
Definition: TrigBmumuxComboHypo.h:263
ClassID_traits
Default, invalid implementation of ClassID_traits.
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:40
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
TrigBmumuxComboHypo::m_BdToMuMuKstar0_minKaonPt
Gaudi::Property< double > m_BdToMuMuKstar0_minKaonPt
Definition: TrigBmumuxComboHypo.h:327
TrigBmumuxComboHypo::mergeTracksFromViews
StatusCode mergeTracksFromViews(TrigBmumuxState &) const
Go through state.previousDecisions() and fetch xAOD::TrackParticle objects associated with the neares...
Definition: TrigBmumuxComboHypo.cxx:185
TrigBmumuxComboHypo::kB_PsiPi
@ kB_PsiPi
Definition: TrigBmumuxComboHypo.h:130
ComboHypo::m_hypoTools
ToolHandleArray< ComboHypoToolBase > m_hypoTools
Definition: ComboHypo.h:108
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
TrigCompositeUtils::decisionToElementLink
ElementLink< DecisionContainer > decisionToElementLink(const Decision *d, const EventContext &ctx)
Takes a raw pointer to a Decision and returns an ElementLink to the Decision.
Definition: TrigCompositeUtilsRoot.cxx:122
xAOD::TauHelpers::trackParticleLinks
std::vector< ElementLink< xAOD::TrackParticleContainer > > trackParticleLinks(const xAOD::TauJet *tau, xAOD::TauJetParameters::TauTrackFlag flag=xAOD::TauJetParameters::TauTrackFlag::classifiedCharged)
Definition: TauxAODHelpers.cxx:22
TrigCompositeUtils::NavGraph
Structure to hold a transient Directed Acyclic Graph (DAG) structure. NavGraph is populated from,...
Definition: NavGraph.h:98
TrigBmumuxComboHypo::m_BdToMuMuKstar0_KstarMassRange
Gaudi::Property< std::pair< double, double > > m_BdToMuMuKstar0_KstarMassRange
Definition: TrigBmumuxComboHypo.h:333
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TrigBmumuxComboHypo::m_BcToDstarMuMu_D0MassRange
Gaudi::Property< std::pair< double, double > > m_BcToDstarMuMu_D0MassRange
Definition: TrigBmumuxComboHypo.h:415
TrigBmumuxComboHypo::kB_2mu2trk
@ kB_2mu2trk
Definition: TrigBmumuxComboHypo.h:126
ComboHypo::triggerMultiplicityMap
const Combo::MultiplicityReqMap & triggerMultiplicityMap() const
Definition: ComboHypo.h:42
TrigBmumuxComboHypo::findBmumuxCandidates
StatusCode findBmumuxCandidates(TrigBmumuxState &) const
Find B decays by appling next three subprocedures to each found dimuon candidate.
Definition: TrigBmumuxComboHypo.cxx:311
xAOD::Vertex_v1::trackParticle
const TrackParticle * trackParticle(size_t i) const
Get the pointer to a given track that was used in vertex reco.
Definition: Vertex_v1.cxx:249
xAOD::TrackParticle_v1::genvecP4
GenVecFourMom_t genvecP4() const
The full 4-momentum of the particle : GenVector form.
Definition: TrackParticle_v1.cxx:116
TrigBmumuxComboHypo::m_dimuon_rejectSameChargeTracks
Gaudi::Property< bool > m_dimuon_rejectSameChargeTracks
Definition: TrigBmumuxComboHypo.h:273
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
Trk::ParametersBase
Definition: ParametersBase.h:55
xAOD::Vertex_v1::z
float z() const
Returns the z position.
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
ComboHypo::m_outputs
SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainer > m_outputs
Definition: ComboHypo.h:50
TrigBmumuxComboHypo::m_muonContainerKey
SG::ReadHandleKey< xAOD::MuonContainer > m_muonContainerKey
Definition: TrigBmumuxComboHypo.h:247
xAOD::TrigComposite_v1
Class used to describe composite objects in the HLT.
Definition: TrigComposite_v1.h:52
xAOD::TrigBphys_v1::fitz
float fitz() const
accessor method: z position of vertex
SG::AuxElement::index
size_t index() const
Return the index of this element within its container.
TrigBmumuxComboHypo::m_BplusToMuMuKaon_useFastFit
Gaudi::Property< bool > m_BplusToMuMuKaon_useFastFit
Definition: TrigBmumuxComboHypo.h:289
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
HLT::Identifier
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:20
TrigBmumuxComboHypo::m_roiEtaWidth
Gaudi::Property< double > m_roiEtaWidth
Definition: TrigBmumuxComboHypo.h:259
xAOD::decisions
decisions
Definition: TrigComposite_v1.cxx:81
PDG20::mProton
static constexpr double mProton
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:19
TrigBmumuxState::addTrackCombination
void addTrackCombination(size_t i1)
Definition: TrigBmumuxComboHypo.h:86
AthReentrantAlgorithm::m_extendedExtraObjects
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Definition: AthReentrantAlgorithm.h:153
TrigBmumuxComboHypo::kFastFit_2trk
@ kFastFit_2trk
Definition: TrigBmumuxComboHypo.h:131
TrigBmumuxComboHypo::m_BdToMuMuKstar0_useFastFit
Gaudi::Property< bool > m_BdToMuMuKstar0_useFastFit
Definition: TrigBmumuxComboHypo.h:337
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon_chi2
Gaudi::Property< float > m_LambdaBToMuMuProtonKaon_chi2
Definition: TrigBmumuxComboHypo.h:355
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
TrigCompositeUtils::featureString
const std::string & featureString()
Definition: TrigCompositeUtilsRoot.cxx:886
ComboHypo::initialize
virtual StatusCode initialize() override
Definition: ComboHypo.cxx:23
TrigBmumuxComboHypo::m_BcToDsMuMu_chi2
Gaudi::Property< float > m_BcToDsMuMu_chi2
Definition: TrigBmumuxComboHypo.h:375
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
ComboHypo::m_legToInputCollectionMap
Gaudi::Property< Combo::LegMap > m_legToInputCollectionMap
Definition: ComboHypo.h:59
TrigBmumuxComboHypo::m_BcToDstarMuMu_massRange
Gaudi::Property< std::pair< double, double > > m_BcToDstarMuMu_massRange
Definition: TrigBmumuxComboHypo.h:411
TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon_minKstarMass
Gaudi::Property< double > m_LambdaBToMuMuProtonKaon_minKstarMass
Definition: TrigBmumuxComboHypo.h:349
TrigBmumuxComboHypo::m_BcToMuMuPion_useFastFit
Gaudi::Property< bool > m_BcToMuMuPion_useFastFit
Definition: TrigBmumuxComboHypo.h:303
TrigBmumuxComboHypo::m_BsToMuMuPhi1020_rejectSameChargeTracks
Gaudi::Property< bool > m_BsToMuMuPhi1020_rejectSameChargeTracks
Definition: TrigBmumuxComboHypo.h:309
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:191
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
TrigBmumuxComboHypo::findBmumuxCandidates_selectTracks
StatusCode findBmumuxCandidates_selectTracks(TrigBmumuxState &, size_t dimuonIndex) const
Select tracks in vicinity of given dimuon vertex.
Definition: TrigBmumuxComboHypo.cxx:337
xAOD::TrigBphys_v1::EF
@ EF
Definition: TrigBphys_v1.h:85
TrigBmumuxComboHypo::m_BcToDsMuMu
Gaudi::Property< bool > m_BcToDsMuMu
Definition: TrigBmumuxComboHypo.h:361
Trk::trkMass
@ trkMass
Extended perigee: mass.
Definition: ParamDefs.h:87
TrigBmumuxComboHypo::momentum
xAOD::TrackParticle::GenVecFourMom_t momentum(const xAOD::Vertex &vertex, const std::vector< double > &trkMass) const
Calculate 4-momentum of the fitted vertex particle assuming the given masses.
Definition: TrigBmumuxComboHypo.cxx:1043
TrigCompositeUtils::Decision
xAOD::TrigComposite Decision
Definition: Event/xAOD/xAODTrigger/xAODTrigger/TrigComposite.h:20
TrigBmumuxComboHypo::mergeMuonsFromDecisions
StatusCode mergeMuonsFromDecisions(TrigBmumuxState &) const
Go through state.previousDecisions(), fetch xAOD::Muons objects attached to decisions and save links ...
Definition: TrigBmumuxComboHypo.cxx:134
AthReentrantAlgorithm::sysInitialize
virtual StatusCode sysInitialize() override
Override sysInitialize.
Definition: AthReentrantAlgorithm.cxx:96
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
item
Definition: ItemListSvc.h:43
xAOD::TrigBphys_v1::BCDSMUMU
@ BCDSMUMU
Definition: TrigBphys_v1.h:60
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
xAOD::TrigBphys_v1::phi
float phi() const
accessor method: phi
TrigBmumuxComboHypo::m_BcToDstarMuMu_chi2
Gaudi::Property< float > m_BcToDstarMuMu_chi2
Definition: TrigBmumuxComboHypo.h:419
ComboHypo::m_inputs
SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > m_inputs
Definition: ComboHypo.h:49
ITrigBphysState::previousDecisions
const TrigCompositeUtils::DecisionContainer & previousDecisions() const
Definition: ITrigBphysState.h:43
TrigCompositeUtils::createLegName
HLT::Identifier createLegName(const HLT::Identifier &chainIdentifier, size_t counter)
Generate the HLT::Identifier which corresponds to a specific leg of a given chain.
Definition: TrigCompositeUtilsRoot.cxx:166
Trk::D0
@ D0
Definition: ParameterType.h:18
xAOD::TrigBphys_v1::BCPIMUMU
@ BCPIMUMU
Definition: TrigBphys_v1.h:71
TrigBmumuxComboHypo::isInMassRange
bool isInMassRange(double mass, const std::pair< double, double > &range) const
Checks that the given mass value falls into the specified range.
Definition: TrigBmumuxComboHypo.h:229
TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon_minProtonPt
Gaudi::Property< double > m_LambdaBToMuMuProtonKaon_minProtonPt
Definition: TrigBmumuxComboHypo.h:345
TrigBmumuxComboHypo::m_BcToDsMuMu_DsMassRange
Gaudi::Property< std::pair< double, double > > m_BcToDsMuMu_DsMassRange
Definition: TrigBmumuxComboHypo.h:373
TrigBmumuxComboHypo::m_trackToVertexTool
ToolHandle< Reco::ITrackToVertex > m_trackToVertexTool
Definition: TrigBmumuxComboHypo.h:427
xAOD::TrigBphys_v1::BCDPMUMU
@ BCDPMUMU
Definition: TrigBphys_v1.h:63
TrigBmumuxComboHypo::m_BcToDstarMuMu_makeDstar
Gaudi::Property< bool > m_BcToDstarMuMu_makeDstar
Definition: TrigBmumuxComboHypo.h:401
TrigBmumuxComboHypo::m_BcToMuMuPion
Gaudi::Property< bool > m_BcToMuMuPion
Definition: TrigBmumuxComboHypo.h:293
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
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:890
TrigBmumuxComboHypo::m_dimuon_chi2
Gaudi::Property< double > m_dimuon_chi2
Definition: TrigBmumuxComboHypo.h:277
TrigBmumuxComboHypo::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrigBmumuxComboHypo.h:429
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
TrigBmumuxComboHypo::m_BdToMuMuKstar0
Gaudi::Property< bool > m_BdToMuMuKstar0
Definition: TrigBmumuxComboHypo.h:323
TrigCompositeUtils::NavGraph::finalNodes
std::vector< NavGraphNode * > finalNodes() const
Get all final nodes.
Definition: NavGraph.cxx:99
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
xAOD::Vertex_v1::chiSquared
float chiSquared() const
Returns the of the vertex fit as float.
h
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
TrigBmumuxComboHypo::m_BcToDplusMuMu_useFastFit
Gaudi::Property< bool > m_BcToDplusMuMu_useFastFit
Definition: TrigBmumuxComboHypo.h:395
TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon_massRange
Gaudi::Property< std::pair< double, double > > m_LambdaBToMuMuProtonKaon_massRange
Definition: TrigBmumuxComboHypo.h:353
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
xAOD::TrigBphys_v1::lowerChain
const TrigBphys_v1 * lowerChain() const
accessor method: lowerChain decay particle
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TrigCompositeUtils::NavGraphNode
Transient utility class to represent a node in a graph (m_decisionObject), and a vector of edges (m_f...
Definition: NavGraph.h:20
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
ITrigBphysState::decisions
TrigCompositeUtils::DecisionContainer & decisions()
Definition: ITrigBphysState.h:44
xAOD::Vertex_v1::y
float y() const
Returns the y position.
TrigBmumuxState::selectedTrackZ0
std::map< const xAOD::TrackParticle *, double > selectedTrackZ0
Definition: TrigBmumuxComboHypo.h:77
PDG20::mPion
static constexpr double mPion
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:13
TrigBmumuxComboHypo::m_dimuon_massRange
Gaudi::Property< std::pair< double, double > > m_dimuon_massRange
Definition: TrigBmumuxComboHypo.h:275
TrigCompositeUtils::decisionIDs
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
Definition: TrigCompositeUtilsRoot.cxx:67
charge3
int charge3(const T &p)
Definition: AtlasPID.h:493
HLT::Identifier::name
std::string name() const
reports human redable name if it is enabled or, empty string
Definition: HLTIdentifier.cxx:14
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:616
TrigBmumuxComboHypo::m_BcToDstarMuMu_DstarMassRange
Gaudi::Property< std::pair< double, double > > m_BcToDstarMuMu_DstarMassRange
Definition: TrigBmumuxComboHypo.h:417
TrigBmumuxComboHypo::m_BcToMuMuPion_massRange
Gaudi::Property< std::pair< double, double > > m_BcToMuMuPion_massRange
Definition: TrigBmumuxComboHypo.h:299
ComboHypo::decisionsInput
const SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsInput() const
Definition: ComboHypo.h:40
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
TrigCompositeUtils::roiString
const std::string & roiString()
Definition: TrigCompositeUtilsRoot.cxx:878
TrigBmumuxComboHypo::m_BcToDplusMuMu_chi2
Gaudi::Property< float > m_BcToDplusMuMu_chi2
Definition: TrigBmumuxComboHypo.h:393
TrigBmumuxComboHypo::m_BplusToMuMuKaon_massRange
Gaudi::Property< std::pair< double, double > > m_BplusToMuMuKaon_massRange
Definition: TrigBmumuxComboHypo.h:285
TrigCompositeUtils::recursiveGetDecisions
void recursiveGetDecisions(const Decision *start, NavGraph &navGraph, const EventContext &ctx, const DecisionIDContainer &ids, const bool enforceDecisionOnStartNode)
Search back in time from "node" and locate all paths back through Decision objects for a given chain.
Definition: TrigCompositeUtilsRoot.cxx:423
TrigBmumuxComboHypo::kB_2mu1trk
@ kB_2mu1trk
Definition: TrigBmumuxComboHypo.h:125
TrigBmumuxState::isCompositeRoI
bool isCompositeRoI
Definition: TrigBmumuxComboHypo.h:68
TrigBmumuxComboHypo::m_deltaR
Gaudi::Property< double > m_deltaR
Definition: TrigBmumuxComboHypo.h:255
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
TrigBmumuxComboHypo::m_allowedIDs
TrigCompositeUtils::DecisionIDContainer m_allowedIDs
Definition: TrigBmumuxComboHypo.h:432
TrigBmumuxComboHypo::m_trackParticleContainerKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerKey
Definition: TrigBmumuxComboHypo.h:245
TrigBmumuxComboHypo::Lxy
double Lxy(const Amg::Vector3D &productionVertex, const xAOD::Vertex &decayVertex) const
Calculate the Lxy (~distance between vertices) It is defined as the transverse distance between the p...
Definition: TrigBmumuxComboHypo.cxx:1026
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
PDG20::mKaon
static constexpr double mKaon
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:15
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
LHEF::Writer
Pythia8::Writer Writer
Definition: Prophecy4fMerger.cxx:12
xAOD::TrigBphys_v1::fity
float fity() const
accessor method: y position of vertex
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
xAOD::Vertex_v1::vxTrackAtVertex
std::vector< Trk::VxTrackAtVertex > & vxTrackAtVertex()
Non-const access to the VxTrackAtVertex vector.
Definition: Vertex_v1.cxx:181
PDG20::mJpsi
static constexpr double mJpsi
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:21
TrigBmumuxComboHypo::m_BcToDsMuMu_dimuonMassRange
Gaudi::Property< std::pair< double, double > > m_BcToDsMuMu_dimuonMassRange
Definition: TrigBmumuxComboHypo.h:369
TrigBmumuxComboHypo::findDimuonCandidates
StatusCode findDimuonCandidates(TrigBmumuxState &) const
Make all possible dimuon combinations from state.muons(), fit muon InDet tracks to the common vertex,...
Definition: TrigBmumuxComboHypo.cxx:239
TrigBmumuxState::badTrackCombinations
std::vector< size_t > badTrackCombinations
Definition: TrigBmumuxComboHypo.h:83
JetTools::FFJetAllowedMassDefEnum::Comb
@ Comb
Track Assisted.
xAOD::TrigComposite_v1::getDetail
bool getDetail(const std::string &name, TYPE &value) const
Get an TYPE detail from the object.
xAOD::TrigBphys_v1::eta
float eta() const
accessor method: eta
xAOD::TrigBphys_v1::DZKPI
@ DZKPI
Definition: TrigBphys_v1.h:69
TrigBmumuxState::isBadCombination
bool isBadCombination(size_t i1) const
Definition: TrigBmumuxComboHypo.h:89
xAOD::TrigBphys_v1::MULTIMU
@ MULTIMU
Definition: TrigBphys_v1.h:55
PDG20::mD0
static constexpr double mD0
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:18
TrigBmumuxComboHypo::m_fastFit_2mu1trk_chi2
Gaudi::Property< double > m_fastFit_2mu1trk_chi2
Definition: TrigBmumuxComboHypo.h:269
TrigBmumuxComboHypo::passDimuonTrigger
bool passDimuonTrigger(const std::vector< const TrigCompositeUtils::DecisionIDContainer * > &previousDecisionIDs) const
Definition: TrigBmumuxComboHypo.cxx:1055
TrigBmumuxComboHypo::makeTriggerObject
xAOD::TrigBphys * makeTriggerObject(TrigBmumuxState &state, const xAOD::Vertex &vertex, xAOD::TrigBphys::pType type=xAOD::TrigBphys::MULTIMU, const std::vector< double > &trkMass={PDG::mMuon, PDG::mMuon}, const ElementLink< xAOD::TrigBphysContainer > &dimuonLink=ElementLink< xAOD::TrigBphysContainer >()) const
Construct the trigger object that may be stored for debugging or matching.
Definition: TrigBmumuxComboHypo.cxx:932
xAOD::Vertex_v1::vxTrackAtVertexAvailable
bool vxTrackAtVertexAvailable() const
Check if VxTrackAtVertices are attached to the object.
Definition: Vertex_v1.cxx:209
TrigBmumuxComboHypo::m_BcToDplusMuMu
Gaudi::Property< bool > m_BcToDplusMuMu
Definition: TrigBmumuxComboHypo.h:381
python.compressB64.c
def c
Definition: compressB64.py:93
TrigBmumuxState::tracks
std::vector< ElementLink< xAOD::TrackParticleContainer > > tracks
Definition: TrigBmumuxComboHypo.h:67
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TrigCompositeUtils::viewString
const std::string & viewString()
Definition: TrigCompositeUtilsRoot.cxx:882
TrigBmumuxComboHypo::m_BcToDplusMuMu_dimuonMassRange
Gaudi::Property< std::pair< double, double > > m_BcToDplusMuMu_dimuonMassRange
Definition: TrigBmumuxComboHypo.h:389
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
TrigBmumuxComboHypo::m_trkZ0
Gaudi::Property< double > m_trkZ0
Definition: TrigBmumuxComboHypo.h:257
xAOD::TrigBphys_v1
Class describing a Bphysics online composite object.
Definition: TrigBphys_v1.h:44
TrigBmumuxState::trackCombinations
std::map< size_t, size_t > trackCombinations
Definition: TrigBmumuxComboHypo.h:80
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
TrigBmumuxComboHypo::m_vertexFitter
ToolHandle< Trk::TrkVKalVrtFitter > m_vertexFitter
Definition: TrigBmumuxComboHypo.h:425
TrigBmumuxComboHypo::m_BcToMuMuPion_dimuonMassRange
Gaudi::Property< std::pair< double, double > > m_BcToMuMuPion_dimuonMassRange
Definition: TrigBmumuxComboHypo.h:297
TrigBmumuxComboHypo::m_LambdaBToMuMuProtonKaon_useFastFit
Gaudi::Property< bool > m_LambdaBToMuMuProtonKaon_useFastFit
Definition: TrigBmumuxComboHypo.h:357
ServiceHandle< ICondSvc >
drawFromPickle.view
view
Definition: drawFromPickle.py:294
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
TrigBmumuxComboHypo::m_BcToDsMuMu_useFastFit
Gaudi::Property< bool > m_BcToDsMuMu_useFastFit
Definition: TrigBmumuxComboHypo.h:377
TrigBmumuxComboHypo::m_BdToMuMuKstar0_minPionPt
Gaudi::Property< double > m_BdToMuMuKstar0_minPionPt
Definition: TrigBmumuxComboHypo.h:329