Rivet analyses


title: ZEUS_2003_I613625

Dijet angular distributions in photoproduction of charm

Experiment: ZEUS (HERA)

Inspire ID: 613625

Status: VALIDATED

Authors: - Vithyaban Anjelo Narendra

References: - Phys.Lett.B 565 (2003) 87-101 - arxiv:hep-ex/0302025

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

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

Run details: - $e^{\pm} p$ deep inelastic scattering with $p$ at 920~GeV, $e^{\pm}$ at 27.5 GeV \to $\sqrt{s} = 318~\GeV$

Dijet angular distributions of photoproduction events in which a $D^{\ast\pm}$ meson is produced in association with one of two energetic jets have been measured with the ZEUS detector at HERA, using an integrated luminosity of 120 pb$^{-1}$. Differential cross sections as a function of the angle between the charm-jet and the proton-beam direction in the dijet rest frame have been measured for samples enriched in direct or resolved photon events. The results are compared with predictions from leading-order parton-shower Monte Carlo models and with next-to-leading-order QCD calculations. The angular distributions show clear evidence for the existence of charm originating from the photon.

Source code:ZEUS_2003_I613625.cc

```c++ // -- C++ --

include "Rivet/Analysis.hh"

include "Rivet/Projections/DISFinalState.hh"

include "Rivet/Projections/FastJets.hh"

include "Rivet/Projections/FinalState.hh"

include "Rivet/Projections/UnstableParticles.hh"

namespace Rivet {

/// @brief Dijet angular distributions in photoproduction of charm class ZEUS_2003_I613625 : public Analysis { public:

/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(ZEUS_2003_I613625);


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

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

  // Projections
  const DISFinalState dfs(DISFrame::LAB);
  declare(dfs, "dfs");

  declare(FastJets(dfs, JetAlg::KT, 1.0), "Jets");

  declare(UnstableParticles(Cuts::abspid == 413), "DStars");

  // Table 1 T1, F2
  book(_h["X_Obs_Gamma"], 1, 1, 1);

  // Table 2 T2, F3
  book(_h["X_Obs_Proton"], 2, 1, 1);

  // Table 3 T3, F4
  book(_h["abs_cos_theta_res"], 3, 1, 1);
  book(_h["abs_cos_theta_dir"], 3, 1, 2);

  // Table 4
  book(_h["cos_theta_res"], 4, 1, 1);
  book(_h["cos_theta_dir"], 4, 1, 2);
}


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

  // DIS Kinematics & Warnings
  const DISKinematics& kin = apply<DISFinalState>(event, "dfs").kinematics();
  if (kin.failed()) vetoEvent;

  const double Q2 = kin.Q2();
  const double W = sqrt(kin.W2());
  const double y = kin.y();

  // Kinematic cuts on virtuality and inelasticity.
  if (Q2 >= 1 * GeV2) vetoEvent;
  if (!inRange(W, 130 * GeV, 280 * GeV)) vetoEvent;
  if (!inRange(y, 0.19, 0.87)) vetoEvent; // from the HZTOOL

  const int orientation = kin.orientation();

  // Jets
  const Jets jets = apply<FastJets>(event, "Jets").jetsByPt(Cuts::abseta < 2.4 && Cuts::pT > 5 * GeV);
  if (jets.size() < 2) vetoEvent;

  // Vector of DStars
  const Particles dstars = apply<ParticleFinder>(event, "DStars")
                               .particles(Cuts::pT > 3 * GeV && Cuts::abseta < 1.5);

  // Veto if no DStars
  if (dstars.empty()) vetoEvent;

  // Define leading jets
  const double dr1 = deltaR(jets[0], dstars[0]);
  const double dr2 = deltaR(jets[1], dstars[0]);
  if (dr1 >= 1.0 && dr2 >= 1.0) vetoEvent;
  const Jet& j1 = jets[dr1 < dr2 ? 0 : 1];
  const Jet& j2 = jets[dr1 < dr2 ? 1 : 0];

  // Define jet eta (with orientations)
  const double eta1 = orientation * j1.eta(), eta2 = orientation * j2.eta();
  const double phi1 = orientation * j1.phi(), phi2 = orientation * j2.phi();

  // Same definitions issue as the 2000 ZEUS paper, where the definition
  // is actually a sum over all jet energies and pseudorapities, rather than 2
  const double x_gamma = (j1.Et() * exp(-eta1) + j2.Et() * exp(-eta2))
      / (2 * kin.y() * kin.beamLepton().E());

  const double x_proton = (j1.Et() * exp(eta1) + j2.Et() * exp(eta2)) / (2 * kin.beamHadron().E());

  // Define cos_theta_star
  const double cos_theta = tanh(0.5 * (eta1 - eta2));

  // Define Mjj (using Et mean here as I am not certain what Et jet is supposed to be) check!!
  //const double mjj = 2.0 * j1.Et() * j2.Et() / sqrt( 1.0 - sqr(cos_theta) );
  const double mjj = sqrt(2.0 * j1.Et() * j2.Et() * (cosh(eta1 - eta2) - cos(phi1 - phi2)));

  //cut with Mjj
  if (mjj < 18 * GeV) vetoEvent;

  // Define eta_bar
  const double eta_bar = 0.5 * (eta1 + eta2);

  // eta_bar cut
  if (abs(eta_bar) > 0.7) vetoEvent;

  _h["X_Obs_Gamma"]->fill(x_gamma);
  _h["X_Obs_Proton"]->fill(x_proton);
  if (x_gamma < 0.75) {
    _h["abs_cos_theta_res"]->fill(abs(cos_theta));
    _h["cos_theta_res"]->fill(cos_theta);
  }
  else {
    _h["abs_cos_theta_dir"]->fill(abs(cos_theta));
    _h["cos_theta_dir"]->fill(cos_theta);
  }
}


/// Normalise histograms etc., after the run
void finalize() {
  scale(_h, crossSection() / nanobarn / sumW());
}

/// @}


/// @name Histograms
map<string, Histo1DPtr> _h;
/// @{

};

RIVET_DECLARE_PLUGIN(ZEUS_2003_I613625);

} ```