1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#ifndef HLTMuonTrackMassFilter_h_
#define HLTMuonTrackMassFilter_h_
/** HLT filter by muon+track mass (taken from two RecoChargedCandidate collections).
* Tracks are subject to quality and momentum cuts. The match with previous muon
* (and possibly track, if run after another mass filter) candidates is checked.
*/
#include "HLTrigger/HLTcore/interface/HLTFilter.h"
#include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h"
#include "DataFormats/BeamSpot/interface/BeamSpot.h"
#include "MagneticField/Engine/interface/MagneticField.h"
#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
#include <vector>
namespace edm {
class ConfigurationDescriptions;
}
class HLTMuonTrackMassFilter : public HLTFilter {
public:
explicit HLTMuonTrackMassFilter(const edm::ParameterSet&);
~HLTMuonTrackMassFilter() override {}
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
private:
bool hltFilter(edm::Event&,
const edm::EventSetup&,
trigger::TriggerFilterObjectWithRefs& filterproduct) const override;
bool pairMatched(std::vector<reco::RecoChargedCandidateRef>& prevMuonRefs,
std::vector<reco::RecoChargedCandidateRef>& prevTrackRefs,
const reco::RecoChargedCandidateRef& muonRef,
const reco::RecoChargedCandidateRef& trackRef) const;
private:
edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> const idealMagneticFieldRecordToken_;
edm::InputTag beamspotTag_; ///< beamspot used for quality cuts
edm::EDGetTokenT<reco::BeamSpot> beamspotToken_; ///< beamspot used for quality cuts
edm::InputTag muonTag_; ///< RecoChargedCandidateCollection (muons)
edm::EDGetTokenT<reco::RecoChargedCandidateCollection> muonToken_; ///< RecoChargedCandidateCollection (muons)
edm::InputTag trackTag_; ///< RecoChargedCandidateCollection (tracks)
edm::EDGetTokenT<reco::RecoChargedCandidateCollection> trackToken_; ///< RecoChargedCandidateCollection (tracks)
edm::InputTag prevCandTag_; ///< filter objects from previous filter
edm::EDGetTokenT<trigger::TriggerFilterObjectWithRefs> prevCandToken_; ///< filter objects from previous filter
std::vector<double> minMasses_; ///< lower mass limits
std::vector<double> maxMasses_; ///< higher mass limits
bool checkCharge_; ///< check opposite charge?
double minTrackPt_; ///< track pt cut
double minTrackP_; ///< track p cut
double maxTrackEta_; ///< track |eta| cut
double maxTrackDxy_; ///< track tip cut w.r.t. beamspot
double maxTrackDz_; ///< track lip cut w.r.t. beamspot
int minTrackHits_; ///< # valid hits on track
double maxTrackNormChi2_; ///< normalized chi2 of track
// double maxDzMuonTrack_; ///< relative deltaZ between muon and track
double max_DCAMuonTrack_; /// DCA between the two muons
bool cutCowboys_; ///< if true, reject muon-track pairs that bend towards each other
};
#endif
|