rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2022_I2512112

Hadronic mass distributions in $B\to D^{(*)}\pi(\pi)\ell\nu$ decays
Experiment: BELLE (KEKB)
Inspire ID: 2512112
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References: Beams: * *
Beam energies: ANY
Run details:
  • Any process produding b0 and B+, originally Upsilon(4S) decay

Measurement of the mass of the hadronic system in $B\to D^{(*)}\pi(\pi)\ell\nu$ decays

Source code: BELLE_2022_I2512112.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) semileptonic
 10  class BELLE_2022_I2512112 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2022_I2512112);
 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 or
 24						Cuts::abspid==521);
 25      declare(ufs, "UFS");
 26      DecayedParticles BB(ufs);
 27      BB.addStable(411); BB.addStable(-411);
 28      BB.addStable(421); BB.addStable(-421);
 29      BB.addStable(413); BB.addStable(-413);
 30      BB.addStable(423); BB.addStable(-423);
 31      BB.addStable(PID::PI0);
 32      declare(BB, "BB");
 33      // histograms
 34      for(unsigned int ix=0;ix<3;++ix)
 35	for(unsigned int iy=0;iy<2;++iy)
 36	  book(_h[ix][iy],1+ix,1,1+iy);
 37    }
 38
 39
 40    /// Perform the per-event analysis
 41    void analyze(const Event& event) {
 42      static const map<PdgId,unsigned int> mode1[4] = {{ {-421,1}, {-211,1}, {-11,1}, { 12,1}},
 43						       { { 421,1}, { 211,1}, { 11,1}, {-12,1}},
 44						       { {-421,1}, {-211,1}, {-13,1}, { 14,1}},
 45						       { { 421,1}, { 211,1}, { 13,1}, {-14,1}}};
 46      static const map<PdgId,unsigned int> mode2[4] = {{ {-411,1}, { 211,1}, {-11,1}, { 12,1}},
 47						       { { 411,1}, {-211,1}, { 11,1}, {-12,1}},
 48						       { {-411,1}, { 211,1}, {-13,1}, { 14,1}},
 49						       { { 411,1}, {-211,1}, { 13,1}, {-14,1}}};
 50      static const map<PdgId,unsigned int> mode3[4] = {{ {-423,1}, {-211,1}, {-11,1}, { 12,1}},
 51						       { { 423,1}, { 211,1}, { 11,1}, {-12,1}},
 52						       { {-423,1}, {-211,1}, {-13,1}, { 14,1}},
 53						       { { 423,1}, { 211,1}, { 13,1}, {-14,1}}};
 54      static const map<PdgId,unsigned int> mode4[4] = {{ {-413,1}, { 211,1}, {-11,1}, { 12,1}},
 55						       { { 413,1}, {-211,1}, { 11,1}, {-12,1}},
 56						       { {-413,1}, { 211,1}, {-13,1}, { 14,1}},
 57						       { { 413,1}, {-211,1}, { 13,1}, {-14,1}}};
 58      static const map<PdgId,unsigned int> mode5[4] = {{ {-411,1}, {-211,1}, { 211,1}, {-11,1}, { 12,1}},
 59						       { { 411,1}, {-211,1}, { 211,1}, { 11,1}, {-12,1}},
 60						       { {-411,1}, {-211,1}, { 211,1}, {-13,1}, { 14,1}},
 61						       { { 411,1}, {-211,1}, { 211,1}, { 13,1}, {-14,1}}};
 62      static const map<PdgId,unsigned int> mode6[4] = {{ {-421,1}, {-211,1}, { 211,1}, {-11,1}, { 12,1}},
 63						       { { 421,1}, {-211,1}, { 211,1}, { 11,1}, {-12,1}},
 64						       { {-421,1}, {-211,1}, { 211,1}, {-13,1}, { 14,1}},
 65						       { { 421,1}, {-211,1}, { 211,1}, { 13,1}, {-14,1}}};
 66      // loop over B mesons
 67      DecayedParticles BB = apply<DecayedParticles>(event, "BB");
 68      // loop over particles
 69      for(unsigned int ix=0;ix<BB.decaying().size();++ix) {
 70	for(unsigned int il=0;il<4;++il) {
 71	  int iD,iloc1,iloc2;
 72	  if ( BB.modeMatches(ix,4,mode1[il]) ) {
 73	    iloc1=0;
 74	    iloc2=0;
 75	    iD=-421;
 76	  }
 77	  else if ( BB.modeMatches(ix,4,mode2[il]) ) {
 78	    iloc1=0;
 79	    iloc2=1;
 80	    iD=-411;
 81	  }
 82	  else if ( BB.modeMatches(ix,4,mode3[il]) ) {
 83	    iloc1=1;
 84	    iloc2=0;
 85	    iD=-423;
 86	  }
 87	  else if ( BB.modeMatches(ix,4,mode4[il]) ) {
 88	    iloc1=1;
 89	    iloc2=1;
 90	    iD=-413;
 91	  }
 92	  else if ( BB.modeMatches(ix,5,mode5[il]) ) {
 93	    iloc1=2;
 94	    iloc2=0;
 95	    iD=-411;
 96	  }
 97	  else if ( BB.modeMatches(ix,5,mode6[il]) ) {
 98	    iloc1=2;
 99	    iloc2=1;
100	    iD=-421;
101	  }
102	  else continue;
103	  int sign = il%2==0 ? 1 : -1;
104	  int ipi = -sign*211;
105	  if(iloc2==1) ipi *=-1;
106	  const Particle & pi1= BB.decayProducts()[ix].at( ipi)[0];
107	  const Particle & DD = BB.decayProducts()[ix].at( iD*sign )[0];
108	  FourMomentum pHad = pi1.momentum()+DD.momentum();
109	  if(iloc1==2) {
110	    const Particle & pi2= BB.decayProducts()[ix].at(-ipi)[0];
111	    pHad += pi2.momentum();
112	  }
113	  double mass = pHad.mass();
114	  if(iloc1==1) mass -=DD.mass();
115	  _h[iloc1][iloc2]->fill(mass);
116	}
117      }
118    }
119
120
121    /// Normalise histograms etc., after the run
122    void finalize() {
123      for(unsigned int ix=0;ix<3;++ix)
124	for(unsigned int iy=0;iy<2;++iy)
125	  normalize(_h[ix][iy],1.,false);
126    }
127
128    /// @}
129
130
131    /// @name Histograms
132    /// @{
133    Histo1DPtr _h[3][2];
134    /// @}
135
136
137  };
138
139
140  RIVET_DECLARE_PLUGIN(BELLE_2022_I2512112);
141
142}