|
ATLAS Offline Software
|
Go to the documentation of this file.
15 #ifndef TRIG_TrigMultiTrkComboHypo_H
16 #define TRIG_TrigMultiTrkComboHypo_H
70 virtual std::vector<ElementLink<TrigCompositeUtils::DecisionContainer>>&
getDecisionLinks(
size_t) = 0;
73 virtual bool checkMultiplicity(
const std::vector<int>& legMultiplicity,
const std::vector<HLT::Identifier>& legDecisionIDs)
const = 0;
79 inline std::vector<ElementLink<xAOD::TrackParticleContainer>>&
tracks() {
return m_tracks; }
84 std::vector<ElementLink<xAOD::TrackParticleContainer>>
m_tracks;
88 template<
typename CONTAINER>
102 std::vector<ElementLink<TrigCompositeUtils::DecisionContainer>>
decisionLinks;
107 virtual std::vector<ElementLink<TrigCompositeUtils::DecisionContainer>>&
getDecisionLinks(
size_t i)
override final {
117 virtual bool checkMultiplicity(
const std::vector<int>& legMultiplicity,
const std::vector<HLT::Identifier>& legDecisionIDs)
const override final {
118 if (legMultiplicity.size() == 1)
return true;
122 for (
size_t j = 0; j < legMultiplicity.size(); ++j) {
158 template<
typename CONTAINER>
165 template<
typename CONTAINER>
177 template<
typename CONTAINER>
226 std::unique_ptr<xAOD::Vertex>
fit(
228 const std::vector<double>& particleMasses,
241 const std::vector<double>& particleMasses,
253 bool passedDeltaRcut(
const std::vector<xAOD::TrackParticle::GenVecFourMom_t>& momenta)
const;
262 m_beamSpotKey {
this,
"BeamSpotKey",
"BeamSpotData",
"SG key for beam spot"};
264 Gaudi::Property<std::vector<unsigned int>>
m_nTrk {
this,
"nTracks", {2},
265 "number of tracks to be fitted into the common vertex"};
266 Gaudi::Property<std::vector<int>>
m_nTrkCharge {
this,
"totalCharge", {},
267 "magnitude of the total charge to accept, negative is none"};
268 Gaudi::Property<std::vector<std::vector<double>>>
m_trkMass {
this,
"trackMasses", {},
269 "track masses for vertex reco (one per track); muon mass is used by default"};
270 Gaudi::Property<std::vector<std::vector<double>>>
m_trkPt {
this,
"trackPtThresholds", { {3650., 3650.} },
271 "minimum track transverse momenta (one per track, sorted descending)"};
272 Gaudi::Property<std::vector<std::pair<double, double>>>
m_massRange {
this,
"massRange", { {0., 100000.} },
273 "range of the invariant mass of the track combinations"};
275 "apply overlap removal for the close-by same-sign objects from different views"};
277 "combine objects attached to decisions from different input collections, needed for HLT_mu4_ivarloose_mu4_b10invmAB120vtx20_L12MU3V chains"};
279 "use 4-momentum of the xAOD::Muon to make fast calculation of the xAOD::TrigBphys mass, needed for consistency with TrigComboHypoTool::compute()"};
281 "check that we have enough leptons to fire the chain, needed for HLT_mu6_2mu4_bJpsi_L1MU5VF_3MU3VF"};
282 Gaudi::Property<float>
m_deltaR {
this,
"deltaR", 0.01,
283 "minimum deltaR between same-sign tracks (overlap removal)"};
285 "maximum deltaR between tracks in a candidate"};
286 Gaudi::Property<float>
m_deltaRMin {
this,
"deltaRMin", std::numeric_limits<float>::lowest(),
287 "maximum deltaR between tracks in a candidate"};
288 Gaudi::Property<float>
m_chi2 {
this,
"chi2", 150.,
289 "chi2 cut for the fitted vertex"};
291 "if true we do not create trigger objects, just copy all appropriate decisions to the next step or break the chain"};
293 "make pairs between muon from SG::View and tracks from the same SG::View"};
295 "use electrons if true, otherwise use muons"};
296 Gaudi::Property<std::string>
m_trigLevel {
this,
"trigLevel",
"EF",
297 "trigger Level to set for created TrigBphys objects: L2, L2IO, L2MT or EF"};
299 "patterns for BPH-0DR3-EM7J15 like chains"};
301 "minimum transverse energy of the cluster, associated with close-by electron"};
303 ToolHandle<InDet::VertexPointEstimator>
m_vertexPointEstimator {
this,
"VertexPointEstimator",
"",
"tool to find starting point for the vertex fitter"};
304 ToolHandle<Trk::TrkVKalVrtFitter>
m_vertexFitter {
this,
"VertexFitter",
"",
"VKalVrtFitter tool to fit tracks into the common vertex"};
305 ToolHandle<Trk::V0Tools>
m_v0Tools {
this,
"V0Tools",
"",
"tool to calculate Lxy/LxyError of dimuon candidate wrt beam spot"};
307 ToolHandle<GenericMonitoringTool>
m_monTool {
this,
"MonTool",
"",
"monitoring tool"};
317 #endif // TRIG_TrigMultiTrkComboHypo_H
Property holding a SG store/key/clid from which a ReadHandle is made.
TrigCompositeUtils::DecisionIDContainer m_mergedElectronIDs
StatusCode createDecisionObjects(TrigMultiTrkStateBase &) const
Create a decision for each xAOD::TrigBphys object from state.trigBphysCollection() and save it to sta...
std::vector< LEPTON > m_leptons
StatusCode filterTrackCombinations(TrigMultiTrkStateBase &) const
Make all possible combinations from state.tracks(), fit tracks to the common vertex and set state....
bool passed(DecisionID id, const DecisionIDContainer &idSet)
checks if required decision ID is in the set of IDs in the container
Gaudi::Property< float > m_deltaR
Gaudi::Property< bool > m_combineInputDecisionCollections
virtual void addTrigBphysObject(xAOD::TrigBphys *, const std::vector< size_t > &legIndices)=0
StatusCode mergeLeptonsFromDecisions(TrigMultiTrkState< CONTAINER > &) const
Go through state.previousDecisions(), fetch xAOD::Muons/xAODElectron objects attached to decisions an...
virtual TrigCompositeUtils::DecisionIDContainer & getDecisionIDs(size_t i) override final
TrigMultiTrkState(const EventContext &context, const TrigCompositeUtils::DecisionContainer &previousDecisions, TrigCompositeUtils::DecisionContainer &decisions, xAOD::TrigBphysContainer *trigBphysCollection=nullptr, const InDet::BeamSpotData *beamSpotData=nullptr)
StatusCode copyDecisionObjects(TrigMultiTrkStateBase &) const
All appropriate decisions from state.previousDecisions() will be copied to state.decisions() if flag ...
Gaudi::Property< float > m_deltaRMin
virtual ~TrigMultiTrkState()=default
Gaudi::Property< bool > m_isStreamer
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
Gaudi::Property< bool > m_doElectrons
Gaudi::Property< std::vector< std::vector< double > > > m_trkMass
Gaudi::Property< std::string > m_trigLevel
virtual StatusCode execute(const EventContext &context) const override
std::unique_ptr< xAOD::Vertex > fit(const std::vector< ElementLink< xAOD::TrackParticleContainer >> &trackParticleLinks, const std::vector< double > &particleMasses, Trk::IVKalState &fitterState) const
Perform a vertex fit on selected tracks.
std::vector< LEPTON > & leptons()
Gaudi::Property< bool > m_checkMultiplicity
Gaudi::Property< bool > m_applyOverlapRemoval
Gaudi::Property< std::vector< int > > m_nTrkCharge
std::vector< ElementLink< xAOD::TrackParticleContainer > > & tracks()
StatusCode processMergedElectrons(TrigMultiTrkState< xAOD::ElectronContainer > &) const
Make all possible combinations from electrons originating from the same BPH-0DR3-EM7J15 cluster,...
TrigMultiTrkState()=delete
std::vector< ElementLink< TrigCompositeUtils::DecisionContainer > > decisionLinks
ToolHandle< InDet::VertexPointEstimator > m_vertexPointEstimator
Gaudi::Property< std::vector< std::string > > m_mergedElectronChains
StatusCode mergeTracksFromViews(TrigMultiTrkStateBase &) const
Go through state.previousDecisions() and fetch xAOD::TrackParticle objects associated with the neares...
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerKey
virtual ~TrigMultiTrkStateBase()=default
Property holding a SG store/key/clid from which a WriteHandle is made.
Gaudi::Property< double > m_caloClusterEtThreshold
ToolHandle< GenericMonitoringTool > m_monTool
const EventContext & context() const
::StatusCode StatusCode
StatusCode definition for legacy code.
TrigMultiTrkStateBase(const EventContext &context, const TrigCompositeUtils::DecisionContainer &previousDecisions, TrigCompositeUtils::DecisionContainer &decisions, xAOD::TrigBphysContainer *trigBphysCollection=nullptr, const InDet::BeamSpotData *beamSpotData=nullptr)
virtual StatusCode initialize() override
Gaudi::Property< bool > m_useLeptonMomentum
Gaudi::Property< bool > m_isMuTrkMode
std::vector< ElementLink< xAOD::TrackParticleContainer > > trackParticleLinks(const xAOD::TauJet *tau, xAOD::TauJetParameters::TauTrackFlag flag=xAOD::TauJetParameters::TauTrackFlag::classifiedCharged)
std::vector< std::vector< size_t > > & trigBphysLegIndices()
bool isInMassRange(double mass, size_t idx) const
std::vector< ElementLink< xAOD::TrackParticleContainer > > m_tracks
TrigCompositeUtils::DecisionIDContainer m_allowedIDs
xAOD::TrigBphys * makeTrigBPhys(const xAOD::Vertex &vertex, const std::vector< double > &particleMasses, const xAOD::Vertex &beamSpot, const Trk::IVKalState &fitterState) const
Construct the trigger object that may be stored for debugging or matching.
virtual TrigCompositeUtils::DecisionIDContainer & getDecisionIDs(size_t)=0
Header file to be included by clients of the Monitored infrastructure.
StatusCode copyAdditionalDecisionObjects(TrigMultiTrkStateBase &) const
For chains from CombinedSlice (similar to 'HLT_e9_lhvloose_e5_lhvloose_bBeeM6000_mu4_L1BPH-0M9-EM7-EM...
Property holding a SG store/key/clid from which a WriteHandle is made.
virtual void addTrigBphysObject(xAOD::TrigBphys *trigBphysObject, const std::vector< size_t > &legIndices) override final
Ensure that the ATLAS eigen extensions are properly loaded.
Gaudi::Property< std::vector< std::pair< double, double > > > m_massRange
StatusCode findMuTrkCandidates(TrigMultiTrkState< xAOD::MuonContainer > &) const
Build J/psi candidates from muon from SG::View and tracks from the same SG::View, to be used for Tag-...
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
value_type push_back(value_type pElem)
Add an element to the end of the collection.
TrigMultiTrkStateBase()=delete
StatusCode mergeTracksFromDecisions(TrigMultiTrkStateBase &) const
Go through state.previousDecisions(), fetch xAOD::Muons/xAODElectron objects attached to decisions an...
State class for TrigMultiTrkComboHypo algorithm.
virtual std::vector< ElementLink< TrigCompositeUtils::DecisionContainer > > & getDecisionLinks(size_t i) override final
bool isIdenticalTracks(const xAOD::TrackParticle *lhs, const xAOD::TrackParticle *rhs) const
Attempts to identify identical tracks by selection on DeltaR.
Gaudi::Property< std::vector< std::vector< double > > > m_trkPt
StatusCode findMultiLeptonCandidates(TrigMultiTrkState< CONTAINER > &) const
Make all possible combinations from state.leptons(), fit tracks to the common vertex,...
const TrigCompositeUtils::DecisionContainer & previousDecisions() const
Gaudi::Property< float > m_deltaRMax
ToolHandle< Trk::V0Tools > m_v0Tools
std::set< DecisionID > DecisionIDContainer
Class describing a Vertex.
ElementLink< CONTAINER > link
Gaudi::Property< std::vector< unsigned int > > m_nTrk
void setEventAccepted(bool flag=true)
std::vector< std::vector< size_t > > m_trigBphysLegIndices
TrigCompositeUtils::DecisionContainer & decisions()
TrigCompositeUtils::DecisionIDContainer m_resolvedElectronIDs
virtual bool checkMultiplicity(const std::vector< int > &legMultiplicity, const std::vector< HLT::Identifier > &legDecisionIDs) const =0
AthConfigFlags beamSpot(AthConfigFlags flags, str instanceName, str recoMode)
virtual std::vector< ElementLink< TrigCompositeUtils::DecisionContainer > > & getDecisionLinks(size_t)=0
bool passedDeltaRcut(const std::vector< xAOD::TrackParticle::GenVecFourMom_t > &momenta) const
TrigMultiTrkComboHypo()=delete
Class describing a TrackParticle.
Base class for TrigBphys state objects.
int isEventAccepted() const
std::vector< size_t > & getTrigBphysLegIndices(size_t idx)
TrigCompositeUtils::DecisionIDContainer decisionIDs
Class describing a Bphysics online composite object.
SG::WriteHandleKey< xAOD::TrigBphysContainer > m_trigBphysContainerKey
xAOD::TrigBphysContainer & trigBphysCollection()
virtual bool checkMultiplicity(const std::vector< int > &legMultiplicity, const std::vector< HLT::Identifier > &legDecisionIDs) const override final
ToolHandle< Trk::TrkVKalVrtFitter > m_vertexFitter
Gaudi::Property< float > m_chi2