Rivet analyses referenceBABAR_2009_I801589Mass and angular distributions in $B^0\to K^+\pi^- (J/\psi,\psi(2S))$ and $B^+\to K^0_S\pi^+(J/\psi,\psi(2S))$Experiment: BABAR (PEP-II) Inspire ID: 801589 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Mass and angular distributions in $B^0\to K^+\pi^- (J/\psi,\psi(2S))$ and $B^+\to K^0_S\pi^+(J/\psi,\psi(2S))$. The corrected, background subtracted data was read from the figures in the paper. Source code: BABAR_2009_I801589.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 -> J/psi / psi(2S) K pi
10 class BABAR_2009_I801589 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2009_I801589);
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 ||
24 Cuts::abspid==521);
25 declare(ufs, "UFS");
26 DecayedParticles BB(ufs);
27 BB.addStable(310);
28 BB.addStable(443);
29 BB.addStable(100443);
30 declare(BB, "BB");
31 // histos
32 for(unsigned int ix=0;ix<2;++ix) {
33 book(_h_Kpi2[ix],2,1,1+ix);
34 book(_h_angle[ix],4,1,1+ix);
35 book(_c[ix],"TMP/c_"+toString(ix));
36 for(unsigned int iy=0;iy<2;++iy) {
37 book(_h_Kpi[ix][iy],1,1+ix,1+iy);
38 }
39 book(_b[ix],{0.,.795,.995,1.332,1.532,10.});
40 for(unsigned int iy=0;iy<5;++iy)
41 book(_b[ix]->bin(iy+1),3,1+ix,1+iy);
42 for(unsigned int iy=0;iy<3;++iy) {
43 book(_h_PsiPi[ix][iy],5,1+ix,1+iy);
44 }
45 }
46 }
47
48
49 /// Perform the per-event analysis
50 void analyze(const Event& event) {
51 static const map<PdgId,unsigned int> & mode1 = { { 321,1},{-211,1}, { 443,1}};
52 static const map<PdgId,unsigned int> & mode1CC = { {-321,1},{ 211,1}, { 443,1}};
53 static const map<PdgId,unsigned int> & mode2 = { { 321,1},{-211,1}, { 100443,1}};
54 static const map<PdgId,unsigned int> & mode2CC = { {-321,1},{ 211,1}, { 100443,1}};
55 static const map<PdgId,unsigned int> & mode3 = { { 310,1},{-211,1}, { 443,1}};
56 static const map<PdgId,unsigned int> & mode3CC = { { 310,1},{ 211,1}, { 443,1}};
57 static const map<PdgId,unsigned int> & mode4 = { { 310,1},{-211,1}, { 100443,1}};
58 static const map<PdgId,unsigned int> & mode4CC = { { 310,1},{ 211,1}, { 100443,1}};
59 DecayedParticles BB = apply<DecayedParticles>(event, "BB");
60 // loop over particles
61 for(unsigned int ix=0;ix<BB.decaying().size();++ix) {
62 int sign = 1,iK(0),iPsi(0);
63 if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode1)) {
64 sign=1; iK = 321; iPsi=443;
65 }
66 else if (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode1CC)) {
67 sign=-1; iK=-321; iPsi=443;
68 }
69 else if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode2)) {
70 sign=1; iK = 321; iPsi=100443;
71 }
72 else if (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode2CC)) {
73 sign=-1; iK=-321; iPsi=100443;
74 }
75 else if (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode3)) {
76 sign=1; iK = 310; iPsi=443;
77 }
78 else if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode3CC)) {
79 sign=-1; iK= 310; iPsi=443;
80 }
81 else if (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode4)) {
82 sign=1; iK = 310; iPsi=100443;
83 }
84 else if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode4CC)) {
85 sign=-1; iK= 310; iPsi=100443;
86 }
87 else
88 continue;
89 _c[iPsi/100000]->fill();
90 const Particle & Kp = BB.decayProducts()[ix].at( iK )[0];
91 const Particle & pim = BB.decayProducts()[ix].at(-211*sign)[0];
92 const Particle & psi = BB.decayProducts()[ix].at( iPsi )[0];
93 FourMomentum pKpi = Kp.momentum()+pim.momentum();
94 double mKpi = pKpi.mass();
95 _h_Kpi[BB.decaying()[ix].abspid()%100/10-1][iPsi/100000]->fill(mKpi);
96 _h_Kpi2[iPsi/100000]->fill(mKpi);
97 double mPsiPi = (psi.momentum()+pim.momentum()).mass();
98 _b[iPsi/100000]->fill(mKpi,mPsiPi);
99 _h_PsiPi[iPsi/100000][0]->fill(mPsiPi);
100 // helicity angle
101 if(mKpi<0.795 || (mKpi>0.995&&mKpi<1.332) || mKpi>1.532) {
102 _h_PsiPi[iPsi/100000][2]->fill(mPsiPi);
103 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(BB.decaying()[ix].momentum().betaVec());
104 pKpi = boost1.transform(pKpi);
105 Vector3 axis1 = pKpi.p3().unit();
106 LorentzTransform boost3 = LorentzTransform::mkFrameTransformFromBeta(pKpi.betaVec());
107 FourMomentum ppi = boost3.transform(boost1.transform(pim.momentum()));
108 double cPi = ppi.p3().unit().dot(axis1);
109 _h_angle[iPsi/100000]->fill(cPi);
110 }
111 else {
112 _h_PsiPi[iPsi/100000][1]->fill(mPsiPi);
113 }
114 }
115 }
116
117
118 /// Normalise histograms etc., after the run
119 void finalize() {
120 for(unsigned int ix=0;ix<2;++ix) {
121 normalize(_h_Kpi2[ix],1.,false);
122 normalize(_h_angle[ix],1.,false);
123 for(unsigned int iy=0;iy<2;++iy) {
124 normalize(_h_Kpi[ix][iy],1.,false);
125 }
126 for(unsigned int iy=0;iy<3;++iy) {
127 scale(_h_PsiPi[ix][iy],1./ *_c[ix]);
128 }
129 scale(_b[ix], 1./ *_c[ix]);
130 }
131 }
132
133 /// @}
134
135
136 /// @name Histograms
137 /// @{
138 Histo1DPtr _h_Kpi[2][2],_h_Kpi2[2],_h_angle[2],_h_PsiPi[2][3];
139 Histo1DGroupPtr _b[2];
140 CounterPtr _c[2];
141 /// @}
142 };
143
144
145 RIVET_DECLARE_PLUGIN(BABAR_2009_I801589);
146
147}
|