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