Rivet analyses
Azimuthal asymmetries in bact-to-back π± and (π0, η, π±) production at $\sqrt{s}=10.58$GeV
Experiment: BELLE (KEKB)
Inspire ID: 1752523
Status: VALIDATED NOHEPDATA
Authors: - Peter Richardson
References: - Phys.Rev.D 100 (2019) 9, 092008
Beams: e+ e-
Beam energies: (5.3, 5.3)GeV
Run details: - e+e- to hadrons
Azimuthal asymmetries in bact-to-back π± and (π0, η, π±) production at $\sqrt{s}=10.58$GeV
Source
code:BELLE_2019_I1752523.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/Beam.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/Thrust.hh"
#include "Rivet/Projections/UnstableParticles.hh"
#include "Rivet/Tools/Random.hh"
namespace Rivet {
/// @brief azimuthal asymmetries in pi+/- (pi0, eta, pi+-) production
class BELLE_2019_I1752523 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2019_I1752523);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// projections
const FinalState fs;
declare(fs, "FS");
declare(UnstableParticles(Cuts::pid == 111 || Cuts::pid == 221), "UFS");
declare(Thrust(fs), "Thrust");
declare(Beam(), "Beams");
// histograms
unsigned int nbin = 20;
// charged
for (unsigned int ix = 0; ix < 3; ++ix) {
// charged in pT bins
for (unsigned int iy = 0; iy < 4; ++iy) {
book(_h_charged_pt[ix][iy], "TMP/h_charged_pt_" + toString(ix + 1) + "_" + toString(iy + 1), nbin,
0., M_PI);
for (unsigned int iz = 0; iz < 4; ++iz) {
book(_b_charged_pt[ix][iy][iz],
"TMP/b_charged_pt_" + toString(ix) + "_" + toString(iy + 1) + "_" + toString(iz + 1), nbin,
0., M_PI);
}
}
// charged in z bins
for (unsigned int iy = 0; iy < 6; ++iy) {
book(_h_charged_z[ix][iy], "TMP/h_charged_z_" + toString(ix + 1) + "_" + toString(iy + 1), nbin, 0.,
M_PI);
if (iy == 5) continue;
for (unsigned int iz = 0; iz < 5; ++iz) {
book(_b_charged_z[ix][iy][iz],
"TMP/b_charged_z_" + toString(ix + 1) + "_" + toString(iy + 1) + "_" + toString(iz + 1),
nbin, 0., M_PI);
}
}
}
for (unsigned int ix = 0; ix < 2; ++ix) {
// pi0
for (unsigned int iy = 0; iy < 4; ++iy) {
book(_h_pi0_pt[ix][iy], "TMP/h_pi0_pt_" + toString(ix + 1) + "_" + toString(iy + 1), nbin, 0.,
M_PI);
book(_h_eta_pt[ix][iy], "TMP/h_eta_pt_" + toString(ix + 1) + "_" + toString(iy + 1), nbin, 0.,
M_PI);
book(_h_pi0B_pt[ix][iy], "TMP/h_pi0B_pt_" + toString(ix + 1) + "_" + toString(iy + 1), nbin, 0.,
M_PI);
for (unsigned int iz = 0; iz < 4; ++iz) {
book(_b_pi0_pt[ix][iy][iz],
"TMP/b_pi0_pt_" + toString(ix + 1) + "_" + toString(iy + 1) + "_" + toString(iz + 1), nbin,
0., M_PI);
book(_b_eta_pt[ix][iy][iz],
"TMP/b_eta_pt_" + toString(ix + 1) + "_" + toString(iy + 1) + "_" + toString(iz + 1), nbin,
0., M_PI);
book(_b_pi0B_pt[ix][iy][iz],
"TMP/b_pi0B_pt_" + toString(ix + 1) + "_" + toString(iy + 1) + "_" + toString(iz + 1), nbin,
0., M_PI);
book(_b_charged_z_pt[ix][iy][iz],
"TMP/b_charged_z_pt_" + toString(ix + 1) + "_" + toString(iy + 1) + "_" + toString(iz + 1),
nbin, 0., M_PI);
book(_b_pi0_z_pt[ix][iy][iz],
"TMP/b_pi0_z_pt_" + toString(ix + 1) + "_" + toString(iy + 1) + "_" + toString(iz + 1), nbin,
0., M_PI);
if (iy > 2) continue;
book(_b_eta_z_pt[ix][iy][iz],
"TMP/b_eta_z_pt_" + toString(ix + 1) + "_" + toString(iy + 1) + "_" + toString(iz + 1), nbin,
0., M_PI);
book(_b_pi0B_z_pt[ix][iy][iz],
"TMP/b_pi0B_z_pt_" + toString(ix + 1) + "_" + toString(iy + 1) + "_" + toString(iz + 1),
nbin, 0., M_PI);
}
}
// pi0 in z bins
for (unsigned int iy = 0; iy < 6; ++iy) {
book(_h_pi0_z[ix][iy], "TMP/h_pi0_z_" + toString(ix + 1) + "_" + toString(iy + 1), nbin, 0., M_PI);
if (iy == 5) continue;
for (unsigned int iz = 0; iz < 5; ++iz) {
book(_b_pi0_z[ix][iy][iz],
"TMP/b_pi0_z_" + toString(ix + 1) + "_" + toString(iy + 1) + "_" + toString(iz + 1), nbin,
0., M_PI);
}
}
// eta in z bins
for (unsigned int iy = 0; iy < 5; ++iy) {
book(_h_eta_z[ix][iy], "TMP/h_eta_z_" + toString(ix + 1) + "_" + toString(iy + 1), nbin, 0., M_PI);
book(_h_pi0B_z[ix][iy], "TMP/h_pi0B_z_" + toString(ix + 1) + "_" + toString(iy + 1), nbin, 0.,
M_PI);
if (iy > 2) continue;
for (unsigned int iz = 0; iz < 3; ++iz) {
book(_b_eta_z[ix][iy][iz],
"TMP/b_eta_z_" + toString(ix + 1) + "_" + toString(iy + 1) + "_" + toString(iz + 1), nbin,
0., M_PI);
book(_b_pi0B_z[ix][iy][iz],
"TMP/b_pi0B_z_" + toString(ix + 1) + "_" + toString(iy + 1) + "_" + toString(iz + 1), nbin,
0., M_PI);
}
}
}
}
unsigned int iBin_z0(double z) {
if (z < .3)
return 0;
else if (z < .4)
return 1;
else if (z < .5)
return 2;
else if (z < .6)
return 3;
else if (z < .7)
return 4;
else
return 5;
}
unsigned int iBin_z1(double z) {
if (z < .2)
return 0;
else if (z < .3)
return 1;
else if (z < .5)
return 2;
else if (z < .7)
return 3;
else
return 4;
}
unsigned int iBin_pT1(double pT) {
if (pT < .15)
return 0;
else if (pT < .3)
return 1;
else if (pT < .5)
return 2;
else
return 3;
}
/// Perform the per-event analysis
void analyze(const Event& event) {
static const double c03 = cos(0.3);
// get the axis, direction of incoming electron
const ParticlePair& beams = apply<Beam>(event, "Beams").beams();
Vector3 axis1;
if (beams.first.pid() > 0) {
axis1 = beams.second.mom().p3().unit();
}
else {
axis1 = beams.first.mom().p3().unit();
}
// apply thrust cuts T > 0.8
Thrust thrust = apply<Thrust>(event, "Thrust");
if (thrust.thrust() <= 0.8) vetoEvent;
ThreeVector t_z = thrust.thrustAxis();
ThreeVector t_x = (axis1 - t_z.dot(axis1) * t_z).unit();
ThreeVector t_y = t_z.cross(t_x);
double cThetaT = t_z.dot(axis1);
static double cTheta[2] = {cos(1.34), cos(2.03)};
if (cThetaT < cTheta[1] || cThetaT > cTheta[0]) vetoEvent;
Vector3 cross = axis1.cross(t_z);
Particles charged = apply<FinalState>(event, "FS").particles(Cuts::abspid == PID::PIPLUS);
Particles neutral = apply<UnstableParticles>(event, "UFS").particles();
// first charged particle
for (unsigned int ix = 0; ix < charged.size(); ++ix) {
// z and angle cut
const double x1 = 2. * charged[ix].mom().t() / sqrtS();
double dot1 = t_z.dot(charged[ix].p3().unit());
if (abs(dot1) < c03 || x1 < 0.1) continue;
// second charged particle
for (unsigned int iy = ix + 1; iy < charged.size(); ++iy) {
const double x2 = 2. * charged[iy].mom().t() / sqrtS();
double dot2 = t_z.dot(charged[iy].p3().unit());
if (abs(dot2) < c03 || x2 < 0.1 || dot1 * dot2 > 0) continue;
// randomly order the particles
Particle p1 = charged[ix], p2 = charged[iy];
double z1(x1), z2(x2);
if (rand01() < 0.5) {
swap(p1, p2);
swap(z1, z2);
}
const double pT1 = sqrt(sqr(dot(p1.mom().p3(), thrust.thrustMajorAxis()))
+ sqr(dot(p1.mom().p3(), thrust.thrustMinorAxis())));
const double pT2 = sqrt(sqr(dot(p2.mom().p3(), thrust.thrustMajorAxis()))
+ sqr(dot(p2.mom().p3(), thrust.thrustMinorAxis())));
if (pT1 > 3. || pT2 > 3.) continue;
double phi12 = atan2(p1.p3().dot(t_y), p1.p3().dot(t_x))
+ atan2(p2.p3().dot(t_y), p2.p3().dot(t_x));
if (phi12 > M_PI) phi12 -= 2 * M_PI;
if (phi12 < -M_PI) phi12 += 2 * M_PI;
if (phi12 < 0.) phi12 = -phi12;
if (z1 > .2 && z2 > .2) {
unsigned int ibin = iBin_z0(z1);
unsigned int ipT1 = iBin_pT1(pT1);
unsigned int ipT2 = iBin_pT1(pT2);
unsigned int ibin1 = iBin_z1(z1) - 1;
if (p1.pid() * p2.pid() > 0) {
_h_charged_z[0][ibin]->fill(phi12);
_h_charged_pt[0][ipT1]->fill(phi12);
_b_charged_pt[0][ipT1][ipT2]->fill(phi12);
_h_pi0_z[1][ibin]->fill(phi12);
_h_pi0_pt[1][ipT1]->fill(phi12);
_b_pi0_pt[1][ipT1][ipT2]->fill(phi12);
_b_pi0_z_pt[1][ibin1][ipT1]->fill(phi12);
if (z1 > .3 && z2 > .3) {
_h_eta_z[1][ibin - 1]->fill(phi12);
_h_pi0B_z[1][ibin - 1]->fill(phi12);
_h_eta_pt[1][ipT1]->fill(phi12);
_h_pi0B_pt[1][ipT1]->fill(phi12);
_b_eta_pt[1][ipT1][ipT2]->fill(phi12);
_b_pi0B_pt[1][ipT1][ipT2]->fill(phi12);
_b_eta_z_pt[1][ibin1 - 1][ipT1]->fill(phi12);
_b_pi0B_z_pt[1][ibin1 - 1][ipT1]->fill(phi12);
}
}
else {
_h_charged_z[1][ibin]->fill(phi12);
_h_charged_pt[1][ipT1]->fill(phi12);
_b_charged_pt[1][ipT1][ipT2]->fill(phi12);
_b_charged_z_pt[0][ibin1][ipT1]->fill(phi12);
}
_h_charged_z[2][ibin]->fill(phi12);
_h_charged_pt[2][ipT1]->fill(phi12);
_b_charged_pt[2][ipT1][ipT2]->fill(phi12);
_b_charged_z_pt[1][ibin1][ipT1]->fill(phi12);
}
unsigned int ibin1 = iBin_z1(z1), ibin2 = iBin_z1(z2);
if (p1.pid() * p2.pid() > 0) {
_b_charged_z[0][ibin1][ibin2]->fill(phi12);
_b_pi0_z[1][ibin1][ibin2]->fill(phi12);
if (z1 > .3 && z2 > .3) {
_b_eta_z[1][ibin1 - 2][ibin2 - 2]->fill(phi12);
_b_pi0B_z[1][ibin1 - 2][ibin2 - 2]->fill(phi12);
}
}
else {
_b_charged_z[1][ibin1][ibin2]->fill(phi12);
}
_b_charged_z[2][ibin1][ibin2]->fill(phi12);
}
// pi0 or eta
for (unsigned int iy = 0; iy < neutral.size(); ++iy) {
const double x2 = 2. * neutral[iy].mom().t() / sqrtS();
double dot2 = t_z.dot(neutral[iy].p3().unit());
if (abs(dot2) < c03 || x2 < 0.2 || dot1 * dot2 > 0) continue;
// neutral particle first
Particle p2 = charged[ix], p1 = neutral[iy];
double z1(x2), z2(x1);
const double pT1 = sqrt(sqr(dot(p1.mom().p3(), thrust.thrustMajorAxis()))
+ sqr(dot(p1.mom().p3(), thrust.thrustMinorAxis())));
const double pT2 = sqrt(sqr(dot(p2.mom().p3(), thrust.thrustMajorAxis()))
+ sqr(dot(p2.mom().p3(), thrust.thrustMinorAxis())));
if (pT1 > 3. || pT2 > 3.) continue;
double phi12 = atan2(p1.p3().dot(t_y), p1.p3().dot(t_x))
+ atan2(p2.p3().dot(t_y), p2.p3().dot(t_x));
if (phi12 > M_PI) phi12 -= 2 * M_PI;
if (phi12 < -M_PI) phi12 += 2 * M_PI;
if (phi12 < 0.) phi12 = -phi12;
if (z1 > .2) {
unsigned int ibin = iBin_z0(z1);
unsigned int ipT1 = iBin_pT1(pT1);
unsigned int ipT2 = iBin_pT1(pT2);
unsigned int ibin1 = iBin_z1(z1) - 1;
if (p1.pid() == 111) {
_h_pi0_z[0][ibin]->fill(phi12);
_h_pi0_pt[0][ipT1]->fill(phi12);
_b_pi0_pt[0][ipT1][ipT2]->fill(phi12);
_b_pi0_z_pt[0][ibin1][ipT1]->fill(phi12);
if (z1 > .3 && z2 > .3) {
_h_pi0B_z[0][ibin - 1]->fill(phi12);
_h_pi0B_pt[0][ipT1]->fill(phi12);
_b_pi0B_pt[0][ipT1][ipT2]->fill(phi12);
_b_pi0B_z_pt[0][ibin1 - 1][ipT1]->fill(phi12);
}
}
else if (z1 > .3 && z2 > .3) {
_h_eta_z[0][ibin - 1]->fill(phi12);
_h_eta_pt[0][ipT1]->fill(phi12);
_b_eta_pt[0][ipT1][ipT2]->fill(phi12);
_b_eta_z_pt[0][ibin1 - 1][ipT1]->fill(phi12);
}
}
unsigned int ibin1 = iBin_z1(z1), ibin2 = iBin_z1(z2);
if (p1.pid() == 111) {
_b_pi0_z[0][ibin1][ibin2]->fill(phi12);
if (z1 > .3 && z2 > .3) _b_pi0B_z[0][ibin1 - 2][ibin2 - 2]->fill(phi12);
}
else if (z1 > .3 && z2 > .3) {
_b_eta_z[0][ibin1 - 2][ibin2 - 2]->fill(phi12);
}
}
}
}
pair<double, double> calcAsymmetry(Estimate1DPtr hist, double fact = 1.) {
double sum1(0.), sum2(0.);
for (const auto& bin : hist->bins()) {
double Oi = bin.val();
if (Oi == 0. || std::isnan(Oi)) continue;
double ai = 1.;
double bi = (sin(fact * bin.xMax()) - sin(fact * bin.xMin())) / (bin.xMax() - bin.xMin()) / fact;
double Ei = bin.errAvg();
sum1 += sqr(bi / Ei);
sum2 += bi / sqr(Ei) * (Oi - ai);
}
if (sum1 == 0.) return make_pair(0., 0.);
return make_pair(sum2 / sum1 * 1e2, sqrt(1. / sum1) * 1e2);
}
/// Normalise histograms etc., after the run
void finalize() {
// charged in pT bins
Estimate1DPtr h_charged_UL, h_charged_UC;
book(h_charged_UL, 1, 1, 1);
book(h_charged_UC, 1, 1, 2);
Estimate1DPtr h_pi0_UL, h_eta_UL, h_pi0B_UL;
book(h_pi0_UL, 6, 1, 1);
book(h_eta_UL, 7, 1, 1);
book(h_pi0B_UL, 8, 1, 1);
for (unsigned int ix = 0; ix < 4; ++ix) {
// first the 1d dists
for (unsigned int ii = 0; ii < 3; ++ii) {
normalize(_h_charged_pt[ii][ix]);
if (ii == 2) continue;
normalize(_h_pi0_pt[ii][ix]);
normalize(_h_eta_pt[ii][ix]);
normalize(_h_pi0B_pt[ii][ix]);
}
Estimate1DPtr htemp;
// UL
// charged
book(htemp, "TMP/R_charged_pt_UL_" + toString(ix), _h_charged_pt[1][ix]->xEdges());
divide(_h_charged_pt[1][ix], _h_charged_pt[0][ix], htemp);
pair<double, double> asym = calcAsymmetry(htemp);
h_charged_UL->bin(ix + 1).setVal(asym.first);
h_charged_UL->bin(ix + 1).setErr(asym.second);
// UC
book(htemp, "TMP/R_charged_pt_UC_" + toString(ix), _h_charged_pt[1][ix]->xEdges());
divide(_h_charged_pt[1][ix], _h_charged_pt[2][ix], htemp);
asym = calcAsymmetry(htemp);
h_charged_UC->bin(ix + 1).setVal(asym.first);
h_charged_UC->bin(ix + 1).setErr(asym.second);
// pi0
book(htemp, "TMP/R_pi0_pt_UL_" + toString(ix), _h_pi0_pt[0][ix]->xEdges());
divide(_h_pi0_pt[0][ix], _h_pi0_pt[1][ix], htemp);
asym = calcAsymmetry(htemp);
h_pi0_UL->bin(ix + 1).setVal(asym.first);
h_pi0_UL->bin(ix + 1).setErr(asym.second);
// eta
book(htemp, "TMP/R_eta_pt_UL_" + toString(ix), _h_eta_pt[0][ix]->xEdges());
divide(_h_eta_pt[0][ix], _h_eta_pt[1][ix], htemp);
asym = calcAsymmetry(htemp);
h_eta_UL->bin(ix + 1).setVal(asym.first);
h_eta_UL->bin(ix + 1).setErr(asym.second);
// pi0 z>.3
book(htemp, "TMP/R_pi0B_pt_UL_" + toString(ix), _h_pi0B_pt[0][ix]->xEdges());
divide(_h_pi0B_pt[0][ix], _h_pi0B_pt[1][ix], htemp);
asym = calcAsymmetry(htemp);
h_pi0B_UL->bin(ix + 1).setVal(asym.first);
h_pi0B_UL->bin(ix + 1).setErr(asym.second);
// then 2nd dists
Estimate1DPtr h_charged_UL2, h_charged_UC2;
book(h_charged_UL2, 1, 2 + ix, 1);
book(h_charged_UC2, 1, 2 + ix, 2);
Estimate1DPtr h_pi0_UL2, h_eta_UL2, h_pi0B_UL2;
book(h_pi0_UL2, 6, 2 + ix, 1);
book(h_eta_UL2, 7, 2 + ix, 1);
book(h_pi0B_UL2, 8, 2 + ix, 1);
for (unsigned int iy = 0; iy < 4; ++iy) {
for (unsigned int ii = 0; ii < 3; ++ii) {
normalize(_b_charged_pt[ii][ix][iy]);
if (ii == 2) continue;
normalize(_b_pi0_pt[ii][ix][iy]);
normalize(_b_eta_pt[ii][ix][iy]);
normalize(_b_pi0B_pt[ii][ix][iy]);
}
// UL
book(htemp, "TMP/R_charged_pt_UL_" + toString(ix) + "_" + toString(iy),
_b_charged_pt[1][ix][iy]->xEdges());
divide(_b_charged_pt[1][ix][iy], _b_charged_pt[0][ix][iy], htemp);
asym = calcAsymmetry(htemp);
h_charged_UL2->bin(iy + 1).setVal(asym.first);
h_charged_UL2->bin(iy + 1).setErr(asym.second);
// UC
book(htemp, "TMP/R_charged_pt_UC_" + toString(ix) + "_" + toString(iy),
_b_charged_pt[1][ix][iy]->xEdges());
divide(_b_charged_pt[1][ix][iy], _b_charged_pt[2][ix][iy], htemp);
asym = calcAsymmetry(htemp);
h_charged_UC2->bin(iy + 1).setVal(asym.first);
h_charged_UC2->bin(iy + 1).setErr(asym.second);
// pi0
book(htemp, "TMP/R_pi0_pt_UL_" + toString(ix) + "_" + toString(iy), _b_pi0_pt[0][ix][iy]->xEdges());
divide(_b_pi0_pt[0][ix][iy], _b_pi0_pt[1][ix][iy], htemp);
asym = calcAsymmetry(htemp);
h_pi0_UL2->bin(iy + 1).setVal(asym.first);
h_pi0_UL2->bin(iy + 1).setErr(asym.second);
// eta
book(htemp, "TMP/R_eta_pt_UL_" + toString(ix) + "_" + toString(iy), _b_eta_pt[0][ix][iy]->xEdges());
divide(_b_eta_pt[0][ix][iy], _b_eta_pt[1][ix][iy], htemp);
asym = calcAsymmetry(htemp);
h_eta_UL2->bin(iy + 1).setVal(asym.first);
h_eta_UL2->bin(iy + 1).setErr(asym.second);
// pi0 z>0.3
book(htemp, "TMP/R_pi0B_pt_UL_" + toString(ix) + "_" + toString(iy),
_b_pi0B_pt[0][ix][iy]->xEdges());
divide(_b_pi0B_pt[0][ix][iy], _b_pi0B_pt[1][ix][iy], htemp);
asym = calcAsymmetry(htemp);
h_pi0B_UL2->bin(iy + 1).setVal(asym.first);
h_pi0B_UL2->bin(iy + 1).setErr(asym.second);
}
}
// charged and pi0 in z bins
book(h_charged_UL, 2, 1, 1);
book(h_charged_UC, 2, 1, 2);
book(h_pi0_UL, 3, 1, 1);
book(h_eta_UL, 4, 1, 1);
book(h_pi0B_UL, 5, 1, 1);
for (unsigned int ix = 0; ix < 6; ++ix) {
// first the 1d dists
for (unsigned int ii = 0; ii < 3; ++ii) {
normalize(_h_charged_z[ii][ix]);
if (ii == 2) continue;
normalize(_h_pi0_z[ii][ix]);
if (ix == 5) continue;
normalize(_h_eta_z[ii][ix]);
normalize(_h_pi0B_z[ii][ix]);
}
Estimate1DPtr htemp;
// UL
// charged
book(htemp, "TMP/R_charged_z_UL_" + toString(ix), _h_charged_z[1][ix]->xEdges());
divide(_h_charged_z[1][ix], _h_charged_z[0][ix], htemp);
pair<double, double> asym = calcAsymmetry(htemp);
h_charged_UL->bin(ix + 1).setVal(asym.first);
h_charged_UL->bin(ix + 1).setErr(asym.second);
// UC
book(htemp, "TMP/R_charged_z_UC_" + toString(ix), _h_charged_z[1][ix]->xEdges());
divide(_h_charged_z[1][ix], _h_charged_z[2][ix], htemp);
asym = calcAsymmetry(htemp);
h_charged_UC->bin(ix + 1).setVal(asym.first);
h_charged_UC->bin(ix + 1).setErr(asym.second);
// pi0
book(htemp, "TMP/R_pi0_z_UL_" + toString(ix), _h_pi0_z[0][ix]->xEdges());
divide(_h_pi0_z[0][ix], _h_pi0_z[1][ix], htemp);
asym = calcAsymmetry(htemp);
h_pi0_UL->bin(ix + 1).setVal(asym.first);
h_pi0_UL->bin(ix + 1).setErr(asym.second);
if (ix == 5) continue;
// eta
book(htemp, "TMP/R_eta_z_UL_" + toString(ix), _h_eta_z[0][ix]->xEdges());
divide(_h_eta_z[0][ix], _h_eta_z[1][ix], htemp);
asym = calcAsymmetry(htemp);
h_eta_UL->bin(ix + 1).setVal(asym.first);
h_eta_UL->bin(ix + 1).setErr(asym.second);
// pi0 z>.3
book(htemp, "TMP/R_pi0B_z_UL_" + toString(ix), _h_pi0B_z[0][ix]->xEdges());
divide(_h_pi0B_z[0][ix], _h_pi0B_z[1][ix], htemp);
asym = calcAsymmetry(htemp);
h_pi0B_UL->bin(ix + 1).setVal(asym.first);
h_pi0B_UL->bin(ix + 1).setErr(asym.second);
// then 2nd dists
Estimate1DPtr h_charged_UL2, h_charged_UC2;
book(h_charged_UL2, 2, 2 + ix, 1);
book(h_charged_UC2, 2, 2 + ix, 2);
Estimate1DPtr h_pi0_UL2, h_eta_UL2, h_pi0B_UL2;
book(h_pi0_UL2, 3, 2 + ix, 1);
if (ix < 3) {
book(h_eta_UL2, 4, 2 + ix, 1);
book(h_pi0B_UL2, 5, 2 + ix, 1);
}
for (unsigned int iy = 0; iy < 5; ++iy) {
for (unsigned int ii = 0; ii < 3; ++ii) {
normalize(_b_charged_z[ii][ix][iy]);
if (ii == 2) continue;
normalize(_b_pi0_z[ii][ix][iy]);
if (ix > 2 || iy > 2) continue;
normalize(_b_eta_z[ii][ix][iy]);
normalize(_b_pi0B_z[ii][ix][iy]);
}
// UL
book(htemp, "TMP/R_charged_z_UL_" + toString(ix) + "_" + toString(iy),
_b_charged_z[1][ix][iy]->xEdges());
divide(_b_charged_z[1][ix][iy], _b_charged_z[0][ix][iy], htemp);
asym = calcAsymmetry(htemp);
h_charged_UL2->bin(iy + 1).setVal(asym.first);
h_charged_UL2->bin(iy + 1).setErr(asym.second);
// UC
book(htemp, "TMP/R_charged_z_UC_" + toString(ix) + "_" + toString(iy),
_b_charged_z[1][ix][iy]->xEdges());
divide(_b_charged_z[1][ix][iy], _b_charged_z[2][ix][iy], htemp);
asym = calcAsymmetry(htemp);
h_charged_UC2->bin(iy + 1).setVal(asym.first);
h_charged_UC2->bin(iy + 1).setErr(asym.second);
// pi0
book(htemp, "TMP/R_pi0_z_UL_" + toString(ix) + "_" + toString(iy), _b_pi0_z[0][ix][iy]->xEdges());
divide(_b_pi0_z[0][ix][iy], _b_pi0_z[1][ix][iy], htemp);
asym = calcAsymmetry(htemp);
h_pi0_UL2->bin(iy + 1).setVal(asym.first);
h_pi0_UL2->bin(iy + 1).setErr(asym.second);
if (ix > 2 || iy > 2) continue;
// eta
book(htemp, "TMP/R_eta_z_UL_" + toString(ix) + "_" + toString(iy), _b_eta_z[0][ix][iy]->xEdges());
divide(_b_eta_z[0][ix][iy], _b_eta_z[1][ix][iy], htemp);
asym = calcAsymmetry(htemp);
h_eta_UL2->bin(iy + 1).setVal(asym.first);
h_eta_UL2->bin(iy + 1).setErr(asym.second);
// pi0 z>0.3
book(htemp, "TMP/R_pi0B_z_UL_" + toString(ix) + "_" + toString(iy), _b_pi0B_z[0][ix][iy]->xEdges());
divide(_b_pi0B_z[0][ix][iy], _b_pi0B_z[1][ix][iy], htemp);
asym = calcAsymmetry(htemp);
h_pi0B_UL2->bin(iy + 1).setVal(asym.first);
h_pi0B_UL2->bin(iy + 1).setErr(asym.second);
}
}
// finally z and pT
// only 2d dists
for (unsigned int ix = 0; ix < 4; ++ix) {
Estimate1DPtr h_charged_UC2;
book(h_charged_UC2, 9, 1 + ix, 1);
Estimate1DPtr h_pi0_UL2, h_eta_UL2, h_pi0B_UL2;
book(h_pi0_UL2, 10, 1 + ix, 1);
if (ix < 3) {
book(h_eta_UL2, 11, 1 + ix, 1);
book(h_pi0B_UL2, 12, 1 + ix, 1);
}
for (unsigned int iy = 0; iy < 4; ++iy) {
for (unsigned int ii = 0; ii < 2; ++ii) {
normalize(_b_charged_z_pt[ii][ix][iy]);
normalize(_b_pi0_z_pt[ii][ix][iy]);
if (ix > 2) continue;
normalize(_b_eta_z_pt[ii][ix][iy]);
normalize(_b_pi0B_z_pt[ii][ix][iy]);
}
pair<double, double> asym;
Estimate1DPtr htemp;
// UC (missing last point for first histo)
if (ix != 0 || iy != 3) {
book(htemp, "TMP/R_charged_z_pt_UC_" + toString(ix) + "_" + toString(iy),
_b_charged_z_pt[0][ix][iy]->xEdges());
divide(_b_charged_z_pt[0][ix][iy], _b_charged_z_pt[1][ix][iy], htemp);
asym = calcAsymmetry(htemp);
h_charged_UC2->bin(iy + 1).setVal(asym.first);
h_charged_UC2->bin(iy + 1).setErr(asym.second);
// pi0
book(htemp, "TMP/R_pi0_z_pt_UL_" + toString(ix) + "_" + toString(iy),
_b_pi0_z_pt[0][ix][iy]->xEdges());
divide(_b_pi0_z_pt[0][ix][iy], _b_pi0_z_pt[1][ix][iy], htemp);
asym = calcAsymmetry(htemp);
h_pi0_UL2->bin(iy + 1).setVal(asym.first);
h_pi0_UL2->bin(iy + 1).setErr(asym.second);
}
if (ix > 2) continue;
// eta
book(htemp, "TMP/R_eta_z_pt_UL_" + toString(ix) + "_" + toString(iy),
_b_eta_z_pt[0][ix][iy]->xEdges());
divide(_b_eta_z_pt[0][ix][iy], _b_eta_z_pt[1][ix][iy], htemp);
asym = calcAsymmetry(htemp);
h_eta_UL2->bin(iy + 1).setVal(asym.first);
h_eta_UL2->bin(iy + 1).setErr(asym.second);
// pi0 z>0.3
book(htemp, "TMP/R_pi0B_z_pt_UL_" + toString(ix) + "_" + toString(iy),
_b_pi0B_z_pt[0][ix][iy]->xEdges());
divide(_b_pi0B_z_pt[0][ix][iy], _b_pi0B_z_pt[1][ix][iy], htemp);
asym = calcAsymmetry(htemp);
h_pi0B_UL2->bin(iy + 1).setVal(asym.first);
h_pi0B_UL2->bin(iy + 1).setErr(asym.second);
}
}
}
/// @}
/// @name Histograms
/// @{
Histo1DPtr _h_charged_pt[3][4], _h_charged_z[3][6];
Histo1DPtr _b_charged_pt[3][4][4], _b_charged_z[3][5][5], _b_charged_z_pt[2][4][4];
Histo1DPtr _h_pi0_z[2][6], _h_eta_z[2][5], _h_pi0B_z[2][5], _h_pi0_pt[2][4], _h_eta_pt[2][4],
_h_pi0B_pt[2][4];
Histo1DPtr _b_pi0_z[2][5][5], _b_eta_z[2][3][3], _b_pi0B_z[2][3][3], _b_pi0_pt[2][4][4];
Histo1DPtr _b_eta_pt[2][4][4], _b_pi0B_pt[2][4][4], _b_pi0_z_pt[2][4][4], _b_pi0B_z_pt[2][3][4],
_b_eta_z_pt[2][3][4];
/// @}
};
RIVET_DECLARE_PLUGIN(BELLE_2019_I1752523);
}