Rivet analyses

Drell Yan measurements $pp +- +X $ at $\sqrt{s} = 44$ and 62 GeV at CERN ISR

Experiment: R209 (ISR CERN)

Inspire ID: 168182

Status: VALIDATED

Authors: - Hannes Jung

References: - Phys. Rev. Lett., 48(1982), 302 - DOI: 10.1103/PhysRevLett.48.302

Beams: p+ p+

Beam energies: (22.0, 22.0); (31.0, 31.0)GeV

Run details: - Run in pp mode (center-of-mass frame).

Measurements of $pp +- +X $ at $\sqrt{s} = 44$ and 62 GeV are compared. The data are #taken under identical conditions utilizing clean proton-proton collisions from the CERN intersecting storage rings and confirm scaling to 5%. Data encoded by Mike Whalley, read from the figure in the paper. Note also, cross sections are quoted in [nb]. The errors shown are statistical only. There is an additional 15% overall systematic uncertainty.

Source code:R209_1982_I168182.cc

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

namespace Rivet {


  /// Drell Yan measurements $pp \to \mu^+\mu^- +X $ at $\sqrt{s} = 44$ and $62$ GeV at CERN ISR
  class R209_1982_I168182 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(R209_1982_I168182);

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

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

      // Initialise and register projections
      DileptonFinder zfinder(91.2*GeV, 0.1, Cuts::abseta < 10. && Cuts::abspid == PID::MUON,
                             Cuts::massIn(3.5*GeV, 18.0*GeV), LeptonOrigin::PROMPT, PhotonOrigin::NONE);
      declare(zfinder, "DileptonFinder");

      // Book histograms
      for (double eVal : allowedEnergies()) {
        const string en = toString(round(eVal));
        if (isCompatibleWithSqrtS(eVal))  _sqs = en;
        if (en == "44"s) {
          book(_h[en+"M"], 1, 1, 2);
        }
        else {
          book(_h[en+"M"],  1, 1, 1);
          book(_h[en+"pT"], 2, 1, 1);
        }
        const int Nbin = 50;
        book(_n[en+"m"],  "DiMuon_mass_"+en, Nbin,  0.0, 30.0);
        book(_n[en+"pT"], "DiMuon_pT_"+en,   Nbin,  0.0, 20.0);
        book(_n[en+"y"],  "DiMuon_y_"+en,    Nbin, -8.0,  8.0);
        book(_n[en+"xF"], "DiMuon_xF_"+en,   Nbin, -1.5,  1.5);
      }
      raiseBeamErrorIf(_sqs.empty());
    }


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

      const DileptonFinder& zfinder = apply<DileptonFinder>(event, "DileptonFinder");
      if (zfinder.particles().size() >= 1) {

        double Zmass = zfinder.bosons()[0].mom().mass()/GeV;
        double Zpt   = zfinder.bosons()[0].mom().pT()/GeV;
        double Zpl   = zfinder.bosons()[0].mom().pz()/GeV;
        double Zy    = zfinder.bosons()[0].mom().rap();
        double xf = 2.*Zpl/sqrtS() ;

        _n[_sqs+"xF"]->fill(xf);
        _n[_sqs+"m"]->fill(Zmass/GeV);
        _n[_sqs+"pT"]->fill(Zpt);
        _n[_sqs+"y"]->fill(Zy);
        if (Zmass > 0) _h[_sqs+"M"]->fill(Zmass);
        if (_sqs == "62"s) {
          if (Zmass > 5. && Zmass < 8.) {
            if (Zpt > 0)  _h[_sqs+"pT"]->fill(Zpt, 1.0/2.0/Zpt);
          }
        }
      }
    }


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

    /// @}


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

    /// Energy comparison tolerance
    string _sqs = "";

  };


  RIVET_DECLARE_PLUGIN(R209_1982_I168182);

}