rivet is hosted by Hepforge, IPPP Durham
CDF_1996_S3108457.cc
Go to the documentation of this file.
00001 // -*- C++ -*-
00002 #include "Rivet/Analysis.hh"
00003 #include "Rivet/Projections/FinalState.hh"
00004 #include "Rivet/Projections/FastJets.hh"
00005 
00006 namespace Rivet {
00007 
00008 
00009   /// @brief CDF properties of high-mass multi-jet events
00010   class CDF_1996_S3108457 : public Analysis {
00011   public:
00012 
00013     /// @name Constructors etc.
00014     //@{
00015 
00016     /// Constructor
00017     CDF_1996_S3108457()
00018       : Analysis("CDF_1996_S3108457")
00019     {    }
00020 
00021     //@}
00022 
00023 
00024   public:
00025 
00026     /// @name Analysis methods
00027     //@{
00028 
00029     /// Book histograms and initialise projections before the run
00030     void init() {
00031 
00032       /// Initialise and register projections here
00033       const FinalState fs(-4.2, 4.2);
00034       addProjection(FastJets(fs, FastJets::CDFJETCLU, 0.7), "Jets");
00035 
00036 
00037       /// Book histograms here, e.g.:
00038       for (size_t i=0; i<5; ++i) {
00039         _h_m[i] = bookHisto1D(1+i, 1, 1);
00040         _h_costheta[i] = bookHisto1D(10+i, 1, 1);
00041         _h_pT[i] = bookHisto1D(15+i, 1, 1);
00042       }
00043       /// @todo Ratios of mass histograms left out: Binning doesn't work out
00044     }
00045 
00046 
00047     /// Perform the per-event analysis
00048     void analyze(const Event& event) {
00049       const double weight = event.weight();
00050 
00051       /// Do the event by event analysis here
00052       Jets jets;
00053       double sumEt = 0.0;
00054       FourMomentum jetsystem(0.0, 0.0, 0.0, 0.0);
00055       foreach (const Jet& jet, applyProjection<FastJets>(event, "Jets").jetsByEt()) {
00056         double Et = jet.momentum().Et();
00057         if (Et > 20.0*GeV) {
00058           jets.push_back(jet);
00059           sumEt += Et;
00060           jetsystem += jet.momentum();
00061         }
00062       }
00063       /// @todo include gaussian jet energy resolution smearing?
00064 
00065       if (jets.size() < 2 || jets.size() > 6) {
00066         vetoEvent;
00067       }
00068 
00069       if (sumEt < 420.0*GeV) {
00070         vetoEvent;
00071       }
00072 
00073       LorentzTransform cms_boost(-jetsystem.boostVector());
00074       FourMomentum jet0boosted(cms_boost.transform(jets[0].momentum()));
00075 
00076       double mass = jetsystem.mass();
00077       double costheta0 = fabs(cos(jet0boosted.theta()));
00078 
00079       if (costheta0 < 2.0/3.0) {
00080         _h_m[jets.size()-2]->fill(mass, weight);
00081       }
00082 
00083       if (mass > 600.0*GeV) {
00084         _h_costheta[jets.size()-2]->fill(costheta0, weight);
00085       }
00086 
00087       if (costheta0 < 2.0/3.0 && mass > 600.0*GeV) {
00088         foreach (const Jet jet, jets) {
00089           _h_pT[jets.size()-2]->fill(jet.pT(), weight);
00090         }
00091       }
00092     }
00093 
00094 
00095     /// Normalise histograms etc., after the run
00096     void finalize() {
00097 
00098       /// Normalise, scale and otherwise manipulate histograms here
00099       for (size_t i=0; i<5; ++i) {
00100         normalize(_h_m[i], 40.0);
00101         normalize(_h_costheta[i], 2.0);
00102         normalize(_h_pT[i], 20.0);
00103       }
00104 
00105     }
00106 
00107     //@}
00108 
00109 
00110   private:
00111 
00112     /// @name Histograms
00113     //@{
00114 
00115     Histo1DPtr _h_m[5];
00116     Histo1DPtr _h_costheta[5];
00117     Histo1DPtr _h_pT[5];
00118 
00119     //@}
00120 
00121   };
00122 
00123 
00124 
00125   // The hook for the plugin system
00126   DECLARE_RIVET_PLUGIN(CDF_1996_S3108457);
00127 
00128 }