rivet is hosted by Hepforge, IPPP Durham
MC_ZINC.cc
Go to the documentation of this file.
00001 // -*- C++ -*-
00002 #include "Rivet/Analysis.hh"
00003 #include "Rivet/Projections/ZFinder.hh"
00004 
00005 namespace Rivet {
00006 
00007 
00008   /// @brief MC validation analysis for Z events
00009   class MC_ZINC : public Analysis {
00010   public:
00011 
00012     /// Default constructor
00013     MC_ZINC()
00014       : Analysis("MC_ZINC")
00015     {    }
00016 
00017 
00018     /// @name Analysis methods
00019     //@{
00020 
00021     /// Book histograms
00022     void init() {
00023       FinalState fs;
00024       ZFinder zfinder(fs, -3.5, 3.5, 25.0*GeV, PID::ELECTRON, 65.0*GeV, 115.0*GeV, 0.2, true, true);
00025       addProjection(zfinder, "ZFinder");
00026 
00027       _h_Z_mass = bookHisto1D("Z_mass", 50, 66.0, 116.0);
00028       _h_Z_pT = bookHisto1D("Z_pT", logspace(100, 1.0, 0.5*sqrtS()));
00029       _h_Z_pT_peak = bookHisto1D("Z_pT_peak", 25, 0.0, 25.0);
00030       _h_Z_y = bookHisto1D("Z_y", 40, -4.0, 4.0);
00031       _h_Z_phi = bookHisto1D("Z_phi", 25, 0.0, TWOPI);
00032       _h_lepton_pT = bookHisto1D("lepton_pT", logspace(100, 10.0, 0.25*sqrtS()));
00033       _h_lepton_eta = bookHisto1D("lepton_eta", 40, -4.0, 4.0);
00034 
00035     }
00036 
00037 
00038 
00039     /// Do the analysis
00040     void analyze(const Event & e) {
00041       const ZFinder& zfinder = applyProjection<ZFinder>(e, "ZFinder");
00042       if (zfinder.bosons().size()!=1) {
00043         vetoEvent;
00044       }
00045       const double weight = e.weight();
00046 
00047       FourMomentum zmom(zfinder.bosons()[0].momentum());
00048       _h_Z_mass->fill(zmom.mass(),weight);
00049       _h_Z_pT->fill(zmom.pT(),weight);
00050       _h_Z_pT_peak->fill(zmom.pT(),weight);
00051       _h_Z_y->fill(zmom.rapidity(),weight);
00052       _h_Z_phi->fill(zmom.azimuthalAngle(),weight);
00053       foreach (const Particle& l, zfinder.constituents()) {
00054         _h_lepton_pT->fill(l.pT(), weight);
00055         _h_lepton_eta->fill(l.eta(), weight);
00056       }
00057     }
00058 
00059 
00060     /// Finalize
00061     void finalize() {
00062       scale(_h_Z_mass, crossSection()/sumOfWeights());
00063       scale(_h_Z_pT, crossSection()/sumOfWeights());
00064       scale(_h_Z_pT_peak, crossSection()/sumOfWeights());
00065       scale(_h_Z_y, crossSection()/sumOfWeights());
00066       scale(_h_Z_phi, crossSection()/sumOfWeights());
00067       scale(_h_lepton_pT, crossSection()/sumOfWeights());
00068       scale(_h_lepton_eta, crossSection()/sumOfWeights());
00069     }
00070 
00071     //@}
00072 
00073 
00074   private:
00075 
00076     /// @name Histograms
00077     //@{
00078     Histo1DPtr _h_Z_mass;
00079     Histo1DPtr _h_Z_pT;
00080     Histo1DPtr _h_Z_pT_peak;
00081     Histo1DPtr _h_Z_y;
00082     Histo1DPtr _h_Z_phi;
00083     Histo1DPtr _h_lepton_pT;
00084     Histo1DPtr _h_lepton_eta;
00085     //@}
00086 
00087   };
00088 
00089 
00090 
00091   // The hook for the plugin system
00092   DECLARE_RIVET_PLUGIN(MC_ZINC);
00093 
00094 }