00001 #ifndef DataFormats_MuonReco_MuIsoDepositVetos_h
00002 #define DataFormats_MuonReco_MuIsoDepositVetos_h
00003
00004 #ifndef USE_MUISODEPOSIT_REQUIRED
00005 #error THIS FILE IS NOT SUPPOSED TO BE INCLUDED: USE "DataFormats/RecoCandidate/interface/IsoDepositVetos.h" instead
00006 #error THIS FILE IS HERE FOR BKW COMPATIBILITY ONLY
00007
00008 #else
00009
00010 #include "DataFormats/Math/interface/Vector3D.h"
00011 #include "DataFormats/MuonReco/interface/MuIsoDeposit.h"
00012
00013
00014 namespace reco {
00015 namespace muisodeposit {
00016 typedef ::muonisolation::Direction Direction;
00017
00018 class ConeVeto : public AbsVeto {
00019 public:
00020 ConeVeto(Direction dir, double dr) : vetoDir_(dir), dR2_(dr*dr) {}
00021 ConeVeto(const reco::MuIsoDeposit::Veto &veto) : vetoDir_(veto.vetoDir), dR2_(veto.dR*veto.dR) {}
00022 virtual bool veto(double eta, double phi, float value) const ;
00023 virtual void centerOn(double eta, double phi) ;
00024 private:
00025 Direction vetoDir_; float dR2_;
00026 };
00027
00028 class ThresholdVeto : public AbsVeto {
00029 public:
00030 ThresholdVeto(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 ConeThresholdVeto : public AbsVeto {
00038 public:
00039 ConeThresholdVeto(Direction dir, double dr, double threshold) : vetoDir_(dir), dR2_(dr*dr), threshold_(threshold) {}
00040 virtual bool veto(double eta, double phi, float value) const ;
00041 virtual void centerOn(double eta, double phi) ;
00042 private:
00043 Direction vetoDir_; float dR2_; float threshold_;
00044 };
00045
00046 class AngleConeVeto : public AbsVeto {
00047 public:
00048 AngleConeVeto(math::XYZVectorD dir, double angle) ;
00049 AngleConeVeto(Direction dir, double angle) ;
00050 virtual bool veto(double eta, double phi, float value) const ;
00051 virtual void centerOn(double eta, double phi) ;
00052 private:
00053 math::XYZVectorD vetoDir_; float cosTheta_;
00054 };
00055
00056 class AngleCone : public AbsVeto {
00057 public:
00058 AngleCone(math::XYZVectorD dir, double angle) ;
00059 AngleCone(Direction dir, double angle) ;
00060 virtual bool veto(double eta, double phi, float value) const ;
00061 virtual void centerOn(double eta, double phi) ;
00062 private:
00063 math::XYZVectorD coneDir_; float cosTheta_;
00064 };
00065
00066 class RectangularEtaPhiVeto : public AbsVeto {
00067 public:
00068 RectangularEtaPhiVeto(double etaMin, double etaMax, double phiMin, double phiMax) :
00069 etaMin_(etaMin), etaMax_(etaMax), phiMin_(phiMin), phiMax_(phiMax) { }
00070 virtual bool veto(double eta, double phi, float value) const ;
00071 private:
00072 double etaMin_, etaMax_, phiMin_, phiMax_;
00073 };
00074
00075
00076
00077 }
00078 }
00079
00080 #endif //USE_MUISODEPOSIT_REQUIRED
00081 #endif