Rivet analyses
Invariant-mass and fractional-energy dependence of inclusive production of di-hadrons at $\sqrt{s}=10.58$ GeV
Experiment: BELLE (KEKB)
Inspire ID: 1607562
Status: VALIDATED
Authors: - Peter Richardson
References: - Phys.Rev. D96 (2017) no.3, 032005
Beams: e+ e-
Beam energies: (5.3, 5.3)GeV
Run details: - e+e- to hadrons
Measurement of the double differential cross section for the production of hadron pairs by BELLE
Source
code:BELLE_2017_I1607562.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/Thrust.hh"
namespace Rivet {
/// @brief BELLE double differential cross section
class BELLE_2017_I1607562 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2017_I1607562);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// projections
FinalState fs;
declare(fs, "FS");
declare(Thrust(fs), "Thrust");
// histograms
const vector<double> bins{0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60,
0.65, 0.70, 0.75, 0.80, 0.85, 0.90, 0.95, 1.00};
for (size_t ip = 0; ip < 6; ++ip) {
book(_h_all[ip], bins);
book(_h_strong[ip], bins);
for (size_t iy = 1; iy < _h_all[ip]->numBins() + 1; ++iy) {
book(_h_all[ip]->bin(iy), 1, ip + 1, iy);
book(_h_strong[ip]->bin(iy), 2, ip + 1, iy);
}
}
}
bool isWeak(const Particle& p) {
bool weak = false;
if (p.parents().empty()) return weak;
Particle parent = p.parents()[0];
while (!parent.parents().empty()) {
if (parent.abspid() == 411 || parent.abspid() == 421 || parent.abspid() == 431
|| parent.abspid() == 4122 || parent.abspid() == 4232 || parent.abspid() == 4132
|| parent.abspid() == 4332) {
weak = true;
break;
}
parent = parent.parents()[0];
}
return weak;
}
/// Perform the per-event analysis
void analyze(const Event& event) {
// get thrust and apply cut
const Thrust thrust = apply<Thrust>(event, "Thrust");
if (thrust.thrust() < 0.8) vetoEvent;
// get thrust axis
Vector3 axis = thrust.thrustAxis();
Particles charged = apply<FinalState>(event, "FS")
.particles(Cuts::abspid == PID::KPLUS or Cuts::abspid == PID::PIPLUS);
for (unsigned int ix = 0; ix < charged.size(); ++ix) {
double dot1 = axis.dot(charged[ix].momentum().p3());
bool weak1 = isWeak(charged[ix]);
if (2. * charged[ix].momentum().t() / sqrtS() < 0.1) continue;
for (unsigned int iy = ix + 1; iy < charged.size(); ++iy) {
if (2. * charged[iy].momentum().t() / sqrtS() < 0.1) continue;
double dot2 = axis.dot(charged[iy].momentum().p3());
bool weak2 = isWeak(charged[iy]);
if (dot1 * dot2 < 0.) continue;
FourMomentum p = charged[ix].momentum() + charged[iy].momentum();
double z12 = 2. * p.t() / sqrtS();
double m12 = p.mass();
bool strong = !weak1 && !weak2;
if (charged[ix].pid() == PID::PIPLUS) {
if (charged[iy].pid() == PID::PIPLUS) {
_h_all[1]->fill(z12, m12);
if (strong) _h_strong[1]->fill(z12, m12);
}
else if (charged[iy].pid() == PID::PIMINUS) {
_h_all[0]->fill(z12, m12);
if (strong) _h_strong[0]->fill(z12, m12);
}
else if (charged[iy].pid() == PID::KPLUS) {
_h_all[3]->fill(z12, m12);
if (strong) _h_strong[3]->fill(z12, m12);
}
else if (charged[iy].pid() == PID::KMINUS) {
_h_all[2]->fill(z12, m12);
if (strong) _h_strong[2]->fill(z12, m12);
}
}
else if (charged[ix].pid() == PID::PIMINUS) {
if (charged[iy].pid() == PID::PIPLUS) {
_h_all[0]->fill(z12, m12);
if (strong) _h_strong[0]->fill(z12, m12);
}
else if (charged[iy].pid() == PID::PIMINUS) {
_h_all[1]->fill(z12, m12);
if (strong) _h_strong[1]->fill(z12, m12);
}
else if (charged[iy].pid() == PID::KPLUS) {
_h_all[2]->fill(z12, m12);
if (strong) _h_strong[2]->fill(z12, m12);
}
else if (charged[iy].pid() == PID::KMINUS) {
_h_all[3]->fill(z12, m12);
if (strong) _h_strong[3]->fill(z12, m12);
}
}
else if (charged[ix].pid() == PID::KPLUS) {
if (charged[iy].pid() == PID::PIPLUS) {
_h_all[3]->fill(z12, m12);
if (strong) _h_strong[3]->fill(z12, m12);
}
else if (charged[iy].pid() == PID::PIMINUS) {
_h_all[2]->fill(z12, m12);
if (strong) _h_strong[2]->fill(z12, m12);
}
else if (charged[iy].pid() == PID::KPLUS) {
_h_all[5]->fill(z12, m12);
if (strong) _h_strong[5]->fill(z12, m12);
}
else if (charged[iy].pid() == PID::KMINUS) {
_h_all[4]->fill(z12, m12);
if (strong) _h_strong[4]->fill(z12, m12);
}
}
else if (charged[ix].pid() == PID::KMINUS) {
if (charged[iy].pid() == PID::PIPLUS) {
_h_all[2]->fill(z12, m12);
if (strong) _h_strong[2]->fill(z12, m12);
}
else if (charged[iy].pid() == PID::PIMINUS) {
_h_all[3]->fill(z12, m12);
if (strong) _h_strong[3]->fill(z12, m12);
}
else if (charged[iy].pid() == PID::KPLUS) {
_h_all[4]->fill(z12, m12);
if (strong) _h_strong[4]->fill(z12, m12);
}
else if (charged[iy].pid() == PID::KMINUS) {
_h_all[5]->fill(z12, m12);
if (strong) _h_strong[5]->fill(z12, m12);
}
}
}
}
}
/// Normalise histograms etc., after the run
void finalize() {
// now need width as well
double fact = crossSection() / nanobarn / sumOfWeights() / 0.05;
scale(_h_all, fact);
scale(_h_strong, fact);
}
/// @}
/// @name Histograms
/// @{
Histo1DGroupPtr _h_all[6], _h_strong[6];
/// @}
};
RIVET_DECLARE_PLUGIN(BELLE_2017_I1607562);
}