Rivet analyses referenceBELLE_2002_I589587$\pi\pi$ mass and helicity angle for $B^0\to\rho^\pm\pi^\mp$ and $B^+\to\rho^0\pi^+$Experiment: BELLE (KEKB) Inspire ID: 589587 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the $\pi\pi$ mass and helicity angle for $B^0\to\rho^\pm\pi^\mp$ and $B^+\to\rho^0\pi^+$. The background subtracted data were read from figures 2 and 3 in the paper. Source code: BELLE_2002_I589587.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 -> rho pi
10 class BELLE_2002_I589587 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2002_I589587);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 // projections
23 UnstableParticles ufs = UnstableParticles(Cuts::abspid==511 || Cuts::abspid==521);
24 declare(ufs, "UFS");
25 DecayedParticles BB(ufs);
26 BB.addStable( 111);
27 declare(BB, "BB");
28 // histos
29 for (unsigned int ix=0; ix<2; ++ix) {
30 book(_h_mass [ix], 1, 1, 1+ix);
31 book(_h_angle[ix], 2, 1, 1+ix);
32 }
33 }
34
35
36 /// Perform the per-event analysis
37 void analyze(const Event& event) {
38 DecayedParticles BB = apply<DecayedParticles>(event, "BB");
39 for(unsigned int ix=0; ix<BB.decaying().size(); ++ix) {
40 int sign = BB.decaying()[ix].pid()/BB.decaying()[ix].abspid();
41 unsigned int imode=0;
42 if (BB.modeMatches(ix,3,mode1)) imode=0;
43 else if(sign== 1 && BB.modeMatches(ix,3,mode2 )) imode=1;
44 else if(sign==-1 && BB.modeMatches(ix,3,mode2CC)) imode=1;
45 else continue;
46 const Particles & pip = BB.decayProducts()[ix].at( sign*211);
47 const Particles & pim = BB.decayProducts()[ix].at(-sign*211);
48 bool pipiVeto=false;
49 Particle pRho[2];
50 double delta=1e30;
51 for (const Particle& p1 : pip) {
52 for(const Particle& p2 : pim) {
53 double mpipi = (p1.mom()+p2.mom()).mass();
54 if (abs(mpipi-1.86484)<0.14 ||
55 abs(mpipi-3.09690)<0.07 ||
56 abs(mpipi-3.68610)<0.05) {
57 pipiVeto=true;
58 break;
59 }
60 if (abs(mpipi-.77)<delta) {
61 delta= abs(mpipi-.77);
62 pRho[0]=p1;
63 pRho[1]=p2;
64 }
65 }
66 }
67 if (pipiVeto) continue;
68 if (imode==0) {
69 const Particle & pi0 = BB.decayProducts()[ix].at(111)[0];
70 delta=1e30;
71 for (const Particle& p1 : pip) {
72 double mpipi = (p1.mom()+pi0.mom()).mass();
73 if (abs(mpipi-1.86966)<0.05) {
74 pipiVeto=true;
75 break;
76 }
77 if (abs(mpipi-.77)<delta) {
78 delta= abs(mpipi-.77);
79 pRho[0]=p1;
80 pRho[1]=pi0;
81 }
82 }
83 if (pipiVeto) continue;
84 for (const Particle& p1 : pim) {
85 double mpipi = (p1.mom()+pi0.mom()).mass();
86 if (abs(mpipi-1.86966)<0.05) {
87 pipiVeto=true;
88 break;
89 }
90 if (abs(mpipi-.77)<delta) {
91 delta= abs(mpipi-.77);
92 pRho[0]=p1;
93 pRho[1]=pi0;
94 }
95 }
96 if (pipiVeto) continue;
97 }
98 FourMomentum prho = pRho[0].mom()+pRho[1].mom();
99 double mpipi = prho.mass();
100 _h_mass[imode]->fill(mpipi);
101 // check if we should compute helicty angle
102 if (imode==0 && (mpipi<.6 || mpipi>0.95)) continue;
103 else if (imode==1 && (mpipi<.62|| mpipi>0.92)) continue;
104 // compute the helicity angle
105 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(BB.decaying()[ix].mom().betaVec());
106 prho = boost1.transform(prho);
107 FourMomentum ppi = boost1.transform(pRho[0].mom());
108 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(prho.betaVec());
109 ppi = boost2.transform(ppi);
110 double cTheta = ppi.p3().unit().dot(prho.p3().unit());
111 _h_angle[imode]->fill(cTheta);
112 }
113 }
114
115
116 /// Normalise histograms etc., after the run
117 void finalize() {
118 normalize(_h_mass, 1.0, false);
119 normalize(_h_angle, 1.0, false);
120 }
121
122 /// @}
123
124
125 /// @name Histograms
126 /// @{
127 Histo1DPtr _h_mass[2], _h_angle[2];
128 const map<PdgId,unsigned int> mode1 = { { 211,1}, {-211,1}, { 111,1} };
129 const map<PdgId,unsigned int> mode2 = { { 211,2}, {-211,1} };
130 const map<PdgId,unsigned int> mode2CC = { {-211,2}, { 211,1} };
131 /// @}
132
133
134 };
135
136
137 RIVET_DECLARE_PLUGIN(BELLE_2002_I589587);
138
139}
|