Rivet analyses
Underlying Event Measurements with Leading Particles and Jets in pp collisions at 13 TeV
Experiment: CMS (LHC)
Inspire ID: 1406033
Status: VALIDATED
Authors: - Paolo Gunnellini
References: - Expt page: CMS-PAS-FSQ-15-007 - http://cds.cern.ch/record/2104473?ln=en
Beams: p+ p+
Beam energies: (6500.0, 6500.0)GeV
Run details: - Minimum Bias inelastic collisions
A measurement of the underlying event (UE) activity is performed in proton-proton collisions at the centre-of-mass energy of 13 TeV with the CMS experiment at the LHC. The measurement is performed using leading charged-particles as well as lead- ing charged-particle jets as reference objects. A leading charged-particle or charged- particle jet is required to be produced in the central pseudorapidity region ( |eta| < 2) jet and with transverse momentum pT greater than 0.5 (pT greater than 1) GeV for leading charged-particle (charge particle jet). The UE activity is measured in terms of the average multiplicity and scalar sum of pT of the charged-particles, in the azimuthal region transverse to the direction of the leading reference object.
Source
code:CMS_2015_PAS_FSQ_15_007.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/ChargedFinalState.hh"
#include "Rivet/Projections/FastJets.hh"
namespace Rivet {
// UE charged particles vs. leading jet
class CMS_2015_PAS_FSQ_15_007 : public Analysis {
public:
/// Constructor
CMS_2015_PAS_FSQ_15_007() : Analysis("CMS_2015_PAS_FSQ_15_007") {}
void init() {
const ChargedFinalState cfs(Cuts::abseta < 2.0 && Cuts::pt > 500 * MeV);
declare(cfs, "CFS");
const ChargedFinalState cfsforjet(Cuts::abseta < 2.5 && Cuts::pt > 500 * MeV);
const FastJets jetpro(cfsforjet, JetAlg::SISCONE, 0.5);
declare(jetpro, "Jets");
book(_h_PtSum_vs_leadTrackPt_transMin, 1, 1, 1);
book(_h_PtSum_vs_leadTrackPt_transMax, 2, 1, 1);
book(_h_PtSum_vs_leadTrackPt_transDiff, 3, 1, 1);
book(_h_PtSum_vs_leadTrackPt_transAvg, 4, 1, 1);
book(_h_Nch_vs_leadTrackPt_transMin, 5, 1, 1);
book(_h_Nch_vs_leadTrackPt_transMax, 6, 1, 1);
book(_h_Nch_vs_leadTrackPt_transDiff, 7, 1, 1);
book(_h_Nch_vs_leadTrackPt_transAvg, 8, 1, 1);
book(_h_PtSum_vs_leadJetPt_transMin, 9, 1, 1);
book(_h_PtSum_vs_leadJetPt_transMax, 10, 1, 1);
book(_h_PtSum_vs_leadJetPt_transDiff, 11, 1, 1);
book(_h_PtSum_vs_leadJetPt_transAvg, 12, 1, 1);
book(_h_Nch_vs_leadJetPt_transMin, 13, 1, 1);
book(_h_Nch_vs_leadJetPt_transMax, 14, 1, 1);
book(_h_Nch_vs_leadJetPt_transDiff, 15, 1, 1);
book(_h_Nch_vs_leadJetPt_transAvg, 16, 1, 1);
}
/// Perform the per-event analysis
void analyze(const Event& event) {
// Find the lead jet, applying a restriction that the jets must be within |eta| < 2.
FourMomentum p_leadjet;
Jets js = apply<FastJets>(event, "Jets").jetsByPt(Cuts::pT > 1*GeV && Cuts::abseta < 2.0);
for (const Jet& j : js) {
p_leadjet = j.momentum();
break;
}
// Find the lead track, also within |eta| < 2
FourMomentum p_leadtrack;
const Particles ts = apply<ChargedFinalState>(event, "CFS").particlesByPt(Cuts::abseta < 2.0 && Cuts::pT > 0.5*GeV);
for (const Particle& t : ts) {
p_leadtrack = t.momentum();
break;
}
if (p_leadjet.isZero() && p_leadtrack.isZero())
vetoEvent;
const double phileadjet = p_leadjet.phi();
const double pTleadjet = p_leadjet.pT();
const double phileadtrack = p_leadtrack.phi();
const double pTleadtrack = p_leadtrack.pT();
Particles particles = apply<ChargedFinalState>(event, "CFS").particlesByPt();
// double ptSumTransverse_leadjet = 0.;
int nTransverse1_leadjet = 0;
double ptSumTransverse1_leadjet = 0.;
int nTransverse2_leadjet = 0;
double ptSumTransverse2_leadjet = 0.;
int nTransverseMin_leadjet = 0;
double ptSumTransverseMin_leadjet = 0.;
int nTransverseMax_leadjet = 0;
double ptSumTransverseMax_leadjet = 0.;
// double ptSumTransverse_leadtrack = 0.;
int nTransverse1_leadtrack = 0;
double ptSumTransverse1_leadtrack = 0.;
int nTransverse2_leadtrack = 0;
double ptSumTransverse2_leadtrack = 0.;
int nTransverseMin_leadtrack = 0;
double ptSumTransverseMin_leadtrack = 0.;
int nTransverseMax_leadtrack = 0;
double ptSumTransverseMax_leadtrack = 0.;
// double ptSumTowards_leadtrack = 0.;
// double ptSumAway_leadtrack = 0.;
for (const Particle& p : particles) {
const double pT = p.pT() / GeV;
if (!p_leadjet.isZero()) {
double dphi_leadjet = p.phi() - phileadjet;
while (dphi_leadjet > PI) {
dphi_leadjet = dphi_leadjet - 2.0 * PI;
}
while (dphi_leadjet < -PI) {
dphi_leadjet = dphi_leadjet + 2. * PI;
}
if (dphi_leadjet > PI / 3. && dphi_leadjet < PI * 2. / 3.) { // Transverse1 region
// ptSumTransverse_leadjet += pT;
nTransverse1_leadjet++;
ptSumTransverse1_leadjet += pT;
}
if (dphi_leadjet < -PI / 3. && dphi_leadjet > -PI * 2. / 3.) { // Transverse2 region
// ptSumTransverse_leadjet += pT;
nTransverse2_leadjet++;
ptSumTransverse2_leadjet += pT;
}
} //jet found
if (!p_leadtrack.isZero()) {
double dphi_leadtrack = p.phi() - phileadtrack;
while (dphi_leadtrack > PI) {
dphi_leadtrack = dphi_leadtrack - 2.0 * PI;
}
while (dphi_leadtrack < -PI) {
dphi_leadtrack = dphi_leadtrack + 2. * PI;
}
if (dphi_leadtrack > PI / 3. && dphi_leadtrack < PI * 2. / 3.) { // Transverse1 region
// ptSumTransverse_leadtrack += pT;
nTransverse1_leadtrack++;
ptSumTransverse1_leadtrack += pT;
}
if (dphi_leadtrack < -PI / 3. && dphi_leadtrack > -PI * 2. / 3.) { // Transverse2 region
// ptSumTransverse_leadtrack += pT;
nTransverse2_leadtrack++;
ptSumTransverse2_leadtrack += pT;
}
} //< track found
} //< loop over particles
const double fullarea = 8. / 3. * PI;
const double halfarea = 4. / 3. * PI;
if (!p_leadjet.isZero()) {
if (nTransverse2_leadjet > nTransverse1_leadjet) {
nTransverseMax_leadjet = nTransverse2_leadjet;
nTransverseMin_leadjet = nTransverse1_leadjet;
} else {
nTransverseMax_leadjet = nTransverse1_leadjet;
nTransverseMin_leadjet = nTransverse2_leadjet;
}
if (ptSumTransverse2_leadjet > ptSumTransverse1_leadjet) {
ptSumTransverseMax_leadjet = ptSumTransverse2_leadjet;
ptSumTransverseMin_leadjet = ptSumTransverse1_leadjet;
}
else {
ptSumTransverseMax_leadjet = ptSumTransverse1_leadjet;
ptSumTransverseMin_leadjet = ptSumTransverse2_leadjet;
}
_h_Nch_vs_leadJetPt_transDiff->fill(pTleadjet / GeV,
1. / halfarea * (nTransverseMax_leadjet - nTransverseMin_leadjet));
_h_PtSum_vs_leadJetPt_transDiff->fill(
pTleadjet / GeV, 1. / halfarea * (ptSumTransverseMax_leadjet - ptSumTransverseMin_leadjet));
_h_Nch_vs_leadJetPt_transAvg->fill(pTleadjet / GeV,
1. / fullarea * (nTransverseMax_leadjet + nTransverseMin_leadjet));
_h_PtSum_vs_leadJetPt_transAvg->fill(pTleadjet / GeV,
1. / fullarea * (ptSumTransverseMax_leadjet + ptSumTransverseMin_leadjet));
_h_Nch_vs_leadJetPt_transMax->fill(pTleadjet / GeV, 1. / halfarea * nTransverseMax_leadjet);
_h_PtSum_vs_leadJetPt_transMax->fill(pTleadjet / GeV, 1. / halfarea * ptSumTransverseMax_leadjet);
_h_Nch_vs_leadJetPt_transMin->fill(pTleadjet / GeV, 1. / halfarea * nTransverseMin_leadjet);
_h_PtSum_vs_leadJetPt_transMin->fill(pTleadjet / GeV, 1. / halfarea * ptSumTransverseMin_leadjet);
} //for leading jet
if (!p_leadtrack.isZero()) {
if (nTransverse2_leadtrack > nTransverse1_leadtrack) {
nTransverseMax_leadtrack = nTransverse2_leadtrack;
nTransverseMin_leadtrack = nTransverse1_leadtrack;
}
else {
nTransverseMax_leadtrack = nTransverse1_leadtrack;
nTransverseMin_leadtrack = nTransverse2_leadtrack;
}
if (ptSumTransverse2_leadtrack > ptSumTransverse1_leadtrack) {
ptSumTransverseMax_leadtrack = ptSumTransverse2_leadtrack;
ptSumTransverseMin_leadtrack = ptSumTransverse1_leadtrack;
}
else {
ptSumTransverseMax_leadtrack = ptSumTransverse1_leadtrack;
ptSumTransverseMin_leadtrack = ptSumTransverse2_leadtrack;
}
_h_Nch_vs_leadTrackPt_transDiff->fill(pTleadtrack / GeV,
1. / halfarea * (nTransverseMax_leadtrack - nTransverseMin_leadtrack));
_h_PtSum_vs_leadTrackPt_transDiff->fill(
pTleadtrack / GeV, 1. / halfarea * (ptSumTransverseMax_leadtrack - ptSumTransverseMin_leadtrack));
_h_Nch_vs_leadTrackPt_transAvg->fill(pTleadtrack / GeV,
1. / fullarea * (nTransverseMax_leadtrack + nTransverseMin_leadtrack));
_h_PtSum_vs_leadTrackPt_transAvg->fill(
pTleadtrack / GeV, 1. / fullarea * (ptSumTransverseMax_leadtrack + ptSumTransverseMin_leadtrack));
_h_Nch_vs_leadTrackPt_transMax->fill(pTleadtrack / GeV, 1. / halfarea * nTransverseMax_leadtrack);
_h_PtSum_vs_leadTrackPt_transMax->fill(pTleadtrack / GeV, 1. / halfarea * ptSumTransverseMax_leadtrack);
_h_Nch_vs_leadTrackPt_transMin->fill(pTleadtrack / GeV, 1. / halfarea * nTransverseMin_leadtrack);
_h_PtSum_vs_leadTrackPt_transMin->fill(pTleadtrack / GeV, 1. / halfarea * ptSumTransverseMin_leadtrack);
} //for leading track
}
/// Normalise histograms etc., after the run
void finalize() {}
private:
Profile1DPtr _h_Nch_vs_leadJetPt_transMax;
Profile1DPtr _h_PtSum_vs_leadJetPt_transMax;
Profile1DPtr _h_Nch_vs_leadJetPt_transMin;
Profile1DPtr _h_PtSum_vs_leadJetPt_transMin;
Profile1DPtr _h_Nch_vs_leadJetPt_transDiff;
Profile1DPtr _h_PtSum_vs_leadJetPt_transDiff;
Profile1DPtr _h_Nch_vs_leadJetPt_transAvg;
Profile1DPtr _h_PtSum_vs_leadJetPt_transAvg;
Profile1DPtr _h_Nch_vs_leadTrackPt_transMax;
Profile1DPtr _h_PtSum_vs_leadTrackPt_transMax;
Profile1DPtr _h_Nch_vs_leadTrackPt_transMin;
Profile1DPtr _h_PtSum_vs_leadTrackPt_transMin;
Profile1DPtr _h_Nch_vs_leadTrackPt_transDiff;
Profile1DPtr _h_PtSum_vs_leadTrackPt_transDiff;
Profile1DPtr _h_Nch_vs_leadTrackPt_transAvg;
Profile1DPtr _h_PtSum_vs_leadTrackPt_transAvg;
};
RIVET_DECLARE_PLUGIN(CMS_2015_PAS_FSQ_15_007);
} // namespace Rivet