rivet is hosted by Hepforge, IPPP Durham
CDF_2001_S4517016.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/FinalState.hh"
00005 #include "Rivet/Projections/FastJets.hh"
00006 
00007 namespace Rivet {
00008 
00009 
00010   /// @brief CDF two jet tripply-differential cross-section
00011   class CDF_2001_S4517016 : public Analysis {
00012   public:
00013 
00014     /// @name Constructors etc.
00015     //@{
00016 
00017     /// Constructor
00018     CDF_2001_S4517016()
00019       : Analysis("CDF_2001_S4517016")
00020     {    }
00021 
00022     //@}
00023 
00024 
00025   public:
00026 
00027     /// @name Analysis methods
00028     //@{
00029 
00030     /// Book histograms and initialise projections before the run
00031     void init() {
00032       FinalState fs(-4.2, 4.2);
00033       addProjection(FastJets(fs, FastJets::CDFJETCLU, 0.7), "Jets");
00034 
00035       _h_ET.addHistogram(0.1, 0.7, bookHisto1D(1, 1, 1));
00036       _h_ET.addHistogram(0.7, 1.4, bookHisto1D(2, 1, 1));
00037       _h_ET.addHistogram(1.4, 2.1, bookHisto1D(3, 1, 1));
00038       _h_ET.addHistogram(2.1, 3.0, bookHisto1D(4, 1, 1));
00039     }
00040 
00041 
00042     /// Perform the per-event analysis
00043     void analyze(const Event& event) {
00044       const double weight = event.weight();
00045 
00046       Jets jets = applyProjection<FastJets>(event, "Jets").jetsByEt(10.0*GeV);
00047       if (jets.size()<2) {
00048         vetoEvent;
00049       }
00050       FourMomentum jet1 = jets[0].momentum();
00051       FourMomentum jet2 = jets[1].momentum();
00052       double eta1 = fabs(jet1.eta());
00053       double eta2 = fabs(jet2.eta());
00054       double ET1 = jet1.Et();
00055       double ET2 = jet2.Et();
00056       if (eta1<0.1 || eta1>0.7 || ET1<40.0*GeV) {
00057         vetoEvent;
00058       }
00059       if (eta2<0.1 || eta2>3.0) {
00060         vetoEvent;
00061       }
00062       _h_ET.fill(eta2, ET1, weight);
00063       if (eta2<0.7 && ET2>40.0*GeV) _h_ET.fill(eta1, ET2, weight);
00064     }
00065 
00066 
00067     /// Normalise histograms etc., after the run
00068     void finalize() {
00069       double deta1 = 1.2;
00070       _h_ET.scale(crossSection()/nanobarn/sumOfWeights()/deta1 / 2.0, this);
00071     }
00072 
00073     //@}
00074 
00075 
00076   private:
00077 
00078     /// @name Histograms
00079     //@{
00080     BinnedHistogram<double> _h_ET;
00081     //@}
00082 
00083   };
00084 
00085 
00086 
00087   // The hook for the plugin system
00088   DECLARE_RIVET_PLUGIN(CDF_2001_S4517016);
00089 
00090 }