Rivet analyses


title: 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

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

Run details: none 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

```c++ // -- C++ --

include "Rivet/Analysis.hh"

include "Rivet/Projections/DileptonFinder.hh"

include "Rivet/Projections/FastJets.hh"

include "Rivet/Projections/FinalState.hh"

include "Rivet/Projections/IdentifiedFinalState.hh"

include "Rivet/Projections/MissingMomentum.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
  DileptonFinder zfinder(91.2 * GeV, 0.0, Cuts::abseta < 10. && Cuts::abspid == PID::MUON,
                         Cuts::massIn(4.0 * GeV, 100.0 * GeV), LeptonOrigin::PROMPT);
  declare(zfinder, "DileptonFinder");

  // 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) {

  const DileptonFinder& zfinder = apply<DileptonFinder>(event, "DileptonFinder");
  if (zfinder.bosons().size() < 1) vetoEvent;
  const FourMomentum& mom = zfinder.bosons()[0].mom();
  double mass = mom.mass() / GeV;
  double pt_DY = mom.pT() / GeV;
  double y_DY = abs(mom.rap());

  _h_m_DiMuon->fill(mass);
  _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 (inRange(y_DY, 1.2, 2.2)) _h_mass->fill(mass);
}


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

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

/// @}


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

};

RIVET_DECLARE_PLUGIN(PHENIX_2019_I1672015);

} ```