Rivet analyses

Pseudorapidity dependence of the total transverse energy at 7 TeV

Experiment: ATLAS (LHC 7TeV)

Inspire ID: 1183818

Status: VALIDATED

Authors: - Robindra Prabhu - Peter Wijeratne - Roman Lysak

References: - arXiv: 1208.6256

Beams: p+ p+

Beam energies: (3500.0, 3500.0)GeV

Run details: - pp QCD interactions at 7 TeV, min bias and di-jet events

The measurement of the sum of the transverse energy of particles as a function of particle pseudorapidity, eta, in proton-proton collisions at a centre-of-mass energy, $\sqrt{s} = 7~\TeV$ using the ATLAS detector at the Large Hadron Collider. The measurements are performed in the region |η| < 4.8 for two event classes: those requiring the presence of particles with a low transverse momentum and those requiring particles with a significant transverse momentum (dijet events where both jets have ET > 20 GeV). In the second dataset measurements are made in the region transverse to the hard scatter.

Source code:ATLAS_2012_I1183818.cc

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


/// @author Peter Wijeratne <paw@hep.ucl.ac.uk>
/// @author Robindra Prabhu <prabhu@cern.ch>
namespace Rivet {

  // A very basic analysis sensitive to ET flow in minbias and dijet events
  class ATLAS_2012_I1183818 : public Analysis {

  public:

    ATLAS_2012_I1183818()
        : Analysis("ATLAS_2012_I1183818") { }


  public:

    void init() {

      const FinalState cnfs((Cuts::etaIn(-4.8, 4.8)));
      const ChargedFinalState cfs((Cuts::etaIn(-2.5, 2.5) && Cuts::pT >= 250 * MeV));
      declare(cnfs, "FS");
      declare(cfs, "CFS");

      const FastJets jetsAntiKt4(cnfs, JetAlg::ANTIKT, 0.4);
      declare(jetsAntiKt4, "AntiKt4Jets");

      // ------- MINBIAS HISTOGRAMS --------
      //
      // MB event counter
      book(m_chargedEvents, "m_chargedEvents_MB");

      book(_h_ETflowEta, 1, 1, 1);
      book(_h_SumETbin1, 3, 1, 1);
      book(_h_SumETbin2, 4, 1, 1);
      book(_h_SumETbin3, 5, 1, 1);
      book(_h_SumETbin4, 6, 1, 1);
      book(_h_SumETbin5, 7, 1, 1);
      book(_h_SumETbin6, 8, 1, 1);

      // ------- DIJET HISTOGRAMS --------
      //
      // Dijet event counter
      book(m_events_dijets, "m_chargedEvents_dijets");

      // sumET
      book(_h_transETflowEta, 2, 1, 1);
      book(_h_transSumETbin1, 9, 1, 1);
      book(_h_transSumETbin2, 10, 1, 1);
      book(_h_transSumETbin3, 11, 1, 1);
      book(_h_transSumETbin4, 12, 1, 1);
      book(_h_transSumETbin5, 13, 1, 1);
      book(_h_transSumETbin6, 14, 1, 1);
    }


    void analyze(const Event& event) {

      const FinalState& cfs = apply<FinalState>(event, "CFS");

      bool isCharged = false;
      if (cfs.size() >= 2) { // event selection: > 2 charged particles with pT > 250.MeV and |eta| < 2.5
        isCharged = true;
        m_chargedEvents->fill();
      }

      const FinalState& cnfs = apply<FinalState>(event, "FS");

      Particles particles;
      for (const Particle& p : cnfs.particles()) {
        // enforce truth selection representing detected particle sensitivity
        double pp = p.p3().mod();
        if (PID::charge3(p.pid()) != 0 && pp < 0.5 * GeV) continue;
        if (PID::charge3(p.pid()) == 0 && pp < 0.2 * GeV) continue;

        particles.push_back(p);
      }


      // get jets
      const FastJets& jetsAntiKt4 = apply<FastJets>(event, "AntiKt4Jets");
      const Jets& jets = jetsAntiKt4.jetsByPt(Cuts::pT > 20 * GeV);

      // initialise sumET variables
      double sumETbin1 = 0;
      double sumETbin2 = 0;
      double sumETbin3 = 0;
      double sumETbin4 = 0;
      double sumETbin5 = 0;
      double sumETbin6 = 0;

      // if (passes event selection)
      if (isCharged) {

        for (const Particle& p : particles) {

          ///calculate variables
          double ET = p.Et() / GeV;
          double eta = p.abseta();

          // fill histograms
          _h_ETflowEta->fill(eta, ET);

          if (eta < 0.8)
            sumETbin1 += ET;
          else if (eta < 1.6)
            sumETbin2 += ET;
          else if (eta < 2.4)
            sumETbin3 += ET;
          else if (eta < 3.2)
            sumETbin4 += ET;
          else if (eta < 4.0)
            sumETbin5 += ET;
          else if (eta <= 4.8)
            sumETbin6 += ET;

        } // end of for

        _h_SumETbin1->fill(sumETbin1);
        _h_SumETbin2->fill(sumETbin2);
        _h_SumETbin3->fill(sumETbin3);
        _h_SumETbin4->fill(sumETbin4);
        _h_SumETbin5->fill(sumETbin5);
        _h_SumETbin6->fill(sumETbin6);
      }

      // --- do dijet analysis ---

      if (jets.size() >= 2 &&          // require at least two jets
          jets[0].Et() >= 20. * GeV && // require two leading jets to pass ET cuts
          jets[1].Et() >= 20. * GeV && fabs(jets[0].eta()) < 2.5 && // require leading jets to be central
          fabs(jets[1].eta()) < 2.5 && deltaPhi(jets[0], jets[1]) > 2.5 && // require back-to-back topology
          jets[1].Et() / jets[0].Et() >= 0.5) {                            //require ET-balance

        // found an event that satisfies dijet selection, now fill histograms...
        // initialise dijet sumET variables
        double trans_sumET_bin1 = 0.;
        double trans_sumET_bin2 = 0.;
        double trans_sumET_bin3 = 0.;
        double trans_sumET_bin4 = 0.;
        double trans_sumET_bin5 = 0.;
        double trans_sumET_bin6 = 0.;

        m_events_dijets->fill();

        // loop over all particles and check their relation to leading jet
        for (const Particle& particle : particles) {

          // calculate variables
          double dPhi = deltaPhi(jets[0], particle.momentum());
          double ET = particle.Et() / GeV;
          double eta = fabs(particle.eta());

          // Transverse region
          if (dPhi > 1. / 3. * M_PI && dPhi < 2. / 3. * M_PI) {
            _h_transETflowEta->fill(eta, ET);
            if (eta < 0.8) {
              trans_sumET_bin1 += ET;
            }
            else if (eta < 1.6) {
              trans_sumET_bin2 += ET;
            }
            else if (eta < 2.4) {
              trans_sumET_bin3 += ET;
            }
            else if (eta < 3.2) {
              trans_sumET_bin4 += ET;
            }
            else if (eta < 4.0) {
              trans_sumET_bin5 += ET;
            }
            else if (eta <= 4.8) {
              trans_sumET_bin6 += ET;
            }
          }

        } // end loop over particles

        _h_transSumETbin1->fill(trans_sumET_bin1);
        _h_transSumETbin2->fill(trans_sumET_bin2);
        _h_transSumETbin3->fill(trans_sumET_bin3);
        _h_transSumETbin4->fill(trans_sumET_bin4);
        _h_transSumETbin5->fill(trans_sumET_bin5);
        _h_transSumETbin6->fill(trans_sumET_bin6);
      } // end of dijet selection cuts
    }


    void finalize() {
      /// several scale factors here:
      /// 1. nEvents (m_chargedEvents)
      /// 2. phase-space (2*M_PI)
      /// 3. double binning due to symmetrisation (2)
      scale(_h_ETflowEta, 1. / m_chargedEvents->val() / (4. * M_PI));
      scale(_h_SumETbin1, 1. / m_chargedEvents->val());
      scale(_h_SumETbin2, 1. / m_chargedEvents->val());
      scale(_h_SumETbin3, 1. / m_chargedEvents->val());
      scale(_h_SumETbin4, 1. / m_chargedEvents->val());
      scale(_h_SumETbin5, 1. / m_chargedEvents->val());
      scale(_h_SumETbin6, 1. / m_chargedEvents->val());

      //Dijet analysis

      // Dijet scale factors:
      //1. number of events passing dijet selection
      //2. phase-space: 1. / 2/3*M_PI
      //3. double binning due to symmetrisation in |eta| plots : 1/2
      scale(_h_transETflowEta, 1. / m_events_dijets->val() * 1. / (4. / 3. * M_PI));
      scale(_h_transSumETbin1, 1. / m_events_dijets->val());
      scale(_h_transSumETbin2, 1. / m_events_dijets->val());
      scale(_h_transSumETbin3, 1. / m_events_dijets->val());
      scale(_h_transSumETbin4, 1. / m_events_dijets->val());
      scale(_h_transSumETbin5, 1. / m_events_dijets->val());
      scale(_h_transSumETbin6, 1. / m_events_dijets->val());
    }

  private:

    // Event counts
    CounterPtr m_chargedEvents;
    CounterPtr m_events_dijets;

    // Minbias-analysis: variable + histograms
    Histo1DPtr _h_ETflowEta;
    Histo1DPtr _h_SumETbin1;
    Histo1DPtr _h_SumETbin2;
    Histo1DPtr _h_SumETbin3;
    Histo1DPtr _h_SumETbin4;
    Histo1DPtr _h_SumETbin5;
    Histo1DPtr _h_SumETbin6;

    // Transverse region
    Histo1DPtr _h_transETflowEta;
    Histo1DPtr _h_transSumETbin1;
    Histo1DPtr _h_transSumETbin2;
    Histo1DPtr _h_transSumETbin3;
    Histo1DPtr _h_transSumETbin4;
    Histo1DPtr _h_transSumETbin5;
    Histo1DPtr _h_transSumETbin6;
  };


  RIVET_DECLARE_PLUGIN(ATLAS_2012_I1183818);

}