Rivet analyses

Track-based minimum bias at 8 TeV

Experiment: ATLAS (LHC)

Inspire ID: 1426695

Status: VALIDATED

Authors: - Roman Lysak

References: - Expt page: ATLAS-STDM-2014-19 - Eur.Phys.J. C76 (2016) no.7, 403 - DOI: 10.1140/epjc/s10052-016-4203-9 - arXiv: 1603.02439

Beams: p+ p+

Beam energies: (4000.0, 4000.0)GeV

Run details: - pp QCD interactions at 8 TeV. Diffractive events should be included. Multiple kinematic cuts should not be required.

This paper presents measurements of distributions of charged particles which are produced in proton-proton collisions at a centre-of-mass energy of $\sqrt{s} = 8$ TeV and recorded by the ATLAS detector at the LHC. A special dataset recorded in 2012 with a small number of interactions per beam crossing (below 0.004) and corresponding to an integrated luminosity of 160 μb−1 was used. A minimum-bias trigger was utilised to select a data sample of more than 9 million collision events. The multiplicity, pseudorapidity, and transverse momentum distributions of charged particles are shown in different regions of kinematics and charged-particle multiplicity, including measurements of final states at high multiplicity. The results are corrected for detector effects and are compared to the predictions of various Monte Carlo event generator models which simulate the full hadronic final state.

Source code:ATLAS_2016_I1426695.cc

// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/ChargedFinalState.hh"

namespace Rivet {


  /// @brief Track-based minimum bias at 8 TeV
  class ATLAS_2016_I1426695 : public Analysis {
  public:

    //phase space regions
    enum regionID {
      k_pt100_nch2 = 0,
      k_pt500_nch1,
      k_pt500_nch6,
      k_pt500_nch20,
      k_pt500_nch50,
      kNregions
    };


    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2016_I1426695);

    /// @name Analysis methods
    /// @{

    /// Book histograms and initialise projections before the run
    void init() {

      for (int iR=0; iR < kNregions; ++iR)  {
        book(_sumW[iR], "_sumW" + to_str(iR))       ;
      }

      // Initialise and register projections
      declare(ChargedFinalState(Cuts::abseta < 2.5 && Cuts::pT > 100*MeV), "CFS_100");
      declare(ChargedFinalState(Cuts::abseta < 2.5 && Cuts::pT > 500*MeV), "CFS_500");

      // Book histograms
      for (int iR=0; iR < kNregions; ++iR)  {
        if (iR == k_pt100_nch2 || iR == k_pt500_nch1) {
          book(_hist_nch  [iR],  2 + iR, 1, 1);
          book(_hist_ptnch[iR], 14 + iR, 1, 1);
        }
        book(_hist_pt [iR], 4 + iR, 1, 1);
        book(_hist_eta[iR], 9 + iR, 1, 1);
      }
    }

    void fillPtEtaNch(const Particles particles, int nMin, int iRegion) {

      //skip if event fails multiplicity cut
      int nch =particles.size();
      if (nch < nMin)  return;

      _sumW[iRegion]->fill();

      // Fill nch
      if (iRegion == k_pt100_nch2 || iRegion == k_pt500_nch1) {
        _hist_nch[iRegion]->fill(nch);
      }

      for (const Particle &p : particles) {
      // Loop over particles, fill pT, eta and ptnch
        const double pt  = p.pT()/GeV;
        const double eta = p.eta();

        _hist_pt [iRegion]->fill(pt , 1.0/pt);
        _hist_eta[iRegion]->fill(eta);

        if (iRegion == k_pt100_nch2 || iRegion == k_pt500_nch1) {
          _hist_ptnch[iRegion]->fill(nch, pt);
        }
      } //end loop over particles
    }

    /// Perform the per-event analysis
    void analyze(const Event& event) {

      // Get charged particles, omitting some strange heavies
      const Cut& pcut = (
          (Cuts::abspid!=PID::SIGMAMINUS) && (Cuts::abspid!=PID::SIGMAPLUS) &&
          (Cuts::abspid!=PID::XIMINUS)    && (Cuts::abspid!=PID::OMEGAMINUS));
      const Particles& p_100 = apply<ChargedFinalState>(event, "CFS_100").particles(pcut);
      const Particles& p_500 = apply<ChargedFinalState>(event, "CFS_500").particles(pcut);

      fillPtEtaNch(p_100,  2, 0);
      fillPtEtaNch(p_500,  1, 1);
      fillPtEtaNch(p_500,  6, 2);
      fillPtEtaNch(p_500, 20, 3);
      fillPtEtaNch(p_500, 50, 4);
    }


    void finalize() {

      for (int iR = 0; iR < kNregions; ++iR)  {
        if (_sumW[iR]->val() > 0) {
          if (iR == k_pt100_nch2 || iR == k_pt500_nch1) {
            scale(_hist_nch[iR], 1.0/ *_sumW[iR]);
          }
          scale(_hist_pt [iR], 1.0/ dbl(*_sumW[iR])/TWOPI/5.);
          scale(_hist_eta[iR], 1.0/ *_sumW[iR]);
        }
      }
    }

    /// @}


  private:

    CounterPtr _sumW[kNregions];

    /// @name Histograms
    Histo1DPtr   _hist_nch    [kNregions];
    Histo1DPtr   _hist_pt     [kNregions];
    Histo1DPtr   _hist_eta    [kNregions];
    Profile1DPtr _hist_ptnch  [kNregions];

  };


  RIVET_DECLARE_PLUGIN(ATLAS_2016_I1426695);

}