Rivet analyses referenceBELLE_2006_I689881Measurement of the kaon helicity angle in $B^0\to \chi_{c1} K^{*0}$Experiment: BELLE (KEKB) Inspire ID: 689881 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the $K^*$ helicity angle in the charmonium decay for $B^0\to \chi_{c1} K^{*0}$. The data were read from Figure 5 in the paper which is corrected for efficiency/acceptance. Source code: BELLE_2006_I689881.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief B -> chi_c1 K*
9 class BELLE_2006_I689881 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2006_I689881);
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 UnstableParticles ufs = UnstableParticles(Cuts::abspid==511);
23 declare(ufs, "UFS");
24 // histograms
25 book(_h,1,1,1);
26 }
27
28 bool isK(int pid) const {
29 return pid==130 || pid==310 || pid==311 || pid==321;
30 }
31
32 bool isPi(int pid) const {
33 return pid==211 || pid==111;
34 }
35
36 /// Perform the per-event analysis
37 void analyze(const Event& event) {
38 UnstableParticles ufs = apply<UnstableParticles>(event, "UFS");
39 for(const Particle & B : ufs.particles()) {
40 if (B.children().size()!=2) continue;
41 Particle chic,Kstar;
42 if (B.children()[0].pid()==20443 && B.children()[1].abspid()==313) {
43 chic = B.children()[0];
44 Kstar = B.children()[1];
45 }
46 else if (B.children()[1].pid()==20443 && B.children()[0].abspid()==313) {
47 chic = B.children()[1];
48 Kstar = B.children()[0];
49 }
50 else {
51 continue;
52 }
53 // find Kstar decay products
54 Particle K;
55 if (isK (Kstar.children()[0].abspid()) && isPi(Kstar.children()[1].abspid())) {
56 K = Kstar.children()[0];
57 }
58 else if (isK (Kstar.children()[1].abspid()) &&isPi(Kstar.children()[0].abspid())) {
59 K = Kstar.children()[1];
60 }
61 else {
62 continue;
63 }
64 // boost to B rest frame
65 LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(B.momentum().betaVec());
66 FourMomentum pChi = boost.transform(chic.momentum());
67 FourMomentum pKstar = boost.transform(Kstar.momentum());
68 FourMomentum pK = boost.transform(K .momentum());
69 // axes
70 Vector3 axisX = pChi.p3().unit();
71 // kaon helicity angle
72 LorentzTransform boostK = LorentzTransform::mkFrameTransformFromBeta(pKstar.betaVec());
73 double cosK = -axisX.dot(boostK.transform(pK).p3().unit());
74 // fill hists
75 _h->fill(cosK);
76 }
77 }
78
79
80 /// Normalise histograms etc., after the run
81 void finalize() {
82 normalize(_h,1.,false);
83 }
84
85 /// @}
86
87
88 /// @name Histograms
89 /// @{
90 Histo1DPtr _h;
91 /// @}
92
93
94 };
95
96
97 RIVET_DECLARE_PLUGIN(BELLE_2006_I689881);
98
99}
|