rivet is hosted by Hepforge, IPPP Durham
LHCB_2012_I1208102.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   /// Differential cross-sections of $\mathrm{Z}/\gamma^* \to e^{+}e^{-}$ vs rapidity and $\phi^*$
00009   class LHCB_2012_I1208102 : public Analysis {
00010   public:
00011 
00012 
00013     /// Constructor
00014     LHCB_2012_I1208102()
00015       : Analysis("LHCB_2012_I1208102")
00016     {    }
00017 
00018 
00019     /// @name Analysis methods
00020     //@{
00021 
00022     /// Book histograms
00023     void init() {
00024       ZFinder zeefinder(FinalState(), Cuts::etaIn(2.0, 4.5) && Cuts::pT > 20*GeV, PID::ELECTRON, 60*GeV, 120*GeV);
00025       addProjection(zeefinder, "ZeeFinder");
00026 
00027       _h_sigma_vs_y = bookHisto1D(2, 1, 1);
00028       _h_sigma_vs_phi = bookHisto1D(3, 1, 1);
00029     }
00030 
00031 
00032     /// Do the analysis
00033     void analyze(const Event& e) {
00034       const ZFinder& zeefinder = applyProjection<ZFinder>(e, "ZeeFinder");
00035       if (zeefinder.empty()) vetoEvent;
00036       if (zeefinder.bosons().size() > 1)
00037         MSG_WARNING("Found multiple (" << zeefinder.bosons().size() << ") Z -> e+ e- decays!");
00038 
00039       // Z momenta
00040       const FourMomentum& zee = zeefinder.bosons()[0].momentum();
00041       const Particle& pozitron = zeefinder.constituents()[0];
00042       const Particle& electron = zeefinder.constituents()[1];
00043 
00044       // Calculation of the angular variable
00045       const double diffphi = deltaPhi(pozitron, electron);
00046       const double diffpsd = deltaEta(pozitron, electron);
00047       const double accphi = M_PI - diffphi;
00048       const double angular = tan(accphi/2) / cosh(diffpsd/2);
00049 
00050       // Fill histograms
00051       _h_sigma_vs_y->fill(zee.rapidity(), e.weight());
00052       _h_sigma_vs_phi->fill(angular, e.weight());
00053     }
00054 
00055 
00056     /// Finalize
00057     void finalize() {
00058       const double xs = crossSection()/picobarn;
00059       scale(_h_sigma_vs_y, xs/sumOfWeights());
00060       scale(_h_sigma_vs_phi, xs/sumOfWeights());
00061     }
00062 
00063     //@}
00064 
00065 
00066   private:
00067 
00068     /// @name Histograms
00069     //@{
00070     Histo1DPtr _h_sigma_vs_y, _h_sigma_vs_phi;
00071     //@}
00072 
00073   };
00074 
00075 
00076   // The hook for the plugin system
00077   DECLARE_RIVET_PLUGIN(LHCB_2012_I1208102);
00078 
00079 }