Rivet analyses

Helicity angles and Polarization in B0 → Ds*+D*−

Experiment: BABAR (PEP-II)

Inspire ID: 613283

Status: VALIDATED NOHEPDATA

Authors: - Peter Richardson

References: - Phys.Rev.D 67 (2003) 092003

Beams: * *

Beam energies: ANY

Run details: - Any proces producing B0 mesons, originally Upsilon(4S) decays

Measurement of the helicity angles and polarization in B0 → Ds*+D*−. 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

// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/UnstableParticles.hh"
#include "Rivet/Projections/DecayedParticles.hh"

namespace Rivet {


  /// @brief B0 -> Ds* D*
  class BABAR_2003_I613283 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2003_I613283);


    /// @name Analysis methods
    /// @{

    /// Book histograms and initialise projections before the run
    void init() {
      // Initialise and register projections
      UnstableParticles ufs = UnstableParticles(Cuts::abspid==511);
      declare(ufs, "UFS");
      DecayedParticles B0(ufs);
      B0.addStable( 413);
      B0.addStable(-413);
      B0.addStable( 433);
      B0.addStable(-433);
      declare(B0, "B0");
      // histos
      for(unsigned int ix=0;ix<2;++ix)
    book(_h[ix],2,1+ix,1);
      for(unsigned int ix=0;ix<2;++ix)
        book(_p[ix],"TMP/p_"+toString(ix+1));
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {
      static const map<PdgId,unsigned int> & mode   = { { 433,1}, {-413,1}};
      static const map<PdgId,unsigned int> & modeCC = { {-433,1}, { 413,1}};
      DecayedParticles B0 = apply<DecayedParticles>(event, "B0");
      // loop over particles
      for(unsigned int ix=0;ix<B0.decaying().size();++ix) {
    int sign = 1;
        if      ( B0.decaying()[ix].pid()>0 && B0.modeMatches(ix,2,mode  ) ) sign= 1.;
        else if ( B0.decaying()[ix].pid()<0 && B0.modeMatches(ix,2,modeCC) ) sign=-1.;
    else continue;
    // find D* decay products
    const Particle & Dstar = B0.decayProducts()[ix].at(-sign*413)[0];
    if(Dstar.children().size()!=2) continue;
    Particle pim;
    if(Dstar.children()[0].pid()==-sign*211 &&
       Dstar.children()[1].pid()==-sign*421) {
      pim = Dstar.children()[0];
    }
    else if(Dstar.children()[1].pid()==-sign*211 &&
        Dstar.children()[0].pid()==-sign*421) {
      pim = Dstar.children()[1];
    }
    else
      continue;
    // find Ds* decay products
    const Particle & DSstar = B0.decayProducts()[ix].at(sign*433)[0];
    Particle gamma;
    if(DSstar.children()[0].pid()   == 22 &&
       DSstar.children()[1].pid()==sign*431) {
      gamma= DSstar.children()[0];
    }
    else if(DSstar.children()[1].pid()   == 22 &&
        DSstar.children()[0].pid()==sign*431) {
      gamma = DSstar.children()[1];
    }
    else
      continue;
        // boost to B rest frame
    LorentzTransform boost =
          LorentzTransform::mkFrameTransformFromBeta(B0.decaying()[ix].momentum().betaVec());
    FourMomentum pDSstar = boost.transform(DSstar.momentum());
    FourMomentum pDstar  = boost.transform( Dstar.momentum());
    FourMomentum pGamma = boost.transform(gamma.momentum());
    FourMomentum pPim   = boost.transform(pim.momentum());
    const LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pDstar.betaVec());
    pPim = boost2.transform(pPim);
    double cPi = pPim.p3().unit().dot(pDSstar.p3().unit());
    const LorentzTransform boost3 = LorentzTransform::mkFrameTransformFromBeta(pDSstar.betaVec());
     pGamma = boost3.transform(pGamma);
    double cGamma = pGamma.p3().unit().dot(pDstar.p3().unit());
    _p[0]->fill(-100.*(1.-5.*sqr(cPi))/2.);
        _p[1]->fill();
    _h[0]->fill(cPi);
    _h[1]->fill(cGamma);
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      for(unsigned int ix=0;ix<2;++ix)
    normalize(_h[ix],1.,false);
      Estimate0DPtr tmp;
      book(tmp,1,1,1);
      divide(*_p[0],*_p[1],tmp);
    }

    /// @}


    /// @name Histograms
    /// @{
    Histo1DPtr _h[2];
    CounterPtr _p[2];
    /// @}


  };


  RIVET_DECLARE_PLUGIN(BABAR_2003_I613283);

}