rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CLEOIII_2004_I654639

$J/\psi$ spectrum in $\Upsilon(1S)$ decays
Experiment: CLEOIII (CESR)
Inspire ID: 654639
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.D 70 (2004) 072001
Beams: e+ e-
Beam energies: (4.7, 4.7) GeV
Run details:
  • e+e- > hadrons at Upslion(1S)

Measurement of the $J/\psi$ spectrum in $\Upsilon(1S)$ decays. The corrected data were read from the figures in the paper.

Source code: CLEOIII_2004_I654639.cc
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/UnstableParticles.hh"
 4
 5namespace Rivet {
 6
 7
 8  /// @brief J/psi spectrum in Upsilon(1S) decay
 9  class CLEOIII_2004_I654639 : public Analysis {
10  public:
11
12    /// Constructor
13    RIVET_DEFAULT_ANALYSIS_CTOR(CLEOIII_2004_I654639);
14
15
16    /// @name Analysis methods
17    /// @{
18
19    /// Book histograms and initialise projections before the run
20    void init() {
21      // Initialise and register projections
22      declare(UnstableParticles(Cuts::pid==553), "UFS");
23      // histos
24      for (unsigned int ix=0;ix<2;++ix) {
25        book(_h[ix],1,1,1+ix);
26       }
27    }
28
29   /// Recursively walk the decay tree to find decay products of @a p
30    void findDecayProducts(Particle mother, Particles& unstable) {
31      for (const Particle& p: mother.children()) {
32        const int id = abs(p.pid());
33        if (id == 443) {
34          unstable.push_back(p);
35        }
36        if (!p.children().empty()) {
37          findDecayProducts(p, unstable);
38        }
39      }
40    }
41
42    /// Perform the per-event analysis
43    void analyze(const Event& event) {
44      // Find the Upsilons among the unstables
45      for (const Particle& ups : apply<UnstableParticles>(event, "UFS").particles()) {
46        // boost to rest frame
47        LorentzTransform boost;
48        if (ups.p3().mod() > 1*MeV) {
49          boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
50        }
51        // find  psi
52        Particles unstable;
53        findDecayProducts(ups,unstable);
54        // loop over psi/psi(2S)
55        for (const Particle& psi : unstable) {
56          double Pmax = 0.5*(sqr(ups.mass())-sqr(psi.mass()))/ups.mass();
57          const FourMomentum p2 = boost.transform(psi.momentum());
58          const double xP = p2.p3().mod()/Pmax;
59          _h[0]->fill(xP);
60          _h[1]->fill(xP);
61        }
62      }
63    }
64
65
66    /// Normalise histograms etc., after the run
67    void finalize() {
68      scale(_h, crossSection()/sumOfWeights()/picobarn);
69    }
70
71    /// @}
72
73
74    /// @name Histograms
75    /// @{
76    Histo1DPtr _h[2];
77    /// @}
78
79
80  };
81
82
83  RIVET_DECLARE_PLUGIN(CLEOIII_2004_I654639);
84
85}