rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

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:
  • 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
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4
  5namespace Rivet {
  6
  7
  8  class CMS_2015_I1356998 : public Analysis {
  9  public:
 10
 11    CMS_2015_I1356998()
 12      : Analysis("CMS_2015_I1356998"), edge(4.7)
 13    {    }
 14
 15
 16    void init() {
 17
 18      declare(FinalState(),"FS");
 19
 20      book(_h_noCASTORtag ,1, 1, 1);
 21      book(_h_CASTORtag   ,2, 1, 1);
 22      book(_h_centralGap  ,3, 1, 1);
 23      book(_h_sigmaVis    ,4, 1, 1);
 24      book(_h_maxFwdGap   ,5, 1, 1);
 25
 26    }
 27
 28
 29    void analyze(const Event& event) {
 30
 31      const double weight = 1.0;
 32      const FinalState& fs = apply<FinalState>(event, "FS");
 33
 34      // A vector containing a lot of eta values
 35      vector<double> detparticles;
 36      detparticles.push_back(-edge);
 37      for (const Particle& p : fs.particles(Cuts::pT > 0.2*GeV && Cuts::abseta<edge, cmpMomByEta) ) {
 38        detparticles.push_back(p.momentum().eta());
 39      }
 40      detparticles.push_back(edge);
 41
 42      // Find maximum gap size
 43      vector <double>::iterator iter;
 44      vector<double> detgaps;
 45      for (iter = detparticles.begin()+1; iter != detparticles.end(); ++iter) {
 46        const double detgap = *iter - *(iter-1);
 47        detgaps.push_back(detgap);
 48      }
 49      double detgapbwd = detgaps.front();
 50      double detgapfwd = detgaps.back();
 51      double detfmax = max(detgapbwd, detgapfwd);
 52
 53      // Fill rapidity gap histo
 54      if (detfmax != 2*edge ) {
 55        _h_maxFwdGap->fill(detfmax, weight);
 56      }
 57      // Everything that follows has to do with the cross-section measurements
 58
 59      if (fs.size() < 2) vetoEvent;
 60
 61      // Gap center calculations
 62      const Particles particlesByRapidity = fs.particles(cmpMomByRap); //ByRapidity();
 63
 64      vector<double> gaps;
 65      vector<double> midpoints;
 66      for (size_t ip = 1; ip < particlesByRapidity.size(); ++ip) {
 67        const Particle& p1 = particlesByRapidity[ip-1];
 68        const Particle& p2 = particlesByRapidity[ip];
 69        const double gap = p2.momentum().rapidity()  - p1.momentum().rapidity();
 70        const double mid = (p2.momentum().rapidity() + p1.momentum().rapidity()) / 2.;
 71        gaps.push_back(gap);
 72        midpoints.push_back(mid);
 73      }
 74
 75      int imid = std::distance(gaps.begin(), max_element(gaps.begin(), gaps.end()));
 76      double gapcenter = midpoints[imid];
 77
 78      // Calculations for cross-sections
 79      FourMomentum MxFourVector(0.,0.,0.,0.);
 80      FourMomentum MyFourVector(0.,0.,0.,0.);
 81
 82      for(const Particle& p : fs.particles(cmpMomByEta)) {
 83        if (p.momentum().rapidity() > gapcenter) {
 84          MxFourVector += p.momentum();
 85        }
 86        else {
 87          MyFourVector += p.momentum();
 88        }
 89      }
 90
 91      double Mx = MxFourVector.mass();
 92      double My = MyFourVector.mass();
 93
 94      const double xix = (Mx*Mx)/(sqrtS()/GeV * sqrtS()/GeV);
 95
 96      if (log10(My) < 0.5) {
 97        _h_noCASTORtag->fill(log10(xix), weight);
 98        if (log10(xix) > -5.5 && log10(xix) < -2.5) _h_sigmaVis->fill(0.5, weight);
 99      }
100      else if (log10(My) < 1.1) {
101        _h_CASTORtag->fill(log10(xix), weight);
102        if (log10(xix) > -5.5 && log10(xix) < -2.5) _h_sigmaVis->fill(1.5, weight);
103      }
104
105      // Central gap x-section
106      double xigen = (Mx*Mx) * (My*My) / (sqrtS()/GeV * sqrtS()/GeV * 0.93827 * 0.93827); // Proton masses...
107      double dy0 = -log(xigen);
108
109      if (dy0 > 3.) {
110        if (log10(My) > 1.1 && log10(Mx) > 1.1) {
111          _h_centralGap->fill(dy0, weight);
112          _h_sigmaVis->fill(2.5, weight);
113        }
114      }
115
116    }
117
118    void finalize() {
119
120      double xs = crossSection()/millibarn/sumOfWeights();
121      scale(_h_noCASTORtag, xs);
122      scale(_h_CASTORtag  , xs);
123      scale(_h_centralGap , xs);
124      scale(_h_sigmaVis   , xs);
125      scale(_h_maxFwdGap  , xs);
126
127    }
128
129  private:
130
131    Histo1DPtr _h_noCASTORtag;
132    Histo1DPtr _h_CASTORtag;
133    Histo1DPtr _h_centralGap;
134    Histo1DPtr _h_sigmaVis;
135    Histo1DPtr _h_maxFwdGap;
136    double edge;
137
138  };
139
140
141  RIVET_DECLARE_PLUGIN(CMS_2015_I1356998);
142
143}