Rivet analyses referenceCMS_2012_I1193338Measurement of the inelastic proton-proton cross section at $\sqrt{s} = 7$ TeVExperiment: CMS (LHC) Inspire ID: 1193338 Status: VALIDATED Authors:
Beam energies: (3500.0, 3500.0) GeV Run details:
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 const double weight = 1.0;
27
28 const ChargedFinalState& cfs = apply<ChargedFinalState>(event, "CFS");
29 if (cfs.size() > 1) {_h_sigma->fill(1.5, weight);}
30 if (cfs.size() > 2) {_h_sigma->fill(2.5, weight);}
31 if (cfs.size() > 3) {_h_sigma->fill(3.5, weight);}
32
33 const FinalState& fs = apply<FinalState>(event, "FS");
34 if (fs.size() < 2) vetoEvent; // need at least two particles to calculate gaps
35
36 double gapcenter = 0.;
37 double LRG = 0.;
38 double etapre = 0.;
39 bool first = true;
40
41 for(const Particle& p : fs.particles(cmpMomByEta)) { // sorted from minus to plus
42 if (first) { // First particle
43 first = false;
44 etapre = p.eta();
45 } else {
46 double gap = fabs(p.eta()-etapre);
47 if (gap > LRG) {
48 LRG = gap; // largest gap
49 gapcenter = (p.eta()+etapre)/2.; // find the center of the gap to separate the X and Y systems.
50 }
51 etapre = p.eta();
52 }
53 }
54
55
56 FourMomentum mxFourVector, myFourVector;
57 for(const Particle& p : fs.particles(cmpMomByEta)) {
58 ((p.eta() > gapcenter) ? mxFourVector : myFourVector) += p.momentum();
59 }
60 const double M2 = max(mxFourVector.mass2(), myFourVector.mass2());
61 const double xi = M2/sqr(sqrtS()); // sqrt(s)=7000 GeV, note that units cancel
62 if (xi < 5e-6) vetoEvent;
63
64 _h_sigma->fill(0.5, weight);
65 }
66
67
68 void finalize() {
69 scale(_h_sigma, crossSection()/millibarn/sumOfWeights());
70 }
71
72 private:
73
74 Histo1DPtr _h_sigma;
75
76 };
77
78
79 // The hook for the plugin system
80 RIVET_DECLARE_PLUGIN(CMS_2012_I1193338);
81
82}
|