Rivet analyses referenceDELPHI_1993_I360638Correlations between $\Lambda^0$ and $\bar{\Lambda}^0$ production in hadronic $Z^0$ decaysExperiment: DELPHI (LEP) Inspire ID: 360638 Status: VALIDATED Authors:
Beam energies: (45.6, 45.6) GeV Run details:
The spectrum for the production of $\Lambda^0$ and $\bar{\Lambda}^0$ in hadronic $Z^0$ decays. Importantly the rapidity difference and cosine of the angle between $\Lambda^0$ and $\bar{\Lambda}^0$ baryons is measured. This is sensitive to different models of baryon production. Source code: DELPHI_1993_I360638.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/Sphericity.hh"
4#include "Rivet/Projections/ChargedFinalState.hh"
5#include "Rivet/Projections/UnstableParticles.hh"
6
7namespace Rivet {
8
9
10 /// @brief Lambda and Lambda bar dists
11 class DELPHI_1993_I360638 : public Analysis {
12 public:
13
14 /// Constructor
15 RIVET_DEFAULT_ANALYSIS_CTOR(DELPHI_1993_I360638);
16
17
18 /// @name Analysis methods
19 /// @{
20
21 /// Book histograms and initialise projections before the run
22 void init() {
23
24 // Initialise and register projections
25 const ChargedFinalState cfs;
26 declare(cfs, "FS");
27 declare(UnstableParticles(), "UFS");
28 declare(Sphericity(cfs), "Sphericity");
29
30 // Book histograms
31 book(_h_x , 1, 1, 1);
32 book(_h_rap , 3, 1, 1);
33 book(_h_cos , 4, 1, 1);
34 book(_m_single , 2, 1, 1);
35 book(_m_like , 5, 1, 1);
36 book(_m_opposite, 6, 1, 1);
37
38 }
39
40
41 /// Perform the per-event analysis
42 void analyze(const Event& event) {
43 // First, veto on leptonic events by requiring at least 4 charged FS particles
44 const FinalState& fs = apply<FinalState>(event, "FS");
45 const size_t numParticles = fs.particles().size();
46 // Even if we only generate hadronic events, we still need a cut on numCharged >= 2.
47 if (numParticles < 2) vetoEvent;
48 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
49 // lambda
50 Particles lambda = ufs.particles(Cuts::pid== PID::LAMBDA);
51 Particles lambdabar = ufs.particles(Cuts::pid==-PID::LAMBDA);
52 // multiplicities
53 _m_single->fill(Ecm, (lambda.size()+lambdabar.size()));
54 if (lambda.empty()&&lambdabar.empty()) vetoEvent;
55 for (const Particle& p : lambda) {
56 double xP = 2.*p.p3().mod()/sqrtS();
57 _h_x->fill(xP);
58 }
59 for (const Particle& p : lambdabar) {
60 double xP = 2.*p.p3().mod()/sqrtS();
61 _h_x->fill(xP);
62 }
63 if (lambda.size()>=2) {
64 unsigned int npair=lambda.size()/2;
65 _m_like->fill(Ecm, double(npair));
66 }
67 if (lambdabar.size()>=2) {
68 unsigned int npair=lambdabar.size()/2;
69 _m_like->fill(Ecm, double(npair));
70 }
71 if (lambda.size()==0 || lambdabar.size()==0) return;
72 _m_opposite->fill(Ecm, double(max(lambda.size(),lambdabar.size())));
73 const Sphericity& sphericity = apply<Sphericity>(event, "Sphericity");
74 for (const Particle& p : lambda) {
75 const Vector3 momP = p.p3();
76 const double enP = p.E();
77 const double modP = dot(sphericity.sphericityAxis(), momP);
78 const double rapP = 0.5 * std::log((enP + modP) / (enP - modP));
79 for (const Particle& pb : lambdabar) {
80 const Vector3 momB = pb.p3();
81 const double enB = pb.E();
82 const double modB = dot(sphericity.sphericityAxis(), momB);
83 const double rapB = 0.5 * std::log((enB + modB) / (enB - modB));
84 _h_rap->fill(abs(rapP-rapB));
85 _h_cos->fill(momP.unit().dot(momB.unit()));
86 }
87 }
88 }
89
90
91 /// Normalise histograms etc., after the run
92 void finalize() {
93 scale( _h_x , 1./sumOfWeights());
94 scale( _h_rap , 1./sumOfWeights());
95 scale( _h_cos , 1./sumOfWeights());
96 scale( _m_single , 1./sumOfWeights());
97 scale( _m_like , 1./sumOfWeights());
98 scale( _m_opposite, 1./sumOfWeights());
99 }
100
101 /// @}
102
103
104 /// @name Histograms
105 /// @{
106 Histo1DPtr _h_x, _h_rap ,_h_cos;
107 BinnedHistoPtr<string> _m_single, _m_like, _m_opposite;
108 const string Ecm = "91.2";
109 /// @}
110
111
112 };
113
114
115 RIVET_DECLARE_PLUGIN(DELPHI_1993_I360638);
116
117
118}
|