rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BABAR_2003_I613283

Helicity angles and Polarization in $B^0\to D^{*+}_sD^{*-}$
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 $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}