Rivet analyses referenceCLEOIII_2006_I728679Spectra of η′ mesons in Υ(1S) decaysExperiment: CLEOIII (CESR) Inspire ID: 728679 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of the inclusive production of the η′ mesons in Υ(1S) decays by the CLEO-II experiment. In principle this measurement is superseeds CLEOII_2002_I601701, however given the data for this analysis were extracted from the plots we retain the older analysis. Source code: CLEOIII_2006_I728679.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief eta' production in Upsilon(1S) decays
9 class CLEOIII_2006_I728679 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(CLEOIII_2006_I728679);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21 declare(UnstableParticles(), "UFS");
22
23 book(_hist , 1, 1, 1);
24 book(_mult,"TMP/mult");
25 book(_weightSum,"TMP/weightSum");
26 }
27
28 /// Recursively walk the decay tree to find decay products of @a p
29 void findDecayProducts(Particle mother, Particles& unstable) {
30 for(const Particle & p: mother.children()) {
31 const int id = abs(p.pid());
32 if ( id == 331 ) {
33 unstable.push_back(p);
34 }
35 else if(!p.children().empty())
36 findDecayProducts(p, unstable);
37 }
38 }
39
40 /// Perform the per-event analysis
41 void analyze(const Event& event) {
42 // find the Upsilon(1S) mesons
43 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
44 Particles upsilons = ufs.particles(Cuts::pid==553);
45 if(upsilons.empty()) vetoEvent;
46 // loop over them
47 for (const Particle& ups : upsilons) {
48 _weightSum->fill();
49 Particles unstable;
50 // Find the decay products we want
51 findDecayProducts(ups,unstable);
52 LorentzTransform cms_boost;
53 if (ups.p3().mod() > 0.001)
54 cms_boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
55 double mass = ups.mass();
56 _mult->fill(unstable.size());
57 // fill the spectrum
58 for( const Particle & p : unstable) {
59 FourMomentum p2 = cms_boost.transform(p.momentum());
60 double xp = 2.*p2.E()/mass;
61 _hist->fill(xp);
62 }
63 }
64 }
65
66
67 /// Normalise histograms etc., after the run
68 void finalize() {
69 // spectrum
70 if (_weightSum->val() > 0.)
71 scale(_hist, 1. / *_weightSum);
72 // BR
73 Estimate0DPtr est;
74 book(est, 2, 1, 1);
75 scale(_mult,1./ *_weightSum);
76 est->set(_mult->val(), _mult->err());
77 }
78
79 /// @}
80
81
82 /// @name Histograms
83 /// @{
84 Histo1DPtr _hist;
85 CounterPtr _mult;
86 CounterPtr _weightSum;
87 /// @}
88
89
90 };
91
92
93 RIVET_DECLARE_PLUGIN(CLEOIII_2006_I728679);
94
95}
|