Rivet analyses referenceBABAR_2003_I613283Helicity angles and Polarization in $B^0\to D^{*+}_sD^{*-}$Experiment: BABAR (PEP-II) Inspire ID: 613283 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the helicity angles and polarization in $B^0\to D^{*+}_sD^{*-}$. The polarization was given in the paper and the background subtracted data for the helicity angles was extracted from figure 2 in the paper. Source code: BABAR_2003_I613283.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 B0 -> Ds* D*
10 class BABAR_2003_I613283 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2003_I613283);
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 B0(ufs);
26 B0.addStable( 413);
27 B0.addStable(-413);
28 B0.addStable( 433);
29 B0.addStable(-433);
30 declare(B0, "B0");
31 // histos
32 for(unsigned int ix=0;ix<2;++ix)
33 book(_h[ix],2,1+ix,1);
34 for(unsigned int ix=0;ix<2;++ix)
35 book(_p[ix],"TMP/p_"+toString(ix+1));
36 }
37
38
39 /// Perform the per-event analysis
40 void analyze(const Event& event) {
41 static const map<PdgId,unsigned int> & mode = { { 433,1}, {-413,1}};
42 static const map<PdgId,unsigned int> & modeCC = { {-433,1}, { 413,1}};
43 DecayedParticles B0 = apply<DecayedParticles>(event, "B0");
44 // loop over particles
45 for(unsigned int ix=0;ix<B0.decaying().size();++ix) {
46 int sign = 1;
47 if ( B0.decaying()[ix].pid()>0 && B0.modeMatches(ix,2,mode ) ) sign= 1.;
48 else if ( B0.decaying()[ix].pid()<0 && B0.modeMatches(ix,2,modeCC) ) sign=-1.;
49 else continue;
50 // find D* decay products
51 const Particle & Dstar = B0.decayProducts()[ix].at(-sign*413)[0];
52 if(Dstar.children().size()!=2) continue;
53 Particle pim;
54 if(Dstar.children()[0].pid()==-sign*211 &&
55 Dstar.children()[1].pid()==-sign*421) {
56 pim = Dstar.children()[0];
57 }
58 else if(Dstar.children()[1].pid()==-sign*211 &&
59 Dstar.children()[0].pid()==-sign*421) {
60 pim = Dstar.children()[1];
61 }
62 else
63 continue;
64 // find Ds* decay products
65 const Particle & DSstar = B0.decayProducts()[ix].at(sign*433)[0];
66 Particle gamma;
67 if(DSstar.children()[0].pid() == 22 &&
68 DSstar.children()[1].pid()==sign*431) {
69 gamma= DSstar.children()[0];
70 }
71 else if(DSstar.children()[1].pid() == 22 &&
72 DSstar.children()[0].pid()==sign*431) {
73 gamma = DSstar.children()[1];
74 }
75 else
76 continue;
77 // boost to B rest frame
78 LorentzTransform boost =
79 LorentzTransform::mkFrameTransformFromBeta(B0.decaying()[ix].momentum().betaVec());
80 FourMomentum pDSstar = boost.transform(DSstar.momentum());
81 FourMomentum pDstar = boost.transform( Dstar.momentum());
82 FourMomentum pGamma = boost.transform(gamma.momentum());
83 FourMomentum pPim = boost.transform(pim.momentum());
84 const LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pDstar.betaVec());
85 pPim = boost2.transform(pPim);
86 double cPi = pPim.p3().unit().dot(pDSstar.p3().unit());
87 const LorentzTransform boost3 = LorentzTransform::mkFrameTransformFromBeta(pDSstar.betaVec());
88 pGamma = boost3.transform(pGamma);
89 double cGamma = pGamma.p3().unit().dot(pDstar.p3().unit());
90 _p[0]->fill(-100.*(1.-5.*sqr(cPi))/2.);
91 _p[1]->fill();
92 _h[0]->fill(cPi);
93 _h[1]->fill(cGamma);
94 }
95 }
96
97
98 /// Normalise histograms etc., after the run
99 void finalize() {
100 for(unsigned int ix=0;ix<2;++ix)
101 normalize(_h[ix],1.,false);
102 Estimate0DPtr tmp;
103 book(tmp,1,1,1);
104 divide(*_p[0],*_p[1],tmp);
105 }
106
107 /// @}
108
109
110 /// @name Histograms
111 /// @{
112 Histo1DPtr _h[2];
113 CounterPtr _p[2];
114 /// @}
115
116
117 };
118
119
120 RIVET_DECLARE_PLUGIN(BABAR_2003_I613283);
121
122}
|