Rivet analyses referenceBABAR_2010_I867611Helicity angle distributions in excited $D$ meson decaysExperiment: BABAR (PEP-II) Inspire ID: 867611 Status: VALIDATED Authors:
Beam energies: ANY Run details:
The decays $D^{**} \to D^{*+}\pi^-\to D^0\pi^+\pi^-$ are used to measure the helicity angle, i.e. the angle between the two pions in the rest frame of the $D^*$. The decays of $D_1(2420)^0$, $D^*_2(2460)^0$, $D(2550)^0$, $D^*(2600)$, $D(2750)$ were measured. The data were read from the plots in the papers and therefore for the $D_1(2420)^0$, $D^*_2(2460)^0$ the error bars are the size of the points in the plots. Source code: BABAR_2010_I867611.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief D_1 and D_2 decay distributions
9 class BABAR_2010_I867611 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2010_I867611);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21
22 // Initialise and register projections
23 declare(UnstableParticles(), "UFS");
24
25 // Book histograms
26 book(_h_D1_ctheta, 1,1,1);
27 book(_h_D2_ctheta, 1,1,2);
28 book(_h_D02S_ctheta, 1,1,3);
29 book(_h_DStar02S_ctheta, 1,1,4);
30 book(_h_D3_ctheta, 1,1,5);
31 }
32
33 /// Recursively walk the decay tree to find decay products of @a p
34 void findDecayProducts(Particle mother, Particles& dstar, Particles& d0, Particles& pi, unsigned int& ncount) {
35 for(const Particle & p: mother.children()) {
36 if(p.abspid()==413)
37 dstar.push_back(p);
38 else if(p.abspid()==421)
39 d0.push_back(p);
40 else if(p.abspid()==211)
41 pi.push_back(p);
42 ncount +=1;
43 }
44 }
45
46 /// Perform the per-event analysis
47 void analyze(const Event& event) {
48 for(const Particle& p : apply<UnstableParticles>(event, "UFS").particles(Cuts::abspid==425 || Cuts::abspid==10423 ||
49 Cuts::abspid==100421 || Cuts::abspid==100423 ||
50 Cuts::abspid==427)) {
51 // decay products
52 Particles dstar,d0,pi;
53 unsigned int ncount=0;
54 findDecayProducts(p,dstar,d0, pi,ncount);
55 if(ncount!=2 || dstar.size()!=1 || pi.size()!=1 || d0.size()!=0 ) continue;
56 if(dstar[0].pid()/p.pid()<0) continue;
57 Particle p2 = dstar[0];
58 LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(p2.momentum().betaVec());
59 Vector3 d1 = boost.transform(pi[0].momentum()).p3().unit();
60 ncount=0;
61 dstar.clear();
62 d0.clear();
63 pi.clear();
64 findDecayProducts(p2,dstar,d0, pi,ncount);
65 if(ncount!=2 || dstar.size()!=0 || pi.size()!=1 || d0.size()!=1 ) continue;
66 if(pi[0].pid()/p2.pid()<0) continue;
67 Vector3 d2 = boost.transform(pi[0].momentum()).p3().unit();
68 double cTheta = d1.dot(d2);
69 // decay angles
70 if(p.abspid()==425)
71 _h_D2_ctheta->fill(cTheta);
72 else if(p.abspid()==10423)
73 _h_D1_ctheta->fill(cTheta);
74 else if(p.abspid()==100421)
75 _h_D02S_ctheta->fill(cTheta);
76 else if(p.abspid()==100423)
77 _h_DStar02S_ctheta->fill(cTheta);
78 else if(p.abspid()==427)
79 _h_D3_ctheta->fill(cTheta);
80 }
81 }
82
83 /// Normalise histograms etc., after the run
84 void finalize() {
85 normalize(_h_D1_ctheta);
86 normalize(_h_D2_ctheta);
87 normalize(_h_D02S_ctheta);
88 normalize(_h_DStar02S_ctheta);
89 normalize(_h_D3_ctheta);
90 }
91
92 /// @}
93
94
95 /// @name Histograms
96 /// @{
97 Histo1DPtr _h_D1_ctheta,_h_D2_ctheta,_h_D02S_ctheta;
98 Histo1DPtr _h_DStar02S_ctheta,_h_D3_ctheta;
99 /// @}
100
101 };
102
103
104
105 RIVET_DECLARE_PLUGIN(BABAR_2010_I867611);
106
107}
|