Rivet analyses referenceBELLE_2005_I651511Helicity angle and $\pi^+\pi^0$ mass in $B^+\to\pi^+\pi^0\pi^0$Experiment: BELLE (KEKB) Inspire ID: 651511 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the Helicity angle and $\pi^+\pi^0$ mass in $B^+\to\pi^+\pi^0\pi^0$. The background subracted was read from figures 2 and 3 in the paper. Source code: BELLE_2005_I651511.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+ -> pi+ pi0 pi0
10 class BELLE_2005_I651511 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2005_I651511);
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==521);
24 declare(ufs, "UFS");
25 DecayedParticles BP(ufs);
26 BP.addStable( 111);
27 declare(BP, "BP");
28 // histos
29 for (unsigned int ix=0; ix<2; ++ix) {
30 book(_h[ix], 1+ix, 1, 1);
31 }
32 }
33
34
35 /// Perform the per-event analysis
36 void analyze(const Event& event) {
37 DecayedParticles BP = apply<DecayedParticles>(event, "BP");
38 for (unsigned int ix=0;ix<BP.decaying().size();++ix) {
39 int sign = 1;
40 if (BP.decaying()[ix].pid()>0 && BP.modeMatches(ix,3,mode)) sign= 1;
41 else if (BP.decaying()[ix].pid()<0 && BP.modeMatches(ix,3,modeCC)) sign=-1;
42 else continue;
43 const Particle& pip = BP.decayProducts()[ix].at( sign*211)[0];
44 const Particles& pi0 = BP.decayProducts()[ix].at( 111);
45 FourMomentum pRho[2] = {pip.mom()+pi0[0].mom(), pip.mom()+pi0[1].mom()};
46 double mRho[2] = {pRho[0].mass(),pRho[1].mass()};
47 unsigned int iloc = mRho[0]<mRho[1] ? 0 : 1;
48 _h[1]->fill(mRho[iloc]);
49 // compute the helicity angles
50 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(BP.decaying()[ix].mom().betaVec());
51 FourMomentum prho = boost1.transform(pRho[iloc]);
52 FourMomentum ppi = boost1.transform(pip.mom());
53 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(prho.betaVec());
54 ppi = boost2.transform(ppi);
55 const double cTheta = ppi.p3().unit().dot(prho.p3().unit());
56 _h[0]->fill(cTheta);
57 }
58 }
59
60
61 /// Normalise histograms etc., after the run
62 void finalize() {
63 normalize(_h, 1.0, false);
64 }
65 /// @}
66
67
68 /// @name Histograms
69 /// @{
70 Histo1DPtr _h[2];
71 const map<PdgId,unsigned int> mode = { { 211,1}, { 111,2}};
72 const map<PdgId,unsigned int> modeCC = { {-211,1}, { 111,2}};
73 /// @}
74
75
76 };
77
78
79 RIVET_DECLARE_PLUGIN(BELLE_2005_I651511);
80
81}
|