Rivet analyses referenceBABAR_2006_I722820Mass and helicity angle distributions in $B\to\eta K^*$Experiment: BABAR (PEP-II) Inspire ID: 722820 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the $K\pi$ mass and helicity angle in $B\to\eta K^*$ decays. The data were read from Figure 2 in the paper and the backgrounds given subtracted. Source code: BABAR_2006_I722820.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 -> eta K*
10 class BABAR_2006_I722820 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2006_I722820);
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 Cuts::abspid==521);
25 declare(ufs, "UFS");
26 DecayedParticles BB(ufs);
27 BB.addStable(PID::ETA);
28 BB.addStable(PID::K0S);
29 BB.addStable(PID::PI0);
30 declare(BB, "BB");
31 // histograms
32 for(unsigned int ix=0;ix<2;++ix)
33 for(unsigned int iy=0;iy<2;++iy)
34 book(_h[ix][iy],1,1+ix,1+iy);
35 }
36
37
38 /// Perform the per-event analysis
39 void analyze(const Event& event) {
40 static const map<PdgId,unsigned int> & mode1 = { { 321,1},{-211,1}, { 221,1}};
41 static const map<PdgId,unsigned int> & mode1CC = { {-321,1},{ 211,1}, { 221,1}};
42 static const map<PdgId,unsigned int> & mode2 = { { 321,1},{ 111,1}, { 221,1}};
43 static const map<PdgId,unsigned int> & mode2CC = { {-321,1},{ 111,1}, { 221,1}};
44 static const map<PdgId,unsigned int> & mode3 = { { 310,1},{ 211,1}, { 221,1}};
45 static const map<PdgId,unsigned int> & mode3CC = { { 310,1},{-211,1}, { 221,1}};
46 DecayedParticles BB = apply<DecayedParticles>(event, "BB");
47 // loop over particles
48 for(unsigned int ix=0;ix<BB.decaying().size();++ix) {
49 int imode = 1, iK=321, iPi=-211;
50 if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode1)) {
51 imode=0;
52 iK = 321;
53 iPi =-211;
54 }
55 else if (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode1CC)) {
56 imode=0;
57 iK =-321;
58 iPi = 211;
59 }
60 else if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode2)) {
61 iK = 321;
62 iPi = 111;
63 }
64 else if (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode2CC)) {
65 iK =-321;
66 iPi = 111;
67 }
68 else if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode3)) {
69 iK = 310;
70 iPi = 211;
71 }
72 else if (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode3CC)) {
73 iK = 310;
74 iPi =-211;
75 }
76 else
77 continue;
78 const Particle & KK = BB.decayProducts()[ix].at(iK )[0];
79 const Particle & pi = BB.decayProducts()[ix].at(iPi)[0];
80 double mKpi = (KK.momentum()+pi.momentum()).mass();
81 _h[0][imode]->fill(mKpi);
82 // boost to b rest frame
83 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(BB.decaying()[ix].momentum().betaVec());
84 FourMomentum pK = boost1.transform(KK.momentum());
85 FourMomentum ppi = boost1.transform(pi.momentum());
86 FourMomentum pKS = pK+ppi;
87 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pKS.betaVec());
88 Vector3 axis = pKS.p3().unit();
89 _h[1][imode]->fill(axis.dot(boost2.transform(pK).p3().unit()));
90 }
91 }
92
93
94 /// Normalise histograms etc., after the run
95 void finalize() {
96 for(unsigned int ix=0;ix<2;++ix)
97 for(unsigned int iy=0;iy<2;++iy)
98 normalize(_h[ix][iy],1.,false);
99 }
100
101 /// @}
102
103
104 /// @name Histograms
105 /// @{
106 Histo1DPtr _h[2][2];
107 /// @}
108
109
110 };
111
112
113 RIVET_DECLARE_PLUGIN(BABAR_2006_I722820);
114
115}
|