rivet is hosted by Hepforge, IPPP Durham
D0_1996_S3324664.cc
Go to the documentation of this file.
00001 // -*- C++ -*-
00002 #include "Rivet/Analysis.hh"
00003 #include "Rivet/Tools/BinnedHistogram.hh"
00004 #include "Rivet/Projections/FastJets.hh"
00005 #include "Rivet/Projections/FinalState.hh"
00006 
00007 namespace Rivet {
00008 
00009 
00010   /// @brief D0 azimuthal correlation of jets widely separated in rapidity
00011   class D0_1996_S3324664 : public Analysis {
00012   public:
00013 
00014     /// @name Constructors etc.
00015     //@{
00016 
00017     /// Constructor
00018     D0_1996_S3324664() : Analysis("D0_1996_S3324664")
00019     {    }
00020 
00021 
00022     /// @name Analysis methods
00023     //@{
00024 
00025     void init() {
00026       const FinalState fs;
00027       addProjection(fs, "FS");
00028       /// @todo Use correct jet algorithm
00029       addProjection(FastJets(fs, FastJets::D0ILCONE, 0.7), "ConeJets");
00030 
00031       _h_deta = bookHisto1D(1, 1, 1);
00032       _h_dphi.addHistogram(0.0, 2.0, bookHisto1D(2, 1, 1));
00033       _h_dphi.addHistogram(2.0, 4.0, bookHisto1D(2, 1, 2));
00034       _h_dphi.addHistogram(4.0, 6.0, bookHisto1D(2, 1, 3));
00035       _h_cosdphi_deta = bookProfile1D(3, 1, 1);
00036     }
00037 
00038 
00039     void analyze(const Event& event) {
00040       const double weight = event.weight();
00041 
00042       Jets jets;
00043       foreach (const Jet& jet, applyProjection<FastJets>(event, "ConeJets").jets(20.0*GeV)) {
00044         if (fabs(jet.eta()) < 3.0) {
00045           jets.push_back(jet);
00046         }
00047       }
00048 
00049       if (jets.size() < 2) {
00050         vetoEvent;
00051       }
00052 
00053       FourMomentum minjet = jets[0].momentum();
00054       FourMomentum maxjet = jets[1].momentum();
00055       double mineta = minjet.eta();
00056       double maxeta = maxjet.eta();
00057 
00058       foreach(const Jet& jet, jets) {
00059         double eta = jet.eta();
00060         if (eta < mineta) {
00061           minjet = jet.momentum();
00062           mineta = eta;
00063         }
00064         else if (eta > maxeta) {
00065           maxjet = jet.momentum();
00066           maxeta = eta;
00067         }
00068       }
00069 
00070       if (minjet.Et()<50*GeV && maxjet.Et()<50.0*GeV) {
00071         vetoEvent;
00072       }
00073 
00074       double deta = maxjet.eta()-minjet.eta();
00075       double dphi = mapAngle0To2Pi(maxjet.phi()-minjet.phi());
00076 
00077       _h_deta->fill(deta, weight);
00078       _h_dphi.fill(deta, 1.0-dphi/M_PI, weight);
00079       _h_cosdphi_deta->fill(deta, cos(M_PI-dphi), weight);
00080 
00081     }
00082 
00083 
00084     void finalize() {
00085       // Normalised to #events
00086       normalize(_h_deta, 8830.0); // fixed norm OK
00087 
00088       // I have no idea what this is normalised to... in the paper it says unity!
00089       /// @todo Understand this!
00090       foreach (Histo1DPtr histo, _h_dphi.getHistograms()) {
00091         /// @todo Prefer to scale rather than normalize, if possible
00092         normalize(histo, 0.0798);
00093       }
00094 
00095     }
00096 
00097     //@}
00098 
00099 
00100   private:
00101 
00102     /// @name Histograms
00103     //@{
00104 
00105     Histo1DPtr _h_deta;
00106     BinnedHistogram<double> _h_dphi;
00107     Profile1DPtr _h_cosdphi_deta;
00108     //@}
00109 
00110   };
00111 
00112 
00113 
00114   // The hook for the plugin system
00115   DECLARE_RIVET_PLUGIN(D0_1996_S3324664);
00116 
00117 }