Rivet analyses referenceBELLE_2017_I1499706$\chi_{c1}$ spectrum in $\Upsilon(1,2S)$ decaysExperiment: BELLE (KEKB) Inspire ID: 1499706 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the scaled momentum of $\chi_{c1}$ in $\Upsilon(1S)$ and $\Upsilon(2S)$ decays Source code: BELLE_2017_I1499706.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief chi_c1 in Upsilon(1,2S) decays
9 class BELLE_2017_I1499706 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2017_I1499706);
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 || Cuts::pid==100553), "UFS");
23 //histos
24 for(unsigned int ix=0;ix<2;++ix) {
25 for(unsigned int iy=0;iy<2;++iy)
26 book(_h[ix][iy],1,1+ix,1+iy);
27 book(_c[ix],"TMP/nUps"+toString(ix+1));
28 }
29 }
30
31 /// Recursively walk the decay tree to find decay products of @a p
32 void findDecayProducts(Particle mother, Particles& unstable) {
33 for(const Particle & p: mother.children()) {
34 const int id = abs(p.pid());
35 if(id == 20443) {
36 unstable.push_back(p);
37 }
38 if(!p.children().empty())
39 findDecayProducts(p, unstable);
40 }
41 }
42
43 /// Perform the per-event analysis
44 void analyze(const Event& event) {
45 // Find the Upsilons among the unstables
46 for(const Particle & ups : apply<UnstableParticles>(event, "UFS").particles()) {
47 unsigned int iloc = ups.pid()/100000;
48 _c[iloc]->fill();
49 // boost to rest frame
50 LorentzTransform boost;
51 if (ups.p3().mod() > 1*MeV)
52 boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
53 // find ch_c1
54 Particles unstable;
55 findDecayProducts(ups,unstable);
56 // loop over chi_c1
57 for(const Particle& chi : unstable) {
58 double Pmax = 0.5*(sqr(ups.mass())-sqr(chi.mass()))/ups.mass();
59 const FourMomentum p2 = boost.transform(chi.momentum());
60 const double xP = p2.p3().mod()/Pmax;
61 _h[0][iloc]->fill(xP);
62 _h[1][iloc]->fill(xP);
63 }
64 }
65 }
66
67
68 /// Normalise histograms etc., after the run
69 void finalize() {
70 for(unsigned int ix=0;ix<2;++ix)
71 for(unsigned int iy=0;iy<2;++iy)
72 scale(_h[ix][iy],1e4/ *_c[iy]);
73 }
74
75 /// @}
76
77
78 /// @name Histograms
79 /// @{
80 Histo1DPtr _h[2][2];
81 CounterPtr _c[2];
82 /// @}
83
84
85 };
86
87
88 RIVET_DECLARE_PLUGIN(BELLE_2017_I1499706);
89
90}
|