Rivet analyses
Kinematic distributions in the decay η′ → ηπ0π0
Experiment: BESIII (BEPC)
Inspire ID: 2105430
Status: VALIDATED NOHEPDATA
Authors: - Peter Richardson
References: - arXiv: 2207.01004
Beams: * *
Beam energies: ANY
Run details: - Any process producing etaprime mesons
Measurement of kinematic distributions in the decay η′ → ηπ0π0.
Source
code:BESIII_2022_I2105430.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/DecayedParticles.hh"
#include "Rivet/Projections/UnstableParticles.hh"
namespace Rivet {
/// @brief eta' -> eta pi0pi0
class BESIII_2022_I2105430 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2022_I2105430);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// Initialise and register projections
UnstableParticles ufs = UnstableParticles(Cuts::pid == PID::ETAPRIME);
declare(ufs, "UFS");
DecayedParticles ETA(ufs);
ETA.addStable(PID::PI0);
ETA.addStable(PID::K0S);
ETA.addStable(PID::ETA);
declare(ETA, "ETA");
// histograms
for (unsigned int ix = 0; ix < 4; ++ix) {
if (ix < 2)
book(_h[ix], 1 + ix, 1, 1);
else
book(_h[ix], "TMP/h_" + toString(ix + 1), refData(1 + ix, 1, 1));
}
}
/// Perform the per-event analysis
void analyze(const Event& event) {
static const map<PdgId, unsigned int>& mode = {{221, 1}, {111, 2}};
DecayedParticles ETA = apply<DecayedParticles>(event, "ETA");
// loop over particles
for (unsigned int ix = 0; ix < ETA.decaying().size(); ++ix) {
// select right decay mode
if (!ETA.modeMatches(ix, 3, mode)) continue;
const Particle& eta = ETA.decayProducts()[ix].at(221)[0];
const Particles& pi0 = ETA.decayProducts()[ix].at(111);
double s1 = (eta.momentum() + pi0[0].momentum()).mass2();
double s2 = (eta.momentum() + pi0[1].momentum()).mass2();
double s3 = (pi0[0].momentum() + pi0[1].momentum()).mass2();
double mOut = eta.mass() + pi0[0].mass() + pi0[1].mass();
double Q = ETA.decaying()[ix].mass() - mOut;
double X = sqrt(3.) / 2. / ETA.decaying()[ix].mass() / Q * fabs(s1 - s2);
double Y = mOut / 2. / Q / pi0[0].mass() / ETA.decaying()[ix].mass()
* (sqr(ETA.decaying()[ix].mass() - eta.mass()) - s3)
- 1.;
_h[0]->fill(X);
_h[1]->fill(Y);
_h[2]->fill(s1);
_h[2]->fill(s2);
_h[3]->fill(s3);
}
}
/// Normalise histograms etc., after the run
void finalize() {
// phase space volumes in the different bins (PR has python program which computed these)
vector<double> phsp[2] = {
{1.29921180560319, 1.9664163781008512, 2.437411090783833, 2.8167198110075895, 3.1384424839069816,
3.4191598743922667, 3.6684846236204653, 3.892603483754069, 4.0957879360431315, 4.281140528359467,
4.451003067955206, 4.607197285803388, 4.751175204530485, 4.88411754014731, 5.007000581045515,
5.120643099873668, 5.225740150956019, 5.322887984241281, 5.412602779591596, 5.4953349814658825,
5.571480436748339, 5.641389167221586, 5.705372363331301, 5.763708020726753, 5.8166455273826925,
5.864409429427267, 5.907202547019624, 5.945208570543684, 5.978594237253912, 6.007511166123523,
6.032097411815989, 6.0524787859064215, 6.068769983650643, 6.081075546972378, 6.08949068836251,
6.094101995655494, 6.094988033869798, 6.092219857249216, 6.085861442152403, 6.075970049380721,
6.062596522809926, 6.045785529721536, 6.025575746951852, 6.00199999583944, 5.975085327911516,
5.944853062268092, 5.911318774664203, 5.874492237320916, 5.834377307479565, 5.790971761612199,
5.744267070970989, 5.6942481127479825, 5.640892809460393, 5.584171687195311, 5.524047340938203,
5.460473792237251, 5.39339572074258, 5.32274754646675, 5.248452333616691, 5.1704204791023605,
5.088548138714816, 5.002715330614686, 4.91278363793704, 4.818593408199339, 4.719960314146789,
4.616671094724371, 4.50847822999662, 4.395093210678961, 4.276177926624657, 4.151333494932917,
4.02008553685901, 3.881864423721346, 3.735978221227386, 3.5815747385987744, 3.4175867864493514,
3.2426505513681274, 3.0549789164129533, 2.8521549298248745, 2.6307734449059827, 2.3857664628727737,
2.10898208394632, 1.7856475571555508, 1.382647074122462, 0.7594829443647874},
{2.3997722961635115, 4.231978624872276, 5.395770701813711, 6.303248399189668, 7.05746502255801,
7.705360260187261, 8.273295064456326, 8.777930815906547, 9.230644528844046, 9.63964259335122,
10.011092003070875, 10.349776928006058, 10.659504191013701, 10.943366292678283, 11.203918989983865,
11.443305233235264, 11.66334412312612, 11.865596310404976, 12.051413085183789, 12.221973898377072,
12.378315503623586, 12.521354914670614, 12.65190772145681, 12.770702870483907, 12.878394715019976,
12.975572931081437, 13.062770746227885, 13.140471820760519, 13.209116042291283, 13.269104436365959,
13.32080335209865, 13.364548048606796, 13.400645782615129, 13.429378477926482, 13.45100504209833,
13.465763383568648, 13.473872172872744, 13.475532383910185, 13.470928645028556, 13.46023042466219,
13.443593072150625, 13.421158730971719, 13.393057138809006, 13.35940632651546, 13.320313226043833,
13.275874195713712, 13.22617546971762, 13.171293537484289, 13.11129545737622, 13.046239108166182,
12.9761733807838, 12.901138311921745, 12.821165160216768, 12.736276424849162, 12.646485805511595,
12.551798101758047, 12.45220904872841, 12.347705085120998, 12.238263048016853, 12.123849787699887,
12.004421693910436, 11.879924122946402, 11.750290712597788, 11.61544256895382, 11.475287305511241,
11.329717910545805, 11.178611413135048, 11.021827311202296, 10.859205716037735, 10.690565156327159,
10.515699969937556, 10.334377192397056, 10.146332825512, 9.951267335531437, 9.748840184294515,
9.538663133883416, 9.320291977999595, 9.093216230262732, 8.856846123359322, 8.610496015674501,
8.3533629186997, 8.084498274135298, 7.802770195530031, 7.506811917146632, 7.194949741305242,
6.865099532725173, 6.5146131262832965, 6.140041338435136, 5.736750353635648, 5.298262152423473,
4.81502775442034, 4.271887046472109, 3.6419114500505065, 2.8669813619285884}};
// normalize the histograms
for (unsigned int ix = 0; ix < 4; ++ix) normalize(_h[ix]);
// last two plots convert to scatter and normalize to phase space volume in bin
for (unsigned int ix = 0; ix < 2; ++ix) {
// convert to scatter
Estimate1DPtr tmp;
book(tmp, 3 + ix, 1, 1);
barchart(_h[ix + 2], tmp);
double step[2] = {0.0025, 0.001};
// divide by phase space volume
for (unsigned int ip = 0; ip < tmp->numBins(); ++ip) {
tmp->bin(ip + 1).scale(1. / phsp[ix][ip] / step[ix]);
}
}
}
/// @}
/// @name Histograms
/// @{
Histo1DPtr _h[4];
/// @}
};
RIVET_DECLARE_PLUGIN(BESIII_2022_I2105430);
}