CDF_1996_S3108457.cc

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