Rivet analyses referenceBABAR_2012_I1111233Differential Branching ratio and asymmetries in $B\to K^{(*)}\ell^+\ell^-$Experiment: BABAR (PEP-II) Inspire ID: 1111233 Status: VALIDATED NOHEPDATA SINGLEWEIGHT Authors:
Beam energies: ANY Run details:
Measurement of the differential Branching ratio and asymmetries in $B\to K^{(*)}\ell^+\ell^-$. As well as the differential branching ratio as a function of $q^2$ the ratio of $e^+e^-$ and $\mu^+\mu^-$ and isospin and CP asymmetries are measured. Source code: BABAR_2012_I1111233.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 BABAR_2012_I1111233 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2012_I1111233);
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( 310);
30 BB.addStable( 313);
31 BB.addStable( 323);
32 BB.addStable(-313);
33 BB.addStable(-323);
34 declare(BB, "BB");
35 // histograms
36 for(unsigned int ix=0;ix<2;++ix) {
37 for(unsigned int iy=0;iy<2;++iy) {
38 book(_h_br[ix][iy],1,1+ix,1+iy);
39 book(_p_CP[ix][iy],2,1+ix,1+iy);
40 for(unsigned int il=0;il<2;++il) {
41 book(_h_br_l[il][ix][iy],"TMP/h_br_l_"+toString(il)+"_"+toString(ix)+"_"+toString(iy),
42 refData(3,1+ix,1+iy));
43 book(_h_br_I[il][ix][iy],"TMP/h_br_I_"+toString(il)+"_"+toString(ix)+"_"+toString(iy),
44 refData(4,1+ix,1+iy));
45 }
46 }
47 }
48 for(unsigned int ix=0;ix<3;++ix)
49 book(_c[ix],"TMP/c_"+toString(ix+1));
50 }
51
52
53 /// Perform the per-event analysis
54 void analyze(const Event& event) {
55 // kaon modes
56 static const map<PdgId,unsigned int> & mode1 = { { 321,1},{ 13,1}, {-13,1}};
57 static const map<PdgId,unsigned int> & mode1CC = { {-321,1},{ 13,1}, {-13,1}};
58 static const map<PdgId,unsigned int> & mode2 = { { 310,1},{ 13,1}, {-13,1}};
59 static const map<PdgId,unsigned int> & mode3 = { { 321,1},{ 11,1}, {-11,1}};
60 static const map<PdgId,unsigned int> & mode3CC = { {-321,1},{ 11,1}, {-11,1}};
61 static const map<PdgId,unsigned int> & mode4 = { { 310,1},{ 11,1}, {-11,1}};
62 // K* modes
63 static const map<PdgId,unsigned int> & mode5 = { { 323,1},{ 13,1}, {-13,1}};
64 static const map<PdgId,unsigned int> & mode5CC = { {-323,1},{ 13,1}, {-13,1}};
65 static const map<PdgId,unsigned int> & mode6 = { { 313,1},{ 13,1}, {-13,1}};
66 static const map<PdgId,unsigned int> & mode6CC = { {-313,1},{ 13,1}, {-13,1}};
67 static const map<PdgId,unsigned int> & mode7 = { { 323,1},{ 11,1}, {-11,1}};
68 static const map<PdgId,unsigned int> & mode7CC = { {-323,1},{ 11,1}, {-11,1}};
69 static const map<PdgId,unsigned int> & mode8 = { { 313,1},{ 11,1}, {-11,1}};
70 static const map<PdgId,unsigned int> & mode8CC = { {-313,1},{ 11,1}, {-11,1}};
71 DecayedParticles BB = apply<DecayedParticles>(event, "BB");
72 // loop over particles
73 for(unsigned int ix=0;ix<BB.decaying().size();++ix) {
74 _c[0]->fill();
75 if(BB.decaying()[ix].abspid()==521) _c[1]->fill();
76 else _c[2]->fill();
77 int imode=0;
78 if ((BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode1)) ||
79 (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode1CC))) imode=0;
80 else if (BB.modeMatches(ix,3,mode2)) imode=1;
81 else if ((BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode3)) ||
82 (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode3CC))) imode=2;
83 else if (BB.modeMatches(ix,3,mode4)) imode=3;
84 else if ((BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode5)) ||
85 (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode5CC))) imode=4;
86 else if ((BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode6)) ||
87 (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode6CC))) imode=5;
88 else if ((BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode7)) ||
89 (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode7CC))) imode=6;
90 else if ((BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode8)) ||
91 (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode8CC))) imode=7;
92 else continue;
93 int il = imode<2 || imode==4 || imode==5 ? 13 : 11;
94 const Particle & lp = BB.decayProducts()[ix].at(-il)[0];
95 const Particle & lm = BB.decayProducts()[ix].at( il)[0];
96 double qq = (lp.momentum()+lm.momentum()).mass2();
97 double ACP = BB.decaying()[ix].pid()>0 ? -1. : 1.;
98 if(imode<4) {
99 double wgt = (imode==1||imode==3) ? 2 : 1;
100 for(unsigned int iy=0;iy<2;++iy) {
101 _h_br[iy][0]->fill(qq,wgt);
102 _p_CP[iy][0]->fill(qq,ACP,wgt);
103 if(il==13) _h_br_l[0][iy][0]->fill(qq,wgt);
104 else _h_br_l[1][iy][0]->fill(qq,wgt);
105 if(BB.decaying()[ix].abspid()==521)
106 _h_br_I[0][iy][0]->fill(qq,wgt);
107 else
108 _h_br_I[1][iy][0]->fill(qq,wgt);
109 }
110 }
111 else {
112 for(unsigned int iy=0;iy<2;++iy) {
113 _h_br[iy][1]->fill(qq);
114 _p_CP[iy][1]->fill(qq,ACP);
115 if(BB.decaying()[ix].abspid()==521)
116 _h_br_I[0][iy][1]->fill(qq);
117 else
118 _h_br_I[1][iy][1]->fill(qq);
119 if(il==13) _h_br_l[0][iy][1]->fill(qq);
120 else _h_br_l[1][iy][1]->fill(qq);
121 }
122 }
123 }
124 }
125
126
127 /// Normalise histograms etc., after the run
128 void finalize() {
129 // ratio of lifetimes
130 double rLife = 1./1.078;
131 for(unsigned int ix=0;ix<2;++ix) {
132 for(unsigned int iy=0;iy<2;++iy) {
133 scale(_h_br[ix][iy],1e7/ *_c[0]);
134 for(unsigned int il=0;il<2;++il) {
135 scale(_h_br_l[il][ix][iy],1e7/ *_c[0]);
136 scale(_h_br_I[il][ix][iy],1e7/ *_c[il+1]);
137 if (il==0) scale(_h_br_I[il][ix][iy],rLife);
138 }
139 // RK plots
140 Estimate1DPtr RK;
141 book(RK,3,1+ix,1+iy);
142 divide(_h_br_l[0][ix][iy],_h_br_l[1][ix][iy],RK);
143 book(RK,4,1+ix,1+iy);
144 asymm(_h_br_I[1][ix][iy],_h_br_I[0][ix][iy],RK);
145 }
146 }
147 }
148
149 /// @}
150
151
152 /// @name Histograms
153 /// @{
154 Histo1DPtr _h_br[2][2],_h_br_l[2][2][2],_h_br_I[2][2][2];
155 Profile1DPtr _p_CP[2][2];
156 CounterPtr _c[3];
157 /// @}
158
159
160 };
161
162
163 RIVET_DECLARE_PLUGIN(BABAR_2012_I1111233);
164
165}
|