Rivet analyses

Measurement of the inelastic proton-proton cross section at 13 TeV

Experiment: CMS (LHC)

Inspire ID: 1653948

Status: VALIDATED

Authors: - cms-pag-conveners-smp@cern.ch - Sercan Sen - Pierre Van Mechelen - Hans Van Haevermaet

References: - JHEP 07 (2018) 161 - DOI 10.1007/JHEP07(2018)161 - Expt page: CMS-FSQ-15-005 - arXiv: 1802.02613 - CERN-EP-2018-004 - http://cms-results.web.cern.ch/cms-results/public-results/publications/FSQ-15-005/

Beams: p+ p+

Beam energies: (6500.0, 6500.0)GeV

Run details: - Inelastic events (non-diffractive and inelastic diffractive).

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 ± 0.8(syst) ± 1.6(lumi) mb is obtained for ξ = M2/s > 10−6 (corresponding to M > 13 GeV), with M the larger of MX and MY, where MX and MY are the masses of the diffractive dissociation systems with negative and positive pseudorapidities, respectively. In addition, an inelastic cross section of 68.6 ± 0.5(syst) ± 1.6(lumi) mb is obtained in the enlarged phase space ξX > 10−7 and/or ξY > 10−6 (corresponding to MX > 4.1 GeV and/or MY > 13 GeV).

Source code:CMS_2018_I1653948.cc

// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"

namespace Rivet {


  class CMS_2018_I1653948 : public Analysis {
  public:

    CMS_2018_I1653948()
      : Analysis("CMS_2018_I1653948"), _xi_hf_cut(1E-6), _xi_castor_cut(1E-7)
    {    }


    /// Book projections and histograms
    void init() {
      declare(FinalState(),"FS");
      book(_h_xsec, 1, 1, 1);
    }


    /// Analyze each event
    void analyze(const Event& event) {

      const FinalState& fs = apply<FinalState>(event, "FS");
      if (fs.size() < 3) vetoEvent; // veto on elastic events
      const Particles particlesByRapidity = fs.particles(cmpMomByRap);
      const size_t num_particles = particlesByRapidity.size();

      vector<double> gaps;
      vector<double> midpoints;

      for (size_t ip = 1; ip < num_particles; ++ip) {
        const Particle& p1 = particlesByRapidity[ip-1];
        const Particle& p2 = particlesByRapidity[ip];
        const double gap = p2.momentum().rapidity() - p1.momentum().rapidity();
        const double mid = (p2.momentum().rapidity() + p1.momentum().rapidity()) / 2.;
        gaps.push_back(gap);
        midpoints.push_back(mid);
      }

      int imid = std::distance(gaps.begin(), max_element(gaps.begin(), gaps.end()));
      double gapcenter = midpoints[imid];

      FourMomentum MxFourVector(0.,0.,0.,0.);
      FourMomentum MyFourVector(0.,0.,0.,0.);

      for (const Particle& p : fs.particles(cmpMomByEta)) {
        if (p.momentum().rapidity() < gapcenter) {
          MxFourVector += p.momentum();
        } else {
          MyFourVector += p.momentum();
        }
      }

      double Mx = MxFourVector.mass();
      double My = MyFourVector.mass();

      double xix = (Mx * Mx) / (sqrtS()/GeV * sqrtS()/GeV);
      double xiy = (My * My) / (sqrtS()/GeV * sqrtS()/GeV);
      double xi  = max(xix, xiy);

      if (xi > _xi_hf_cut) _h_xsec->fill(1);
      if (xix > _xi_castor_cut || xiy > _xi_hf_cut) _h_xsec->fill(2);
    }


    /// Normalizations, etc.
    void finalize() {
      scale(_h_xsec, crossSection()/millibarn/sumOfWeights());
    }


  private:

    BinnedHistoPtr<int> _h_xsec;
    double _xi_hf_cut;
    double _xi_castor_cut;

  };


  RIVET_DECLARE_PLUGIN(CMS_2018_I1653948);

}