// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { class PP_JetRates : public Analysis { private: double m_r; std::vector _h_log10_d; public: PP_JetRates(): Analysis("PP_JetRates") {} void init() { m_r=0.4; declare("FS",FinalState()); _h_log10_d.resize(8,NULL); for (size_t i=0;i<8;++i) { string dname="log10_d_"+to_str(i)+to_str(i+1); book(_h_log10_d[i],dname,100,0.0,log10(0.5*13000/GeV)); } } void analyze(const Event& event) { const FinalState &fs = applyProjection(event, "FS"); MSG_DEBUG("number of particles: "< jets; for (size_t i(0);i=11 && kfc<=16) || (kfc>=22 && kfc<=25)) continue; MSG_DEBUG(i<<": "< dij2 = Cluster(jets); for (size_t i=0;ifill(0.5*log10(dij2[dij2.size()-1-i])); else _h_log10_d[i]->fill(-100.); } void finalize() { const double xsec_unitw=crossSection()/picobarn/sumOfWeights(); for (size_t i=0;i<_h_log10_d.size();++i) scale(_h_log10_d[i],xsec_unitw); } double R2(const FourMomentum &p, const FourMomentum &q) const { double dy(p.rapidity()-q.rapidity()); double dphi(p.phi()-q.phi()); return (cosh(dy)-cos(dphi))/sqr(m_r); } double Q2i(const FourMomentum &p) const { return p.pT2(); } double Q2ij(const FourMomentum &p,const FourMomentum &q) const { return min(p.pT2(),q.pT2())*R2(p,q); } std::vector Cluster(std::vector &p) { std::vector kt2; if (p.size()==1) kt2.push_back(Q2i(p[0])); if (p.size()<=1) return kt2; int ii=0, jj=0, n=p.size(); std::vector imap(p.size()); for (size_t i(0);i > kt2ij(n,std::vector(n)); double dmin=std::numeric_limits::max(); for (int i=0;i0) { MSG_DEBUG("Q_{"<"<