Rivet analyses referenceBELLE_2003_I620180Mass and helicity angles in $B^+\to\rho^+\rho^0$Experiment: BELLE (KEKB) Inspire ID: 620180 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Mass and helicity angles in $B^+\to\rho^+\rho^0$. The background subtracted data were read from figures 2 and 3 in the paper. Due to the large asymmetry due to the cuts the $\rho^+$ helicity angle is not included. Source code: BELLE_2003_I620180.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+ -> rho0 rho+
10 class BELLE_2003_I620180 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2003_I620180);
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( 113);
27 BP.addStable( 213);
28 BP.addStable(-213);
29 declare(BP, "BP");
30 // histos
31 book(_p[0],1,1,1);
32 book(_p[1],"TMP/nW");
33 for (unsigned int ix=0; ix<2; ++ix) {
34 book(_h_mass[ix], 2, 1, 1+ix);
35 }
36 book(_h_angle, 3, 1, 1);
37 }
38
39
40 /// Perform the per-event analysis
41 void analyze(const Event& event) {
42 DecayedParticles BP = apply<DecayedParticles>(event, "BP");
43 for(unsigned int ix=0;ix<BP.decaying().size();++ix) {
44 int sign = BP.decaying()[ix].pid()/BP.decaying()[ix].abspid();
45 if ((sign== 1 && BP.modeMatches(ix,2,mode)) || (sign==-1 && BP.modeMatches(ix,2,modeCC))) {
46 const Particle& rhop = BP.decayProducts()[ix].at( sign*213)[0];
47 const Particle& rho0 = BP.decayProducts()[ix].at( 113)[0];
48 _h_mass[0]->fill(rho0.mass());
49 _h_mass[1]->fill(rhop.mass());
50 // compute the helicity angle
51 if (rho0.children().size()!=2) continue;
52 if (rho0.children()[0].pid()!=-rho0.children()[1].pid()) continue;
53 if (rho0.children()[0].abspid()!=211) continue;
54 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(BP.decaying()[ix].mom().betaVec());
55 FourMomentum prho = boost1.transform(rho0.mom());
56 FourMomentum ppi = boost1.transform(rho0.children()[0].mom());
57 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(prho.betaVec());
58 ppi = boost2.transform(ppi);
59 const double cTheta = ppi.p3().unit().dot(prho.p3().unit());
60 _h_angle->fill(cTheta);
61 _p[0]->fill(-50.*(1.-5.*sqr(cTheta)));
62 _p[1]->fill();
63 }
64 }
65 }
66
67
68 /// Normalise histograms etc., after the run
69 void finalize() {
70 normalize(_h_mass, 1.0, false);
71 normalize(_h_angle, 1.0, false);
72 scale(_p[0], 1./ *_p[1]);
73 }
74
75 /// @}
76
77
78 /// @name Histograms
79 /// @{
80 Histo1DPtr _h_mass[2],_h_angle;
81 CounterPtr _p[2];
82 const map<PdgId,unsigned int> mode = { { 213,1}, {113,1} };
83 const map<PdgId,unsigned int> modeCC = { {-213,1}, {113,1} };
84 /// @}
85
86
87 };
88
89
90 RIVET_DECLARE_PLUGIN(BELLE_2003_I620180);
91
92}
|