Rivet analyses
Measurement of the Dalitz plot for η → π+π−π0
Experiment: KLOE2 (DAPHNE)
Inspire ID: 1416990
Status: VALIDATED
Authors: - Peter Richardson
References: - JHEP 1605 (2016) 019
Beams: * *
Beam energies: ANY
Run details: - Any process producing eta mesons
Measurement of the dalitz plot for the decay η → π+π−π0 by the KLOE2 collaboration. The distributions are normalised such that the bin at X = 0, Y = 0.05 is 1.
Source
code:KLOE2_2016_I1416990.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/UnstableParticles.hh"
namespace Rivet {
/// @brief eta -> 3 pi analysis
class KLOE2_2016_I1416990 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(KLOE2_2016_I1416990);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// Initialise and register projections
declare(UnstableParticles(), "UFS");
// Book histograms
book(_dalitz, 1,1,1);
book(_h_dalitz, {-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,
0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8});
for (unsigned int i=1;i<=_h_dalitz->numBins();++i) {
book(_h_dalitz->bins()[i], 2, 1, i);
}
book(_norm, "TMP/norm");
}
void findDecayProducts(const Particle& mother, unsigned int & nstable,
Particles &pi0, Particles &pip, Particles &pim) {
for (const Particle & p : mother.children()) {
int id = p.pid();
if (id == PID::PIMINUS ) {
pim.push_back(p);
++nstable;
}
else if (id == PID::PIPLUS) {
pip.push_back(p);
++nstable;
}
else if (id == PID::PI0) {
pi0.push_back(p);
++nstable;
}
else if ( !p.children().empty() ) {
findDecayProducts(p, nstable, pi0,pip,pim);
}
else {
++nstable;
}
}
}
/// Perform the per-event analysis
void analyze(const Event& event) {
// Loop over eta mesons
for (const Particle& p : apply<UnstableParticles>(event, "UFS").particles(Cuts::pid==PID::ETA)) {
Particles pi0, pip, pim;
unsigned nstable(0);
findDecayProducts(p,nstable,pi0,pip,pim);
if (nstable==3 && pi0.size()==1 && pip.size()==1 && pim.size()==1) {
// massesx
double meta = p.mass();
double mpip = pip[0].mass();
double mpim = pim[0].mass();
double mpi0 = pi0[0].mass();
// kinetic energies
double Q = meta-mpip-mpim-mpi0;
double Ep = 0.5/meta*(sqr(meta)+sqr(mpip)-(p.momentum()-pip[0].momentum()).mass2())-mpip;
double Em = 0.5/meta*(sqr(meta)+sqr(mpim)-(p.momentum()-pim[0].momentum()).mass2())-mpim;
double E0 = 0.5/meta*(sqr(meta)+sqr(mpi0)-(p.momentum()-pi0[0].momentum()).mass2())-mpi0;
// X and Y variables
double X = sqrt(3.)/Q*(Ep-Em);
double Y = 3.*E0/Q-1.;
_dalitz->fill(X,Y);
_h_dalitz->fill(Y,X);
if(fabs(X)<0.03225806451612903 && Y>0. && Y<0.1) _norm->fill();
}
}
}
/// Normalise histograms etc., after the run
void finalize() {
scale(_dalitz, 0.06451612903225806*0.1/ *_norm);
scale(_h_dalitz, 0.06451612903225806/ *_norm);
}
/// @}
/// @name Histograms
/// @{
Histo2DPtr _dalitz;
Histo1DGroupPtr _h_dalitz;
CounterPtr _norm;
/// @}
};
RIVET_DECLARE_PLUGIN(KLOE2_2016_I1416990);
}