Rivet analyses referencePLUTO_1980_I154270Hadronic charged multiplicity measurement between 12 and 31.3 GeVExperiment: PLUTO (PETRA) Inspire ID: 154270 Status: VALIDATED Authors:
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:
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. $K^0_s$ and $\Lambda^0$, are not included in the measurement. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples. Source code: PLUTO_1980_I154270.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/ChargedFinalState.hh"
5
6namespace Rivet {
7
8
9 /// @brief Hadronic charged multiplicity measurement between 12 and 31.3 GeV
10 class PLUTO_1980_I154270 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(PLUTO_1980_I154270);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 const ChargedFinalState cfs;
23 declare(cfs, "CFS");
24 for (const string label : {"9.4", "12.0", "13.0", "17.0", "22.0", "27.6", "30.2", "30.7", "31.3"}) {
25 const double sqrts = std::stod(label);
26 if (isCompatibleWithSqrtS(sqrts*GeV)) Ecm = label;
27 }
28 if (Ecm != "") {
29 book(_mult, 1, 1, 1);
30 }
31 else {
32 MSG_WARNING("CoM energy of events sqrt(s) = " << sqrtS()/GeV << " doesn't match any available analysis energy .");
33 }
34 }
35
36
37 /// Perform the per-event analysis
38 void analyze(const Event& event) {
39 const FinalState& cfs = apply<FinalState>(event, "CFS");
40 MSG_DEBUG("Total charged multiplicity = " << cfs.size());
41 unsigned int nPart(0);
42 for (const Particle& p : cfs.particles()) {
43 // check if prompt or not
44 ConstGenParticlePtr pmother = p.genParticle();
45 ConstGenVertexPtr ivertex = pmother->production_vertex();
46 bool prompt = true;
47 while (ivertex) {
48 vector<ConstGenParticlePtr> inparts = HepMCUtils::particles(ivertex, Relatives::PARENTS);
49 int n_inparts = inparts.size();
50 if (n_inparts < 1) break;
51 pmother = inparts[0]; // first mother particle
52 int mother_pid = abs(pmother->pdg_id());
53 if (mother_pid==PID::K0S || mother_pid==PID::LAMBDA) {
54 prompt = false;
55 break;
56 }
57 else if (mother_pid<6) {
58 break;
59 }
60 ivertex = pmother->production_vertex();
61 }
62 if (prompt) ++nPart;
63 }
64 _mult->fill(Ecm, nPart);
65 }
66
67
68 /// Normalise histograms etc., after the run
69 void finalize() {
70 scale(_mult, 1./sumOfWeights());
71 }
72
73 /// @}
74
75
76 private:
77
78 BinnedProfilePtr<string> _mult;
79 string Ecm = "";
80
81 };
82
83
84 RIVET_DECLARE_PLUGIN(PLUTO_1980_I154270);
85
86}
|