rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CMS_2012_I1193338

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: 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 < |\eta| < 5$), in collisions where at least one proton loses more than $\xi > 5 \cdot 10^{-6}$ of its longitudinal momentum, and (ii) the central tracker ($|\eta| < 2.4$), in collisions containing an interaction vertex with more than 1, 2, or 3 tracks with $p_\perp > 200 \text{MeV}/c$.

Source code: CMS_2012_I1193338.cc
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/ChargedFinalState.hh"
 4#include "Rivet/Projections/FinalState.hh"
 5
 6namespace Rivet {
 7
 8
 9  class CMS_2012_I1193338 : public Analysis {
10  public:
11
12    CMS_2012_I1193338()
13      : Analysis("CMS_2012_I1193338")
14    {    }
15
16
17    void init() {
18      declare(ChargedFinalState((Cuts::etaIn(-2.4, 2.4) && Cuts::pT >=  0.2*GeV)), "CFS");
19      declare(FinalState(), "FS");
20
21      book(_h_sigma ,1, 1, 1);
22    }
23
24
25    void analyze(const Event& event) {
26
27      const ChargedFinalState& cfs = apply<ChargedFinalState>(event, "CFS");
28      if (cfs.size() > 1) {_h_sigma->fill(1.5);}
29      if (cfs.size() > 2) {_h_sigma->fill(2.5);}
30      if (cfs.size() > 3) {_h_sigma->fill(3.5);}
31
32      const FinalState& fs = apply<FinalState>(event, "FS");
33      if (fs.size() < 2) vetoEvent; // need at least two particles to calculate gaps
34
35      double gapcenter = 0.;
36      double LRG = 0.;
37      double etapre = 0.;
38      bool first = true;
39
40      for(const Particle& p : fs.particles(cmpMomByEta)) { // sorted from minus to plus
41        if (first) { // First particle
42          first = false;
43          etapre = p.eta();
44        } else {
45          double gap = fabs(p.eta()-etapre);
46          if (gap > LRG) {
47            LRG = gap; // largest gap
48            gapcenter = (p.eta()+etapre)/2.; // find the center of the gap to separate the X and Y systems.
49          }
50          etapre = p.eta();
51        }
52      }
53
54
55      FourMomentum mxFourVector, myFourVector;
56      for(const Particle& p : fs.particles(cmpMomByEta)) {
57        ((p.eta() > gapcenter) ? mxFourVector : myFourVector) += p.momentum();
58      }
59      const double M2 = max(mxFourVector.mass2(), myFourVector.mass2());
60      const double xi = M2/sqr(sqrtS()); // sqrt(s)=7000 GeV, note that units cancel
61      if (xi < 5e-6) vetoEvent;
62
63      _h_sigma->fill(0.5);
64    }
65
66
67    void finalize() {
68      scale(_h_sigma, crossSection()/millibarn/sumOfWeights());
69    }
70
71  private:
72
73    Histo1DPtr _h_sigma;
74
75  };
76
77
78  RIVET_DECLARE_PLUGIN(CMS_2012_I1193338);
79
80}