HLTMuonTrackMassFilter

Macros

Line Code
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