|  | ATLAS Offline Software
    | 
 
 
 
Go to the documentation of this file.
   28 #include "Math/GenVector/VectorUtil.h" 
   29 #include "Math/Vector2D.h" 
   37 using ROOT::Math::XYVector;
 
   73     if (
item.second.size() > 1) {
 
   74       for (
size_t i = 0; 
i < 
item.second.size(); 
i++) {
 
   91     ATH_MSG_DEBUG( 
"No GenericMonitoringTool configured: no monitoring histograms will be available" );
 
   94   return StatusCode::SUCCESS;
 
  104   ATH_CHECK( previousDecisionsHandle.isValid() );
 
  105   ATH_MSG_DEBUG( 
"Running with " << previousDecisionsHandle->size() << 
" previous decisions" );
 
  110   ATH_CHECK( trigBphysHandle.record(std::make_unique<xAOD::TrigBphysContainer>(),
 
  111                                     std::make_unique<xAOD::TrigBphysAuxContainer>()) );
 
  116   auto state = std::make_unique<TrigBmuxState>(context, *previousDecisionsHandle, *outputDecisionsHandle, trigBphysHandle.
ptr(), *beamSpotHandle);
 
  121   ATH_MSG_DEBUG( 
"TrigBmuxComboHypo::execute() terminates with StatusCode::SUCCESS" );
 
  122   return StatusCode::SUCCESS;
 
  128   auto& muons = state.
muons;
 
  132   std::vector<int> nTrk;
 
  138     mon_nMuon, mon_nTrk, mon_nBPhysObject);
 
  146     const auto muon = *muonEL;
 
  147     if (!
muon->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle)) 
continue;
 
  148     if (!
muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)) 
continue;
 
  149     const auto muonInDetTrack = 
muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
 
  150     auto p_mu = muonInDetTrack->genvecP4();
 
  158     size_t muonIndex = muons.size();
 
  159     muons.push_back({muonEL, decisionEL, 
decisionIDs});
 
  161     ATH_MSG_DEBUG( 
"Found muon (CombinedTrackParticle) pt/eta/phi/q: " << 
muon->pt() << 
" / " << 
muon->eta() << 
" / " << 
muon->phi() << 
" / " << 
muon->charge() );
 
  165     auto view = *viewLinkInfo.link;
 
  169     const auto roi = *roiLinkInfo.link;
 
  175     std::vector<ElementLink<xAOD::TrackParticleContainer>> tracks;
 
  176     tracks.reserve(tracksHandle->size());
 
  177     for (
size_t idx = 0; 
idx < tracksHandle->size(); ++
idx) {
 
  178       const auto track = tracksHandle->get(
idx);
 
  181       tracks.emplace_back(ViewHelper::makeLink<xAOD::TrackParticleContainer>(
view, tracksHandle, 
idx));
 
  184     if (tracks.size() < 2) 
continue;
 
  185     std::sort(tracks.begin(), tracks.end(), [p_mu](
const auto& lhs, 
const auto& rhs){ return ROOT::Math::VectorUtil::DeltaR(p_mu, (*lhs)->genvecP4()) > ROOT::Math::VectorUtil::DeltaR(p_mu, (*rhs)->genvecP4()); });
 
  187     nTrk.push_back(tracks.size());
 
  189     std::sort(tracks.begin(), tracks.end(), [](
const auto& lhs, 
const auto& rhs){ return ((*lhs)->pt() > (*rhs)->pt()); });
 
  192       ATH_MSG_DEBUG( 
"Dump found tracks before vertex fit: " << tracks.size() << 
" candidates" );
 
  193       for (
const auto& trackEL : tracks) {
 
  199     size_t iterations = 0;
 
  200     bool isOverWarningThreshold = 
false;
 
  201     for (
size_t itrk1 = 0; itrk1 < tracks.size(); ++itrk1) {
 
  204       auto charge1 = trk1->
charge();
 
  206       for (
size_t itrk2 = 0; itrk2 < tracks.size(); ++itrk2) {
 
  207         if (itrk2 == itrk1) 
continue;
 
  210         auto charge2 = trk2->
charge();
 
  214         std::unique_ptr<xAOD::Vertex> vtx_D0;
 
  217             charge1 * charge2 < 0. &&
 
  223           vtx_D0 = 
fit(state.
context(), {muon->inDetTrackParticleLink(), tracks[itrk1], tracks[itrk2]}, 
kD0);
 
  227             ATH_MSG_DEBUG( 
"Partially reconstructed B+ -> mu+ nu_mu anti-D0(-> K+ pi-) candidate has been created from { " << itrk1 << 
", " << itrk2 << 
" }" );
 
  233                 std::vector<xAOD::TrigBphys*> triggerObjects = state.
addTriggerObjects(2, muonIndex);
 
  235                 p_D0 = ROOT::Math::PtEtaPhiMVector(triggerObjects[0]->
pt(), triggerObjects[0]->
eta(), triggerObjects[0]->
phi(), triggerObjects[0]->fitmass());
 
  249               p_D0 = ROOT::Math::PtEtaPhiMVector(triggerObject->
pt(), triggerObject->
eta(), triggerObject->
phi(), triggerObject->
fitmass());
 
  250               triggerObject->
setMass((p_mu + p_D0).M());
 
  258         for (
size_t itrk3 = 0; itrk3 < tracks.size(); ++itrk3) {
 
  259           if (itrk3 == itrk1 || itrk3 == itrk2) 
continue;
 
  264           std::vector<ElementLink<xAOD::TrackParticleContainer>> 
trackParticleLinks = {
muon->inDetTrackParticleLink(), tracks[itrk1], tracks[itrk2], tracks[itrk3]};
 
  272             bool makeDstar = 
true;
 
  286                   std::vector<xAOD::TrigBphys*> triggerObjects = state.
addTriggerObjects(2, muonIndex);
 
  288                   triggerObjects[1]->setSecondaryDecayLink(D0);
 
  301                   "TrigBphys object:\n\t  " <<
 
  302                   "roiId:         " << Dstar->
roiId()  << 
"\n\t  " <<
 
  304                   "level:         " << Dstar->
level() << 
"\n\t  " <<
 
  305                   "eta:           " << Dstar->
eta() << 
"\n\t  " <<
 
  306                   "phi:           " << Dstar->
phi() << 
"\n\t  " <<
 
  307                   "mass:          " << Dstar->
mass() << 
"\n\t  " <<
 
  308                   "fitmass:       " << Dstar->
fitmass() << 
"\n\t  " <<
 
  309                   "chi2/NDF:      " << Dstar->
fitchi2() << 
" / " << Dstar->
fitndof() << 
"\n\t  " <<
 
  310                   "vertex:        (" << Dstar->
fitx() << 
", " << Dstar->
fity() << 
", " << Dstar->
fitz() << 
")" );
 
  320               charge1 * charge2 < 0. && charge2 * charge3 > 0. &&
 
  331               ATH_MSG_DEBUG( 
"Partially reconstructed B0 -> mu+ nu_mu D-(-> K+ pi- pi-) candidate has been created from { " << itrk1 << 
", " << itrk2 << 
", " << itrk3 << 
" }" );
 
  339                   std::vector<xAOD::TrigBphys*> triggerObjects = state.
addTriggerObjects(2, muonIndex);
 
  348                 triggerObject->
setMass((p_mu + p_D).M());
 
  357               charge1 * charge2 < 0. &&
 
  369               ATH_MSG_DEBUG( 
"Partially reconstructed B_s0 -> mu+ nu_mu D_s-(->phi(-> K+ K-) pi-) candidate has been created from { " << itrk1 << 
", " << itrk2 << 
", " << itrk3 << 
" }" );
 
  377                   std::vector<xAOD::TrigBphys*> triggerObjects = state.
addTriggerObjects(2, muonIndex);
 
  386                 triggerObject->
setMass((p_mu + p_Ds).M());
 
  394               charge1 * 
charge3 > 0. && charge1 * charge2 < 0. &&
 
  405               ATH_MSG_DEBUG( 
"Partially reconstructed Lambda_b0 -> mu+ nu_mu anti-Lambda_c-(-> anti-p K+ pi-) candidate has been created from { " << itrk1 << 
", " << itrk2 << 
", " << itrk3 << 
" }" );
 
  413                   std::vector<xAOD::TrigBphys*> triggerObjects = state.
addTriggerObjects(2, muonIndex);
 
  422                 triggerObject->
setMass((p_mu + p_LambdaC).M());
 
  434         ATH_MSG_WARNING( iterations << 
" combinations for vertex fitter have been processed; " << mon_nBPhysObject << 
" vertices have been created" );
 
  435         isOverWarningThreshold = 
true;
 
  438         ATH_MSG_WARNING( 
"the number of fit attempts has exceeded the limit; breaking the loop at this point" );
 
  443   return StatusCode::SUCCESS;
 
  453     ATH_MSG_DEBUG( 
"Found xAOD::TrigBphys object: mass = " << triggerObject->mass() );
 
  469     std::vector<const DecisionIDContainer*> previousDecisionIDs(1, &
muon.decisionIDs);
 
  472       ATH_CHECK( 
tool->decideOnSingleObject(decision, previousDecisionIDs) );
 
  477   return StatusCode::SUCCESS;
 
  482     const EventContext& context,
 
  489     ATH_MSG_WARNING( 
"At least muon and two tracks should be given to the vertex fitter" );
 
  490     return std::unique_ptr<xAOD::Vertex>(
nullptr);
 
  493   std::vector<const xAOD::TrackParticle*> tracklist(
trackParticleLinks.size() - 1, 
nullptr);
 
  500   const Trk::Perigee& perigee1 = tracklist[0]->perigeeParameters();
 
  501   const Trk::Perigee& perigee2 = tracklist[1]->perigeeParameters();
 
  504   ATH_MSG_DEBUG( 
"Starting point: (" << startingPoint(0) << 
", " << startingPoint(1) << 
", " << startingPoint(2) << 
")" );
 
  509   std::unique_ptr<xAOD::Vertex> 
vertex(
m_vertexFitter->fit(tracklist, startingPoint, *fitterState));
 
  514   if (
vertex->chiSquared() > 50.) {
 
  515     ATH_MSG_DEBUG( 
"Fit is successful, but vertex chi2 is too high, we are not going to save it (chi2 = " << 
vertex->chiSquared() << 
")" );
 
  530     const EventContext& context,
 
  536     return std::unique_ptr<Trk::VxCascadeInfo>(
nullptr);
 
  539   std::vector<std::vector<ElementLink<xAOD::TrackParticleContainer>>> vtx_trackParticleLinks;
 
  560       ATH_MSG_WARNING( 
"fitCascade(): decay " << decay << 
" has not been defined in McTopologyTool" );
 
  561       return std::unique_ptr<Trk::VxCascadeInfo>(
nullptr);
 
  565   std::vector<std::vector<const xAOD::TrackParticle*>> vtx_tracks(vtx_trackParticleLinks.size());
 
  566   for (
size_t i = 0; 
i < vtx_trackParticleLinks.size(); ++
i) {
 
  567     for (
size_t j = 0; j < vtx_trackParticleLinks[
i].size(); ++j) {
 
  568       vtx_tracks[
i].push_back(*vtx_trackParticleLinks[
i][j]);
 
  575   std::vector<Trk::VertexID> precedingVertices(1, 
m_vertexFitter->startVertex(vtx_tracks[0], 
s_trkMass[
static_cast<size_t>(decay)][0], *state));
 
  576   m_vertexFitter->nextVertex(vtx_tracks[1], 
s_trkMass[
static_cast<size_t>(decay)][1], precedingVertices, *state);
 
  581     result->setSVOwnership(
true);
 
  586       vertex->setTrackParticleLinks(vtx_trackParticleLinks[
i++]);
 
  598     const std::vector<double>& 
trkMass)
 const {
 
  602   std::vector<xAOD::TrackParticle::GenVecFourMom_t> momenta;
 
  605   for (
size_t i = 0; 
i < 
vertex.vxTrackAtVertex().
size(); ++
i) {
 
  609     momenta.emplace_back(
p.x(), 
p.y(), 
p.z(), 
trkMass[
i]);
 
  626     "TrigBphys object:\n\t  " <<
 
  627     "roiId:         " << triggerObject.
roiId()  << 
"\n\t  " <<
 
  628     "particleType:  " << triggerObject.
particleType() << 
"\n\t  " <<
 
  629     "level:         " << triggerObject.
level() << 
"\n\t  " <<
 
  630     "eta:           " << triggerObject.
eta() << 
"\n\t  " <<
 
  631     "phi:           " << triggerObject.
phi() << 
"\n\t  " <<
 
  632     "mass:          " << triggerObject.
mass() << 
"\n\t  " <<
 
  633     "fitmass:       " << triggerObject.
fitmass() << 
"\n\t  " <<
 
  634     "chi2/NDF:      " << triggerObject.
fitchi2() << 
" / " << triggerObject.
fitndof() << 
"\n\t  " <<
 
  635     "vertex:        (" << triggerObject.
fitx() << 
", " << triggerObject.
fity() << 
", " << triggerObject.
fitz() << 
")" );
 
  637   return StatusCode::SUCCESS;
 
  642     std::vector<xAOD::TrigBphys*>& triggerObjects,
 
  647   const std::vector<xAOD::Vertex*>& vertices = vxCascadeInfo.
vertices();
 
  648   const std::vector<std::vector<TLorentzVector>>& momenta = vxCascadeInfo.
getParticleMoms();
 
  649   ATH_CHECK( triggerObjects.size() == vertices.size() );
 
  651   for (
size_t i = 0; 
i < vertices.size(); ++
i) {
 
  664   triggerObjects[0]->setLxy(
Lxy(vertices[1]->position(), vertices[0]->position(), momenta[0]));
 
  669   triggerObjects[1]->setParticleType(
type);
 
  670   triggerObjects[1]->setFitchi2(vxCascadeInfo.
fitChi2());
 
  671   triggerObjects[1]->setFitndof(vxCascadeInfo.
nDoF());
 
  672   triggerObjects[1]->setLxy(
Lxy(beamSpotPosition, vertices[1]->position(), momenta[1]));
 
  680       "TrigBphys object:\n\t  " <<
 
  682       "chi2/NDF:      " << vtx1->
fitchi2() << 
" / " << vtx1->
fitndof() << 
"\n\t  " <<
 
  683       "vertex0:       (" << vtx0->
fitx() << 
", " << vtx0->
fity() << 
", " << vtx0->
fitz() << 
")\n\t  " <<
 
  684       "vertex1:       (" << vtx1->
fitx() << 
", " << vtx1->
fity() << 
", " << vtx1->
fitz() << 
")\n\t  " <<
 
  685       "Lxy(B):        " << vtx1->
lxy() << 
"\n\t  " <<
 
  686       "Lxy(D):        " << vtx0->
lxy() );
 
  689   return StatusCode::SUCCESS;
 
  702   auto p_mu = 
muon->genvecP4();
 
  703   auto p_trk = 
track->genvecP4();
 
  711   return (perigee ? perigee->parameters()[
Trk::z0] : -1000.);
 
  717   XYVector 
R(decayVertex.x() - productionVertex.x(), decayVertex.y() - productionVertex.y());
 
  719   for (
const auto& 
p : momenta) {
 
  720     pT += XYVector(
p.Px(), 
p.Py());
 
  722   return R.Dot(
pT.unit());
 
  
Gaudi::Property< std::pair< double, double > > m_BdToD_massRange
static const std::vector< std::vector< std::vector< double > > > s_trkMass
ToolHandle< Trk::TrkVKalVrtFitter > m_vertexFitter
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzM4D< double > > GenVecFourMom_t
Base 4 Momentum type for TrackParticle.
const std::string & featureString()
SG::ReadHandleKey< xAOD::MuonContainer > m_muonContainerKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
StatusCode findBmuxCandidates(TrigBmuxState &) const
Gaudi::Property< double > m_BdToD_minKaonPt
void setFitchi2(float FitChi2)
set method: chi2 from vertex fit
Group
Properties of a chain group.
Gaudi::Property< double > m_LambdaBToLambdaC_minKaonPt
Gaudi::Property< float > m_LambdaBToLambdaC_chi2
Gaudi::Property< double > m_BdToD_minPionPt
const SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsOutput() const
Scalar phi() const
phi method
Gaudi::Property< double > m_deltaR
xAOD::TrigCompositeContainer DecisionContainer
float charge() const
Returns the charge.
Decision * newDecisionIn(DecisionContainer *dc, const std::string &name)
Helper method to create a Decision object, place it in the container and return a pointer to it.
Scalar eta() const
pseudorapidity method
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Gaudi::Property< float > m_BsToDs_LxyBs
levelType level() const
accessor method: level Type
accumulate
Update flags based on parser line args.
void setLowerChainLink(const ElementLink< xAOD::TrigBphysContainer_v1 > &link)
set method: link to lowerChain decay particle
const std::vector< xAOD::Vertex * > & vertices() const
Gaudi::Property< float > m_BdToD_chi2
void setFitz(float FitZ)
set method: z position of vertex
pType particleType() const
accessor method: particle Type
static constexpr double mMuon
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
float fitx() const
accessor method: x position of vertex
Gaudi::Property< double > m_BsToDs_minKaonPt
bool isInMassRange(double mass, const std::pair< double, double > &range) const
Checks that the given mass value falls into the specified range.
Gaudi::Property< double > m_BdToD_minDPt
bool msgLvl(const MSG::Level lvl) const
virtual StatusCode execute(const EventContext &context) const override
auto makeHandle(const SG::View *view, const KEY &key, const EventContext &ctx)
Create a view handle from a handle key.
const std::string & comboHypoAlgNodeName()
Gaudi::Property< float > m_BToD0_LxyD0
const Amg::Vector3D & position() const
Returns the 3-pos.
float mass() const
accessor method: mass
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Gaudi::Property< float > m_LambdaBToLambdaC_LxyLc
Amg::Vector3D beamSpotPosition() const
SG::WriteHandle< DecisionContainer > createAndStore(const SG::WriteHandleKey< DecisionContainer > &key, const EventContext &ctx)
Creates and right away records the DecisionContainer with the key.
const std::string & roiString()
StatusCode fillTriggerObject(xAOD::TrigBphys &triggerObject, xAOD::TrigBphys::pType type, const xAOD::Vertex &vertex, const std::vector< double > &trkMass) const
Fill the trigger object that may be stored for debugging or matching.
Gaudi::Property< double > m_BToD0_minDstarPt
Gaudi::Property< double > m_roiEtaWidth
float pt() const
accessor method: pt
Gaudi::Property< float > m_BsToDs_chi2
Gaudi::Property< bool > m_LambdaBToLambdaC
SG::WriteHandleKey< xAOD::TrigBphysContainer > m_trigBphysContainerKey
void setFitndof(int FitNdof)
set method: ndof from vertex fit
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Gaudi::Property< double > m_BToD0_minD0Pt
ToolHandle< InDet::VertexPointEstimator > m_vertexPointEstimator
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
TrigBmuxComboHypo()=delete
Gaudi::Property< std::pair< double, double > > m_BToD0_D0MassRange
Gaudi::Property< size_t > m_fitAttemptsBreakThreshold
ToolHandle< Reco::ITrackToVertex > m_trackToVertexTool
Gaudi::Property< bool > m_BToD0
void setFitmass(float FitMass)
set method: mass from vertex fit
Gaudi::Property< std::pair< double, double > > m_BsToDs_phiMassRange
xAOD::TrigBphys * addTriggerObject(size_t muonIndex)
Gaudi::Property< size_t > m_fitAttemptsWarningThreshold
ToolHandleArray< ComboHypoToolBase > & hypoTools()
const EventContext & context() const
void setFity(float FitY)
set method: y position of vertex
Gaudi::Property< float > m_cascadeChi2
Gaudi::Property< bool > m_BsToDs
std::vector< xAOD::TrigBphys * > addTriggerObjects(size_t n, size_t muonIndex)
::StatusCode StatusCode
StatusCode definition for legacy code.
pointer_type ptr()
Dereference the pointer.
double getTrkImpactParameterZ0(const EventContext &ctx, const xAOD::TrackParticle &track, const Amg::Vector3D &vertex) const
Returns the longitudinal impact parameter z0 of the track w.r.t.
Gaudi::Property< double > m_trkZ0
State class for TrigBmuxComboHypo algorithm.
Default, invalid implementation of ClassID_traits.
void setMass(float)
Set the mass of the object.
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
uint32_t roiId() const
accessor method: ID of L1 RoI
std::vector< ElementLink< xAOD::TrackParticleContainer > > trackParticleLinks(const xAOD::TauJet *tau, xAOD::TauJetParameters::TauTrackFlag flag=xAOD::TauJetParameters::TauTrackFlag::classifiedCharged)
Gaudi::Property< double > m_LambdaBToLambdaC_minProtonPt
float fitchi2() const
accessor method: chi2 from vertex fit
const Combo::MultiplicityReqMap & triggerMultiplicityMap() const
GenVecFourMom_t genvecP4() const
The full 4-momentum of the particle : GenVector form.
double R(const INavigable4Momentum *p1, const double v_eta, const double v_phi)
Gaudi::Property< std::pair< double, double > > m_BsToDs_DsMassRange
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
float fitmass() const
accessor method: mass from vertex fit
float fitz() const
accessor method: z position of vertex
static constexpr double mProton
Gaudi::Property< std::pair< double, double > > m_BdToD_DMassRange
std::unique_ptr< xAOD::Vertex > fit(const EventContext &context, const std::vector< ElementLink< xAOD::TrackParticleContainer >> &trackParticleLinks, Decay decay) const
Perform a vertex fit on selected tracks.
ElementLink implementation for ROOT usage.
virtual StatusCode initialize() override
Gaudi::Property< float > m_BToD0_LxyBd
StatusCode createDecisionObjects(TrigBmuxState &) const
void setTrackParticleLinks(const std::vector< ElementLink< TrackParticleContainer > > &links)
Set the track particle links on the object.
virtual StatusCode initialize() override
Gaudi::Property< bool > m_makeCascadeFit
std::vector< size_t > trigBphysMuonIndices
Gaudi::Property< float > m_LambdaBToLambdaC_LxyLb
@ trkMass
Extended perigee: mass.
std::vector< Muon > muons
xAOD::TrigComposite Decision
StatusCode initialize(bool used=true)
Gaudi::Property< std::pair< double, double > > m_BToD0_massRange
const std::string & viewString()
Eigen::Matrix< double, 3, 1 > Vector3D
std::unique_ptr< Trk::VxCascadeInfo > fitCascade(const EventContext &context, const std::vector< ElementLink< xAOD::TrackParticleContainer >> &trackParticleLinks, Decay decay) const
Perform a cascade vertex fit on selected tracks.
const std::vector< std::vector< TLorentzVector > > & getParticleMoms() const
float phi() const
accessor method: phi
const std::string & seedString()
const TrigCompositeUtils::DecisionContainer & previousDecisions() const
HLT::Identifier createLegName(const HLT::Identifier &chainIdentifier, size_t counter)
Generate the HLT::Identifier which corresponds to a specific leg of a given chain.
ToolHandle< GenericMonitoringTool > m_monTool
const Amg::Vector3D & momentum() const
Access method for the momentum.
Gaudi::Property< float > m_BToD0_chi2
StatusCode fillTriggerObjects(std::vector< xAOD::TrigBphys * > &triggerObjects, xAOD::TrigBphys::pType type, const Trk::VxCascadeInfo &vxCascadeInfo, const Amg::Vector3D &beamSpotPosition) const
Fill the trigger object that may be stored for debugging or matching for a cascade vertex.
std::set< DecisionID > DecisionIDContainer
double Lxy(const Amg::Vector3D &productionVertex, const Amg::Vector3D &decayVertex, const std::vector< TLorentzVector > &momenta) const
Returns the transverse decay length of a particle Lxy in [mm].
float chiSquared() const
Returns the  of the vertex fit as float.
Class describing a Vertex.
Gaudi::Property< double > m_BToD0_minDstarPionPt
#define ATH_MSG_WARNING(x)
Gaudi::Property< float > m_BsToDs_LxyDs
Gaudi::Property< bool > m_BToD0_makeDstar
Gaudi::Property< float > m_BToD0_LxyB
Gaudi::Property< double > m_BToD0_minD0PionPt
Gaudi::Property< float > m_BdToD_LxyD
bool isInSameRoI(const xAOD::Muon *, const xAOD::TrackParticle *) const
Checks that the given track is close enough to the muon, i.e.
Gaudi::Property< double > m_roiPhiWidth
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerKey
Gaudi::Property< double > m_BToD0_maxDstarPionZ0
TrigCompositeUtils::DecisionContainer & decisions()
bool isIdenticalTracks(const xAOD::TrackParticle *lhs, const xAOD::TrackParticle *rhs) const
Returns false for the tracks with opposite charges.
Gaudi::Property< std::pair< double, double > > m_BToD0_DstarMassRange
static constexpr double mPion
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
Gaudi::Property< double > m_BsToDs_minDsPt
Gaudi::Property< double > m_LambdaBToLambdaC_minPionPt
const SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsInput() const
Gaudi::Property< std::pair< double, double > > m_LambdaBToLambdaC_massRange
static constexpr double mKaon
Class describing a TrackParticle.
Gaudi::Property< float > m_BdToD_LxyBd
float fity() const
accessor method: y position of vertex
Declare a monitored scalar variable.
float lxy() const
accessor method: lxy
float eta() const
accessor method: eta
static constexpr double mD0
TrigCompositeUtils::DecisionIDContainer m_allowedIDs
Gaudi::Property< double > m_BToD0_minD0KaonPt
bool isAnyIDPassing(const Decision *d, const DecisionIDContainer &required)
Checks if any of the DecisionIDs passed in arg required is availble in Decision object.
Gaudi::Property< double > m_BsToDs_minPionPt
size_type size() const noexcept
Returns the number of elements in the collection.
Gaudi::Property< std::pair< double, double > > m_LambdaBToLambdaC_LambdaCMassRange
int fitndof() const
accessor method: ndof from vertex fit
Class describing a Bphysics online composite object.
pType
enum for different particle types
Base class for elements of a container that can have aux data.
xAOD::TrigBphysContainer & trigBphysCollection()
Gaudi::Property< double > m_LambdaBToLambdaC_minLambdaCPt
Gaudi::Property< std::pair< double, double > > m_BsToDs_massRange
Gaudi::Property< bool > m_BdToD
ElementLink< DecisionContainer > decisionToElementLink(const Decision *d, const EventContext &ctx)
Takes a raw pointer to a Decision and returns an ElementLink to the Decision.
void setFitx(float FitX)
set method: x position of vertex