Rivet analyses referenceBABAR_2006_I714147Helicity angle in $B^-\to D^0K^{*-}$Experiment: BABAR (PEP-II) Inspire ID: 714147 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the Helicity angle in $B^-\to D^0K^{*-}$. The acceptance corrected data was read from Figure 2 in the paper and the background given subtracted. Source code: BABAR_2006_I714147.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 B- -> D0 K*-
10 class BABAR_2006_I714147 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2006_I714147);
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==521);
24 declare(ufs, "UFS");
25 // hists
26 book(_h,1,1,1);
27 }
28
29 bool isKstar(int pid) const {
30 return pid==313 || pid==323;
31 }
32
33 bool isK(int pid) const {
34 return pid==130 || pid==310 || pid==311 || pid==321;
35 }
36
37 bool isPi(int pid) const {
38 return pid==211 || pid==111;
39 }
40
41 /// Perform the per-event analysis
42 void analyze(const Event& event) {
43 UnstableParticles ufs = apply<UnstableParticles>(event, "UFS");
44 for(const Particle & B : ufs.particles()) {
45 if(B.children().size()!=2) continue;
46 int sign = B.pid()/B.abspid();
47 Particle D,Kstar;
48 if(B.children()[0].pid()==-sign*421 &&
49 isKstar(B.children()[1].abspid())) {
50 D = B.children()[0];
51 Kstar = B.children()[1];
52 }
53 else if(B.children()[1].pid()==-sign*421 &&
54 isKstar(B.children()[0].abspid())) {
55 D = B.children()[1];
56 Kstar = B.children()[0];
57 }
58 else
59 continue;
60 // find Kstar decay products
61 Particle pi;
62 if(isK (Kstar.children()[0].abspid()) &&
63 isPi(Kstar.children()[1].abspid())) {
64 pi = Kstar.children()[1];
65 }
66 else if(isK (Kstar.children()[1].abspid()) &&
67 isPi(Kstar.children()[0].abspid())) {
68 pi = Kstar.children()[0];
69 }
70 else
71 continue;
72 // boost to B rest frame
73 LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(B.momentum().betaVec());
74 FourMomentum pD = boost.transform(D .momentum());
75 FourMomentum pKstar = boost.transform(Kstar.momentum());
76 FourMomentum pPi = boost.transform(pi .momentum());
77 // pion helicity angle
78 Vector3 axisX = pD.p3().unit();
79 LorentzTransform boostK = LorentzTransform::mkFrameTransformFromBeta(pKstar.betaVec());
80 double cosPi = -axisX.dot(boostK.transform(pPi).p3().unit());
81 _h->fill(cosPi);
82 }
83 }
84
85
86 /// Normalise histograms etc., after the run
87 void finalize() {
88 normalize(_h,1.,false);
89 }
90
91 /// @}
92
93
94 /// @name Histograms
95 /// @{
96 Histo1DPtr _h;
97 /// @}
98
99
100 };
101
102
103 RIVET_DECLARE_PLUGIN(BABAR_2006_I714147);
104
105}
|