Rivet analyses
Drell Yan production at low masses $4.8 < m_{+-} < 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 μ+μ− 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 μ+μ− pairs from cc̄, bb̄, and Drell-Yan are separated using a template fit to unlike- and like-sign muon pair spectra in mass and pT.
Source
code:PHENIX_2019_I1672015.cc
// -*- 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/DileptonFinder.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);
}