rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

UA1_1990_S2044935

UA1 multiplicities, transverse momenta and transverse energy distributions.
Experiment: UA1 (SPS)
Inspire ID: 280412
Status: VALIDATED
Authors:
  • Andy Buckley
  • Christophe Vaillant
References:
  • Nucl.Phys.B353:261,1990
Beams: p- p+
Beam energies: (31.5, 31.5); (100.0, 100.0); (250.0, 250.0); (450.0, 450.0) GeV
Run details:
  • QCD min bias events at sqrtS = 63, 200, 500 and 900 GeV. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

Particle multiplicities, transverse momenta and transverse energy distributions at the UA1 experiment, at energies of 200, 500 and 900 GeV (with one plot at 63 GeV for comparison). Beam energy must be specified as analysis option "ENERGY" (63, 200, 500 or 900 GeV) when rivet-merge'ing samples.

Source code: UA1_1990_S2044935.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/ChargedFinalState.hh"
  5#include "Rivet/Projections/MissingMomentum.hh"
  6
  7namespace Rivet {
  8
  9
 10  /// UA1 minbias track multiplicities, \f$ p_\perp \f$ and \f$ E_\perp \f$
 11  class UA1_1990_S2044935 : public Analysis {
 12  public:
 13
 14    /// Constructor
 15    RIVET_DEFAULT_ANALYSIS_CTOR(UA1_1990_S2044935);
 16
 17
 18    /// @name Analysis methods
 19    //@{
 20
 21    /// Book projections and histograms
 22    void init() {
 23      declare(ChargedFinalState((Cuts::etaIn(-5.5, 5.5))), "TriggerFS");
 24      declare(ChargedFinalState((Cuts::etaIn(-2.5, 2.5))), "TrackFS");
 25      const FinalState trkcalofs((Cuts::etaIn(-2.5, 2.5)));
 26      declare(MissingMomentum(trkcalofs), "MET25");
 27      const FinalState calofs((Cuts::etaIn(-6.0, 6.0)));
 28      declare(MissingMomentum(calofs), "MET60");
 29
 30      if (isCompatibleWithSqrtS(63)) {
 31        book(_hist_Pt ,8,1,1);
 32      } else if (isCompatibleWithSqrtS(200)) {
 33        book(_hist_Nch ,1,1,1);
 34        book(_hist_Esigd3p ,2,1,1);
 35        book(_hist_Pt ,6,1,1);
 36        book(_hist_Et ,9,1,1);
 37        book(_hist_Etavg ,12,1,1);
 38      } else if (isCompatibleWithSqrtS(500)) {
 39        book(_hist_Nch ,1,1,2);
 40        book(_hist_Esigd3p ,2,1,2);
 41        book(_hist_Et ,10,1,1);
 42        book(_hist_Etavg ,12,1,2);
 43      } else if (isCompatibleWithSqrtS(900)) {
 44        book(_hist_Nch ,1,1,3);
 45        book(_hist_Esigd3p ,2,1,3);
 46        book(_hist_Pt ,7,1,1);
 47        book(_hist_Et ,11,1,1);
 48        book(_hist_Etavg ,12,1,3);
 49        book(_hist_Esigd3p08 ,3,1,1);
 50        book(_hist_Esigd3p40 ,4,1,1);
 51        book(_hist_Esigd3p80 ,5,1,1);
 52      }
 53      book(_sumwTrig, "TMP/sumwTrig");
 54      // book(_sumwTrig08, "TMP/sumwTrig08");
 55      // book(_sumwTrig40, "TMP/sumwTrig40");
 56      // book(_sumwTrig80, "TMP/sumwTrig80");
 57
 58    }
 59
 60
 61    void analyze(const Event& event) {
 62      // Trigger
 63      const FinalState& trigfs = apply<FinalState>(event, "TriggerFS");
 64      unsigned int n_minus(0), n_plus(0);
 65      for (const Particle& p : trigfs.particles()) {
 66        const double eta = p.eta();
 67        if (inRange(eta, -5.5, -1.5)) n_minus++;
 68        else if (inRange(eta, 1.5, 5.5)) n_plus++;
 69      }
 70      MSG_DEBUG("Trigger -: " << n_minus << ", Trigger +: " << n_plus);
 71      if (n_plus == 0 || n_minus == 0) vetoEvent;
 72      _sumwTrig->fill();
 73
 74      // Use good central detector tracks
 75      const FinalState& cfs = apply<FinalState>(event, "TrackFS");
 76      const double Et25 = apply<MissingMomentum>(event, "MET25").scalarEt();
 77      const double Et60 = apply<MissingMomentum>(event, "MET60").scalarEt();
 78      const unsigned int nch = cfs.size();
 79
 80      // Event level histos
 81      if (!isCompatibleWithSqrtS(63)) {
 82        _hist_Nch->fill(nch);
 83        _hist_Et->fill(Et60/GeV);
 84        _hist_Etavg->fill(nch, Et25/GeV);
 85      }
 86
 87      // Particle/track level histos
 88      const double deta = 2 * 5.0;
 89      const double dphi = TWOPI;
 90      const double dnch_deta = nch/deta;
 91      for (const Particle& p : cfs.particles()) {
 92        const double pt = p.pT();
 93        const double scaled_weight = 1.0/(deta*dphi*pt/GeV);
 94        if (!isCompatibleWithSqrtS(500)) {
 95          _hist_Pt->fill(nch, pt/GeV);
 96        }
 97        if (!isCompatibleWithSqrtS(63)) {
 98          _hist_Esigd3p->fill(pt/GeV, scaled_weight);
 99        }
100        // Also fill for specific dn/deta ranges at 900 GeV
101        if (isCompatibleWithSqrtS(900, 1E-3)) {
102          if (inRange(dnch_deta, 0.8, 4.0)) {
103            //_sumwTrig08 ->fill();
104            _hist_Esigd3p08->fill(pt/GeV, scaled_weight);
105          } else if (inRange(dnch_deta, 4.0, 8.0)) {
106            //_sumwTrig40 ->fill();
107            _hist_Esigd3p40->fill(pt/GeV, scaled_weight);
108          } else {
109            //MSG_WARNING(dnch_deta);
110            if (dnch_deta > 8.0) {
111              //_sumwTrig80 ->fill();
112              _hist_Esigd3p80->fill(pt/GeV, scaled_weight);
113            }
114          }
115        }
116      }
117
118    }
119
120
121    void finalize() {
122      if (_sumwTrig->val() <= 0) {
123        MSG_WARNING("No events passed the trigger!");
124        return;
125      }
126      const double xsec = crossSectionPerEvent();
127      if (!isCompatibleWithSqrtS(63)) {
128        scale(_hist_Nch, 2*xsec/millibarn); ///< Factor of 2 for Nch bin widths?
129        scale(_hist_Esigd3p, xsec/millibarn);
130        scale(_hist_Et, xsec/millibarn);
131      }
132      if (isCompatibleWithSqrtS(900)) {
133        // NB. Ref data is normalised to a fixed value not reproducible from MC.
134        const double scale08 =  (_hist_Esigd3p08->bin(0).area() > 0) ?
135          0.933e5/_hist_Esigd3p08->bin(0).height() : 0;
136        scale(_hist_Esigd3p08, scale08);
137        const double scale40 = (_hist_Esigd3p40->bin(0).area() > 0) ?
138          1.369e5/_hist_Esigd3p40->bin(0).height() : 0;
139        scale(_hist_Esigd3p40, scale40);
140        const double scale80 = (_hist_Esigd3p80->bin(0).area() > 0) ?
141          1.657e5/_hist_Esigd3p80->bin(0).height() : 0;
142        scale(_hist_Esigd3p80, scale80);
143      }
144    }
145
146    //@}
147
148
149  private:
150
151    /// @name Weight counters
152    //@{
153    CounterPtr _sumwTrig; //, _sumwTrig08, _sumwTrig40, _sumwTrig80;
154    //@}
155
156    /// @name Histogram collections
157    //@{
158    Histo1DPtr _hist_Nch;
159    Histo1DPtr _hist_Esigd3p;
160    Histo1DPtr _hist_Esigd3p08;
161    Histo1DPtr _hist_Esigd3p40;
162    Histo1DPtr _hist_Esigd3p80;
163    Profile1DPtr _hist_Pt;
164    Profile1DPtr _hist_Etavg;
165    Histo1DPtr _hist_Et;
166    //@}
167
168  };
169
170
171
172  RIVET_DECLARE_ALIASED_PLUGIN(UA1_1990_S2044935, UA1_1990_I280412);
173
174}