Rivet analyses


title: CMS_2015_I1356998

Measurement of diffraction dissociation cross sections in pp collisions at sqrt(s)=7 TeV

Experiment: CMS (LHC)

Inspire ID: 1356998

Status: VALIDATED

Authors: - Sercan Sen - Robert Ciesielski - J. L. Cuspinera Contreras - Yavuz Zengindemir

References: - Expt page: CMS-FSQ-12-005 - CERN-PH-EP-2015-062 - arXiv: 1503.08689

Beams: p+ p+

Beam energies: (3500.0, 3500.0)GeV

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

Measurements of diffractive dissociation cross sections in pp collisions at $\sqrt{s}=7$~TeV are presented in kinematic regions defined by the masses $M_{\mathrm{X}}$ and $M_{\mathrm{Y}}$ of the two final-state hadronic systems separated by the largest rapidity gap in the event. Differential cross sections are measured as a function of $\xi_{\mathrm{X}}= M^2_{\mathrm{X}}/s$ in the region $-5.5<\log_{10}\xi_{\mathrm{X}}<-2.5$, for $\log_{10}M_{\mathrm{Y}}<0.5$, dominated by single dissociation (SD), and $0.5<\log_{10}M_{\mathrm{Y}}<1.1$, dominated by double dissociation (DD), where $M_{\mathrm{X}}$ and $M_{\mathrm{Y}}$ are given in GeV. The inclusive pp cross section is also measured as a function of the width of the central pseudorapidity gap $\Delta\eta$ for $\Delta\eta>3$, $\log_{10}M_{\mathrm{X}}>1.1$, and $\log_{10}M_{\mathrm{Y}}>1.1$, a region dominated by DD. The cross sections integrated over these regions are used to extract the total SD and DD cross sections. In addition, the inclusive differential cross section, $\mathrm{d}\sigma / \mathrm{d}\Delta\eta^\mathrm{F}$, for events with a pseudorapidity gap adjacent to the edge of the detector, is measured over $\Delta\eta^\mathrm{F}$ = 8.4 units of pseudorapidity. The results are compared to those of other experiments and to theoretical predictions, and found compatible with slowly-rising diffractive cross sections as a function of center-of-mass energy.

Source code:CMS_2015_I1356998.cc

```c++ // -- C++ --

include "Rivet/Analysis.hh"

include "Rivet/Projections/FinalState.hh"

namespace Rivet {

class CMS_2015_I1356998 : public Analysis { public:

CMS_2015_I1356998()
    : Analysis("CMS_2015_I1356998"), edge(4.7) { }


void init() {

  declare(FinalState(), "FS");

  book(_h_noCASTORtag, 1, 1, 1);
  book(_h_CASTORtag, 2, 1, 1);
  book(_h_centralGap, 3, 1, 1);
  book(_h_sigmaVis, 4, 1, 1);
  book(_h_maxFwdGap, 5, 1, 1);
}


void analyze(const Event& event) {

  const FinalState& fs = apply<FinalState>(event, "FS");

  // A vector containing a lot of eta values
  vector<double> detparticles;
  detparticles.push_back(-edge);
  for (const Particle& p : fs.particles(Cuts::pT > 0.2 * GeV && Cuts::abseta < edge, cmpMomByEta)) {
    detparticles.push_back(p.momentum().eta());
  }
  detparticles.push_back(edge);

  // Find maximum gap size
  vector<double>::iterator iter;
  vector<double> detgaps;
  for (iter = detparticles.begin() + 1; iter != detparticles.end(); ++iter) {
    const double detgap = *iter - *(iter - 1);
    detgaps.push_back(detgap);
  }
  double detgapbwd = detgaps.front();
  double detgapfwd = detgaps.back();
  double detfmax = max(detgapbwd, detgapfwd);

  // Fill rapidity gap histo
  if (detfmax != 2 * edge) {
    _h_maxFwdGap->fill(detfmax);
  }
  // Everything that follows has to do with the cross-section measurements

  if (fs.size() < 2) vetoEvent;

  // Gap center calculations
  const Particles particlesByRapidity = fs.particles(cmpMomByRap); //ByRapidity();

  vector<double> gaps;
  vector<double> midpoints;
  for (size_t ip = 1; ip < particlesByRapidity.size(); ++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];

  // Calculations for cross-sections
  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();

  const double xix = (Mx * Mx) / (sqrtS() / GeV * sqrtS() / GeV);

  if (log10(My) < 0.5) {
    _h_noCASTORtag->fill(log10(xix));
    if (log10(xix) > -5.5 && log10(xix) < -2.5) _h_sigmaVis->fill(0.5);
  }
  else if (log10(My) < 1.1) {
    _h_CASTORtag->fill(log10(xix));
    if (log10(xix) > -5.5 && log10(xix) < -2.5) _h_sigmaVis->fill(1.5);
  }

  // Central gap x-section
  double xigen = (Mx * Mx) * (My * My)
      / (sqrtS() / GeV * sqrtS() / GeV * 0.93827 * 0.93827); // Proton masses...
  double dy0 = -log(xigen);

  if (dy0 > 3.) {
    if (log10(My) > 1.1 && log10(Mx) > 1.1) {
      _h_centralGap->fill(dy0);
      _h_sigmaVis->fill(2.5);
    }
  }
}

void finalize() {

  double xs = crossSection() / millibarn / sumOfWeights();
  scale(_h_noCASTORtag, xs);
  scale(_h_CASTORtag, xs);
  scale(_h_centralGap, xs);
  scale(_h_sigmaVis, xs);
  scale(_h_maxFwdGap, xs);
}

private:

Histo1DPtr _h_noCASTORtag;
Histo1DPtr _h_CASTORtag;
Histo1DPtr _h_centralGap;
Histo1DPtr _h_sigmaVis;
Histo1DPtr _h_maxFwdGap;
double edge;

};

RIVET_DECLARE_PLUGIN(CMS_2015_I1356998);

} ```