Rivet Analyses Reference

PHENIX_2019_I1672015

Drell Yan production at low masses $4.8 < m_{\mu^+\mu^-} < 8.2 $ GeV at $\sqrt{s} = 200$ GeV
Experiment: PHENIX (RHIC)
Inspire ID: 1672015
Status: VALIDATED
Authors:
  • Hannes Jung hannes.jung@desy.de
References:
  • Phys. Rev., D99(2019), 072003
  • DOI:https://doi.org/10.1103/PhysRevD.99.072003
  • arXiv: 1805.02448
Beams: p+ p+
Beam energies: (100.0, 100.0) GeV
    No run details listed

PHENIX reports differential cross sections of $\mu^+\mu^-$ pairs from semileptonic heavy-flavor decays and the Drell-Yan production mechanism measured in p+p collisions at $\sqrt{s} = 200$ GeV at forward and backward rapidity (1.2 < |y| < 2.2). The $\mu^+\mu^-$ pairs from $c\bar{c}$, $b\bar{b}$, and Drell-Yan are separated using a template fit to unlike- and like-sign muon pair spectra in mass and $p_T$.

Source code: PHENIX_2019_I1672015.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
// -*- C++ -*-
#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 production at low masses at $\sqrt{s} = 200$ GeV
  class PHENIX_2019_I1672015 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(PHENIX_2019_I1672015);

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

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

      // Initialise and register 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");

      // Book histograms
      book(_h_pT ,1, 1, 1);
      book(_h_mass,2, 1, 1);
      int Nbin = 50;
      book(_h_m_DiMuon,"DiMuon_mass",Nbin,0.0,30.0);
      book(_h_pT_DiMuon,"DiMuon_pT",Nbin,0.0,20.0);
      book(_h_y_DiMuon,"DiMuon_y",Nbin,-8.0, 8.0);

    }


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

      double sqrts_tol = 10. ;
      if (!isCompatibleWithSqrtS(200., sqrts_tol)) {
        MSG_ERROR("Incorrect beam energy used: " << sqrtS()/GeV);
        throw Error("Unexpected sqrtS ! Only 200 GeV is supported");
      }
      const ZFinder& zfinder = applyProjection<ZFinder>(event, "ZFinder");
      if (zfinder.particles().size() < 1) vetoEvent;
      double mass = zfinder.bosons()[0].momentum().mass()/GeV;
      double pt_DY   = zfinder.bosons()[0].momentum().pT()/GeV;
      double y_DY    = abs(zfinder.bosons()[0].momentum().rapidity());

      _h_m_DiMuon->fill(mass/GeV);
      _h_pT_DiMuon->fill(pt_DY);
      _h_y_DiMuon ->fill(y_DY);
      if (inRange( y_DY, 1.2, 2.2) && inRange(mass, 4.8, 8.2) && pt_DY > 0)
        _h_pT->fill(pt_DY, 1./2./pt_DY/M_PI);
      if ( y_DY >= 1.2 && y_DY <= 2.2)
        _h_mass->fill(mass);

    }


    /// Normalise histograms etc., after the run
    void finalize() {

      // Divide by 2 because of rapidity range
      normalize(_h_m_DiMuon);
      normalize(_h_pT_DiMuon);
      normalize(_h_y_DiMuon);
      scale(_h_pT, crossSection()/(sumOfWeights())/2.);
      scale(_h_mass, crossSection()/(sumOfWeights())/2.);

    }

    ///@}


    /// @name Histograms
    ///@{
    Histo1DPtr _h_pT, _h_y, _h_mass, _h_ZZZZ;
    Histo1DPtr _h_m_DiMuon;
    Histo1DPtr _h_pT_DiMuon;
    Histo1DPtr _h_y_DiMuon;
    Histo1DPtr _h_xF_DiMuon;
    ///@}

  };


  RIVET_DECLARE_PLUGIN(PHENIX_2019_I1672015);

}