Rivet analyses referenceBABAR_2008_I758472Longitudinal Polarization in $B^0\to K^{*0}\bar{K}^{*0}$Experiment: BABAR (PEP-II) Inspire ID: 758472 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the longitudinal polarization of the $K^{*0}$ mesons in the decay $B^0\to K^{*0}\bar{K}^{*0}$ by the BaBar collaboration. Only the longitudinal polarization is implemented due to the large backgrounds in the kinematic distributions in the paper. Source code: BABAR_2008_I758472.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 Longitudinal Polarization in B -> K*0 K*0
10 class BABAR_2008_I758472 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2008_I758472);
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==511);
24 declare(ufs, "UFS");
25 DecayedParticles BB(ufs);
26 BB.addStable( 313);
27 BB.addStable(-313);
28 declare(BB, "BB");
29 // histos
30 book(_p[0],1,1,1);
31 book(_p[1],"TMP/wgt");
32 }
33
34 bool isK(int id) {
35 return id==321 || id==311 || id==310 || id==130;
36 }
37
38 bool isPi(int id) {
39 return id==211 || id==111;
40 }
41
42 /// Perform the per-event analysis
43 void analyze(const Event& event) {
44 static const map<PdgId,unsigned int> & mode1 = { {-313,1}, { 313,1}};
45
46 DecayedParticles BB = apply<DecayedParticles>(event, "BB");
47 // loop over particles
48 for(unsigned int ix=0;ix<BB.decaying().size();++ix) {
49 if (!BB.modeMatches(ix,2,mode1)) continue;
50 int sign = BB.decaying()[ix].pid()/BB.decaying()[ix].abspid();
51 const Particle & Kstar = BB.decayProducts()[ix].at( sign*313)[0];
52 Particle KK;
53 if(isK (Kstar.children()[0].abspid()) &&
54 isPi(Kstar.children()[1].abspid()))
55 KK = Kstar.children()[0];
56 else if(isK (Kstar.children()[1].abspid()) &&
57 isPi(Kstar.children()[0].abspid()))
58 KK = Kstar.children()[1];
59 else continue;
60 // boost to B rest frame
61 LorentzTransform boost =
62 LorentzTransform::mkFrameTransformFromBeta(BB.decaying()[ix]. momentum().betaVec());
63 FourMomentum pKstar = boost.transform(Kstar.momentum());
64 FourMomentum pK = boost.transform(KK .momentum());
65 const LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pKstar.betaVec());
66 pK = boost2.transform(pK);
67 FourMomentum pB = boost2.transform(boost.transform(BB.decaying()[ix].momentum()));
68 double cosK = -pB.p3().unit().dot(pK.p3().unit());
69 _p[0]->fill(0.5*(5.*sqr(cosK)-1));
70 _p[1]->fill();
71 }
72 }
73
74
75 /// Normalise histograms etc., after the run
76 void finalize() {
77 scale(_p[0], 1./ *_p[1]);
78 }
79
80 /// @}
81
82
83 /// @name Histograms
84 /// @{
85 CounterPtr _p[2];
86 /// @}
87
88
89 };
90
91
92 RIVET_DECLARE_PLUGIN(BABAR_2008_I758472);
93
94}
|