Rivet analyses referenceBABAR_2007_I754030Helicity angle in $B^+\to\omega K^+$Experiment: BABAR (PEP-II) Inspire ID: 754030 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the helicty angle in $B^+\to\omega K^+$ decays. The data were read from Figure 1d in the paper and backgrounds given subtracted. The mass distributions are not implemented due to resolution effects. Source code: BABAR_2007_I754030.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 -> omega K
10 class BABAR_2007_I754030 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2007_I754030);
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==521);
24 declare(ufs, "UFS");
25 DecayedParticles BP(ufs);
26 BP.addStable(310);
27 BP.addStable(223);
28 declare(BP, "BP");
29 // histos
30 book(_h,1,1,1);
31 }
32
33 void findChildren(const Particle & p, Particles & pim, Particles & pip,
34 Particles & pi0, unsigned int &ncount) {
35 for( const Particle &child : p.children()) {
36 if(child.pid()==PID::PIPLUS) {
37 pip.push_back(child);
38 ncount+=1;
39 }
40 else if(child.pid()==PID::PIMINUS) {
41 pim.push_back(child);
42 ncount+=1;
43 }
44 else if(child.pid()==PID::PI0) {
45 pi0.push_back(child);
46 ncount+=1;
47 }
48 else if(child.children().empty()) {
49 ncount+=1;
50 }
51 else
52 findChildren(child,pim,pip,pi0,ncount);
53 }
54 }
55
56 /// Perform the per-event analysis
57 void analyze(const Event& event) {
58 static const map<PdgId,unsigned int> & mode = { { 223,1}, { 321,1}};
59 static const map<PdgId,unsigned int> & modeCC = { { 223,1}, {-321,1}};
60 DecayedParticles BP = apply<DecayedParticles>(event, "BP");
61 // loop over particles
62 for(unsigned int ix=0;ix<BP.decaying().size();++ix) {
63 if (BP.modeMatches(ix,2,mode) || BP.modeMatches(ix,2,modeCC)) {
64 const Particle & omega = BP.decayProducts()[ix].at(223)[0];
65 // children of the omega
66 unsigned int ncount=0;
67 Particles pip,pim,pi0;
68 findChildren(omega,pim,pip,pi0,ncount);
69 if( ncount!=3 || !(pim.size()==1 && pip.size()==1 && pi0.size()==1)) continue;
70 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(BP.decaying()[ix].momentum().betaVec());
71 FourMomentum pomega = boost1.transform(omega.momentum());
72 FourMomentum pPip = boost1.transform(pip[0].momentum());
73 FourMomentum pPim = boost1.transform(pim[0].momentum());
74 // boost to omega frame
75 LorentzTransform boost3 = LorentzTransform::mkFrameTransformFromBeta(pomega.betaVec());
76 pPip = boost3.transform(pPip);
77 pPim = boost3.transform(pPim);
78 Vector3 axisOmega = pPip.p3().cross(pPim.p3()).unit();
79 // helicity angle
80 _h->fill(abs(pomega.p3().unit().dot(axisOmega)));
81 }
82 }
83 }
84
85
86 /// Normalise histograms etc., after the run
87 void finalize() {
88 normalize(_h,1.,false);
89 }
90
91 /// @}
92
93
94 /// @name Histograms
95 /// @{
96 Histo1DPtr _h;
97 /// @}
98
99
100 };
101
102
103 RIVET_DECLARE_PLUGIN(BABAR_2007_I754030);
104
105}
|