Rivet analyses
Production of the η′(958) and f0(980) in e+e− annihilation in the Upsilon region.
Experiment: ARGUS (DORIS)
Inspire ID: 342061
Status: VALIDATED
Authors: - Peter Richardson
References: - Z.Phys. C58 (1993) 199-206
Beams: e+ e-
Beam energies: (4.7, 4.7); (5.0, 5.0); (5.2, 5.2)GeV
Run details: - e+e− analysis near the Υ(4S) resonance.
Measurement of the inclusive production of the η′(958) and f0(980) mesons in e+e− annihilation in the Upsilon region. Data are taken on the Υ(1S), Υ(2S) and Υ(4S) resonances and in the nearby continuum (9.36 to 10.45 GeV center-of-mass energy)
Source
code:ARGUS_1993_I342061.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/UnstableParticles.hh"
namespace Rivet {
/// @brief Production of the $\eta'(958)$ and $f_0(980)$ in $e^+e^-$ annihilation in the Upsilon region
///
/// @author Peter Richardson
class ARGUS_1993_I342061 : public Analysis {
public:
RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1993_I342061);
void init() {
declare(UnstableParticles(), "UFS");
book(_weightSum_cont, "TMP/weightSum_cont");
book(_weightSum_Ups1, "TMP/weightSum_Ups1");
book(_weightSum_Ups2, "TMP/weightSum_Ups2");
book(_count_etaPrime_highZ, 1,1,1);
book(_count_etaPrime_allZ , 1,1,2);
book(_count_f0 , 5,1,1);
book(_hist_cont_f0 ,2, 1, 1);
book(_hist_Ups1_f0 ,3, 1, 1);
book(_hist_Ups2_f0 ,4, 1, 1);
}
void analyze(const Event& e) {
// Find the Upsilons among the unstables
const UnstableParticles& ufs = apply<UnstableParticles>(e, "UFS");
Particles upsilons = ufs.particles(Cuts::pid==553 or Cuts::pid==100553);
// Continuum
if (upsilons.empty()) {
MSG_DEBUG("No Upsilons found => continuum event");
_weightSum_cont->fill();
for (const Particle& p : ufs.particles()) {
const int id = p.pid();
const double xp = 2.*p.E()/sqrtS();
const double beta = p.p3().mod() / p.E();
if (id == 9010221) {
_hist_cont_f0->fill(xp, 1./beta);
_count_f0->fill(string("10.45"));
} else if (id == 331) {
if (xp > 0.35) _count_etaPrime_highZ->fill(string("9.36 - 10.45"));
_count_etaPrime_allZ->fill(string("9.36 - 10.45"));
}
}
}
// Upsilon(s) found
else {
for (const Particle& ups : upsilons) {
const int parentId = ups.pid();
if(parentId==553) {
_weightSum_Ups1->fill();
}
else {
_weightSum_Ups2->fill();
}
Particles unstable;
// Find the decay products we want
findDecayProducts(ups, unstable);
// boost to rest frame (if required)
LorentzTransform cms_boost;
if (ups.p3().mod() > 1*MeV)
cms_boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
const double mass = ups.mass();
// loop over decay products
for(const Particle& p : unstable) {
const int id = p.pid();
const FourMomentum p2 = cms_boost.transform(p.momentum());
const double xp = 2.*p2.E()/mass;
const double beta = p2.p3().mod()/p2.E();
if (id == 9010221) {
if(parentId == 553 ) {
_hist_Ups1_f0->fill(xp, 1./beta);
_count_f0->fill(string("9.46"));
}
else {
_hist_Ups2_f0->fill(xp, 1./beta);
_count_f0->fill(string("10.02"));
}
}
else if ( id == 331 ) {
if (parentId == 553) {
if (xp > 0.35) _count_etaPrime_highZ->fill(string("9.46"));
_count_etaPrime_allZ->fill(string("9.46"));
}
else {
_count_etaPrime_allZ->fill(string("10.02"));
}
}
}
}
}
}
void finalize() {
// Point at 9.905
if (_weightSum_cont->val() > 0) {
_count_etaPrime_highZ->binAt(string("9.36 - 10.45")).scaleW(1./_weightSum_cont->val());
_count_etaPrime_allZ ->binAt(string("9.36 - 10.45")).scaleW(1./_weightSum_cont->val());
_count_f0 ->binAt( string("10.45")).scaleW(1./_weightSum_cont->val());
}
// Point at 9.460
if (_weightSum_Ups1->val() > 0) {
_count_etaPrime_highZ->binAt(string("9.46")).scaleW(1./_weightSum_Ups1->val());
_count_etaPrime_allZ ->binAt(string("9.46")).scaleW(1./_weightSum_Ups1->val());
_count_f0 ->binAt(string("9.46")).scaleW(1./_weightSum_Ups1->val());
}
// Point at 10.02
if (_weightSum_Ups2->val() > 0) {
_count_etaPrime_allZ->binAt(string("10.02")).scaleW(1./_weightSum_Ups2->val());
_count_f0 ->binAt(string("10.02")).scaleW(1./_weightSum_Ups2->val());
}
// Scale histos
if (_weightSum_cont->val() > 0.) scale(_hist_cont_f0, 1./ *_weightSum_cont);
if (_weightSum_Ups1->val() > 0.) scale(_hist_Ups1_f0, 1./ *_weightSum_Ups1);
if (_weightSum_Ups2->val() > 0.) scale(_hist_Ups2_f0, 1./ *_weightSum_Ups2);
}
private:
/// @name Counters
/// @{
BinnedHistoPtr<string> _count_etaPrime_highZ, _count_etaPrime_allZ, _count_f0;
CounterPtr _weightSum_cont,_weightSum_Ups1,_weightSum_Ups2;
/// @}
/// Histos
Histo1DPtr _hist_cont_f0, _hist_Ups1_f0, _hist_Ups2_f0;
/// Recursively walk the decay tree to find decay products of @a p
void findDecayProducts(Particle mother, Particles& unstable) {
for (const Particle & p: mother.children()) {
const int id = p.pid();
if (id == 331 || id == 9010221) {
unstable.push_back(p);
}
else if(!p.children().empty()) {
findDecayProducts(p, unstable);
}
}
}
};
RIVET_DECLARE_ALIASED_PLUGIN(ARGUS_1993_I342061, ARGUS_1993_S2669951);
}Aliases: - ARGUS_1993_S2669951