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
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/IdentifiedFinalState.hh"
#include "Rivet/Projections/MissingMomentum.hh"
#include "Rivet/Projections/ZFinder.hh"

namespace Rivet {


  /// Drell-Yan dimuon absolute cross-sections in 800 GeV pp and pd collisions
  class NUSEA_2003_I613362 : public Analysis {
  public:

    /// Constructor
    DEFAULT_RIVET_ANALYSIS_CTOR(NUSEA_2003_I613362);


    /// @name Analysis methods
    /// @{

    /// Book histograms and initialise projections before the run
    void init() {

      // Projections
      const FinalState fs;
      declare(fs, "FS");
      Cut cut = Cuts::etaIn(-10.,10.);
      ZFinder zfinder(fs, cut, PID::MUON, 4.0*GeV, 100.0*GeV, 0.1, ZFinder::ClusterPhotons::NONE );
      declare(zfinder, "ZFinder");

      // Booking histograms
      // hydrogen d01-d16
      Histo1DPtr dummy;
      _hist_M_xF.add(-0.05, 0.05, book(dummy,1, 1, 1));
      _hist_M_xF.add( 0.05, 0.10, book(dummy,2, 1, 1));
      _hist_M_xF.add( 0.10, 0.15, book(dummy,3, 1, 1));
      _hist_M_xF.add( 0.15, 0.20, book(dummy,4, 1, 1));
      _hist_M_xF.add( 0.20, 0.25, book(dummy,5, 1, 1));
      _hist_M_xF.add( 0.25, 0.30, book(dummy,6, 1, 1));
      _hist_M_xF.add( 0.30, 0.35, book(dummy,7, 1, 1));
      _hist_M_xF.add( 0.35, 0.40, book(dummy,8, 1, 1));
      _hist_M_xF.add( 0.40, 0.45, book(dummy,9, 1, 1));
      _hist_M_xF.add( 0.45, 0.50, book(dummy,10, 1, 1));
      _hist_M_xF.add( 0.50, 0.55, book(dummy,11, 1, 1));
      _hist_M_xF.add( 0.55, 0.60, book(dummy,12, 1, 1));
      _hist_M_xF.add( 0.60, 0.65, book(dummy,13, 1, 1));
      _hist_M_xF.add( 0.65, 0.70, book(dummy,14, 1, 1));
      _hist_M_xF.add( 0.70, 0.75, book(dummy,15, 1, 1));
      _hist_M_xF.add( 0.75, 0.80, book(dummy,16, 1, 1));

      // deuterium d17-d32

      // hydrogen d40
      _hist_pT_M.add(4.2, 5.2, book(dummy,40, 1, 1));
      _hist_pT_M.add(5.2, 6.2, book(dummy,40, 1, 2));
      _hist_pT_M.add(6.2, 7.2, book(dummy,40, 1, 3));
      _hist_pT_M.add(7.2, 8.7, book(dummy,40, 1, 4));
      _hist_pT_M.add(10.85, 12.85, book(dummy,40, 1, 5));

    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {

      const double sqrts_tol = 10.;
      if (!fuzzyEquals(sqrtS()/GeV, 38.8, sqrts_tol)) {
        MSG_ERROR("Incorrect beam energy used: " << sqrtS()/GeV);
        throw Error("Unexpected sqrtS ! Only 38.8 GeV is supported");
      }

      // Muons
      const ZFinder& zfinder = applyProjection<ZFinder>(event, "ZFinder");
      if (zfinder.particles().size() <= 0) vetoEvent;

      double Zmass = zfinder.bosons()[0].momentum().mass()/GeV;
      double Zpt   = zfinder.bosons()[0].momentum().pT()/GeV;
      double Zpl   = zfinder.bosons()[0].momentum().pz()/GeV;
      double ZE    = zfinder.bosons()[0].momentum().E();
      double xF = 2.*Zpl/sqrtS();

      // Filling dimuon mass in bins of xF
      _hist_M_xF.fill(xF, Zmass/GeV, pow(Zmass,3));

      // Filling pT in bins of Zmass
      if ( xF > -0.05 && xF <= 0.15 ) {
        // Include here all factors which are run-dependent for later scaling
        if (Zpt > 0) _hist_pT_M.fill(Zmass,Zpt, 1./2./Zpt*2.*ZE/sqrtS());
      }

      MSG_DEBUG("Dimuon pT = "<< Zpt<<"   Dimuon E = ");
      MSG_DEBUG("DiMuon mass " << Zmass/GeV);
      MSG_DEBUG("DiMuon pT "<<Zpt);
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      // xf bin width = 0.2, x-section in picobarn
      double scalefactor=crossSection()/picobarn/(sumOfWeights() * M_PI *0.2 );
      _hist_pT_M.scale(scalefactor, this);

      // x-section is quoted in nanobarn
      _hist_M_xF.scale(crossSection()/nanobarn/sumOfWeights(), this);
    }

    /// @}


  private:

    /// @name Histograms
    ///@{
    BinnedHistogram _hist_pT_M, _hist_M_xF;
    Histo1DPtr  _h_m_DiMuon ;
    Histo1DPtr  _h_pT_DiMuon;
    Histo1DPtr  _h_eta_DiMuon;
    Histo1DPtr  _h_y_DiMuon;
    Histo1DPtr  _h_phi_DiMuon;
    Histo1DPtr _h_yDiff_DiMuon;
    Histo1DPtr _h_dPhi_DiMuon;
    Histo1DPtr _h_xF_DiMuon;
    ///@}


  };


  DECLARE_RIVET_PLUGIN(NUSEA_2003_I613362);

}