Rivet analyses referenceCMS_2018_I1653948Measurement of the inelastic proton-proton cross section at 13 TeVExperiment: CMS (LHC) Inspire ID: 1653948 Status: VALIDATED Authors:
Beam energies: (6500.0, 6500.0) GeV Run details:
A measurement of the inelastic proton-proton cross section at $\sqrt{s} = 13$ TeV with the CMS detector at the LHC has been presented. An inelastic cross section of $67.5 \pm 0.8 \text{(syst)} \pm 1.6 \text{(lumi)}$ mb is obtained for $\xi = M^2/s > 10^{-6}$ (corresponding to $M > 13$ GeV), with $M$ the larger of $M_{\mathrm{X}}$ and $M_{\mathrm{Y}}$, where $M_{\mathrm{X}}$ and $M_{\mathrm{Y}}$ are the masses of the diffractive dissociation systems with negative and positive pseudorapidities, respectively. In addition, an inelastic cross section of $68.6 \pm 0.5 \text{(syst)} \pm 1.6 \text{(lumi)}$ mb is obtained in the enlarged phase space $\xi_{\mathrm{X}} > 10^{-7}$ and/or $\xi_{\mathrm{Y}} > 10^{-6}$ (corresponding to $M_{\mathrm{X}} > 4.1$ GeV and/or $M_{\mathrm{Y}} > 13$ GeV). Source code: CMS_2018_I1653948.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4
5namespace Rivet {
6
7
8 class CMS_2018_I1653948 : public Analysis {
9 public:
10
11 CMS_2018_I1653948()
12 : Analysis("CMS_2018_I1653948"), _xi_hf_cut(1E-6), _xi_castor_cut(1E-7)
13 { }
14
15
16 /// Book projections and histograms
17 void init() {
18 declare(FinalState(),"FS");
19 book(_h_xsec, 1, 1, 1);
20 }
21
22
23 /// Analyze each event
24 void analyze(const Event& event) {
25
26 const FinalState& fs = apply<FinalState>(event, "FS");
27 if (fs.size() < 3) vetoEvent; // veto on elastic events
28 const Particles particlesByRapidity = fs.particles(cmpMomByRap);
29 const size_t num_particles = particlesByRapidity.size();
30
31 vector<double> gaps;
32 vector<double> midpoints;
33
34 for (size_t ip = 1; ip < num_particles; ++ip) {
35 const Particle& p1 = particlesByRapidity[ip-1];
36 const Particle& p2 = particlesByRapidity[ip];
37 const double gap = p2.momentum().rapidity() - p1.momentum().rapidity();
38 const double mid = (p2.momentum().rapidity() + p1.momentum().rapidity()) / 2.;
39 gaps.push_back(gap);
40 midpoints.push_back(mid);
41 }
42
43 int imid = std::distance(gaps.begin(), max_element(gaps.begin(), gaps.end()));
44 double gapcenter = midpoints[imid];
45
46 FourMomentum MxFourVector(0.,0.,0.,0.);
47 FourMomentum MyFourVector(0.,0.,0.,0.);
48
49 for (const Particle& p : fs.particles(cmpMomByEta)) {
50 if (p.momentum().rapidity() < gapcenter) {
51 MxFourVector += p.momentum();
52 } else {
53 MyFourVector += p.momentum();
54 }
55 }
56
57 double Mx = MxFourVector.mass();
58 double My = MyFourVector.mass();
59
60 double xix = (Mx * Mx) / (sqrtS()/GeV * sqrtS()/GeV);
61 double xiy = (My * My) / (sqrtS()/GeV * sqrtS()/GeV);
62 double xi = max(xix, xiy);
63
64 if (xi > _xi_hf_cut) _h_xsec->fill(1);
65 if (xix > _xi_castor_cut || xiy > _xi_hf_cut) _h_xsec->fill(2);
66 }
67
68
69 /// Normalizations, etc.
70 void finalize() {
71 scale(_h_xsec, crossSection()/millibarn/sumOfWeights());
72 }
73
74
75 private:
76
77 BinnedHistoPtr<int> _h_xsec;
78 double _xi_hf_cut;
79 double _xi_castor_cut;
80
81 };
82
83
84 RIVET_DECLARE_PLUGIN(CMS_2018_I1653948);
85
86}
|