Rivet analyses
Measurement of the inelastic proton-proton cross section at $\sqrt{s} = 7$ TeV
Experiment: CMS (LHC)
Inspire ID: 1193338
Status: VALIDATED
Authors: - Sercan Sen
References: - arXiv: 1210.6718
Beams: p+ p+
Beam energies: (3500.0, 3500.0)GeV
Run details: - Inelastic events (non-diffractive and inelastic diffractive).
The inelastic cross-section is measured through two independent methods based on information from (i) forward calorimetry (for pseudorapidity 3 < |η| < 5), in collisions where at least one proton loses more than ξ > 5 ⋅ 10−6 of its longitudinal momentum, and (ii) the central tracker (|η| < 2.4), in collisions containing an interaction vertex with more than 1, 2, or 3 tracks with $p_\perp > 200~\MeV/c$.
Source
code:CMS_2012_I1193338.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/ChargedFinalState.hh"
#include "Rivet/Projections/FinalState.hh"
namespace Rivet {
class CMS_2012_I1193338 : public Analysis {
public:
CMS_2012_I1193338()
: Analysis("CMS_2012_I1193338")
{ }
void init() {
declare(ChargedFinalState((Cuts::etaIn(-2.4, 2.4) && Cuts::pT >= 0.2*GeV)), "CFS");
declare(FinalState(), "FS");
book(_h_sigma ,1, 1, 1);
}
void analyze(const Event& event) {
const ChargedFinalState& cfs = apply<ChargedFinalState>(event, "CFS");
if (cfs.size() > 1) {_h_sigma->fill(1.5);}
if (cfs.size() > 2) {_h_sigma->fill(2.5);}
if (cfs.size() > 3) {_h_sigma->fill(3.5);}
const FinalState& fs = apply<FinalState>(event, "FS");
if (fs.size() < 2) vetoEvent; // need at least two particles to calculate gaps
double gapcenter = 0.;
double LRG = 0.;
double etapre = 0.;
bool first = true;
for(const Particle& p : fs.particles(cmpMomByEta)) { // sorted from minus to plus
if (first) { // First particle
first = false;
etapre = p.eta();
} else {
double gap = fabs(p.eta()-etapre);
if (gap > LRG) {
LRG = gap; // largest gap
gapcenter = (p.eta()+etapre)/2.; // find the center of the gap to separate the X and Y systems.
}
etapre = p.eta();
}
}
FourMomentum mxFourVector, myFourVector;
for(const Particle& p : fs.particles(cmpMomByEta)) {
((p.eta() > gapcenter) ? mxFourVector : myFourVector) += p.momentum();
}
const double M2 = max(mxFourVector.mass2(), myFourVector.mass2());
const double xi = M2/sqr(sqrtS()); // sqrt(s)=7000 GeV, note that units cancel
if (xi < 5e-6) vetoEvent;
_h_sigma->fill(0.5);
}
void finalize() {
scale(_h_sigma, crossSection()/millibarn/sumOfWeights());
}
private:
Histo1DPtr _h_sigma;
};
RIVET_DECLARE_PLUGIN(CMS_2012_I1193338);
}