Rivet analyses
Hadronic charged multiplicity measurement between 12 and 31.3 GeV
Experiment: PLUTO (PETRA)
Inspire ID: 154270
Status: VALIDATED
Authors: - Peter Richardson
References: - Phys.Lett. 95B (1980) 313-317
Beams: e+ e-
Beam energies: (4.7, 4.7); (6.0, 6.0); (6.5, 6.5); (8.5, 8.5); (11.0, 11.0); (13.8, 13.8); (15.1, 15.1); (15.3, 15.3); (15.7, 15.7)GeV
Run details: - Hadronic e+ e- events generated below the Z pole.
The charged particle multiplicity distribution of hadronic e+e− events as measured between 12 and 31.3 GeV using the PLUTO detector at PETRA. The decay products of weakly decaying strange hadrons, e.g. Ks0 and Λ0, are not included in the measurement.
Source
code:PLUTO_1980_I154270.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/ChargedFinalState.hh"
namespace Rivet {
/// @brief Hadronic charged multiplicity measurement between 12 and 31.3 GeV
class PLUTO_1980_I154270 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(PLUTO_1980_I154270);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
const ChargedFinalState cfs;
declare(cfs, "CFS");
book(_mult, 1, 1, 1);
for (const string& en : _mult.binning().edges<0>()) {
const size_t idx = en.find("-");
if (idx != string::npos) {
const double emin = stod(en.substr(0,idx));
const double emax = stod(en.substr(idx+1, string::npos));
if (inRange(sqrtS()/GeV, emin, emax)) {
_sqs = en; break;
}
}
else {
const double eval = stod(en)*GeV;
if (isCompatibleWithSqrtS(eval)) {
_sqs = en; break;
}
}
}
raiseBeamErrorIf(_sqs.empty());
}
/// Perform the per-event analysis
void analyze(const Event& event) {
const FinalState& cfs = apply<FinalState>(event, "CFS");
MSG_DEBUG("Total charged multiplicity = " << cfs.size());
unsigned int nPart(0);
for (const Particle& p : cfs.particles()) {
// check if prompt or not
ConstGenParticlePtr pmother = p.genParticle();
ConstGenVertexPtr ivertex = pmother->production_vertex();
bool prompt = true;
while (ivertex) {
vector<ConstGenParticlePtr> inparts = HepMCUtils::particles(ivertex, Relatives::PARENTS);
int n_inparts = inparts.size();
if (n_inparts < 1) break;
pmother = inparts[0]; // first mother particle
int mother_pid = abs(pmother->pdg_id());
if (mother_pid==PID::K0S || mother_pid==PID::LAMBDA) {
prompt = false; break;
}
else if (mother_pid<6) break;
ivertex = pmother->production_vertex();
}
if (prompt) ++nPart;
}
_mult->fill(_sqs, nPart);
}
/// Normalise histograms etc., after the run
void finalize() {
scale(_mult, 1./sumOfWeights());
}
/// @}
private:
BinnedProfilePtr<string> _mult;
string _sqs = "";
};
RIVET_DECLARE_PLUGIN(PLUTO_1980_I154270);
}