Rivet analyses referenceVENUS_1998_I453613Charged particle multiplicities in heavy and light quark initiated events at 58 GeVExperiment: VENUS (Tristan) Inspire ID: 453613 Status: VALIDATED No authors listed References:
Beam energies: (29.0, 29.0) GeV Run details:
Measurement of the mean charged multiplicities separately for $b\bar b$, and light quark ($uds$) initiated events in $e^+e^-$ interactions at 58 GeV. Source code: VENUS_1998_I453613.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/Beam.hh"
4#include "Rivet/Projections/ChargedFinalState.hh"
5
6#define I_KNOW_THE_INITIAL_QUARKS_PROJECTION_IS_DODGY_BUT_NEED_TO_USE_IT
7#include "Rivet/Projections/InitialQuarks.hh"
8
9namespace Rivet {
10
11
12 /// @brief charged multiplicity at 58 GeV
13 class VENUS_1998_I453613 : public Analysis {
14 public:
15
16 /// Constructor
17 RIVET_DEFAULT_ANALYSIS_CTOR(VENUS_1998_I453613);
18
19
20 /// @name Analysis methods
21 /// @{
22
23 /// Book histograms and initialise projections before the run
24 void init() {
25 declare(Beam(), "Beams");
26 declare(ChargedFinalState(), "CFS");
27 declare(InitialQuarks(), "IQF");
28 book(_cLight , 1, 1, 2);
29 book(_cBottom, 1, 1, 1);
30 }
31
32
33 /// Perform the per-event analysis
34 void analyze(const Event& event) {
35 // Even if we only generate hadronic events, we still need a cut on numCharged >= 2.
36 const FinalState& cfs = apply<FinalState>(event, "CFS");
37 if (cfs.size() < 2) vetoEvent;
38
39
40 int flavour = 0;
41 const InitialQuarks& iqf = apply<InitialQuarks>(event, "IQF");
42
43 // If we only have two quarks (qqbar), just take the flavour.
44 // If we have more than two quarks, look for the highest energetic q-qbar pair.
45 if (iqf.particles().size() == 2) {
46 flavour = iqf.particles().front().abspid();
47 }
48 else {
49 map<int, double> quarkmap;
50 for ( const Particle& p : iqf.particles()) {
51 if (quarkmap[p.pid()] < p.E()) {
52 quarkmap[p.pid()] = p.E();
53 }
54 }
55 double maxenergy = 0.;
56 for (int i = 1; i <= 5; ++i) {
57 if (quarkmap[i]+quarkmap[-i] > maxenergy) {
58 flavour = i;
59 }
60 }
61 }
62 const size_t numParticles = cfs.particles().size();
63 switch (flavour) {
64 case 1: case 2: case 3:
65 _cLight->fill(round(sqrtS()),numParticles);
66 break;
67 case 5:
68 _cBottom->fill(round(sqrtS()),numParticles);
69 break;
70 }
71
72 }
73
74
75 /// Normalise histograms etc., after the run
76 void finalize() {
77 BinnedEstimatePtr<int> hDiff;
78 book(hDiff,1, 1, 3);
79 if(_cBottom->bin(1).numEntries()>0 &&
80 _cLight ->bin(1).numEntries()>0) {
81 double val = _cBottom->bin(1).mean(2) - _cLight->bin(1).mean(2);
82 double err = sqrt(sqr(_cBottom->bin(1).stdErr(2)) +
83 sqr(_cLight ->bin(1).stdErr(2)));
84 hDiff->bin(1).setVal(val);
85 hDiff->bin(1).setErr(err);
86 }
87 }
88
89 /// @}
90
91 /// @name Multiplicities
92 /// @{
93 BinnedProfilePtr<int> _cLight;
94 BinnedProfilePtr<int> _cCharm;
95 BinnedProfilePtr<int> _cBottom;
96 /// @}
97
98 };
99
100
101 RIVET_DECLARE_PLUGIN(VENUS_1998_I453613);
102
103
104}
|