Rivet analyses
Helicity angle distributions in χc1 → γ + (ϕ, ρ, ω)
Experiment: BESIII (BEPC)
Inspire ID: 894356
Status: VALIDATED NOHEPDATA
Authors: - Peter Richardson
References: - Phys.Rev.D 83 (2011) 112005
Beams: * *
Beam energies: ANY
Run details: - Any process producing chi_c1, originally e+e- -> psi(2S)
Measurement of the helicity angles in the decays χc1 → γ + (ϕ, ρ, ω). The data were read from the plots in the paper amnd may not be corrected for efficiency/acceptance, however the backgrounds given in the paper have been subtracted.
Source
code:BESIII_2011_I894356.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/UnstableParticles.hh"
namespace Rivet {
/// @brief chi_c1 -> gamma +V
class BESIII_2011_I894356 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2011_I894356);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// projections
declare(UnstableParticles(Cuts::pid == 20443), "UFS");
// histograms
for (unsigned int ix = 0; ix < 3; ++ix) book(_h[ix], 1, 1, 1 + ix);
}
void findChildren(const Particle& p,
Particles& pim,
Particles& pip,
Particles& pi0,
unsigned int& ncount) {
for (const Particle& child : p.children()) {
if (child.pid() == PID::PIPLUS) {
pip.push_back(child);
ncount += 1;
}
else if (child.pid() == PID::PIMINUS) {
pim.push_back(child);
ncount += 1;
}
else if (child.pid() == PID::PI0) {
pi0.push_back(child);
ncount += 1;
}
else if (child.children().empty()) {
ncount += 1;
}
else
findChildren(child, pim, pip, pi0, ncount);
}
}
/// Perform the per-event analysis
void analyze(const Event& event) {
for (const Particle& p : apply<UnstableParticles>(event, "UFS").particles()) {
if (p.children().size() != 2) continue;
Particle gamma, meson;
// get the photon and the meson
if (p.children()[0].pid() == PID::PHOTON) {
gamma = p.children()[0];
meson = p.children()[1];
}
else if (p.children()[1].pid() == PID::PHOTON) {
gamma = p.children()[1];
meson = p.children()[0];
}
else
continue;
// check the meson
int imode = -1;
if (meson.pid() == 333)
imode = 0;
else if (meson.pid() == 113)
imode = 1;
else if (meson.pid() == 223)
imode = 2;
else
continue;
Particle d1, d2, d3;
if (imode == 0) {
if (meson.children().size() != 2) continue;
if (meson.children()[0].pid() == -meson.children()[1].pid()
&& meson.children()[0].abspid() == 321) {
d1 = meson.children()[0];
d2 = meson.children()[0];
}
else
continue;
}
else if (imode == 1) {
if (meson.children().size() != 2) continue;
if (meson.children()[0].pid() == -meson.children()[1].pid()
&& meson.children()[0].abspid() == 211) {
d1 = meson.children()[0];
d2 = meson.children()[0];
}
else
continue;
}
else if (imode == 2) {
unsigned int ncount = 0;
Particles pip, pim, pi0;
findChildren(meson, pim, pip, pi0, ncount);
if (ncount == 3 && pim.size() == 1 && pip.size() == 1 && pi0.size() == 1) {
d1 = pip[0];
d2 = pim[0];
d3 = pi0[0];
}
else
continue;
}
if (d1.pid() < 0) swap(d1, d2);
// boost in chi_c1 frame
LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(p.momentum().betaVec());
FourMomentum pMeson = boost1.transform(meson.momentum());
FourMomentum p1 = boost1.transform(d1.momentum());
FourMomentum p2 = boost1.transform(d2.momentum());
Vector3 axis1 = pMeson.p3().unit();
LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pMeson.betaVec());
p1 = boost2.transform(p1);
p2 = boost2.transform(p2);
// axis in meson rest frame
Vector3 axis2;
if (imode < 2) {
axis2 = p1.p3().unit();
}
else {
FourMomentum p3 = boost1.transform(d3.momentum());
p3 = boost2.transform(p3);
axis2 = p1.p3().cross(p2.p3()).unit();
}
_h[imode]->fill(axis1.dot(axis2));
}
}
/// Normalise histograms etc., after the run
void finalize() {
for (unsigned int ix = 0; ix < 3; ++ix) normalize(_h[ix], 1., false);
}
/// @}
/// @name Histograms
/// @{
Histo1DPtr _h[3];
/// @}
};
RIVET_DECLARE_PLUGIN(BESIII_2011_I894356);
}