Rivet analyses referenceBELLE_2008_I778726$B^0\to p\bar{p}K^{*0}$ and $B^+\to p\bar{p}K^{*+}$Experiment: BELLE (KEKB) Inspire ID: 778726 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Kinematic distributions in $B^0\to p\bar{p}K^{*0}$ and $B^+\to p\bar{p}K^{*+}$ decays. The branchingf ratio vs $p\bar{p}$ was taken from Table I in the paper, while the uncorrected kaon helicity angle and corrected proton angle were read from figures in the paper. Source code: BELLE_2008_I778726.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 -> p pbar K*
10 class BELLE_2008_I778726 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2008_I778726);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 // Initialise and register projections
23 UnstableParticles ufs = UnstableParticles(Cuts::abspid==511 || Cuts::abspid==521);
24 declare(ufs, "UFS");
25 DecayedParticles BB(ufs);
26 BB.addStable( 313);
27 BB.addStable(-313);
28 BB.addStable( 323);
29 BB.addStable(-323);
30 declare(BB, "BB");
31 // histos
32 for(unsigned int iy=0;iy<2;++iy) {
33 book(_c[iy],"TMP/c_+"+toString(iy+1));
34 for (unsigned int ix=0;ix<3;++ix) {
35 book(_h[ix][iy],ix+1,1,1+iy);
36 }
37 }
38 }
39
40 bool isK(int id) const {
41 return id==321 || id==311 || id==310 || id==130;
42 }
43
44 bool isPi(int id) const {
45 return id==211 || id==111;
46 }
47
48 /// Perform the per-event analysis
49 void analyze(const Event& event) {
50 DecayedParticles BB = apply<DecayedParticles>(event, "BB");
51 // loop over particles
52 for (unsigned int ix=0; ix<BB.decaying().size(); ++ix) {
53 int sign = 1;
54 int imode=0;
55 if (BB.decaying()[ix].abspid()==511) {
56 _c[0]->fill();
57 if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode1)) {
58 sign=1;
59 }
60 else if (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode1CC)) {
61 sign=-1;
62 }
63 else {
64 continue;
65 }
66 }
67 else {
68 imode=1;
69 _c[1]->fill();
70 if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode2)) {
71 sign=1;
72 }
73 else if (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode2CC)) {
74 sign=-1;
75 }
76 else {
77 continue;
78 }
79 }
80 int iK = imode==0 ? 313 : 323;
81 const Particle& pp = BB.decayProducts()[ix].at( sign*2212)[0];
82 const Particle& pbar = BB.decayProducts()[ix].at(-sign*2212)[0];
83 const Particle& Kstar = BB.decayProducts()[ix].at( sign*iK )[0];
84 FourMomentum ppbar = pp.mom()+pbar.mom();
85 double mppbar = ppbar.mass();
86 _h[0][imode]->fill(mppbar);
87 if (mppbar<2.85) {
88 // boost to B rest frame
89 LorentzTransform boost =
90 LorentzTransform::mkFrameTransformFromBeta(BB.decaying()[ix]. mom().betaVec());
91 FourMomentum pKstar = boost.transform(Kstar.mom());
92 // proton helicity angle
93 FourMomentum pProton = boost.transform(pp.mom());
94 ppbar = boost.transform(ppbar);
95 LorentzTransform boost1 =
96 LorentzTransform::mkFrameTransformFromBeta(ppbar.betaVec());
97 pProton = boost1.transform(pProton);
98 _h[2][imode]->fill(pKstar.p3().unit().dot(pProton.p3().unit()));
99 Particle KK;
100 if (isK (Kstar.children()[0].abspid()) &&
101 isPi(Kstar.children()[1].abspid())) {
102 KK = Kstar.children()[0];
103 }
104 else if (isK (Kstar.children()[1].abspid()) &&
105 isPi(Kstar.children()[0].abspid())) {
106 KK = Kstar.children()[1];
107 }
108 else {
109 continue;
110 }
111 FourMomentum pK = boost.transform(KK.mom());
112 const LorentzTransform boost3 = LorentzTransform::mkFrameTransformFromBeta(pKstar.betaVec());
113 pK = boost3.transform(pK);
114 FourMomentum pB = boost3.transform(boost.transform(BB.decaying()[ix].mom()));
115 const double cosK = -pB.p3().unit().dot(pK.p3().unit());
116 _h[1][imode]->fill(cosK);
117 }
118 }
119 }
120
121
122 /// Normalise histograms etc., after the run
123 void finalize() {
124 for (unsigned int ix=0; ix<3; ++ix) {
125 for (unsigned int iy=0; iy<2; ++iy) {
126 if (ix==0) scale (_h[ix][iy], 1e6/ *_c[iy]);
127 else normalize(_h[ix][iy], 1.0, false);
128 }
129 }
130 }
131
132 /// @}
133
134
135 /// @name Histograms
136 /// @{
137 Histo1DPtr _h[3][2];
138 CounterPtr _c[2];
139 const map<PdgId,unsigned int> mode1 = { { 2212,1},{-2212,1}, { 313,1}};
140 const map<PdgId,unsigned int> mode1CC = { { 2212,1},{-2212,1}, {-313,1}};
141 const map<PdgId,unsigned int> mode2 = { { 2212,1},{-2212,1}, { 323,1}};
142 const map<PdgId,unsigned int> mode2CC = { { 2212,1},{-2212,1}, {-323,1}};
143 /// @}
144
145
146 };
147
148
149 RIVET_DECLARE_PLUGIN(BELLE_2008_I778726);
150
151}
|