Rivet analyses referenceBABAR_2004_I626730Mass and helicity angles in $B^+\to K^+\pi^+\pi^-$Experiment: BABAR (PEP-II) Inspire ID: 626730 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of mass distributions and helicity angles in $B^+\to K^+\pi^+\pi^-$. The efficiency corrected, background subtracted data were read from the figures in the paper Source code: BABAR_2004_I626730.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 -> K pi pi
10 class BABAR_2004_I626730 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2004_I626730);
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(PID::K0S);
27 declare(BP, "BP");
28 for(unsigned int ix=0; ix<3; ++ix) {
29 book(_h_mass2[ix],2,1,1+ix);
30 book(_h_angle[ix],2,2,1+ix);
31 if(ix==2) continue;
32 book(_h_mass [ix],1,1,1+ix);
33 }
34 }
35
36
37 /// Perform the per-event analysis
38 void analyze(const Event& event) {
39 static const map<PdgId,unsigned int> & mode = { { 321,1}, { 211,1}, {-211,1}};
40 static const map<PdgId,unsigned int> & modeCC = { {-321,1}, { 211,1}, {-211,1}};
41 DecayedParticles BP = apply<DecayedParticles>(event, "BP");
42 // loop over particles
43 for(unsigned int ix=0;ix<BP.decaying().size();++ix) {
44 int sign = BP.decaying()[ix].pid()>0 ? 1 : -1;
45 if((sign>0 and BP.modeMatches(ix,3,mode)) ||
46 (sign<0 and BP.modeMatches(ix,3,mode))) {
47 // boost to B rest frame
48 LorentzTransform boost =
49 LorentzTransform::mkFrameTransformFromBeta(BP.decaying()[ix]. momentum().betaVec());
50 // momenta
51 FourMomentum pip = boost.transform(BP.decayProducts()[ix].at( 211*sign)[0].momentum());
52 FourMomentum pim = boost.transform(BP.decayProducts()[ix].at(-211*sign)[0].momentum());
53 FourMomentum Kp = boost.transform(BP.decayProducts()[ix].at( 321*sign)[0].momentum());
54 // mass distributions
55 double mKpi = (Kp+pim).mass();
56 _h_mass[0]->fill(mKpi);
57 double mpipi = (pip+pim).mass();
58 _h_mass[1]->fill(mpipi);
59 // regions for the helicity analysis
60 unsigned int imode=0;
61 if(mKpi>0.816 && mKpi<0.976 && mpipi>1.5) imode=0;
62 else if(mpipi>0.9 && mpipi<1.1) imode=1;
63 else if(mKpi>0.976&& mKpi<1.8 && mpipi>1.5) imode=2;
64 else continue;
65 // pi+pi- resonance
66 if(imode==1) {
67 _h_mass2[imode]->fill(mpipi);
68 FourMomentum ppipi = pim+pip;
69 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(ppipi.betaVec());
70 double cTheta = boost2.transform(pim).p3().unit().dot(Kp.p3().unit());
71 _h_angle[imode]->fill(cTheta);
72 }
73 // K pi- resonance
74 else {
75 _h_mass2[imode]->fill(mKpi);
76 FourMomentum pKpim = Kp+pim;
77 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pKpim.betaVec());
78 double cTheta = boost2.transform(Kp).p3().unit().dot(pip.p3().unit());
79 _h_angle[imode]->fill(cTheta);
80 }
81 }
82 }
83 }
84
85
86 /// Normalise histograms etc., after the run
87 void finalize() {
88 for(unsigned int ix=0; ix<3; ++ix) {
89 normalize(_h_mass2[ix],1.,false);
90 normalize(_h_angle[ix],1.,false);
91 if(ix==2) continue;
92 normalize(_h_mass[ix],1.,false);
93 }
94 }
95
96 /// @}
97
98
99 /// @name Histograms
100 /// @{
101 Histo1DPtr _h_mass[2],_h_mass2[3],_h_angle[3];
102 /// @}
103
104
105 };
106
107
108 RIVET_DECLARE_PLUGIN(BABAR_2004_I626730);
109
110}
|