rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

UA1_1990_I280412

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_I280412.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_I280412 : public Analysis {
 12  public:
 13
 14    /// Constructor
 15    RIVET_DEFAULT_ANALYSIS_CTOR(UA1_1990_I280412);
 16
 17
 18    /// @name Analysis methods
 19    /// @{
 20
 21    /// Book projections and histograms
 22    void init() {
 23      declare(ChargedFinalState((Cuts::abseta < 5.5)), "TriggerFS");
 24      declare(ChargedFinalState((Cuts::abseta < 2.5)), "TrackFS");
 25      const FinalState trkcalofs((Cuts::abseta < 2.5));
 26      declare(MissingMomentum(trkcalofs), "MET25");
 27      const FinalState calofs((Cuts::abseta < 6.0));
 28      declare(MissingMomentum(calofs), "MET60");
 29
 30      if (isCompatibleWithSqrtS(63*GeV)) {
 31        book(_hist_Pt ,8,1,1);
 32      } else if (isCompatibleWithSqrtS(200*GeV)) {
 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*GeV)) {
 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*GeV)) {
 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*GeV)) {
 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*GeV)) {
 95          _hist_Pt->fill(nch, pt/GeV);
 96        }
 97        if (!isCompatibleWithSqrtS(63*GeV)) {
 98          _hist_Esigd3p->fill(pt/GeV, scaled_weight);
 99        }
100        // Also fill for specific dn/deta ranges at 900 GeV
101        if (isCompatibleWithSqrtS(900*GeV, 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*GeV)) {
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*GeV)) {
133        // NB. Ref data is normalised to a fixed value not reproducible from MC.
134        double scale08 = 0., scale40 = 0., scale80 = 0.;
135        if (_hist_Esigd3p08->bin(1).sumW()) {
136          scale08 = 0.933e5*_hist_Esigd3p08->bin(1).dVol()/_hist_Esigd3p08->bin(1).sumW();
137        }
138        scale(_hist_Esigd3p08, scale08);
139        if (_hist_Esigd3p40->bin(1).sumW()) {
140          scale40 = 1.369e5*_hist_Esigd3p40->bin(1).dVol()/_hist_Esigd3p40->bin(1).sumW();
141        }
142        scale(_hist_Esigd3p40, scale40);
143        if (_hist_Esigd3p80->bin(1).sumW()) {
144          scale80 = 1.657e5*_hist_Esigd3p80->bin(1).dVol()/_hist_Esigd3p80->bin(1).sumW();
145        }
146        scale(_hist_Esigd3p80, scale80);
147      }
148    }
149
150    /// @}
151
152
153  private:
154
155    /// @name Weight counters
156    /// @{
157    CounterPtr _sumwTrig; //, _sumwTrig08, _sumwTrig40, _sumwTrig80;
158    /// @}
159
160    /// @name Histogram collections
161    /// @{
162    Histo1DPtr _hist_Nch;
163    Histo1DPtr _hist_Esigd3p;
164    Histo1DPtr _hist_Esigd3p08;
165    Histo1DPtr _hist_Esigd3p40;
166    Histo1DPtr _hist_Esigd3p80;
167    Profile1DPtr _hist_Pt;
168    Profile1DPtr _hist_Etavg;
169    Histo1DPtr _hist_Et;
170    /// @}
171
172  };
173
174
175
176  RIVET_DECLARE_ALIASED_PLUGIN(UA1_1990_I280412, UA1_1990_S2044935);
177
178}