Rivet analyses referenceOPAL_2002_I601225Charged particle multiplicities in heavy and light quark initiated events above the $Z^0$ peakExperiment: OPAL (LEP 2) Inspire ID: 601225 Status: VALIDATED Authors:
Beam energies: (65.0, 65.0); (68.0, 68.0); (80.5, 80.5); (86.0, 86.0); (91.5, 91.5); (94.5, 94.5); (96.0, 96.0); (98.0, 98.0); (100.0, 100.0); (101.0, 101.0); (103.0, 103.0) GeV Run details:
Measurements of the mean charged multiplicities separately for $b\bar b$, $c\bar c$ and light quark ($uds$) initiated events in $e^+e^-$ interactions at energies above the $Z^0$ mass. The data is from the LEP running periods between 1995 and 2000. Source code: OPAL_2002_I601225.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/Beam.hh"
4#include "Rivet/Projections/ChargedFinalState.hh"
5#include <cmath>
6
7#define I_KNOW_THE_INITIAL_QUARKS_PROJECTION_IS_DODGY_BUT_NEED_TO_USE_IT
8#include "Rivet/Projections/InitialQuarks.hh"
9
10namespace Rivet {
11
12
13 /// @brief OPAL multiplicities at various energies
14 ///
15 /// @author Peter Richardson
16 class OPAL_2002_I601225 : public Analysis {
17 public:
18
19 RIVET_DEFAULT_ANALYSIS_CTOR(OPAL_2002_I601225);
20
21
22 /// @name Analysis methods
23 /// @{
24
25 void init() {
26 // Projections
27 declare(Beam(), "Beams");
28 declare(ChargedFinalState(), "CFS");
29 declare(InitialQuarks(), "IQF");
30
31 // Histograms
32 book(_hLight, 1,1,3);
33 book(_hCharm, 1,1,2);
34 book(_hBottom, 1,1,1);
35 }
36
37
38 void analyze(const Event& event) {
39 // Even if we only generate hadronic events, we still need a cut on numCharged >= 2.
40 const FinalState& cfs = apply<FinalState>(event, "CFS");
41 if (cfs.size() < 2) vetoEvent;
42
43 int flavour = 0;
44 const InitialQuarks& iqf = apply<InitialQuarks>(event, "IQF");
45
46 // If we only have two quarks (qqbar), just take the flavour.
47 // If we have more than two quarks, look for the highest energetic q-qbar pair.
48 if (iqf.particles().size() == 2) {
49 flavour = iqf.particles().front().abspid();
50 }
51 else {
52 map<int, double> quarkmap;
53 for (const Particle& p : iqf.particles()) {
54 if (quarkmap[p.pid()] < p.E()) {
55 quarkmap[p.pid()] = p.E();
56 }
57 }
58 double maxenergy = 0.;
59 for (int i = 1; i <= 5; ++i) {
60 if (quarkmap[i]+quarkmap[-i] > maxenergy) {
61 flavour = i;
62 }
63 }
64 }
65 const size_t numParticles = cfs.particles().size();
66 switch (flavour) {
67 case 1: case 2: case 3:
68 _hLight ->fill(int(sqrtS()),numParticles);
69 break;
70 case 4:
71 _hCharm ->fill(int(sqrtS()),numParticles);
72 break;
73 case 5:
74 _hBottom->fill(int(sqrtS()),numParticles);
75 break;
76 }
77
78 }
79
80
81 void finalize() {
82 BinnedEstimatePtr<int> hDiff;
83 book(hDiff,1,1,4);
84 for(unsigned int ix=0;ix<hDiff->numBins();++ix) {
85 if(_hBottom->bin(ix+1).numEntries()>0 &&
86 _hLight ->bin(ix+1).numEntries()>0) {
87 double val = _hBottom->bin(ix+1).mean(2) - _hLight->bin(ix+1).mean(2);
88 double err = sqrt(sqr(_hBottom->bin(ix+1).stdErr(2)) +
89 sqr(_hLight ->bin(ix+1).stdErr(2)));
90 hDiff->bin(ix+1).setVal(val);
91 hDiff->bin(ix+1).setErr(err);
92 }
93 }
94 }
95
96 /// @}
97
98
99 private:
100
101 /// @name Multiplicities
102 /// @{
103 BinnedProfilePtr<int> _hLight,_hCharm,_hBottom;
104 /// @}
105
106 };
107
108
109
110 RIVET_DECLARE_ALIASED_PLUGIN(OPAL_2002_I601225, OPAL_2002_S5361494);
111
112}
|