Processing math: 100%
rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2008_I756554

Mass and angular distributions in B+D0ˉD0K+
Experiment: BELLE (KEKB)
Inspire ID: 756554
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 100 (2008) 092001
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing B mesons, originally Upsilon(4S) decays

Measurement of mass and angular distributions in B+D0ˉD0K+ decays by the BaBar collaboration. The efficiency corrected, background subtracted, data were read from Figures 3 and 4. The PDG code for the Ds(2700) is not defined but we make the assumption it is the vector 2S state with PDG code 100433, although this can b e changed using the PID option.

Source code: BELLE_2008_I756554.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+ -> D0 Dbar0 K+
 10  class BELLE_2008_I756554 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2008_I756554);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      // set the PDG code
 23      _pid = getOption<int>("PID", 100433);
 24      // Initialise and register projections
 25      UnstableParticles ufs = UnstableParticles(Cuts::abspid==521);
 26      declare(ufs, "UFS");
 27      DecayedParticles BP(ufs);
 28      BP.addStable( 421);
 29      BP.addStable(-421);
 30      declare(BP, "BP");
 31      // histos
 32      for (unsigned int ix=0;ix<3;++ix) {
 33        book(_h_mass[ix],1,1,1+ix);
 34      }
 35      book(_h_angle,2,1,1);
 36      book(_c,"TMP/c");
 37    }
 38
 39
 40    /// Perform the per-event analysis
 41    void analyze(const Event& event) {
 42      DecayedParticles BP = apply<DecayedParticles>(event, "BP");
 43      // loop over particles
 44      for (unsigned int ix=0; ix<BP.decaying().size(); ++ix) {
 45        int sign=1;
 46        if      (BP.modeMatches(ix,3,mode  )) sign= 1;
 47        else if (BP.modeMatches(ix,3,modeCC)) sign=-1;
 48        else continue;
 49        const Particle & Kp    = BP.decayProducts()[ix].at( sign*321)[0];
 50        const Particle & D0    = BP.decayProducts()[ix].at( sign*421)[0];
 51        const Particle & Dbar0 = BP.decayProducts()[ix].at(-sign*421)[0];
 52        _c->fill();
 53        FourMomentum pDD = D0.mom()+Dbar0.mom();
 54        double mDD = pDD.mass();
 55        _h_mass[0]->fill(mDD);
 56        FourMomentum pDK = D0.mom()+Kp.mom();
 57        if(mDD>3.85) _h_mass[2]->fill(pDK.mass());
 58        LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(BP.decaying()[ix].mom().betaVec());
 59        pDD = boost1.transform(pDD);
 60        // boost to DD frame
 61        LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pDD.betaVec());
 62        FourMomentum pD = boost2.transform(boost1.transform(D0.mom()));
 63        // helicity angle
 64        double cTheta = pDD.p3().unit().dot(pD.p3().unit());
 65        if (cTheta>0) _h_mass[1]->fill(mDD);
 66        // check for intermediate DS
 67        bool Ds2700 = false;
 68        for(const Particle & child : BP.decaying()[ix].children()) {
 69          Ds2700 |= child.abspid()==_pid;
 70        }
 71        if (!Ds2700) continue;
 72        pDK = boost1.transform(pDK);
 73        LorentzTransform boost3 = LorentzTransform::mkFrameTransformFromBeta(pDK.betaVec());
 74        FourMomentum pK = boost3.transform(boost1.transform(Kp.mom()));
 75        cTheta = pDK.p3().unit().dot(pK.p3().unit());
 76        _h_angle->fill(cTheta);
 77      }
 78    }
 79
 80
 81    /// Normalise histograms etc., after the run
 82    void finalize() {
 83      scale(_h_mass, 1.0/ *_c);
 84      normalize(_h_angle);
 85    }
 86
 87    /// @}
 88
 89
 90    /// @name Histograms
 91    /// @{
 92    Histo1DPtr _h_mass[3],_h_angle;
 93    CounterPtr _c;
 94    int _pid;
 95    const map<PdgId,unsigned int> mode   = { { 421,1}, {-421,1}, { 321,1}};
 96    const map<PdgId,unsigned int> modeCC = { { 421,1}, {-421,1}, {-321,1}};
 97    /// @}
 98
 99
100  };
101
102
103  RIVET_DECLARE_PLUGIN(BELLE_2008_I756554);
104
105}