Rivet analyses referenceDELPHI_2000_I524693Hadronization properties of $b$ quarks compared to light quarks in $e^+ e^-\to q \bar{q}$ from 183 GeV to 200 GeVExperiment: OPAL (LEP 2) Inspire ID: 524693 Status: VALIDATED Authors:
Beam energies: (91.5, 91.5); (94.5, 94.5); (96.0, 96.0); (98.0, 98.0); (100.0, 100.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. In addition to the energy points in the original paper one additional point at 206;GeV is included from a later preliminary result. Source code: DELPHI_2000_I524693.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/Beam.hh"
4#include "Rivet/Projections/FinalState.hh"
5#include "Rivet/Projections/ChargedFinalState.hh"
6#include "Rivet/Projections/Sphericity.hh"
7#include "Rivet/Projections/Thrust.hh"
8#include "Rivet/Projections/FastJets.hh"
9#include "Rivet/Projections/ParisiTensor.hh"
10#include "Rivet/Projections/Hemispheres.hh"
11#include <cmath>
12
13#define I_KNOW_THE_INITIAL_QUARKS_PROJECTION_IS_DODGY_BUT_NEED_TO_USE_IT
14#include "Rivet/Projections/InitialQuarks.hh"
15
16namespace Rivet {
17
18
19 /// @brief DELPHI multiplicities at various energies
20 ///
21 /// @author Peter Richardson
22 class DELPHI_2000_I524693 : public Analysis {
23 public:
24
25 RIVET_DEFAULT_ANALYSIS_CTOR(DELPHI_2000_I524693);
26
27
28 /// @name Analysis methods
29 /// @{
30
31 void init() {
32 // Projections
33 declare(Beam(), "Beams");
34 declare(ChargedFinalState(), "CFS");
35 declare(InitialQuarks(), "IQF");
36
37 // Histograms
38 book(_hLight, 1,1,3);
39 book(_hCharm, 1,1,2);
40 book(_hBottom, 1,1,1);
41
42 }
43
44
45 void analyze(const Event& event) {
46 // Even if we only generate hadronic events, we still need a cut on numCharged >= 2.
47 const FinalState& cfs = apply<FinalState>(event, "CFS");
48 if (cfs.size() < 2) vetoEvent;
49
50
51 int flavour = 0;
52 const InitialQuarks& iqf = apply<InitialQuarks>(event, "IQF");
53
54 // If we only have two quarks (qqbar), just take the flavour.
55 // If we have more than two quarks, look for the highest energetic q-qbar pair.
56 if (iqf.particles().size() == 2) {
57 flavour = iqf.particles().front().abspid();
58 }
59 else {
60 map<int, double> quarkmap;
61 for (const Particle& p : iqf.particles()) {
62 if (quarkmap[p.pid()] < p.E()) {
63 quarkmap[p.pid()] = p.E();
64 }
65 }
66 double maxenergy = 0.;
67 for (int i = 1; i <= 5; ++i) {
68 if (quarkmap[i]+quarkmap[-i] > maxenergy) {
69 flavour = i;
70 }
71 }
72 }
73 const size_t numParticles = cfs.particles().size();
74 switch (flavour) {
75 case 1: case 2: case 3:
76 _hLight ->fill(int(sqrtS()),numParticles);
77 break;
78 case 4:
79 _hCharm ->fill(int(sqrtS()),numParticles);
80 break;
81 case 5:
82 _hBottom->fill(int(sqrtS()),numParticles);
83 break;
84 }
85 }
86
87
88 void finalize() {
89 BinnedEstimatePtr<int> hDiff;
90 book(hDiff,1,1,4);
91 for(unsigned int ix=0;ix<hDiff->numBins();++ix) {
92 if(_hBottom->bin(ix+1).numEntries()>0 &&
93 _hLight ->bin(ix+1).numEntries()>0) {
94 double val = _hBottom->bin(ix+1).mean(2) - _hLight->bin(ix+1).mean(2);
95 double err = sqrt(sqr(_hBottom->bin(ix+1).stdErr(2)) +
96 sqr(_hLight ->bin(ix+1).stdErr(2)));
97 hDiff->bin(ix+1).set(val,err);
98 }
99 }
100 }
101
102 /// @}
103
104
105 private:
106
107 vector<Estimate1DPtr> _mult;
108
109 /// @name Multiplicities
110 /// @{
111 BinnedProfilePtr<int> _hLight,_hCharm,_hBottom;
112 /// @}
113
114 };
115
116
117
118 RIVET_DECLARE_ALIASED_PLUGIN(DELPHI_2000_I524693, DELPHI_2000_S4328825);
119
120}
|