00001
00002 #ifndef RIVET_ZFinder_HH
00003 #define RIVET_ZFinder_HH
00004
00005 #include "Rivet/Tools/Logging.hh"
00006 #include "Rivet/Rivet.hh"
00007 #include "Rivet/Particle.hh"
00008 #include "Rivet/Event.hh"
00009 #include "Rivet/Projection.hh"
00010 #include "Rivet/Projections/FinalState.hh"
00011
00012 namespace Rivet {
00013
00014
00015
00016
00017
00018
00019 class ZFinder : public FinalState {
00020
00021 public:
00022
00023
00024
00025
00026
00027
00028
00029 ZFinder(const FinalState& fs,
00030 PdgId pid,
00031 double m2_min, double m2_max,
00032 double dRmax);
00033
00034
00035
00036
00037
00038 ZFinder(double etaMin, double etaMax,
00039 double pTmin,
00040 PdgId pid,
00041 double m2_min, double m2_max,
00042 double dRmax);
00043
00044
00045
00046
00047
00048 ZFinder(const std::vector<std::pair<double, double> >& etaRanges,
00049 double pTmin,
00050 PdgId pid,
00051 double m2_min, const double m2_max,
00052 double dRmax);
00053
00054
00055
00056 virtual const Projection* clone() const {
00057 return new ZFinder(*this);
00058 }
00059
00060
00061
00062
00063
00064
00065 const FinalState& remainingFinalState() const;
00066
00067
00068
00069 const FinalState& constituentsFinalState() const;
00070
00071
00072 const FinalState& clusteredPhotonsFinalState() const;
00073
00074 protected:
00075
00076
00077 void project(const Event& e);
00078
00079
00080 int compare(const Projection& p) const;
00081
00082
00083 private:
00084
00085 void _init(const std::vector<std::pair<double, double> >& etaRanges,
00086 double pTmin, PdgId pid,
00087 double m2_min, double m2_max,
00088 double dRmax);
00089
00090
00091 void _init(const FinalState& fs,
00092 PdgId pid,
00093 double m2_min, double m2_max,
00094 double dRmax);
00095
00096 };
00097
00098
00099 }
00100
00101
00102 #endif