Rivet analyses
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 MX and MY 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 ξX = MX2/s in the region −5.5 < log10ξX < −2.5, for log10MY < 0.5, dominated by single dissociation (SD), and 0.5 < log10MY < 1.1, dominated by double dissociation (DD), where MX and MY are given in GeV. The inclusive pp cross section is also measured as a function of the width of the central pseudorapidity gap Δη for Δη > 3, log10MX > 1.1, and log10MY > 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, dσ/dΔηF, for events with a pseudorapidity gap adjacent to the edge of the detector, is measured over Δη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++ -*-
#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);
}