Rivet analyses referenceARGUS_1987_I248655Direct Photon Spectrum in $\Upsilon(1S)$ decaysExperiment: ARGUS (DORIS) Inspire ID: 248655 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of the direct photon spectrum in $\Upsilon(1S)$ decays by the ARGUS experiment. While there is a more recent CLEO result that is not corrected for efficiency and resolution. The spectrum was read from the figures in the paper as it was not included in the original HEPDATA entry. The spectrum is not corrected for resolution and therefore the photon energies are smeared using the resolution given in the paper. Source code: ARGUS_1987_I248655.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4#include "Rivet/Tools/Random.hh"
5
6namespace Rivet {
7
8
9 /// @brief direct photon spectrum in upslion decay
10 class ARGUS_1987_I248655 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1987_I248655);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 // projections
23 declare(UnstableParticles(Cuts::pid==553), "UFS");
24 book(_h_gamma,2,1,1);
25 book(_n_Ups,"TMP/nUps");
26 }
27
28
29 /// Perform the per-event analysis
30 void analyze(const Event& event) {
31 // Find the Upsilons among the unstables
32 for (const Particle& ups : apply<UnstableParticles>(event, "UFS").particles()) {
33 unsigned int nhadron(0);
34 Particles photons;
35 for(const Particle & child : ups.children()) {
36 if(PID::isHadron(child.pid()))
37 ++nhadron;
38 else if(child.pid()==PID::PHOTON)
39 photons.push_back(child);
40 }
41 if(nhadron!=0 && photons.empty()) {
42 _n_Ups->fill();
43 }
44 else if(nhadron!=0) {
45 LorentzTransform boost;
46 if (ups.p3().mod() > 1*MeV)
47 boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
48 for(const Particle & gamma:photons) {
49 double E = boost.transform(gamma.momentum()).E();
50 E = randnorm(E,sqrt(sqr(0.072)+sqr(0.065)/E)*E);
51 _h_gamma->fill(2.*E/ups.mass());
52 }
53 }
54 }
55 }
56
57
58 /// Normalise histograms etc., after the run
59 void finalize() {
60 scale(_h_gamma, 1./ *_n_Ups);
61 }
62
63 /// @}
64
65
66 /// @name Histograms
67 /// @{
68 Histo1DPtr _h_gamma;
69 CounterPtr _n_Ups;
70 /// @}
71
72
73 };
74
75
76 RIVET_DECLARE_PLUGIN(ARGUS_1987_I248655);
77
78}
|