rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

NUSEA_2003_I613362

Drell-Yan dimuon absolute cross-sections in 800 GeV pp and pd collisions
Experiment: NUSEA (Fermilab)
Inspire ID: 613362
Status: VALIDATED
No authors listed References:
  • FERMILAB-PUB-03-302-E
  • arXiv: hep-ex/0302019
  • J. C. Webb (PhD thesis) hep-ex/0301031
Beams: p+ p+
Beam energies: (19.4, 19.4) GeV
Run details:
  • Run in pp mode (center-of-mass frame)

The Fermilab E866/NuSea Collaboration has measured the Drell-Yan dimuon cross sections in 800 GeV/c pp and pd collisions. This represents the first measurement of the Drell-Yan cross section in pp collisions over a broad kinematic region and the most extensive study to date of the Drell-Yan cross section in pd collisions. Coded 2003 by Mike Whalley and 2016 by Arathi Ramesh (DESY) using the data tables in hep-ex/0301031.

Source code: NUSEA_2003_I613362.cc
  1#include "Rivet/Analysis.hh"
  2#include "Rivet/Projections/FinalState.hh"
  3#include "Rivet/Projections/FastJets.hh"
  4#include "Rivet/Projections/IdentifiedFinalState.hh"
  5#include "Rivet/Projections/MissingMomentum.hh"
  6#include "Rivet/Projections/ZFinder.hh"
  7
  8namespace Rivet {
  9
 10
 11  /// Drell-Yan dimuon absolute cross-sections in 800 GeV pp and pd collisions
 12  class NUSEA_2003_I613362 : public Analysis {
 13  public:
 14
 15    /// Constructor
 16    RIVET_DEFAULT_ANALYSIS_CTOR(NUSEA_2003_I613362);
 17
 18
 19    /// @name Analysis methods
 20    /// @{
 21
 22    /// Book histograms and initialise projections before the run
 23    void init() {
 24
 25      // Projections
 26      const FinalState fs;
 27      declare(fs, "FS");
 28      Cut cut = Cuts::etaIn(-10.,10.);
 29      ZFinder zfinder(fs, cut, PID::MUON, 4.0*GeV, 100.0*GeV, 0.1, ZFinder::ClusterPhotons::NONE );
 30      declare(zfinder, "ZFinder");
 31
 32      // Booking histograms
 33      // hydrogen d01-d16
 34      Histo1DPtr dummy;
 35      _hist_M_xF.add(-0.05, 0.05, book(dummy,1, 1, 1));
 36      _hist_M_xF.add( 0.05, 0.10, book(dummy,2, 1, 1));
 37      _hist_M_xF.add( 0.10, 0.15, book(dummy,3, 1, 1));
 38      _hist_M_xF.add( 0.15, 0.20, book(dummy,4, 1, 1));
 39      _hist_M_xF.add( 0.20, 0.25, book(dummy,5, 1, 1));
 40      _hist_M_xF.add( 0.25, 0.30, book(dummy,6, 1, 1));
 41      _hist_M_xF.add( 0.30, 0.35, book(dummy,7, 1, 1));
 42      _hist_M_xF.add( 0.35, 0.40, book(dummy,8, 1, 1));
 43      _hist_M_xF.add( 0.40, 0.45, book(dummy,9, 1, 1));
 44      _hist_M_xF.add( 0.45, 0.50, book(dummy,10, 1, 1));
 45      _hist_M_xF.add( 0.50, 0.55, book(dummy,11, 1, 1));
 46      _hist_M_xF.add( 0.55, 0.60, book(dummy,12, 1, 1));
 47      _hist_M_xF.add( 0.60, 0.65, book(dummy,13, 1, 1));
 48      _hist_M_xF.add( 0.65, 0.70, book(dummy,14, 1, 1));
 49      _hist_M_xF.add( 0.70, 0.75, book(dummy,15, 1, 1));
 50      _hist_M_xF.add( 0.75, 0.80, book(dummy,16, 1, 1));
 51
 52      // deuterium d17-d32
 53
 54      // hydrogen d40
 55      _hist_pT_M.add(4.2, 5.2, book(dummy,40, 1, 1));
 56      _hist_pT_M.add(5.2, 6.2, book(dummy,40, 1, 2));
 57      _hist_pT_M.add(6.2, 7.2, book(dummy,40, 1, 3));
 58      _hist_pT_M.add(7.2, 8.7, book(dummy,40, 1, 4));
 59      _hist_pT_M.add(10.85, 12.85, book(dummy,40, 1, 5));
 60
 61    }
 62
 63
 64    /// Perform the per-event analysis
 65    void analyze(const Event& event) {
 66
 67      const double sqrts_tol = 10.;
 68      if (!isCompatibleWithSqrtS(38.8, sqrts_tol)) {
 69        MSG_ERROR("Incorrect beam energy used: " << sqrtS()/GeV);
 70        throw Error("Unexpected sqrtS ! Only 38.8 GeV is supported");
 71      }
 72
 73      // Muons
 74      const ZFinder& zfinder = applyProjection<ZFinder>(event, "ZFinder");
 75      if (zfinder.particles().size() <= 0) vetoEvent;
 76
 77      double Zmass = zfinder.bosons()[0].momentum().mass()/GeV;
 78      double Zpt   = zfinder.bosons()[0].momentum().pT()/GeV;
 79      double Zpl   = zfinder.bosons()[0].momentum().pz()/GeV;
 80      double ZE    = zfinder.bosons()[0].momentum().E();
 81      double xF = 2.*Zpl/sqrtS();
 82
 83      // Filling dimuon mass in bins of xF
 84      _hist_M_xF.fill(xF, Zmass/GeV, pow(Zmass,3));
 85
 86      // Filling pT in bins of Zmass
 87      if ( xF > -0.05 && xF <= 0.15 ) {
 88        // Include here all factors which are run-dependent for later scaling
 89        if (Zpt > 0) _hist_pT_M.fill(Zmass,Zpt, 1./2./Zpt*2.*ZE/sqrtS());
 90      }
 91
 92      MSG_DEBUG("Dimuon pT = "<< Zpt<<"   Dimuon E = ");
 93      MSG_DEBUG("DiMuon mass " << Zmass/GeV);
 94      MSG_DEBUG("DiMuon pT "<<Zpt);
 95    }
 96
 97
 98    /// Normalise histograms etc., after the run
 99    void finalize() {
100      // xf bin width = 0.2, x-section in picobarn
101      double scalefactor=crossSection()/picobarn/(sumOfWeights() * M_PI *0.2 );
102      _hist_pT_M.scale(scalefactor, this);
103
104      // x-section is quoted in nanobarn
105      _hist_M_xF.scale(crossSection()/nanobarn/sumOfWeights(), this);
106    }
107
108    /// @}
109
110
111  private:
112
113    /// @name Histograms
114    ///@{
115    BinnedHistogram _hist_pT_M, _hist_M_xF;
116    Histo1DPtr  _h_m_DiMuon ;
117    Histo1DPtr  _h_pT_DiMuon;
118    Histo1DPtr  _h_eta_DiMuon;
119    Histo1DPtr  _h_y_DiMuon;
120    Histo1DPtr  _h_phi_DiMuon;
121    Histo1DPtr _h_yDiff_DiMuon;
122    Histo1DPtr _h_dPhi_DiMuon;
123    Histo1DPtr _h_xF_DiMuon;
124    ///@}
125
126
127  };
128
129
130  RIVET_DECLARE_PLUGIN(NUSEA_2003_I613362);
131
132}