Rivet analyses referenceBELLE_2009_I817326Differential branching ratio, polarization and asymmetries in $B\to K^{(*)}\ell^+\ell^-$Experiment: BELLE (KEKB) Inspire ID: 817326 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the differential branching ratio, polarization and asymmetries in $B\to K^{(*)}\ell^+\ell^-$ as a function of $q^2$. Source code: BELLE_2009_I817326.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 -> K(*) l+ l-
10 class BELLE_2009_I817326 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2009_I817326);
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 or
24 Cuts::abspid==521);
25 declare(ufs, "UFS");
26 DecayedParticles BB(ufs);
27 BB.addStable( 443);
28 BB.addStable(100443);
29 BB.addStable(PID::K0S);
30 BB.addStable(PID::K0L);
31 BB.addStable( 313);
32 BB.addStable(-313);
33 BB.addStable( 323);
34 BB.addStable(-323);
35 declare(BB, "BB");
36 for(unsigned int ix=0;ix<2;++ix) {
37 book(_p_FL[ix],1,1+ix,2);
38 for(unsigned int iy=0;iy<2;++iy) {
39 book(_h_br[ix][iy],1+ix,1+iy,1);
40 book(_p_FB[ix][iy],1+ix,1+iy,4);
41 for(unsigned int iz=0;iz<2;++iz)
42 book(_h_br_B[ix][iy][iz],
43 "TMP/h_br_"+toString(ix+1)+"_"+toString(iy+1)+"_"+toString(iz+1),
44 refData(1+ix,1+iy,1));
45 }
46 };
47 for(unsigned int ix=0;ix<3;++ix)
48 book(_c[ix],"TMP/c_"+toString(ix+1));
49 }
50
51
52 /// Perform the per-event analysis
53 void analyze(const Event& event) {
54 static const map<PdgId,unsigned int> & mode1 = { { 321,1},{ 13,1}, {-13,1}};
55 static const map<PdgId,unsigned int> & mode1CC = { {-321,1},{ 13,1}, {-13,1}};
56 static const map<PdgId,unsigned int> & mode2 = { { 310,1},{ 13,1}, {-13,1}};
57 static const map<PdgId,unsigned int> & mode2CC = { { 130,1},{ 13,1}, {-13,1}};
58 static const map<PdgId,unsigned int> & mode3 = { { 321,1},{ 11,1}, {-11,1}};
59 static const map<PdgId,unsigned int> & mode3CC = { {-321,1},{ 11,1}, {-11,1}};
60 static const map<PdgId,unsigned int> & mode4 = { { 310,1},{ 11,1}, {-11,1}};
61 static const map<PdgId,unsigned int> & mode4CC = { { 130,1},{ 11,1}, {-11,1}};
62 static const map<PdgId,unsigned int> & mode5 = { { 323,1},{ 13,1}, {-13,1}};
63 static const map<PdgId,unsigned int> & mode5CC = { {-323,1},{ 13,1}, {-13,1}};
64 static const map<PdgId,unsigned int> & mode6 = { { 313,1},{ 13,1}, {-13,1}};
65 static const map<PdgId,unsigned int> & mode6CC = { {-313,1},{ 13,1}, {-13,1}};
66 static const map<PdgId,unsigned int> & mode7 = { { 323,1},{ 11,1}, {-11,1}};
67 static const map<PdgId,unsigned int> & mode7CC = { {-323,1},{ 11,1}, {-11,1}};
68 static const map<PdgId,unsigned int> & mode8 = { { 313,1},{ 11,1}, {-11,1}};
69 static const map<PdgId,unsigned int> & mode8CC = { {-313,1},{ 11,1}, {-11,1}};
70 DecayedParticles BB = apply<DecayedParticles>(event, "BB");
71 for(unsigned int ix=0;ix<BB.decaying().size();++ix) {
72 _c[0]->fill();
73 if(BB.decaying()[ix].abspid()==521) _c[1]->fill();
74 else _c[2]->fill();
75 int imode=0;
76 if ((BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode1)) ||
77 (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode1CC))) imode=0;
78 else if (BB.modeMatches(ix,3,mode2)||BB.modeMatches(ix,3,mode2CC)) imode=1;
79 else if ((BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode3)) ||
80 (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode3CC))) imode=2;
81 else if (BB.modeMatches(ix,3,mode4) || BB.modeMatches(ix,3,mode4CC)) imode=3;
82 else if ((BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode5)) ||
83 (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode5CC))) imode=4;
84 else if ((BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode6)) ||
85 (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode6CC))) imode=5;
86 else if ((BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode7)) ||
87 (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode7CC))) imode=6;
88 else if ((BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode8)) ||
89 (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode8CC))) imode=7;
90 else continue;
91 int il = imode<2 || imode==4 || imode==5 ? 13 : 11;
92 const Particle & lp = BB.decayProducts()[ix].at(-il)[0];
93 const Particle & lm = BB.decayProducts()[ix].at( il)[0];
94 double qq = (lp.momentum()+lm.momentum()).mass2();
95 for(unsigned int iy=0;iy<2;++iy) {
96 if(imode<4) {
97 _h_br[1][iy]->fill(qq);
98 if(BB.decaying()[ix].abspid()==521)
99 _h_br_B[1][iy][0]->fill(qq);
100 else
101 _h_br_B[1][iy][1]->fill(qq);
102 }
103 else {
104 _h_br[0][iy]->fill(qq);
105 if(BB.decaying()[ix].abspid()==521)
106 _h_br_B[0][iy][0]->fill(qq);
107 else
108 _h_br_B[0][iy][1]->fill(qq);
109 }
110 }
111 // first boost to bottom frame
112 const LorentzTransform boost =
113 LorentzTransform::mkFrameTransformFromBeta(BB.decaying()[ix].momentum().betaVec());
114 FourMomentum plp = boost.transform(lp .momentum());
115 FourMomentum plm = boost.transform(lm .momentum());
116 FourMomentum pB = boost.transform(BB.decaying()[ix].momentum());
117 // lepton stuff
118 const LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta((plp+plm).betaVec());
119 plp = boost2.transform(plp);
120 double cTheta = plp.p3().unit().dot(boost .transform(pB ).p3().unit());
121 double AFB = cTheta>0 ? 1 : -1;
122 for(unsigned int iy=0;iy<2;++iy) {
123 if(imode<4) _p_FB[1][iy]->fill(qq,AFB);
124 else _p_FB[0][iy]->fill(qq,AFB);
125 }
126 // only K* for FL
127 if(imode<4) continue;
128 int iK = BB.decaying()[ix].abspid()==521 ? 323 : 313;
129 iK *= BB.decaying()[ix].pid()/BB.decaying()[ix].abspid();
130 const Particle & Kstar = BB.decayProducts()[ix].at( iK)[0];
131 FourMomentum pKstar = boost.transform(Kstar.momentum());
132 if(Kstar.children().size()!=2) continue;
133 Particle KK;
134 if(Kstar.abspid()==313) {
135 if(Kstar.children()[0].abspid()==321 &&
136 Kstar.children()[1].abspid()==211)
137 KK = Kstar.children()[0];
138 else if(Kstar.children()[1].abspid()==321 &&
139 Kstar.children()[0].abspid()==211)
140 KK = Kstar.children()[1];
141 else continue;
142 }
143 else {
144 if(Kstar.children()[0].abspid()==311 &&
145 Kstar.children()[1].abspid()==211)
146 KK = Kstar.children()[0];
147 else if(Kstar.children()[1].abspid()==311 &&
148 Kstar.children()[0].abspid()==211)
149 KK = Kstar.children()[1];
150 else if(Kstar.children()[0].abspid()==310 &&
151 Kstar.children()[1].abspid()==211)
152 KK = Kstar.children()[0];
153 else if(Kstar.children()[1].abspid()==310 &&
154 Kstar.children()[0].abspid()==211)
155 KK = Kstar.children()[1];
156 else if(Kstar.children()[0].abspid()==321 &&
157 Kstar.children()[1].abspid()==111 && il==11)
158 KK = Kstar.children()[0];
159 else if(Kstar.children()[1].abspid()==321 &&
160 Kstar.children()[0].abspid()==111 && il==11)
161 KK = Kstar.children()[1];
162 else continue;
163 if(KK.abspid()==311) {
164 if(KK.children().size()==1 && KK.children()[0].pid()==310)
165 KK = KK.children()[0];
166 else
167 continue;
168 }
169 }
170 FourMomentum pK = boost.transform(KK .momentum());
171 const LorentzTransform boost3 = LorentzTransform::mkFrameTransformFromBeta(pKstar.betaVec());
172 pK = boost3.transform(pK);
173 cTheta = pK.p3().unit().dot(boost .transform(pB ).p3().unit());
174 double FL = .5*(5.*sqr(cTheta)-1.);
175 for(unsigned int iy=0;iy<2;++iy) _p_FL[iy]->fill(qq,FL);
176 }
177 }
178
179
180 /// Normalise histograms etc., after the run
181 void finalize() {
182 // ratio of lifetimes
183 double rLife = 1./1.078;
184 for(unsigned int ix=0;ix<2;++ix) {
185 for(unsigned int iy=0;iy<2;++iy) {
186 scale(_h_br[ix][iy],0.5e7/ *_c[0]);
187 for(unsigned int il=0;il<2;++il) {
188 scale(_h_br_B[ix][iy][il],0.5e7/ *_c[il+1]);
189 if (il==0) scale(_h_br_B[ix][iy][il],rLife);
190 }
191 // A_I plots
192 Estimate1DPtr AI;
193 book(AI,1+ix,1+iy,3);
194 asymm(_h_br_B[ix][iy][1],_h_br_B[ix][iy][0],AI);
195 }
196 }
197 }
198
199 /// @}
200
201
202 /// @name Histograms
203 /// @{
204 Histo1DPtr _h_br[2][2],_h_br_B[2][2][2];
205 Profile1DPtr _p_FL[2],_p_FB[2][2];
206 CounterPtr _c[3];
207 /// @}
208
209
210 };
211
212
213 RIVET_DECLARE_PLUGIN(BELLE_2009_I817326);
214
215}
|