Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-04-11 22:24:29

0001 #ifndef HLTPMMassFilter_h
0002 #define HLTPMMassFilter_h
0003 
0004 /** \class HLTPMMassFilter
0005  *
0006  *  Original Author: Jeremy Werner
0007  *  Institution: Princeton University, USA
0008  *  Contact: Jeremy.Werner@cern.ch
0009  *  Date: February 21, 2007
0010  */
0011 
0012 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0013 #include "DataFormats/EgammaCandidates/interface/Electron.h"
0014 #include "DataFormats/EgammaCandidates/interface/ElectronFwd.h"
0015 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
0016 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
0017 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
0018 #include "DataFormats/Math/interface/deltaR.h"
0019 #include "DataFormats/Math/interface/Point3D.h"
0020 #include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h"
0021 #include "DataFormats/RecoCandidate/interface/RecoEcalCandidateFwd.h"
0022 #include "FWCore/Framework/interface/EventSetup.h"
0023 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0024 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0025 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0026 #include "HLTrigger/HLTcore/interface/HLTFilter.h"
0027 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
0028 #include "MagneticField/Engine/interface/MagneticField.h"
0029 #include "TrackingTools/TrajectoryState/interface/ftsFromVertexToPoint.h"
0030 
0031 #include "TLorentzVector.h"
0032 
0033 class HLTPMMassFilter : public HLTFilter {
0034 public:
0035   explicit HLTPMMassFilter(const edm::ParameterSet&);
0036   ~HLTPMMassFilter() override;
0037   bool hltFilter(edm::Event&,
0038                  const edm::EventSetup&,
0039                  trigger::TriggerFilterObjectWithRefs& filterproduct) const override;
0040   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0041 
0042 private:
0043   bool isGoodPair(TLorentzVector const& v1, TLorentzVector const& v2) const;
0044 
0045   TLorentzVector approxMomAtVtx(const MagneticField& magField,
0046                                 const GlobalPoint& xvert,
0047                                 const reco::SuperClusterRef sc,
0048                                 int charge) const;
0049 
0050   edm::InputTag candTag_;  // input tag identifying product contains filtered egammas
0051   edm::EDGetTokenT<trigger::TriggerFilterObjectWithRefs> candToken_;
0052   edm::InputTag beamSpot_;  // input tag identifying beamSpot product
0053   edm::EDGetTokenT<reco::BeamSpot> beamSpotToken_;
0054   double lowerMassCut_;
0055   double upperMassCut_;
0056   double lowerdRCut_;
0057   double upperdRCut_;
0058   double lowerdR2Cut_;
0059   double upperdR2Cut_;
0060   int nZcandcut_;  // number of Z candidates required
0061   bool reqOppCharge_;
0062 
0063   bool isElectron1_;
0064   bool isElectron2_;
0065   edm::InputTag l1EGTag_;
0066 
0067   edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> const magFieldToken_;
0068 };
0069 
0070 #endif  //HLTPMMassFilter_h