rivet is hosted by Hepforge, IPPP Durham

## Rivet analyses reference

### SLD_2002_S4869273

Measurement of the b-quark fragmentation function in $Z^0$ decays
Experiment: SLD (SLC)
Inspire ID: 582951
Status: VALIDATED
Authors:
• Peter Richardson
References:
• Phys. Rev.D65:092006,2002
• hep-ex/0202031
Beams: e+ e-
Beam energies: (45.6, 45.6) GeV
Run details:
• Hadronic Z decay events generated on the Z pole ($\sqrt{s} = 91.2$ GeV)

Measurement of the $b$-quark fragmentation function by SLC. The fragmentation function for weakly decaying $b$-quarks has been measured.

Source code: SLD_2002_S4869273.cc
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 // -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" namespace Rivet { /// @brief SLD b-fragmentation measurement /// @author Peter Richardson class SLD_2002_S4869273 : public Analysis { public: /// Constructor SLD_2002_S4869273() : Analysis("SLD_2002_S4869273") { } /// @name Helper functions /// @note The PID:: namespace functions would be preferable, but don't have exactly the same behaviour. Preserving the original form. //@{ // bool isParton(int id) { return abs(id) <= 100 && abs(id) != 22 && (abs(id) < 11 || abs(id) > 18); } // bool isBHadron(int id) { return ((abs(id)/100)%10 == 5) || (abs(id) >= 5000 && abs(id) <= 5999); } //@} /// @name Analysis methods //@{ /// Book projections and histograms void init() { declare(Beam(), "Beams"); declare(ChargedFinalState(), "FS"); book(_histXbweak ,1, 1, 1); } void analyze(const Event& e) { const FinalState& fs = apply(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed ncharged cut"); vetoEvent; } MSG_DEBUG("Passed ncharged cut"); // Get beams and average beam momentum const ParticlePair& beams = apply(e, "Beams").beams(); const double meanBeamMom = ( beams.first.p3().mod() + beams.second.p3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); for(ConstGenParticlePtr p : HepMCUtils::particles(e.genEvent())) { ConstGenVertexPtr dv = p->end_vertex(); if (PID::isBottomHadron(p->pdg_id())) { const double xp = p->momentum().e()/meanBeamMom; // If the B-hadron has no B-hadron as a child, it decayed weakly: if (dv) { bool is_weak = true; for (ConstGenParticlePtr pp: HepMCUtils::particles(dv, Relatives::CHILDREN)){ if (PID::isBottomHadron(pp->pdg_id())) { is_weak = false; } } if (is_weak) { _histXbweak->fill(xp); } } } } } // Finalize void finalize() { normalize(_histXbweak); } private: /// Store the weighted sums of numbers of charged / charged+neutral /// particles - used to calculate average number of particles for the /// inclusive single particle distributions' normalisations. Histo1DPtr _histXbweak; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(SLD_2002_S4869273); }