Rivet analyses
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.
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).
Source
code:UA1_1990_I280412.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/ChargedFinalState.hh"
#include "Rivet/Projections/MissingMomentum.hh"
namespace Rivet {
/// UA1 minbias track multiplicities, \f$ p_\perp \f$ and \f$ E_\perp \f$
class UA1_1990_I280412 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(UA1_1990_I280412);
/// @name Analysis methods
/// @{
/// Book projections and histograms
void init() {
declare(ChargedFinalState(Cuts::abseta < 5.5), "TriggerFS");
declare(ChargedFinalState(Cuts::abseta < 2.5), "TrackFS");
const FinalState trkcalofs(Cuts::abseta < 2.5);
declare(MissingMomentum(trkcalofs), "MET25");
const FinalState calofs(Cuts::abseta < 6.0);
declare(MissingMomentum(calofs), "MET60");
for (double eVal : allowedEnergies()) {
const string en = toString(round(eVal));
if (isCompatibleWithSqrtS(eVal)) _sqs = en;
if (en == "63"s) book(_p[en+"Pt"], 8, 1, 1);
else if (en == "200"s) {
book(_h[en+"Nch"], 1, 1, 1);
book(_h[en+"Esigd3p"], 2, 1, 1);
book(_p[en+"Pt"], 6, 1, 1);
book(_h[en+"Et"], 9, 1, 1);
book(_p[en+"Etavg"], 12, 1, 1);
}
else if (en == "500"s) {
book(_h[en+"Nch"], 1, 1, 2);
book(_h[en+"Esigd3p"], 2, 1, 2);
book(_h[en+"Et"], 10, 1, 1);
book(_p[en+"Etavg"], 12, 1, 2);
}
else if (en == "900"s) {
book(_h[en+"Nch"], 1, 1, 3);
book(_h[en+"Esigd3p"], 2, 1, 3);
book(_p[en+"Pt"], 7, 1, 1);
book(_h[en+"Et"], 11, 1, 1);
book(_p[en+"Etavg"], 12, 1, 3);
book(_h[en+"Esigd3p08"], 3, 1, 1);
book(_h[en+"Esigd3p40"], 4, 1, 1);
book(_h[en+"Esigd3p80"], 5, 1, 1);
}
book(_c[en], "TMP/sumwTrig"+en);
}
raiseBeamErrorIf(_sqs.empty());
}
void analyze(const Event& event) {
// Trigger
const FinalState& trigfs = apply<FinalState>(event, "TriggerFS");
unsigned int n_minus(0), n_plus(0);
for (const Particle& p : trigfs.particles()) {
const double eta = p.eta();
if (inRange(eta, -5.5, -1.5)) n_minus++;
else if (inRange(eta, 1.5, 5.5)) n_plus++;
}
if (n_plus == 0 || n_minus == 0) vetoEvent;
_c[_sqs]->fill();
// Use good central detector tracks
const FinalState& cfs = apply<FinalState>(event, "TrackFS");
const double Et25 = apply<MissingMomentum>(event, "MET25").scalarEt();
const double Et60 = apply<MissingMomentum>(event, "MET60").scalarEt();
const unsigned int nch = cfs.size();
// Event level histos
if (_sqs != "63"s) {
_h[_sqs+"Nch"]->fill(nch);
_h[_sqs+"Et"]->fill(Et60/GeV);
_p[_sqs+"Etavg"]->fill(nch, Et25/GeV);
}
// Particle/track level histos
const double deta = 2 * 5.0;
const double dphi = TWOPI;
const double dnch_deta = nch/deta;
for (const Particle& p : cfs.particles()) {
const double pt = p.pT();
const double scaled_weight = 1.0/(deta*dphi*pt/GeV);
if (_sqs != "500"s) _p[_sqs+"Pt"]->fill(nch, pt/GeV);
if (_sqs != "63"s) _h[_sqs+"Esigd3p"]->fill(pt/GeV, scaled_weight);
// Also fill for specific dn/deta ranges at 900 GeV
if (_sqs == "900"s) {
if (inRange(dnch_deta, 0.8, 4.0)) {
_h[_sqs+"Esigd3p08"]->fill(pt/GeV, scaled_weight);
} else if (inRange(dnch_deta, 4.0, 8.0)) {
_h[_sqs+"Esigd3p40"]->fill(pt/GeV, scaled_weight);
} else if (dnch_deta > 8.0) {
_h[_sqs+"Esigd3p80"]->fill(pt/GeV, scaled_weight);
}
}
}
}
void finalize() {
for (const auto& item : _c) {
if (isZero(item.second->val())) {
MSG_DEBUG("No events passed the trigger!");
continue;
}
const double sf = crossSectionPerEvent()/millibarn;
if (item.first != "63"s) {
scale(_h[item.first+"Nch"], 2*sf); ///< Factor of 2 for Nch bin widths?
scale(_h[item.first+"Esigd3p"], sf);
scale(_h[item.first+"Et"], sf);
}
if (item.first == "900"s) {
// NB. Ref data is normalised to a fixed value not reproducible from MC.
double scale08 = 0., scale40 = 0., scale80 = 0.;
if (_h[item.first+"Esigd3p08"]->bin(1).sumW()) {
scale08 = 0.933e5*_h[item.first+"Esigd3p08"]->bin(1).dVol()/_h[item.first+"Esigd3p08"]->bin(1).sumW();
}
scale(_h[item.first+"Esigd3p08"], scale08);
if (_h[item.first+"Esigd3p40"]->bin(1).sumW()) {
scale40 = 1.369e5*_h[item.first+"Esigd3p40"]->bin(1).dVol()/_h[item.first+"Esigd3p40"]->bin(1).sumW();
}
scale(_h[item.first+"Esigd3p40"], scale40);
if (_h[item.first+"Esigd3p80"]->bin(1).sumW()) {
scale80 = 1.657e5*_h[item.first+"Esigd3p80"]->bin(1).dVol()/_h[item.first+"Esigd3p80"]->bin(1).sumW();
}
scale(_h[item.first+"Esigd3p80"], scale80);
}
}
}
/// @}
private:
/// @name Weight counters
/// @{
map<string,CounterPtr> _c;
/// @}
/// @name Histogram collections
/// @{
map<string,Histo1DPtr> _h;
map<string,Profile1DPtr> _p;
string _sqs = "";
/// @}
};
RIVET_DECLARE_ALIASED_PLUGIN(UA1_1990_I280412, UA1_1990_S2044935);
}Aliases: - UA1_1990_S2044935