Rivet analyses referenceBABAR_2009_I810694Mass distributions in $B^-\to D^+\pi^-\pi^-$Experiment: BABAR (PEP-II) Inspire ID: 810694 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of mass and angular distributions in $B^-\to D^+\pi^-\pi^-$. The data were read from the plots in the paper and may not be corrected for acceptance/efficiency, however the backgrounds given in the paper were subtracted. Source code: BABAR_2009_I810694.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- > D+ pi-pi-
10 class BABAR_2009_I810694 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2009_I810694);
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( 411);
27 BP.addStable(-411);
28 declare(BP, "BP");
29 // histograms
30 for(unsigned int ix=0;ix<3;++ix) {
31 if(ix<2) book(_h_angle[ix],2,1,1+ix);
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 = { { -411,1},{ 211,2}};
40 static const map<PdgId,unsigned int> & modeCC = { { 411,1},{-211,2}};
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=1;
45 if (BP.modeMatches(ix,3,mode )) sign= 1;
46 else if (BP.modeMatches(ix,3,modeCC)) sign=-1;
47 else continue;
48 const Particle & Dp = BP.decayProducts()[ix].at(-sign*411)[0];
49 const Particles & pim = BP.decayProducts()[ix].at( sign*211);
50 _h_mass[2]->fill((pim[0].momentum()+pim[1].momentum()).mass2());
51 // boost to B rest frame
52 LorentzTransform boost =
53 LorentzTransform::mkFrameTransformFromBeta(BP.decaying()[ix]. momentum().betaVec());
54 FourMomentum pD = boost.transform(Dp.momentum());
55 FourMomentum ppi[2] = {boost.transform(pim[0].momentum()),boost.transform(pim[1].momentum())};
56 double m2Dpi[2];
57 for(unsigned int ix=0;ix<2;++ix) {
58 m2Dpi[ix] = (pim[ix].momentum()+Dp.momentum()).mass2();
59 if( (m2Dpi[ix]>4.5 && m2Dpi[ix]<5.5) ||
60 (m2Dpi[ix]>5.9 && m2Dpi[ix]<6.2) ) {
61 FourMomentum pDpi = pD+pim[ix];
62 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pDpi.betaVec());
63 Vector3 axis1 = boost2.transform(ppi[ix]).p3().unit();
64 Vector3 axis2 = (ix==0 ? ppi[1] : ppi[0]).p3().unit();
65 double cTheta = axis1.dot(axis2);
66 if(m2Dpi[ix]<5.5)
67 _h_angle[0]->fill(cTheta);
68 else
69 _h_angle[1]->fill(cTheta);
70 }
71 }
72 if(m2Dpi[0]>m2Dpi[1]) {
73 _h_mass[1]->fill(m2Dpi[0]);
74 _h_mass[0]->fill(m2Dpi[1]);
75 }
76 else {
77 _h_mass[0]->fill(m2Dpi[0]);
78 _h_mass[1]->fill(m2Dpi[1]);
79 }
80 }
81 }
82
83
84 /// Normalise histograms etc., after the run
85 void finalize() {
86 for(unsigned int ix=0;ix<3;++ix) {
87 if(ix<2) normalize(_h_angle[ix],1.,false);
88 normalize(_h_mass[ix],1.,false);
89 }
90 }
91
92 /// @}
93
94
95 /// @name Histograms
96 /// @{
97 Histo1DPtr _h_mass[3],_h_angle[2];
98 /// @}
99
100
101 };
102
103
104 RIVET_DECLARE_PLUGIN(BABAR_2009_I810694);
105
106}
|