Rivet analyses

Azimuthal correlation angles between scattered lepton and leading jet in lepton-proton collisions

Experiment: ZEUS (HERA)

Inspire ID: 2794054

Status: VALIDATED

Authors: - Luke Jones

References: - arXiv: 2406.01430 - DESY-24-070 - Eur. Phys. J. C (2024) 84: 1334

Beams: p+ e-, p+ e+, e+ p+, e- p+

Beam energies: (920.0, 27.5); (920.0, 27.5); (27.5, 920.0); (27.5, 920.0)GeV

Run details: - 27.5 GeV positrons colliding with 920 GeV protons Leading jet 2.5 < pT < 30 GeV Jet pseudorapidity −1.5 < |η| < 1.8

The azimuthal correlation angle between the scattered lepton and leading jets in ZEUS lepton-proton collisions, with beam energies of 920 GeV and 27.5 GeV. The centre-of-mass energy is 318 GeV, elasticity between 0.04 < y < 0.7, and outgoing lepton energy Ee > 10 GeV. Jets are reconstructed in the range −1.5 < |η| < 1.8 using the kt algorithm. The lepton polar angle must be between 140 < θe < 180 degrees.

Source code:ZEUS_2024_I2794054.cc

// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/LeptonFinder.hh"
#include "Rivet/Projections/MissingMomentum.hh"
#include "Rivet/Projections/DirectFinalState.hh"
#include "Rivet/Projections/DISFinalState.hh"
#include "Rivet/Projections/DISKinematics.hh"
#include "Rivet/Projections/Beam.hh"
#include "Rivet/Math/Constants.hh"

namespace Rivet {


  /// @Azimuthal correlation angle between scattered lepton and leading jet at ZEUS
  class ZEUS_2024_I2794054 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(ZEUS_2024_I2794054);
    /// @name Analysis methods

    /// @author Luke Jones


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

      // Initialise and register projections
      declare(FinalState(), "FS");
      declare(DISFinalState(DISFrame::LAB), "DISFS");
      declare(FastJets(DISFinalState(DISFrame::LAB), fastjet::JetAlgorithm::kt_algorithm,
              fastjet::RecombinationScheme::Et_scheme, 1.0), "DISFSJets");
      const DISLepton dl;
      declare(dl, "Lepton");
      declare(DISKinematics(), "Kinematics");

      // Booking all d sigma / d phi graphs
      for (size_t ih = 0; ih < 19; ++ih) {
        book(_h_dsigdphi[ih], ih+1, 1, 1);
      }
    }

    void analyze(const Event& event) {

      // Get the DIS Kinematics
      const DISKinematics& dk = apply<DISKinematics>(event, "Kinematics");
      if ( dk.failed() ) vetoEvent;
      const int orientation = dk.orientation();
      double y = dk.y();
      double Q2  = dk.Q2();

      //  Momentum of scattered lepton
      const DISLepton& dl = apply<DISLepton>(event,"Lepton");
      if ( dl.failed() )  vetoEvent;
      const FourMomentum leptonMom = dl.out();
      const double enel = leptonMom.E();
      const double thel = leptonMom.angle(dk.beamHadron().mom())/degree;

      // Jet Pseudorapidity
      double etamin = -1.5;
      double etamax = 1.8;
      if (orientation  < 0) {
        etamin = -1.8;
        etamax = 1.5;
      }

      // Basic kinematic cuts
      if (!inRange(Q2, 10, 350)) vetoEvent;
      if (!inRange(y, 0.04, 0.7)) vetoEvent;
      if (enel < 10) vetoEvent;
      if (thel < 140.0 || thel > 180.0) vetoEvent;  // Cut on lepton polar angle

      const Jets jets = apply<FastJets>(event, "DISFSJets").jets(Cuts::Et > 2.5*GeV &&
                                                                 Cuts::Et < 30*GeV &&
                                                                 Cuts::etaIn(etamin, etamax), cmpMomByEt);
      double dPhi2 = 0.0;
      double dPhi3 = 0.0;
      if (jets.size() < 1) vetoEvent;

      const Jet& firstJet = jets[0];
      const FourMomentum jetMom = firstJet.mom();

      if (jets.size()  >= 2) {
        dPhi2 = deltaPhi(leptonMom, jetMom);
      }
      if (jets.size()  >= 3) {
        dPhi3 = deltaPhi(leptonMom, jetMom);
      }

      //Azimuthal angle calculations
      double dPhi = deltaPhi(leptonMom, jetMom);

      // Fill Histograms
      _h_dsigdphi[0]->fill(dPhi);

      if (firstJet.pT() >  2.5*GeV && firstJet.pT() < 7*GeV)  _h_dsigdphi[1]->fill(dPhi);
      if (firstJet.pT() >  2.5*GeV && firstJet.pT() < 7*GeV && jets.size() >= 2) _h_dsigdphi[2]->fill(dPhi2);
      if (firstJet.pT() >  2.5*GeV && firstJet.pT() < 7*GeV && jets.size() >= 3) _h_dsigdphi[3]->fill(dPhi3);
      if (firstJet.pT() >  7*GeV && firstJet.pT() < 12*GeV) _h_dsigdphi[4]->fill(dPhi);
      if (firstJet.pT() >  7*GeV && firstJet.pT() < 12*GeV && jets.size() >= 2)  _h_dsigdphi[5]->fill(dPhi2);
      if (firstJet.pT() >  7*GeV && firstJet.pT() < 12*GeV && jets.size() >= 3)  _h_dsigdphi[6]->fill(dPhi3);
      if (firstJet.pT() >  12*GeV && firstJet.pT() < 30*GeV) _h_dsigdphi[7]->fill(dPhi);
      if (firstJet.pT() >  12*GeV && firstJet.pT() < 30*GeV && jets.size() >= 2) _h_dsigdphi[8]->fill(dPhi2);
      if (firstJet.pT() >  12*GeV && firstJet.pT() < 30*GeV && jets.size() >= 3) _h_dsigdphi[9]->fill(dPhi3);

      // Table 5.1 start here
      if (Q2  > 10 && Q2 < 50) _h_dsigdphi[10]->fill(dPhi);
      if (Q2  > 10 && Q2 < 50 && jets.size() >= 2) _h_dsigdphi[11]->fill(dPhi2);
      if (Q2  > 10 && Q2 < 50 && jets.size() >= 3) _h_dsigdphi[12]->fill(dPhi3);

      // Table 6.1
      if (Q2  > 50 && Q2 < 100) _h_dsigdphi[13]->fill(dPhi);
      if (Q2  > 50 && Q2 < 100 && jets.size() >= 2) _h_dsigdphi[14]->fill(dPhi2);
      if (Q2  > 50 && Q2 < 100 && jets.size() >= 3) _h_dsigdphi[15]->fill(dPhi3);

      //Table 7.1
      if (Q2  > 100 && Q2 < 350) _h_dsigdphi[16]->fill(dPhi);
      if (Q2  > 100 && Q2 < 350 && jets.size() >= 2) _h_dsigdphi[17]->fill(dPhi2);
      if (Q2  > 100 && Q2 < 350 && jets.size() >= 3) _h_dsigdphi[18]->fill(dPhi3);

    }

    /// Normalise histograms etc., after the run
    void finalize() {
      scale(_h_dsigdphi,crossSection() / picobarn / sumOfWeights());
    }

    /// @}

    Histo1DPtr _h_dsigdphi[19];

  };


  RIVET_DECLARE_PLUGIN(ZEUS_2024_I2794054);

}