Rivet analyses


title: BABAR_2014_I1286317

Rate and momentum spectra for anti-deuteron production in $\Upsilon(1,2,3S)$ decays and nearby continuum

Experiment: BABAR (PEP-II)

Inspire ID: 1286317

Status: VALIDATED

Authors: - Peter Richardson

References: - Phys.Rev. D89 (2014) no.11, 111102

Beams: e+ e-

Beam energies: (4.7, 4.7); (5.0, 5.0); (5.2, 5.2); (5.3, 5.3)GeV

Run details: - e+e- to hadrons via Upsilon(1,2,3S) and continuum at 10.58 GeV

Measurement of the branching ratios momentum spectra for anti-deuteron production in $\Upsilon(1,2,3S)$ decays, together with the cross section and momentum spectrum for anti-deuteron production in the continuum

Source code:BABAR_2014_I1286317.cc

```c++ // -- C++ --

include "Rivet/Analysis.hh"

include "Rivet/Projections/UnstableParticles.hh"

namespace Rivet {

/// @brief anti-deuteron spectrum in upslion decays class BABAR_2014_I1286317 : public Analysis { public:

/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2014_I1286317);


/// @name Analysis methods
/// @{

/// Book histograms and initialise projections before the run
void init() {
  // Initialise and register projections
  declare(UnstableParticles(), "UFS");
  // histograms
  book(_h_p[0], 6, 1, 1);
  book(_h_p[1], 6, 2, 1);
  book(_h_p[2], 6, 3, 1);
  book(_h_p[3], 6, 4, 1);
  book(_h_r[0], 1, 1, 1);
  book(_h_r[1], 2, 1, 1);
  book(_h_r[2], 3, 1, 1);
  book(_h_r[3], 5, 1, 1);
  book(_h_r[4], 4, 1, 1);
  book(_w[0], "TMP/w_0");
  book(_w[1], "TMP/w_1");
  book(_w[2], "TMP/w_2");
  book(_w[3], "TMP/w_3");
}

/// Recursively walk the decay tree to find decay products of @a p
void findDecayProducts(Particle mother, Particles& deut) {
  for (const Particle& p : mother.children()) {
    if (p.pid() == _did) {
      deut.push_back(p);
    }
    else if (!p.children().empty())
      findDecayProducts(p, deut);
  }
}

/// Perform the per-event analysis
void analyze(const Event& event) {
  // find upsilon states
  UnstableParticles ufs = apply<UnstableParticles>(event, "UFS");
  Particles ups = ufs.particles(Cuts::pid == 553 || Cuts::pid == 100553 || Cuts::pid == 200553);
  // none, then continuum event
  if (ups.empty()) {
    Particles deut = ufs.particles(Cuts::pid == _did);
    _w[3]->fill();
    for (const Particle& p : deut) {
      double mom = p.momentum().p3().mod();
      _h_p[3]->fill(mom);
      _h_r[3]->fill("10.58"s);
      _h_r[4]->fill("10.58"s);
    }
  }
  // upsilon decays
  else {
    for (const Particle& Y : ups) {
      unsigned int ihist = 2;
      if (Y.pid() == 100553) {
        ihist = 1;
      }
      else if (Y.pid() == 200553) {
        ihist = 0;
      }
      _w[ihist]->fill();
      Particles deut;
      findDecayProducts(Y, deut);
      if (deut.empty()) continue;
      LorentzTransform boost;
      if (Y.p3().mod() > 1 * MeV)
        boost = LorentzTransform::mkFrameTransformFromBeta(Y.momentum().betaVec());
      for (const Particle& p : deut) {
        double mom = boost.transform(p.momentum()).p3().mod();
        _h_r[ihist]->fill("10.58"s);
        _h_p[ihist]->fill(mom);
        _w[ihist]->fill();
      }
    }
  }
}


/// Normalise histograms etc., after the run
void finalize() {
  // upsilon decays
  for (unsigned int ix = 0; ix < 3; ++ix) {
    if (_w[ix]->effNumEntries() <= 0.) continue;
    scale(_h_p[ix], 1e6 / *_w[ix]);
    scale(_h_r[ix], 1. / *_w[ix]);
    Histo1DPtr _h_p[4], _h_r[5];
    CounterPtr _w[4];
  }
  // continuum
  if (_w[3]->effNumEntries() > 0.) {
    scale(_h_p[3], crossSection() / sumOfWeights() / femtobarn);
    scale(_h_r[4], crossSection() / sumOfWeights() / femtobarn);
    scale(_h_r[3], 1. / *_w[3]);
  }
}

/// @}


/// @name Histograms
/// @{
Histo1DPtr _h_p[4];
BinnedHistoPtr<string> _h_r[5];
CounterPtr _w[4];

// deuteron id code
static const int _did = -1000010020;
/// @}

};

RIVET_DECLARE_PLUGIN(BABAR_2014_I1286317);

} ```