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