00001 #ifndef DataFormats_MuonReco_IsoDepositVetos_h 00002 #define DataFormats_MuonReco_IsoDepositVetos_h 00003 00004 #include "DataFormats/Math/interface/Vector3D.h" 00005 #include "DataFormats/RecoCandidate/interface/IsoDeposit.h" 00006 00007 namespace reco { 00008 namespace isodeposit { 00009 class ConeVeto : public AbsVeto { 00010 public: 00011 ConeVeto(Direction dir, double dr) : vetoDir_(dir), dR2_(dr*dr) {} 00012 ConeVeto(const reco::IsoDeposit::Veto &veto) : vetoDir_(veto.vetoDir), dR2_(veto.dR*veto.dR) {} 00013 virtual bool veto(double eta, double phi, float value) const ; 00014 virtual void centerOn(double eta, double phi) ; 00015 private: 00016 Direction vetoDir_; float dR2_; 00017 }; 00018 00019 class ThresholdVeto : public AbsVeto { 00020 public: 00021 ThresholdVeto(double threshold) : threshold_(threshold) {} 00022 virtual bool veto(double eta, double phi, float value) const ; 00023 virtual void centerOn(double eta, double phi) ; 00024 private: 00025 float threshold_; 00026 }; 00027 00028 class ThresholdVetoFromTransverse : public AbsVeto { 00029 public: 00030 ThresholdVetoFromTransverse(double threshold) : threshold_(threshold) {} 00031 virtual bool veto(double eta, double phi, float value) const ; 00032 virtual void centerOn(double eta, double phi) ; 00033 private: 00034 float threshold_; 00035 }; 00036 00037 class AbsThresholdVeto : public AbsVeto { 00038 public: 00039 AbsThresholdVeto(double threshold) : threshold_(threshold) {} 00040 virtual bool veto(double eta, double phi, float value) const ; 00041 virtual void centerOn(double eta, double phi) ; 00042 private: 00043 float threshold_; 00044 }; 00045 00046 class AbsThresholdVetoFromTransverse : public AbsVeto { 00047 public: 00048 AbsThresholdVetoFromTransverse(double threshold) : threshold_(threshold) {} 00049 virtual bool veto(double eta, double phi, float value) const ; 00050 virtual void centerOn(double eta, double phi) ; 00051 private: 00052 float threshold_; 00053 }; 00054 00055 class ConeThresholdVeto : public AbsVeto { 00056 public: 00057 ConeThresholdVeto(Direction dir, double dr, double threshold) : vetoDir_(dir), dR2_(dr*dr), threshold_(threshold) {} 00058 virtual bool veto(double eta, double phi, float value) const ; 00059 virtual void centerOn(double eta, double phi) ; 00060 private: 00061 Direction vetoDir_; float dR2_; float threshold_; 00062 }; 00063 00064 class AngleConeVeto : public AbsVeto { 00065 public: 00066 AngleConeVeto(math::XYZVectorD dir, double angle) ; 00067 AngleConeVeto(Direction dir, double angle) ; 00068 virtual bool veto(double eta, double phi, float value) const ; 00069 virtual void centerOn(double eta, double phi) ; 00070 private: 00071 math::XYZVectorD vetoDir_; float cosTheta_; 00072 }; 00073 00074 class AngleCone : public AbsVeto { 00075 public: 00076 AngleCone(math::XYZVectorD dir, double angle) ; 00077 AngleCone(Direction dir, double angle) ; 00078 virtual bool veto(double eta, double phi, float value) const ; 00079 virtual void centerOn(double eta, double phi) ; 00080 private: 00081 math::XYZVectorD coneDir_; float cosTheta_; 00082 }; 00083 00084 class RectangularEtaPhiVeto : public AbsVeto { 00085 public: 00086 RectangularEtaPhiVeto(math::XYZVectorD dir, double etaMin, double etaMax, double phiMin, double phiMax) ; 00087 RectangularEtaPhiVeto(Direction dir, double etaMin, double etaMax, double phiMin, double phiMax) ; 00088 virtual bool veto(double eta, double phi, float value) const ; 00089 virtual void centerOn(double eta, double phi) ; 00090 private: 00091 Direction vetoDir_; 00092 double etaMin_, etaMax_, phiMin_, phiMax_; 00093 }; 00094 00095 } 00096 } 00097 #endif