|
ATLAS Offline Software
|
Go to the documentation of this file.
5 #ifndef TRIG_TrigBmumuxComboHypo_H
6 #define TRIG_TrigBmumuxComboHypo_H
12 #include "Gaudi/Property.h"
61 std::vector<ElementLink<TrigCompositeUtils::DecisionContainer>>
decisionLinks;
67 std::vector<ElementLink<xAOD::TrackParticleContainer>>
tracks;
94 return StatusCode::FAILURE;
97 return StatusCode::SUCCESS;
192 std::unique_ptr<xAOD::Vertex>
fit(
193 const EventContext& context,
224 bool passDimuonTrigger(
const std::vector<const TrigCompositeUtils::DecisionIDContainer*>& previousDecisionIDs)
const;
246 "TrackCollectionKey",
"InDetTrackParticles",
"input TrackParticle container name"};
248 "MuonCollectionKey",
"Muons",
"input EF Muon container name"};
250 "TrigBphysCollectionKey",
"TrigBphysContainer",
"output TrigBphysContainer name"};
252 m_beamSpotKey {
this,
"BeamSpotKey",
"BeamSpotData",
"SG key for beam spot"};
256 "DeltaR", 0.01,
"minimum deltaR between same-sign tracks (overlap removal)"};
258 "TrkZ0", 50.,
"maximum z0 impact parameter of the track wrt the fitted dimuon vertex; no preselection if negative"};
260 "RoiEtaWidth", 0.75,
"extent of the RoI in eta from initial muon, to be check for SuperRoI"};
262 "RoiPhiWidth", 0.75,
"extent of the RoI in phi from initial muon, to be check for SuperRoI"};
264 "FitAttemptsWarningThreshold", 200,
"Events processing this many calls of the vertex fitter will generate a WARNING message (time-out protect)"};
266 "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)"};
268 "FastFit_2trk_chi2", 50.,
"maximum chi2 for fast fit of trk1 + trk2"};
270 "FastFit_2mu1trk_chi2", 60.,
"maximum chi2 for fast fit of dimuon + trk1"};
274 "Dimuon_rejectSameChargeTracks",
true,
"if true, the only (mu+, mu-) pairs will be kept (no wrong-charge combinations)"};
276 "Dimuon_massRange", {100., 5500.},
"dimuon mass range"};
278 "Dimuon_chi2", 20.,
"maximum chi2 of the dimuon vertex"};
282 "BplusToMuMuKaon",
true,
"switch on/off B+ -> mu+ mu- K+ decay"};
284 "BplusToMuMuKaon_minKaonPt", 100.,
"minimum pT of kaon track"};
286 "BplusToMuMuKaon_massRange", {4500., 5900.},
"B+ mass range"};
288 "BplusToMuMuKaon_chi2", 50.,
"maximum chi2 of the fitted B+ vertex"};
290 "BplusToMuMuKaon_useFastFit",
false,
"true: perform vertex fit depending on only if fast fit; false: always perform vertex fit"};
294 "BcToMuMuPion",
true,
"switch on/off B_c+ -> J/psi(-> mu+ mu-) pi+ decay"};
296 "BcToMuMuPion_minPionPt", 2000.,
"minimum pT of pion track"};
298 "BcToMuMuPion_dimuonMassRange", {2500., 4300.},
"dimuon mass range for B_c+ decay"};
300 "BcToMuMuPion_massRange", {5500., 7300.},
"B_c+ mass range"};
302 "BcToMuMuPion_chi2", 50.,
"maximum chi2 of the fitted B_c+ vertex"};
304 "BcToMuMuPion_useFastFit",
false,
"true: perform vertex fit depending on only if fast fit; false: always perform vertex fit"};
308 "BsToMuMuPhi1020",
true,
"switch on/off B_s0 -> mu+ mu- phi(-> K+ K-) decay"};
310 "BsToMuMuPhi1020_rejectSameChargeTracks",
true,
"if true, the only (K+, K-) pairs will be kept (no wrong-charge combinations)"};
312 "BsToMuMuPhi1020_minKaonPt", 100.,
"minimum pT of kaon tracks"};
314 "BsToMuMuPhi1020_massRange", {4800., 5800.},
"B_s0 mass range"};
316 "BsToMuMuPhi1020_phiMassRange", {940., 1100.},
"phi1020 mass range"};
318 "BsToMuMuPhi1020_chi2", 60.,
"maximum chi2 of the fitted B+ vertex"};
320 "BsToMuMuPhi1020_useFastFit",
false,
"true: perform vertex fit depending on only if fast fit; false: always perform vertex fit"};
324 "BdToMuMuKstar0",
true,
"switch on/off B0 -> mu+ mu- K*0(-> K+ pi-) decay"};
326 "BdToMuMuKstar0_rejectSameChargeTracks",
true,
"if true, the only (K+, pi-) and (K-, pi+) pairs will be kept (no wrong-charge combinations)"};
328 "BdToMuMuKstar0_minKaonPt", 100.,
"minimum pT of kaon track"};
330 "BdToMuMuKstar0_minPionPt", 100.,
"minimum pT of pion track"};
332 "BdToMuMuKstar0_massRange", {4600., 5900.},
"B0 mass range"};
334 "BdToMuMuKstar0_KstarMassRange", {700., 1100.},
"K*0 mass range"};
336 "BdToMuMuKstar0_chi2", 60.,
"maximum chi2 of the fitted B0 vertex"};
338 "BdToMuMuKstar0_useFastFit",
true,
"true: perform vertex fit depending on only if fast fit; false: always perform vertex fit"};
342 "LambdaBToMuMuProtonKaon",
true,
"switch on/off Lambda_b0 -> J/psi(-> mu+ mu-) p K- decay"};
344 "LambdaBToMuMuProtonKaon_rejectSameChargeTracks",
false,
"if true, the only (p, K-) and (anti-p, K+) pairs will be kept (no wrong-charge combinations)"};
346 "LambdaBToMuMuProtonKaon_minProtonPt", 1000.,
"minimum pT of proton track"};
348 "LambdaBToMuMuProtonKaon_minKaonPt", 1000.,
"minimum pT of kaon track"};
350 "LambdaBToMuMuProtonKaon_minKstarMass", 1300.,
"min value for both mass(trk1=kaon, trk2=pion) and mass(trk1=pion, trk2=kaon)"};
352 "LambdaBToMuMuProtonKaon_dimuonMassRange", {2500., 4300.},
"dimuon mass range for Lambda_b0 decay"};
354 "LambdaBToMuMuProtonKaon_massRange", {4800., 6400.},
"Lambda_b0 mass range"};
356 "LambdaBToMuMuProtonKaon_chi2", 60.,
"maximum chi2 of the fitted Lambda_b0 vertex"};
358 "LambdaBToMuMuProtonKaon_useFastFit",
true,
"true: perform vertex fit depending on only if fast fit; false: always perform vertex fit"};
362 "BcToDsMuMu",
true,
"switch on/off B_c+ -> J/psi(-> mu+ mu-) D_s+(->phi(-> K+ K-) pi+) decay"};
364 "BcToDsMuMu_minKaonPt", 1000.,
"minimum pT of kaon track from phi(1020)"};
366 "BcToDsMuMu_minPionPt", 1000.,
"minimum pT of pion track from D_s+"};
368 "BcToDsMuMu_massRange", {5500., 7300.},
"B_c+ mass range"};
370 "BcToDsMuMu_dimuonMassRange", {2500., 4300.},
"dimuon mass range for B_c+ -> J/psi D_s+ decay"};
372 "BcToDsMuMu_phiMassRange", {940., 1100.},
"phi(1020) mass range"};
374 "BcToDsMuMu_DsMassRange", {1750., 2100.},
"D_s+ mass range"};
376 "BcToDsMuMu_chi2", 60.,
"maximum chi2 of the fitted B_c+ vertex"};
378 "BcToDsMuMu_useFastFit",
true,
"true: perform vertex fit depending on only if fast fit; false: always perform vertex fit"};
382 "BcToDplusMuMu",
true,
"switch on/off B_c+ -> J/psi(-> mu+ mu-) D+(-> K- pi+ pi+) decay"};
384 "BcToDplusMuMu_minKaonPt", 1000.,
"minimum pT of kaon track from D+"};
386 "BcToDplusMuMu_minPionPt", 1000.,
"minimum pT of pion track from D+"};
388 "BcToDplusMuMu_massRange", {5500., 7300.},
"B_c+ mass range"};
390 "BcToDplusMuMu_dimuonMassRange", {2500., 4300.},
"dimuon mass range for B_c+ -> J/psi D+ decay"};
392 "BcToDplusMuMu_DplusMassRange", {1750., 2000.},
"D+ mass range"};
394 "BcToDplusMuMu_chi2", 60.,
"maximum chi2 of the fitted B_c+ vertex"};
396 "BcToDplusMuMu_useFastFit",
true,
"true: perform vertex fit depending on only if fast fit; false: always perform vertex fit"};
400 "BcToDstarMuMu",
true,
"switch on/off partial reconstruction of B_c+ -> J/psi(-> mu+ mu-) D0(-> K- pi+) X decay"};
402 "BcToDstarMuMu_makeDstar",
true,
"switch on/off full reconstruction of B_c+ -> J/psi(-> mu+ mu-) D*+(-> D0(-> K- pi+) pi+) decay"};
404 "BcToDstarMuMu_minD0KaonPt", 1000.,
"minimum pT of kaon track from D0"};
406 "BcToDstarMuMu_minD0PionPt", 1000.,
"minimum pT of pion track from D0"};
408 "BcToDstarMuMu_minDstarPionPt", 500.,
"minimum pT of pion track from D*+"};
410 "BcToDstarMuMu_maxDstarPionZ0", 5.,
"maximum z0 impact parameter of the pion track from D*+ wrt the fitted dimuon vertex; no preselection if negative"};
412 "BcToDstarMuMu_massRange", {5500., 7300.},
"B_c+ mass range"};
414 "BcToDstarMuMu_dimuonMassRange", {2500., 4300.},
"dimuon mass range for B_c+ -> J/psi D+ decay"};
416 "BcToDstarMuMu_D0MassRange", {1750., 2000.},
"D0 mass range"};
418 "BcToDstarMuMu_DstarMassRange", {-1., 2110.},
"D*+ mass range"};
420 "BcToDstarMuMu_chi2", 60.,
"maximum chi2 of the fitted B_c+ vertex"};
424 "VertexPointEstimator",
"",
"tool to find starting point for the vertex fitter"};
426 "VertexFitter",
"",
"VKalVrtFitter tool to fit tracks into the common vertex"};
428 "TrackToVertexTool",
"",
"tool to extrapolate track to vertex or beamspot"};
430 "MonTool",
"",
"monitoring tool"};
434 const static std::vector<std::vector<double>>
s_trkMass;
438 #endif // TRIG_TrigBmumuxComboHypo_H
Property holding a SG store/key/clid from which a ReadHandle is made.
Gaudi::Property< double > m_fastFit_2trk_chi2
bool isBadCombination(size_t i1, size_t i2, size_t i3) const
Gaudi::Property< std::pair< double, double > > m_BcToDsMuMu_phiMassRange
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzM4D< double > > GenVecFourMom_t
Base 4 Momentum type for TrackParticle.
Gaudi::Property< std::pair< double, double > > m_BcToDplusMuMu_massRange
Gaudi::Property< double > m_BcToDstarMuMu_minDstarPionPt
StatusCode addTriggerObject(xAOD::TrigBphys *triggerObject)
static const std::vector< std::vector< double > > s_trkMass
Gaudi::Property< bool > m_BsToMuMuPhi1020_useFastFit
void addTrackCombination(size_t i1, size_t i2)
Gaudi::Property< float > m_BsToMuMuPhi1020_chi2
TrigBmumuxState(const EventContext &context, const TrigCompositeUtils::DecisionContainer &previousDecisions, TrigCompositeUtils::DecisionContainer &decisions, xAOD::TrigBphysContainer *trigBphysCollection=nullptr, const InDet::BeamSpotData *beamSpotData=nullptr)
Gaudi::Property< bool > m_BcToDstarMuMu
Temporary container used until we have I/O for AuxStoreInternal.
Gaudi::Property< double > m_BcToDsMuMu_minKaonPt
Gaudi::Property< double > m_roiPhiWidth
Gaudi::Property< double > m_BcToDstarMuMu_minD0KaonPt
Gaudi::Property< double > m_BcToMuMuPion_minPionPt
Gaudi::Property< bool > m_LambdaBToMuMuProtonKaon
Gaudi::Property< size_t > m_fitAttemptsBreakThreshold
Gaudi::Property< bool > m_BdToMuMuKstar0_rejectSameChargeTracks
Gaudi::Property< double > m_BcToDplusMuMu_minPionPt
StatusCode findBmumuxCandidates_fit(TrigBmumuxState &, size_t dimuonIndex, bool makeCombinations=false) const
Perform fit of B decays for the topologies described above if makeCombinations = false.
static constexpr double mMuon
Gaudi::Property< float > m_BplusToMuMuKaon_chi2
Gaudi::Property< double > m_BcToDstarMuMu_minD0PionPt
std::vector< std::array< size_t, 2 > > trigBphysMuonIndices
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 ...
bool isIdenticalTracks(const xAOD::TrackParticle *lhs, const xAOD::TrackParticle *rhs) const
Attempts to identify identical tracks by selection on DeltaR.
Gaudi::Property< bool > m_BplusToMuMuKaon
Gaudi::Property< bool > m_LambdaBToMuMuProtonKaon_rejectSameChargeTracks
xAOD::VertexContainer dimuons
std::vector< ElementLink< xAOD::TrackParticleContainer > > selectedTracks
Gaudi::Property< double > m_LambdaBToMuMuProtonKaon_minKaonPt
Gaudi::Property< std::pair< double, double > > m_BsToMuMuPhi1020_phiMassRange
Gaudi::Property< double > m_BcToDplusMuMu_minKaonPt
Gaudi::Property< float > m_BcToMuMuPion_chi2
std::vector< ElementLink< TrigCompositeUtils::DecisionContainer > > decisionLinks
This class provides conversion from CSC RDO data to CSC Digits.
Gaudi::Property< std::pair< double, double > > m_BcToDsMuMu_massRange
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.
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Gaudi::Property< std::pair< double, double > > m_BcToDplusMuMu_DplusMassRange
Gaudi::Property< double > m_BcToDsMuMu_minPionPt
Gaudi::Property< std::pair< double, double > > m_BsToMuMuPhi1020_massRange
Gaudi::Property< std::pair< double, double > > m_BdToMuMuKstar0_massRange
Gaudi::Property< bool > m_BsToMuMuPhi1020
Gaudi::Property< double > m_BcToDstarMuMu_maxDstarPionZ0
Gaudi::Property< double > m_BsToMuMuPhi1020_minKaonPt
SG::WriteHandleKey< xAOD::TrigBphysContainer > m_trigBphysContainerKey
Property holding a SG store/key/clid from which a WriteHandle is made.
std::vector< Muon > muons
Gaudi::Property< std::pair< double, double > > m_LambdaBToMuMuProtonKaon_dimuonMassRange
Gaudi::Property< float > m_BdToMuMuKstar0_chi2
StatusCode findBmumuxCandidates_fastFit(TrigBmumuxState &, size_t dimuonIndex) const
Go through (dimuon+track) and (track+track) combinations found by findBmumuxCandidates_fit(makeCombin...
Gaudi::Property< std::pair< double, double > > m_BcToDstarMuMu_dimuonMassRange
const EventContext & context() const
::StatusCode StatusCode
StatusCode definition for legacy code.
StatusCode createDecisionObjects(TrigBmumuxState &) const
Create a decision for each xAOD::TrigBphys object from state.trigBphysCollection() and save it to sta...
ToolHandle< InDet::VertexPointEstimator > m_vertexPointEstimator
Gaudi::Property< double > m_BplusToMuMuKaon_minKaonPt
Gaudi::Property< size_t > m_fitAttemptsWarningThreshold
ElementLink< xAOD::MuonContainer > link
Gaudi::Property< double > m_BdToMuMuKstar0_minKaonPt
StatusCode mergeTracksFromViews(TrigBmumuxState &) const
Go through state.previousDecisions() and fetch xAOD::TrackParticle objects associated with the neares...
TrigBmumuxComboHypo()=delete
EF hypothesis algorithm for B -> mu+ mu- X decays: B+ -> mu+ mu- K+ B_c+ -> J/psi(-> mu+ mu-) pi+ B_s...
std::vector< ElementLink< xAOD::TrackParticleContainer > > trackParticleLinks(const xAOD::TauJet *tau, xAOD::TauJetParameters::TauTrackFlag flag=xAOD::TauJetParameters::TauTrackFlag::classifiedCharged)
Gaudi::Property< std::pair< double, double > > m_BdToMuMuKstar0_KstarMassRange
Gaudi::Property< std::pair< double, double > > m_BcToDstarMuMu_D0MassRange
StatusCode findBmumuxCandidates(TrigBmumuxState &) const
Find B decays by appling next three subprocedures to each found dimuon candidate.
Gaudi::Property< bool > m_dimuon_rejectSameChargeTracks
SG::ReadHandleKey< xAOD::MuonContainer > m_muonContainerKey
Gaudi::Property< bool > m_BplusToMuMuKaon_useFastFit
Gaudi::Property< double > m_roiEtaWidth
Header file to be included by clients of the Monitored infrastructure.
virtual ~TrigBmumuxState()=default
void addTrackCombination(size_t i1)
TrigCompositeUtils::DecisionIDContainer decisionIDs
Gaudi::Property< bool > m_BdToMuMuKstar0_useFastFit
Gaudi::Property< float > m_LambdaBToMuMuProtonKaon_chi2
ElementLink implementation for ROOT usage.
size_t getCombinationKey(size_t i1, size_t i2) const
virtual StatusCode execute(const EventContext &context) const override
Gaudi::Property< float > m_BcToDsMuMu_chi2
Property holding a SG store/key/clid from which a WriteHandle is made.
Gaudi::Property< std::pair< double, double > > m_BcToDstarMuMu_massRange
Gaudi::Property< double > m_LambdaBToMuMuProtonKaon_minKstarMass
Gaudi::Property< bool > m_BcToMuMuPion_useFastFit
Gaudi::Property< bool > m_BsToMuMuPhi1020_rejectSameChargeTracks
StatusCode findBmumuxCandidates_selectTracks(TrigBmumuxState &, size_t dimuonIndex) const
Select tracks in vicinity of given dimuon vertex.
Gaudi::Property< bool > m_BcToDsMuMu
@ trkMass
Extended perigee: mass.
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.
StatusCode mergeMuonsFromDecisions(TrigBmumuxState &) const
Go through state.previousDecisions(), fetch xAOD::Muons objects attached to decisions and save links ...
value_type push_back(value_type pElem)
Add an element to the end of the collection.
Eigen::Matrix< double, 3, 1 > Vector3D
Gaudi::Property< float > m_BcToDstarMuMu_chi2
const TrigCompositeUtils::DecisionContainer & previousDecisions() const
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_LambdaBToMuMuProtonKaon_minProtonPt
Gaudi::Property< std::pair< double, double > > m_BcToDsMuMu_DsMassRange
ToolHandle< Reco::ITrackToVertex > m_trackToVertexTool
Gaudi::Property< bool > m_BcToDstarMuMu_makeDstar
Gaudi::Property< bool > m_BcToMuMuPion
Gaudi::Property< double > m_dimuon_chi2
ToolHandle< GenericMonitoringTool > m_monTool
Gaudi::Property< bool > m_BdToMuMuKstar0
std::set< DecisionID > DecisionIDContainer
State class for TrigBmumuxComboHypo algorithm.
Class describing a Vertex.
Gaudi::Property< bool > m_BcToDplusMuMu_useFastFit
Gaudi::Property< std::pair< double, double > > m_LambdaBToMuMuProtonKaon_massRange
virtual StatusCode initialize() override
TrigCompositeUtils::DecisionContainer & decisions()
std::map< const xAOD::TrackParticle *, double > selectedTrackZ0
Gaudi::Property< std::pair< double, double > > m_dimuon_massRange
Gaudi::Property< std::pair< double, double > > m_BcToDstarMuMu_DstarMassRange
Gaudi::Property< std::pair< double, double > > m_BcToMuMuPion_massRange
Gaudi::Property< float > m_BcToDplusMuMu_chi2
Gaudi::Property< std::pair< double, double > > m_BplusToMuMuKaon_massRange
Gaudi::Property< double > m_deltaR
TrigCompositeUtils::DecisionIDContainer m_allowedIDs
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerKey
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...
Class describing a TrackParticle.
Base class for TrigBphys state objects.
Gaudi::Property< std::pair< double, double > > m_BcToDsMuMu_dimuonMassRange
StatusCode findDimuonCandidates(TrigBmumuxState &) const
Make all possible dimuon combinations from state.muons(), fit muon InDet tracks to the common vertex,...
std::vector< size_t > badTrackCombinations
bool isBadCombination(size_t i1) const
void addTrackCombination(size_t i1, size_t i2, size_t i3)
Gaudi::Property< double > m_fastFit_2mu1trk_chi2
bool passDimuonTrigger(const std::vector< const TrigCompositeUtils::DecisionIDContainer * > &previousDecisionIDs) const
xAOD::VertexAuxContainer dimuonsStore
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.
Gaudi::Property< bool > m_BcToDplusMuMu
std::vector< ElementLink< xAOD::TrackParticleContainer > > tracks
Gaudi::Property< std::pair< double, double > > m_BcToDplusMuMu_dimuonMassRange
Gaudi::Property< double > m_trkZ0
Class describing a Bphysics online composite object.
pType
enum for different particle types
std::map< size_t, size_t > trackCombinations
xAOD::TrigBphysContainer & trigBphysCollection()
ToolHandle< Trk::TrkVKalVrtFitter > m_vertexFitter
Gaudi::Property< std::pair< double, double > > m_BcToMuMuPion_dimuonMassRange
Gaudi::Property< bool > m_LambdaBToMuMuProtonKaon_useFastFit
Gaudi::Property< bool > m_BcToDsMuMu_useFastFit
Gaudi::Property< double > m_BdToMuMuKstar0_minPionPt