Rivet analyses referenceCMS_2015_I1356998Measurement of diffraction dissociation cross sections in pp collisions at sqrt(s)=7 TeVExperiment: CMS (LHC) Inspire ID: 1356998 Status: VALIDATED Authors:
Beam energies: (3500.0, 3500.0) GeV Run details:
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 FinalState& fs = apply<FinalState>(event, "FS");
32
33 // A vector containing a lot of eta values
34 vector<double> detparticles;
35 detparticles.push_back(-edge);
36 for (const Particle& p : fs.particles(Cuts::pT > 0.2*GeV && Cuts::abseta<edge, cmpMomByEta) ) {
37 detparticles.push_back(p.momentum().eta());
38 }
39 detparticles.push_back(edge);
40
41 // Find maximum gap size
42 vector <double>::iterator iter;
43 vector<double> detgaps;
44 for (iter = detparticles.begin()+1; iter != detparticles.end(); ++iter) {
45 const double detgap = *iter - *(iter-1);
46 detgaps.push_back(detgap);
47 }
48 double detgapbwd = detgaps.front();
49 double detgapfwd = detgaps.back();
50 double detfmax = max(detgapbwd, detgapfwd);
51
52 // Fill rapidity gap histo
53 if (detfmax != 2*edge ) {
54 _h_maxFwdGap->fill(detfmax);
55 }
56 // Everything that follows has to do with the cross-section measurements
57
58 if (fs.size() < 2) vetoEvent;
59
60 // Gap center calculations
61 const Particles particlesByRapidity = fs.particles(cmpMomByRap); //ByRapidity();
62
63 vector<double> gaps;
64 vector<double> midpoints;
65 for (size_t ip = 1; ip < particlesByRapidity.size(); ++ip) {
66 const Particle& p1 = particlesByRapidity[ip-1];
67 const Particle& p2 = particlesByRapidity[ip];
68 const double gap = p2.momentum().rapidity() - p1.momentum().rapidity();
69 const double mid = (p2.momentum().rapidity() + p1.momentum().rapidity()) / 2.;
70 gaps.push_back(gap);
71 midpoints.push_back(mid);
72 }
73
74 int imid = std::distance(gaps.begin(), max_element(gaps.begin(), gaps.end()));
75 double gapcenter = midpoints[imid];
76
77 // Calculations for cross-sections
78 FourMomentum MxFourVector(0.,0.,0.,0.);
79 FourMomentum MyFourVector(0.,0.,0.,0.);
80
81 for(const Particle& p : fs.particles(cmpMomByEta)) {
82 if (p.momentum().rapidity() > gapcenter) {
83 MxFourVector += p.momentum();
84 }
85 else {
86 MyFourVector += p.momentum();
87 }
88 }
89
90 double Mx = MxFourVector.mass();
91 double My = MyFourVector.mass();
92
93 const double xix = (Mx*Mx)/(sqrtS()/GeV * sqrtS()/GeV);
94
95 if (log10(My) < 0.5) {
96 _h_noCASTORtag->fill(log10(xix));
97 if (log10(xix) > -5.5 && log10(xix) < -2.5) _h_sigmaVis->fill(0.5);
98 }
99 else if (log10(My) < 1.1) {
100 _h_CASTORtag->fill(log10(xix));
101 if (log10(xix) > -5.5 && log10(xix) < -2.5) _h_sigmaVis->fill(1.5);
102 }
103
104 // Central gap x-section
105 double xigen = (Mx*Mx) * (My*My) / (sqrtS()/GeV * sqrtS()/GeV * 0.93827 * 0.93827); // Proton masses...
106 double dy0 = -log(xigen);
107
108 if (dy0 > 3.) {
109 if (log10(My) > 1.1 && log10(Mx) > 1.1) {
110 _h_centralGap->fill(dy0);
111 _h_sigmaVis->fill(2.5);
112 }
113 }
114
115 }
116
117 void finalize() {
118
119 double xs = crossSection()/millibarn/sumOfWeights();
120 scale(_h_noCASTORtag, xs);
121 scale(_h_CASTORtag , xs);
122 scale(_h_centralGap , xs);
123 scale(_h_sigmaVis , xs);
124 scale(_h_maxFwdGap , xs);
125
126 }
127
128 private:
129
130 Histo1DPtr _h_noCASTORtag;
131 Histo1DPtr _h_CASTORtag;
132 Histo1DPtr _h_centralGap;
133 Histo1DPtr _h_sigmaVis;
134 Histo1DPtr _h_maxFwdGap;
135 double edge;
136
137 };
138
139
140 RIVET_DECLARE_PLUGIN(CMS_2015_I1356998);
141
142}
|