Rivet analyses referenceCLEOIII_2004_I654639$J/\psi$ spectrum in $\Upsilon(1S)$ decaysExperiment: CLEOIII (CESR) Inspire ID: 654639 Status: VALIDATED NOHEPDATA Authors:
Beam energies: (4.7, 4.7) GeV Run details:
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}
|