rivet is hosted by Hepforge, IPPP Durham

## Rivet analyses reference

### ALICE_2012_I1181770

Measurement of inelastic, single- and double-diffraction cross sections in proton--proton collisions at the LHC with ALICE
Experiment: ALICE (LHC)
Inspire ID: 1181770
Status: VALIDATED
Authors:
• Martin Poghosyan
• Sercan Sen
• Burak Bilki
• Andy Buckley
References:
Beams: p+ p+
Beam energies: (450.0, 450.0); (1380.0, 1380.0); (3500.0, 3500.0) GeV
Run details:
• Inelastic events (non-diffractive and inelastic diffractive).

Measurements of cross-sections of inelastic and diffractive processes in proton-proton collisions at $\sqrt{s} = 900$, 2760 and 7000 GeV. The fractions of diffractive processes in inelastic collisions were determined from a study of gaps in charged particle pseudorapidity distributions. Single-diffractive events are selected with $M_{X} < 200\;\text{GeV}/c^2$ and double-diffractive events defined as NSD events with $\Delta\eta > 3$. To measure the inelastic cross-section, beam properties were determined with van der Meer scans using a simulation of diffraction adjusted to data. Note that these are experimental approximations to theoretical concepts -- it is not totally clear whether the data point values are model-independent.

Source code: ALICE_2012_I1181770.cc
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 // -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/ChargedFinalState.hh" namespace Rivet { class ALICE_2012_I1181770 : public Analysis { public: ALICE_2012_I1181770() : Analysis("ALICE_2012_I1181770") { } void init() { // Projection setup declare(ChargedFinalState(), "CFS"); // Book (energy-specific) histograms int isqrts = -1; if (fuzzyEquals(sqrtS()/GeV, 900, 1E-3)) isqrts = 1; else if (fuzzyEquals(sqrtS()/GeV, 2760, 1E-3)) isqrts = 2; else if (fuzzyEquals(sqrtS()/GeV, 7000, 1E-3)) isqrts = 3; assert(isqrts > 0); _h_frac_sd_inel = bookScatter2D(1, 1, isqrts); _h_frac_dd_inel = bookScatter2D(2, 1, isqrts); _h_xsec_sd = bookHisto1D (3, 1, isqrts); _h_xsec_dd = bookHisto1D (4, 1, isqrts); _h_xsec_inel = bookHisto1D (5, 1, isqrts); } void analyze(const Event& event) { const ChargedFinalState& cfs = apply(event, "CFS"); if (cfs.size() < 2) vetoEvent; // need at least two particles to calculate gaps const double weight = event.weight(); // Fill INEL plots for each event _h_xsec_inel->fill(sqrtS()/GeV, weight); // Identify particles with most positive/most negative rapidities const Particles particlesByRap = cfs.particles(cmpMomByRap); const Particle pslowest = particlesByRap.front(); const Particle pfastest = particlesByRap.back(); // Find gap sizes const Particles particlesByEta = cfs.particles(cmpMomByEta); // sorted from minus to plus const size_t num_particles = particlesByEta.size(); vector gaps; for (size_t ip = 1; ip < num_particles; ++ip) { const Particle& p1 = particlesByEta[ip-1]; const Particle& p2 = particlesByEta[ip]; const double gap = p2.eta() - p1.eta(); assert(gap >= 0); gaps.push_back(gap); } // First, last, and largest gaps const double gapmax = *max_element(gaps.begin(), gaps.end()); const double gapbwd = gaps.front(); const double gapfwd = gaps.back(); // Mx calculation FourMomentum p4lead; if (pslowest.pid() == PID::PROTON && pfastest.pid() == PID::PROTON) { p4lead = (fabs(pslowest.rapidity()) > fabs(pfastest.rapidity())) ? pslowest.momentum() : pfastest.momentum(); } else if (pslowest.pid() == PID::PROTON) { p4lead = pslowest.momentum(); } else if (pfastest.pid() == PID::PROTON) { p4lead = pfastest.momentum(); } const double Mx = sqrt( (sqrtS()-p4lead.E()-p4lead.p3().mod()) * (sqrtS()-p4lead.E()+p4lead.p3().mod()) ); // Fill SD (and escape) if Mx is sufficiently low if (Mx < 200*GeV) { _h_xsec_sd->fill(sqrtS()/GeV, weight); return; } // Also remove SD-like events in NSD events if (fuzzyEquals(gapbwd, gapmax) || fuzzyEquals(gapfwd, gapmax)) vetoEvent; // Fill DD plots if (gapmax > 3) _h_xsec_dd->fill(sqrtS()/GeV, weight); } void finalize() { // get the ratio plots: SD/inel, DD/inel divide(_h_xsec_sd , _h_xsec_inel, _h_frac_sd_inel); divide(_h_xsec_sd , _h_xsec_inel, _h_frac_dd_inel); scale(_h_xsec_sd, crossSection()/millibarn/sumOfWeights()); scale(_h_xsec_dd, crossSection()/millibarn/sumOfWeights()); scale(_h_xsec_inel, crossSection()/millibarn/sumOfWeights()); } private: Scatter2DPtr _h_frac_sd_inel; Scatter2DPtr _h_frac_dd_inel; Histo1DPtr _h_xsec_sd; Histo1DPtr _h_xsec_dd; Histo1DPtr _h_xsec_inel; }; // Hook for the plugin system DECLARE_RIVET_PLUGIN(ALICE_2012_I1181770); }