Rivet analyses referenceLHCF_2020_I1783943Measurement of energy flow, cross section and average inelasticity of forward neutrons produced in $\sqrt{s} = 13$ TeV proton-proton collisions with the LHCf Arm2 detectorExperiment: LHCF (LHC) Inspire ID: 1783943 Status: VALIDATED Authors:
Beam energies: (6500.0, 6500.0) GeV Run details:
In this paper, we report the measurement of the energy flow, the cross section and the average inelasticity of forward neutrons (+ antineutrons) produced in $\sqrt{s} = 13$ TeV proton-proton collisions. These quantities are obtained from the inclusive differential production cross section, measured using the LHCf Arm2 detector at the CERN Large Hadron Collider. The measurements are performed in six pseudorapidity regions: three of them ($\eta > 10.75$, $8.99 < \eta < 9.21$ and $8.80 < \eta < 8.99$), albeit with smaller acceptance and larger uncertainties, were already published in a previous work, whereas the remaining three ($10.06 < \eta < 10.75$, $9.65 < \eta < 10.06$ and $8.65 < \eta < 8.80$) are presented here for the first time. The analysis was carried out using a data set acquired in June 2015 with a corresponding integrated luminosity of $\mathrm{0.194 nb^{-1}}$. Comparing the experimental measurements with the expectations of several hadronic interaction models used to simulate cosmic ray air showers, none of these generators resulted to have a satisfactory agreement in all the phase space selected for the analysis. The inclusive differential production cross section for $\eta > 10.75$ is not reproduced by any model, whereas the results still indicate a significant but less serious deviation at lower pseudorapidities. Depending on the pseudorapidity region, the generators showing the best overall agreement with data are either SIBYLL 2.3 or EPOS-LHC. Furthermore, apart from the most forward region, the derived energy flow and cross section distributions are best reproduced by EPOS-LHC. Finally, even if none of the models describe the elasticity distribution in a satisfactory way, the extracted average inelasticity is consistent with the QGSJET II-04 value, while most of the other generators give values that lie just outside the experimental uncertainties. Source code: LHCF_2020_I1783943.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/Beam.hh"
4#include "Rivet/Projections/UnstableParticles.hh"
5
6namespace Rivet {
7
8
9 /// @brief Measurement of forward neutron(+ antineutron) production in proton-proton Collisions at 13 TeV
10 class LHCF_2020_I1783943 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(LHCF_2020_I1783943);
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21
22 // Initialise and register projections
23 declare(Beam(), "Beam");
24 declare(FinalState(), "FS");
25
26 // Book histograms
27 book(_h_n_en_eta1, 1, 1, 1);
28 book(_h_n_en_eta2, 2, 1, 1);
29 book(_h_n_en_eta3, 3, 1, 1);
30 book(_h_n_en_eta4, 4, 1, 1);
31 book(_h_n_en_eta5, 5, 1, 1);
32 book(_h_n_en_eta6, 6, 1, 1);
33 book(_h_n_eflow, 7, 1, 1);
34 book(_h_n_sigma, 8, 1, 1);
35 book(_h_n_elas, 9, 1, 1);
36 book(_h_n_inel, 10, 1, 1);
37
38 book(_inelnorm, "_inelasticity_norm");
39 }
40
41 /// Perform the per-event analysis
42 void analyze(const Event& event) {
43
44 const FinalState &fs = apply<FinalState> (event, "FS");
45 Particles fs_particles = fs.particles();
46
47 bool is_fl_neutron = false;
48 double elasticity = 0.;
49
50 for (Particle& p: fs_particles ) {
51 //Artificially remove QGSJet II-04 wrong events
52 //if(p.pT()/GeV == 0.0) continue;
53
54 // double analysis efficiency with a two-sided LHCf
55 double energy = p.E()/GeV;
56 double eta = p.abseta();
57 // highest eta value must be in [10.75, 13.00]
58 if (eta > 13.0) eta = 11.875;
59
60 // search for forward leading particle on one side only
61 if (p.eta() > 0) {
62 if (2.*energy/sqrtS() > elasticity) {
63 elasticity = 2.*energy/sqrtS();
64 is_fl_neutron = p.abspid() == 2112;
65 }
66 }
67
68 // select neutrons above threshold
69 if (p.abspid() != 2112) continue; //Select neutrons and antineutrons only
70
71 _h_n_eflow->fill(eta, energy); //Energy Flow
72 _h_n_sigma->fill(eta); //Cross Section
73
74 // select only energy above 500 GeV
75 if (p.E()/GeV < 500.) continue;
76
77 // fill energy distributions
78 if (eta >= 10.749356) {
79 _h_n_en_eta1->fill( energy );
80 } else if(eta >= 10.056209 && eta <= 10.749356) {
81 _h_n_en_eta2->fill( energy );
82 } else if(eta >= 9.650744 && eta <= 10.056209) {
83 _h_n_en_eta3->fill( energy );
84 } else if(eta >= 8.985767 && eta <= 9.208911) {
85 _h_n_en_eta4->fill( energy );
86 } else if(eta >= 8.803446 && eta <= 8.985767) {
87 _h_n_en_eta5->fill( energy );
88 } else if(eta >= 8.649295 && eta <= 8.803446) {
89 _h_n_en_eta6->fill( energy );
90 }
91
92 }
93
94 // fill elasticity distribution if forward particle is a neutron
95 if (is_fl_neutron) {
96 _h_n_elas->fill(elasticity);
97 _h_n_inel->fill(1.0, 1.0-elasticity);
98 _inelnorm->fill();
99 }
100
101 }
102
103 /// Normalise histograms etc., after the run
104 void finalize() {
105
106 //Scale considering the LHCf Arm2 side
107 scale(_h_n_en_eta1, 0.5*crossSection()/millibarn/sumOfWeights()); // normalize to cross section
108 scale(_h_n_en_eta2, 0.5*crossSection()/millibarn/sumOfWeights()); // normalize to cross section
109 scale(_h_n_en_eta3, 0.5*crossSection()/millibarn/sumOfWeights()); // normalize to cross section
110 scale(_h_n_en_eta4, 0.5*crossSection()/millibarn/sumOfWeights()); // normalize to cross section
111 scale(_h_n_en_eta5, 0.5*crossSection()/millibarn/sumOfWeights()); // normalize to cross section
112 scale(_h_n_en_eta6, 0.5*crossSection()/millibarn/sumOfWeights()); // normalize to cross section
113
114 scale(_h_n_eflow, 0.5/sumOfWeights()); // normalize to event number
115 scale(_h_n_sigma, 0.5*crossSection()/millibarn/sumOfWeights()); // normalize to cross section
116
117 scale(_h_n_inel, 1. / *_inelnorm); // normalize to forward leading neutron event number
118 scale(_h_n_elas, crossSection()/millibarn/sumOfWeights()); // normalize to cross section
119 for (auto& b : _h_n_inel->bins()) {
120 b.scaleW(b.xWidth());
121 }
122 for (auto& b : _h_n_elas->bins()) {
123 b.scaleW(b.xWidth());
124 }
125
126 }
127 /// @}
128
129 private:
130
131 /// @name Histograms
132 /// @{
133 Histo1DPtr _h_n_en_eta1;
134 Histo1DPtr _h_n_en_eta2;
135 Histo1DPtr _h_n_en_eta3;
136 Histo1DPtr _h_n_en_eta4;
137 Histo1DPtr _h_n_en_eta5;
138 Histo1DPtr _h_n_en_eta6;
139 Histo1DPtr _h_n_eflow;
140 Histo1DPtr _h_n_sigma;
141 Histo1DPtr _h_n_inel;
142 Histo1DPtr _h_n_elas;
143
144 CounterPtr _inelnorm;
145 /// @}
146
147 };
148
149
150 RIVET_DECLARE_PLUGIN(LHCF_2020_I1783943);
151
152}
|