rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

LHCB_2013_I1208105

LHCb measurement of energy flow from $pp$ collisions at $\sqrt{s} = 7$ TeV
Experiment: LHCb (LHC)
Inspire ID: 1208105
Status: VALIDATED
Authors:
  • Alex Grecu
  • Dmytro Volyanskyy
  • Michael Schmelling
References:
  • arXiv: 1212.4755
  • Eur. Phys. J. C 73 (2012) 2421
Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • Minimum bias events from $pp$ collisions at sqrt(s) = 7 TeV.

The energy flow created in $pp$ collisions at 7 TeV within the fiducial pseudorapidity range of the LHCb detector ($1.9 < \eta < 4.9$) is measured for inclusive minimum bias interactions, hard scattering processes and events with enhanced or suppressed diffractive contribution. Plots for these four event classes are shown separately for all and charged only final state particles, respectively. The total energy flow is measured by combining the charged energy flow and a data-constrained MC estimate of the neutral component. For the two highest eta bins the data-constrained measurements of the neutral energy were extrapolated from the more central region as the LHCb electromagnetic calorimeter has no detection coverage in that phase space domain.

Source code: LHCB_2013_I1208105.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/ChargedFinalState.hh"
  5
  6namespace Rivet {
  7
  8
  9  class LHCB_2013_I1208105 : public Analysis {
 10  public:
 11
 12    LHCB_2013_I1208105()
 13      : Analysis("LHCB_2013_I1208105")
 14    {   }
 15
 16
 17    void init() {
 18      // Projections
 19      declare(FinalState((Cuts::etaIn(1.9, 4.9))), "forwardFS");
 20      declare(FinalState((Cuts::etaIn(-3.5,-1.5))), "backwardFS");
 21      declare(ChargedFinalState((Cuts::etaIn(1.9, 4.9))), "forwardCFS");
 22      declare(ChargedFinalState((Cuts::etaIn(-3.5,-1.5))), "backwardCFS");
 23
 24      // Histos
 25      book(_s_chEF_minbias, 1, 1, 1);
 26      book(_s_chEF_hard, 2, 1, 1);
 27      book(_s_chEF_diff, 3, 1, 1);
 28      book(_s_chEF_nondiff, 4, 1, 1);
 29      book(_s_totEF_minbias, 5, 1, 1);
 30      book(_s_totEF_hard, 6, 1, 1);
 31      book(_s_totEF_diff, 7, 1, 1);
 32      book(_s_totEF_nondiff, 8, 1, 1);
 33
 34      // Temporary profiles and histos
 35      /// @todo Convert to declared/registered temp histos
 36      book(_tp_chEF_minbias, "TMP/chEF_minbias", refData(1,1,1));
 37      book(_tp_chEF_hard, "TMP/chEF_hard", refData(2,1,1));
 38      book(_tp_chEF_diff, "TMP/chEF_diff", refData(3,1,1));
 39      book(_tp_chEF_nondiff, "TMP/chEF_nondiff", refData(4,1,1));
 40      book(_tp_totEF_minbias, "TMP/totEF_minbias", refData(5,1,1));
 41      book(_tp_totEF_hard, "TMP/totEF_hard", refData(6,1,1));
 42      book(_tp_totEF_diff, "TMP/totEF_diff", refData(7,1,1));
 43      book(_tp_totEF_nondiff, "TMP/totEF_nondiff", refData(8,1,1));
 44
 45      book(_th_chN_minbias, "TMP/chN_minbias", refData(1,1,1));
 46      book(_th_chN_hard, "TMP/chN_hard", refData(2,1,1));
 47      book(_th_chN_diff, "TMP/chN_diff", refData(3,1,1));
 48      book(_th_chN_nondiff, "TMP/chN_nondiff", refData(4,1,1));
 49      book(_th_totN_minbias, "TMP/totN_minbias", refData(5,1,1));
 50      book(_th_totN_hard, "TMP/totN_hard", refData(6,1,1));
 51      book(_th_totN_diff, "TMP/totN_diff", refData(7,1,1));
 52      book(_th_totN_nondiff, "TMP/totN_nondiff", refData(8,1,1));
 53
 54      // Counters
 55      book(_mbSumW, "TMP/mbSumW");
 56      book(_hdSumW, "TMP/hdSumW");
 57      book(_dfSumW, "TMP/dfSumW");
 58      book(_ndSumW, "TMP/ndSumW");
 59      book(_mbchSumW, "TMP/mbchSumW");
 60      book(_hdchSumW, "TMP/hdchSumW");
 61      book(_dfchSumW, "TMP/dfchSumW");
 62      book(_ndchSumW, "TMP/ndchSumW");
 63    }
 64
 65
 66    /// Perform the per-event analysis
 67    void analyze(const Event& event) {
 68      const FinalState& ffs = apply<FinalState>(event, "forwardFS");
 69      const FinalState& bfs = apply<FinalState>(event, "backwardFS");
 70      const ChargedFinalState& fcfs = apply<ChargedFinalState>(event, "forwardCFS");
 71      const ChargedFinalState& bcfs = apply<ChargedFinalState>(event, "backwardCFS");
 72
 73      // Veto this event completely if there are no forward *charged* particles
 74      if (fcfs.empty()) vetoEvent;
 75
 76      // Charged and neutral version
 77      {
 78        // Decide empirically if this is a "hard" or "diffractive" event
 79        bool ishardEvt = false;
 80        for (const Particle& p : ffs.particles()) {
 81          if (p.pT() > 3.0*GeV) { ishardEvt = true; break; }
 82        }
 83        // Decide empirically if this is a "diffractive" event
 84        /// @todo Can be "diffractive" *and* "hard"?
 85        bool isdiffEvt = (bfs.size() == 0);
 86
 87        // Update event-type weight counters
 88        _mbSumW->fill();
 89        (isdiffEvt ? _dfSumW : _ndSumW)->fill();
 90        if (ishardEvt) _hdSumW->fill();
 91
 92        // Plot energy flow
 93        for (const Particle& p : ffs.particles()) {
 94          const double eta = p.eta();
 95          const double energy = p.E();
 96          _tp_totEF_minbias->fill(eta, energy);
 97          _th_totN_minbias->fill(eta);
 98          if (ishardEvt) {
 99            _tp_totEF_hard->fill(eta, energy);
100            _th_totN_hard->fill(eta);
101          }
102          if (isdiffEvt) {
103            _tp_totEF_diff->fill(eta, energy);
104            _th_totN_diff->fill(eta);
105          } else {
106            _tp_totEF_nondiff->fill(eta, energy);
107            _th_totN_nondiff->fill(eta);
108          }
109        }
110      }
111
112
113      // Charged-only version
114      {
115        bool ishardEvt = false;
116        for (const Particle& p : fcfs.particles()) {
117          if (p.pT() > 3.0*GeV) { ishardEvt = true; break; }
118        }
119        // Decide empirically if this is a "diffractive" event
120        /// @todo Can be "diffractive" *and* "hard"?
121        bool isdiffEvt = (bcfs.size() == 0);
122
123        // Update event-type weight counters
124        _mbchSumW->fill();
125        (isdiffEvt ? _dfchSumW : _ndchSumW)->fill();
126        if (ishardEvt) _hdchSumW->fill();
127
128        // Plot energy flow
129        for (const Particle& p : fcfs.particles()) {
130          const double eta = p.eta();
131          const double energy = p.E();
132          _tp_chEF_minbias->fill(eta, energy);
133          _th_chN_minbias->fill(eta);
134          if (ishardEvt) {
135            _tp_chEF_hard->fill(eta, energy);
136            _th_chN_hard->fill(eta);
137          }
138          if (isdiffEvt) {
139            _tp_chEF_diff->fill(eta, energy);
140            _th_chN_diff->fill(eta);
141          } else {
142            _tp_chEF_nondiff->fill(eta, energy);
143            _th_chN_nondiff->fill(eta);
144          }
145        }
146      }
147
148    }
149
150
151    void finalize() {
152      if (_mbSumW->sumW()) {
153        for (size_t i = 1; i < _s_totEF_minbias->numBins()+1; ++i) {
154          double val = 0., err = 0.;
155          if (_tp_totEF_minbias->bin(i).effNumEntries() > 1) {
156            val = _tp_totEF_minbias->bin(i).yMean() * _th_totN_minbias->bin(i).sumW();
157            err = (_tp_totEF_minbias->bin(i).yMean() * _th_totN_minbias->bin(i).errW() +
158                   _tp_totEF_minbias->bin(i).yStdErr() * _th_totN_minbias->bin(i).sumW());
159          }
160          _s_totEF_minbias->bin(i).set(val/_mbSumW->val(), err/_mbSumW->val());
161        }
162      }
163      if (_hdSumW->sumW()) {
164        for (size_t i = 1; i < _s_totEF_hard->numBins()+1; ++i) {
165          double val = 0., err = 0.;
166          if (_tp_totEF_minbias->bin(i).effNumEntries() > 1) {
167            val = _tp_totEF_hard->bin(i).yMean() * _th_totN_hard->bin(i).sumW();
168            err = (_tp_totEF_hard->bin(i).yMean() * _th_totN_hard->bin(i).errW() +
169                   _tp_totEF_hard->bin(i).yStdErr() * _th_totN_hard->bin(i).sumW());
170          }
171          _s_totEF_hard->bin(i).set(val/_hdSumW->val(), err/_hdSumW->val());
172        }
173      }
174      if (_dfSumW->sumW()) {
175        for (size_t i = 1; i < _s_totEF_diff->numBins()+1; ++i) {
176          double val = 0., err = 0.;
177          if (_tp_totEF_diff->bin(i).effNumEntries() > 1) {
178            val = _tp_totEF_diff->bin(i).yMean() * _th_totN_diff->bin(i).sumW();
179            err = (_tp_totEF_diff->bin(i).yMean() * _th_totN_diff->bin(i).errW() +
180                   _tp_totEF_diff->bin(i).yStdErr() * _th_totN_diff->bin(i).sumW());
181          }
182          _s_totEF_diff->bin(1).set(val/_dfSumW->val(), err/_dfSumW->val());
183        }
184      }
185      if (_ndSumW->sumW()) {
186        for (size_t i = 1; i < _s_totEF_nondiff->numBins()+1; ++i) {
187          double val = 0., err = 0.;
188          if (_tp_totEF_nondiff->bin(i).effNumEntries() > 1) {
189            val = _tp_totEF_nondiff->bin(i).yMean() * _th_totN_nondiff->bin(i).sumW();
190            err = (_tp_totEF_nondiff->bin(i).yMean() * _th_totN_nondiff->bin(i).errW() +
191                   _tp_totEF_nondiff->bin(i).yStdErr() * _th_totN_nondiff->bin(i).sumW());
192            _s_totEF_nondiff->bin(i).set(val/_ndSumW->val(), err/_ndSumW->val());
193         }
194        }
195      }
196      if (_mbchSumW->sumW()) {
197        for (size_t i = 1; i < _s_chEF_minbias->numBins()+1; ++i) {
198          double val = 0., err = 0.;
199          if (_tp_chEF_minbias->bin(i).effNumEntries() > 1) {
200            val = _tp_chEF_minbias->bin(i).yMean() * _th_chN_minbias->bin(i).sumW();
201            err = (_tp_chEF_minbias->bin(i).yMean() * _th_chN_minbias->bin(i).errW() +
202                   _tp_chEF_minbias->bin(i).yStdErr() * _th_chN_minbias->bin(i).sumW());
203          }
204          _s_chEF_minbias->bin(i).set(val/_mbchSumW->val(), err/_mbchSumW->val());
205        }
206      }
207      if (_hdchSumW->sumW()) {
208        for (size_t i = 1; i < _s_chEF_hard->numBins()+1; ++i) {
209          double val = 0., err = 0.;
210          if (_tp_chEF_hard->bin(i).effNumEntries() > 1) {
211            val = _tp_chEF_hard->bin(i).yMean() * _th_chN_hard->bin(i).sumW();
212            err = (_tp_chEF_hard->bin(i).yMean() * _th_chN_hard->bin(i).errW() +
213                   _tp_chEF_hard->bin(i).yStdErr() * _th_chN_hard->bin(i).sumW());
214          }
215          _s_chEF_hard->bin(i).set(val/_hdchSumW->val(), err/_hdchSumW->val());
216        }
217      }
218      if (_dfchSumW->sumW()) {
219        for (size_t i = 1; i < _s_chEF_diff->numBins()+1; ++i) {
220          double val = 0., err = 0.;
221          if (_tp_chEF_diff->bin(i).effNumEntries() > 1) {
222            val = _tp_chEF_diff->bin(i).yMean() * _th_chN_diff->bin(i).sumW();
223            err = (_tp_chEF_diff->bin(i).yMean() * _th_chN_diff->bin(i).errW() +
224                   _tp_chEF_diff->bin(i).yStdErr() * _th_chN_diff->bin(i).sumW());
225          }
226          _s_chEF_diff->bin(i).set(val/_dfchSumW->val(), err/_dfchSumW->val());
227        }
228      }
229      if (_ndchSumW->sumW()) {
230        for (size_t i = 1; i < _s_chEF_nondiff->numBins()+1; ++i) {
231          double val = 0., err = 0.;
232          if (_tp_chEF_nondiff->bin(i).effNumEntries() > 1) {
233            val = _tp_chEF_nondiff->bin(i).yMean() * _th_chN_nondiff->bin(i).sumW();
234            err = (_tp_chEF_nondiff->bin(i).yMean() * _th_chN_nondiff->bin(i).errW() +
235                   _tp_chEF_nondiff->bin(i).yStdErr() * _th_chN_nondiff->bin(i).sumW());
236          }
237          _s_chEF_nondiff->bin(i).set(val/_ndchSumW->val(), err/_ndchSumW->val());
238        }
239      }
240    }
241
242
243  private:
244
245    /// @name Histograms and counters
246    ///
247    /// @note Histograms correspond to charged and total EF for each class of events:
248    ///  minimum bias, hard scattering, diffractive enriched and non-diffractive enriched.
249    /// @{
250
251    // Scatters to be filled in finalize with 1/d_eta <N(eta)><E(eta)>
252    Estimate1DPtr _s_totEF_minbias, _s_totEF_hard, _s_totEF_diff, _s_totEF_nondiff;
253    Estimate1DPtr _s_chEF_minbias, _s_chEF_hard, _s_chEF_diff, _s_chEF_nondiff;
254
255    // Temp profiles containing <E(eta)>
256    Profile1DPtr _tp_totEF_minbias, _tp_totEF_hard, _tp_totEF_diff, _tp_totEF_nondiff;
257    Profile1DPtr _tp_chEF_minbias, _tp_chEF_hard, _tp_chEF_diff, _tp_chEF_nondiff;
258
259    // Temp profiles containing <N(eta)>
260    Histo1DPtr _th_totN_minbias, _th_totN_hard, _th_totN_diff, _th_totN_nondiff;
261    Histo1DPtr _th_chN_minbias, _th_chN_hard, _th_chN_diff, _th_chN_nondiff;
262
263    // Sums of weights (~ #events) in each event class
264    CounterPtr _mbSumW, _hdSumW, _dfSumW, _ndSumW;
265    CounterPtr _mbchSumW, _hdchSumW, _dfchSumW, _ndchSumW;
266
267    /// @}
268
269  };
270
271
272  RIVET_DECLARE_PLUGIN(LHCB_2013_I1208105);
273
274}