Rivet analyses referenceBABAR_2008_I792439Mass and angular distributions in $B^0\to\phi K\pi$Experiment: BABAR (PEP-II) Inspire ID: 792439 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurment of mass and angular distributions in $B^0\to\phi K\pi$ decays. The corrected data were read from the figures in the paper. Source code: BABAR_2008_I792439.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 -> phi K pi
10 class BABAR_2008_I792439 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2008_I792439);
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 declare(ufs, "UFS");
25 DecayedParticles B0(ufs);
26 B0.addStable(333);
27 B0.addStable(310);
28 B0.addStable(111);
29 declare(B0, "B0");
30 // histos
31 for(unsigned int ix=0;ix<2;++ix) {
32 book(_p[ix][0],1,2,2+ix);
33 book(_p[ix][1],"TMP/norm_"+toString(ix));
34 for(unsigned int iy=0;iy<2;++iy) {
35 book(_h_mass[ix][iy],2,1+ix,1+iy);
36 book(_h_angle[ix][iy],3+ix,1,1+iy);
37 }
38 }
39 }
40
41
42 /// Perform the per-event analysis
43 void analyze(const Event& event) {
44 static const map<PdgId,unsigned int> & mode1 = { { 321,1},{-211,1}, { 333,1}};
45 static const map<PdgId,unsigned int> & mode1CC = { {-321,1},{ 211,1}, { 333,1}};
46 static const map<PdgId,unsigned int> & mode2 = { { 310,1},{ 111,1}, { 333,1}};
47 DecayedParticles B0 = apply<DecayedParticles>(event, "B0");
48 // loop over particles
49 for(unsigned int ix=0;ix<B0.decaying().size();++ix) {
50 int sign = 1,imode=-1;
51 if (B0.modeMatches(ix,3,mode1)) {
52 imode = 0;
53 sign = 1;
54 }
55 else if(B0.modeMatches(ix,3,mode1CC)) {
56 imode = 0;
57 sign =-1;
58 }
59 else if(B0.modeMatches(ix,3,mode2)) {
60 imode = 1;
61 sign = 1;
62 }
63 else
64 continue;
65 // particles
66 const Particle & KK = B0.decayProducts()[ix].at(imode==0 ? 321*sign : 310)[0];
67 const Particle & pi = B0.decayProducts()[ix].at(imode==0 ? -211*sign : 111)[0];
68 const Particle & phi = B0.decayProducts()[ix].at( 333 )[0];
69 // children of the phi
70 if(phi.children().size()!=2) continue;
71 if(phi.children()[0].abspid()!=321) continue;
72 if(phi.children()[0].pid()!=-phi.children()[1].pid()) continue;
73 double mKpi = (KK.momentum()+pi.momentum()).mass();
74 _h_mass[imode][0]->fill(mKpi);
75 _h_mass[imode][1]->fill(phi.mass());
76 Particle Kp1 = phi.children()[0];
77 Particle Km1 = phi.children()[1];
78 // B0 frame
79 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(B0.decaying()[ix].momentum().betaVec());
80 FourMomentum pKstar = boost1.transform(KK.momentum()+pi.momentum());
81 FourMomentum pPhi = boost1.transform(phi.momentum());
82 // K pi helicity angle
83 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pKstar.betaVec());
84 FourMomentum pKp = boost2.transform(boost1.transform(KK.momentum()));
85 Vector3 axis1 = pKstar.p3().unit();
86 double cTheta1 = axis1.dot(pKp.p3().unit());
87 // phi helicity angle
88 LorentzTransform boost3 = LorentzTransform::mkFrameTransformFromBeta(pPhi.betaVec());
89 FourMomentum pKp1 = boost3.transform(boost1.transform(Kp1.momentum()));
90 Vector3 axis2 = pPhi.p3().unit();
91 double cTheta2 = axis2.dot(pKp1.p3().unit());
92 if(mKpi>.75 && mKpi<1.05) {
93 _h_angle[0][0]->fill(cTheta1);
94 _h_angle[0][1]->fill(cTheta2);
95 _p[0][0]->fill(-0.5*(1-5.*sqr(cTheta2)));
96 _p[0][1]->fill();
97 }
98 else if(mKpi>1.13 && mKpi<1.53) {
99 _h_angle[1][0]->fill(cTheta1);
100 _h_angle[1][1]->fill(cTheta2);
101 _p[1][0]->fill(-0.5*(1-5.*sqr(cTheta2)));
102 _p[1][1]->fill();
103 }
104 }
105 }
106
107
108 /// Normalise histograms etc., after the run
109 void finalize() {
110 // histos
111 for(unsigned int ix=0;ix<2;++ix) {
112 scale(_p[ix][0], 1./ *_p[ix][1]);
113 for(unsigned int iy=0;iy<2;++iy) {
114 normalize(_h_mass[ix][iy] ,1.,false);
115 normalize(_h_angle[ix][iy],1.,false);
116 }
117 }
118 }
119
120 /// @}
121
122
123 /// @name Histograms
124 /// @{
125 Histo1DPtr _h_mass[2][2],_h_angle[2][2];
126 CounterPtr _p[2][2];
127 /// @}
128
129 };
130
131
132 RIVET_DECLARE_PLUGIN(BABAR_2008_I792439);
133
134}
|