Rivet analyses
Dielectron production in pp and p-Pb collisions at 5.02 TeV
Experiment: ALICE (LHC)
Inspire ID: 1797621
Status: VALIDATED
Authors: - Alexander Puck Neuwirth
References: - Phys. Rev. C 102 (2020) 055204 - arXiv: 2005.11995 - Expt page: ALICE-11310
Beams: p+ p+, 1000822080 p+
Beam energies: (2510.0, 2510.0); (328000.0, 4000.0)GeV
Run details: - Inclusive dielectron production in pp and pPb collisions at $\sqrt{s}=5.02$~TeV.
The first measurements of dielectron production at midrapidity (ηe < 0.8) in proton-proton and proton-lead collisions at sNN=5.02TeV at the LHC are presented. The dielectron cross section is measured with the ALICE detector as a function of the invariant mass mee and the pair transverse momentum pT,ee in the ranges mee<3.5 GeV/c2 and pT,ee<8 GeV/c, in both collision systems. In proton–proton collisions, the charm and beauty cross sections are determined at midrapidity from a fit to the data with two different event generators. This complements the existing dielectron measurements performed at s=7 and 13 TeV. The slope of the s dependence of the three measurements is described by FONLL calculations. The dielectron cross section measured in proton–lead collisions is in agreement, within the current precision, with the expected dielectron production without any nuclear matter effects for e+e− pairs from open heavy-flavor hadron decays. For the first time at LHC energies, the dielectron production in proton–lead and proton–proton collisions are directly compared at the same sNN via the dielectron nuclear modification factor RpPb. The measurements are compared to model calculations including cold nuclear matter effects, or additional sources of dielectrons from thermal radiation.
Source
code:ALICE_2020_I1797621.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/Beam.hh"
namespace Rivet {
/// @brief Dielectron production in pp and p-Pb collisions at 5.02 TeV
class ALICE_2020_I1797621 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(ALICE_2020_I1797621);
/// @name Analysis methods
//@{
/// Book histograms and initialise projections before the run
void init() {
_photon = getOption<int>("PHOTON_Z", 0);
_bottom = getOption<int>("BOTTOM", 0);
_charm = getOption<int>("CHARM", 0);
_open = getOption<int>("OPEN", 0);
_apid = getOption<int>("APID", 0);
const ParticlePair& pp = beams();
_hasLeadBeam = pp.first.pid() == PID::LEAD || pp.second.pid() == PID::LEAD;
Cut cuts = (Cuts::pT > 0.2 * GeV) && (Cuts::pT < 10 * GeV) && (Cuts::abseta < 0.8);
Cut nocuts = (Cuts::pT > 0*GeV);
FinalState fs1 = FinalState(Cuts::pid == PID::ELECTRON && cuts);
declare(fs1, "Elecs");
FinalState fs2 = FinalState(Cuts::pid == -PID::ELECTRON && cuts);
declare(fs2, "Posis");
FinalState afs1 = FinalState(Cuts::pid == PID::ELECTRON && nocuts);
declare(afs1, "AllElecs");
FinalState afs2 = FinalState(Cuts::pid == -PID::ELECTRON && nocuts);
declare(afs2, "AllPosis");
// Book histograms
book(_h["m_ee_pp"], 1,1,1);
book(_h["m_ee_pPb"], 2, 1, 1);
book(_h["pT_ee_low_pp"], 3, 1, 1);
book(_h["pT_ee_low_pPb"], 4, 1, 1);
book(_h["pT_ee_high_pp"], 5, 1, 1);
book(_h["pT_ee_high_pPb"], 6, 1, 1);
}
bool valid(const Particle &pa) const {
// If we are only iterested in open heavy-flavour we reject electrons coming from quarkonia
if (_open && pa.hasParentWith([&](const Particle& p) {
return PID::isQuarkonium(p.pid());
})) {
return false;
}
// Comes from Drell-Yan or virtual photon
if (_photon && pa.isDirect()) {
return true;
}
// Comes from bottom hadron decay
if (_bottom && pa.fromBottom()) {
return true;
}
// Comes from charm hadron decay
if (_charm && pa.fromCharm()) {
return true;
}
// By default there are no restrictions -> accept all
if (!_charm && !_bottom && !_photon) {
return true;
}
return false;
}
// With analysis cuts
void bin_em(const Particle &l1, const Particle &l2,double weight, const Event& event) {
// Combine the dilepton pair
const FourMomentum pll = l1.mom() + l2.mom();
if (pll.pt() < 8 * GeV) {
if (!_hasLeadBeam) _h["m_ee_pp"]->fill(pll.mass() / GeV,weight);
else _h["m_ee_pPb"]->fill(pll.mass() / GeV,weight);
}
if (0.5 < pll.mass() && pll.mass() < 1.10) {
if (!_hasLeadBeam) _h["pT_ee_low_pp"]->fill(pll.pt() / GeV,weight);
else _h["pT_ee_low_pPb"]->fill(pll.pt() / GeV,weight);
}
if (1.1 < pll.mass() && pll.mass() < 2.70) {
if (!_hasLeadBeam) _h["pT_ee_high_pp"]->fill(pll.pt() / GeV,weight);
else _h["pT_ee_high_pPb"]->fill(pll.pt() / GeV,weight);
}
}
/// Check if both leptons are valid and not the same
bool both_valid(const Particle &l1, const Particle &l2) const {
if (!l1.isSame(l2) && valid(l1) && valid(l2)) {
// APID filter, can not be moved to valid() since it applies to either one or the other lepton
if (!_apid || (
(l1.hasAncestorWith(Cuts::abspid == _apid)) ||
(l2.hasAncestorWith(Cuts::abspid == _apid)))) {
return true;
}
}
return false;
}
/// Perform the per-event analysis
void analyze(const Event &event) {
Particles elecs, posis;
elecs = apply<ParticleFinder>(event, "Elecs").particlesByPt();
posis = apply<ParticleFinder>(event, "Posis").particlesByPt();
Particle l1;
Particle l2;
// Now perform same-sign approximation. 2401.12875 Eq. (3.1)
// Unlike sign contributions
for (const Particle &l1 : elecs) {
for (const Particle &l2 : posis) {
if ( both_valid(l1,l2) ) {
bin_em(l1,l2,1.0,event);
}
}
}
// Like sign contributions are subtracted through the negative weight
for (const Particle &l1 : posis) {
for (const Particle &l2 : posis) {
if ( both_valid(l1,l2) ) {
bin_em(l1,l2,-0.5,event); // only subtract half since loop double counts
}
}
}
for (const Particle &l1 : elecs) {
for (const Particle &l2 : elecs) {
if ( both_valid(l1,l2) ) {
bin_em(l1,l2,-0.5,event); // only subtract half since loop double counts
}
}
}
}
/// Normalise histograms etc., after the run
void finalize() {
scale(_h, crossSectionPerEvent() / millibarn);
}
/// @}
/// @name Histograms
/// @{
map<string, Histo1DPtr> _h;
int _photon = 0;
int _bottom = 0;
int _charm = 0;
int _open = 0;
int _apid = 0;
bool _hasLeadBeam = false;
/// @}
};
// The hook for the plugin system
RIVET_DECLARE_PLUGIN(ALICE_2020_I1797621);
}