rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BABAR_2011_I920989

Helicity angles in the decay B0D0ω
Experiment: BABAR (PEP-II)
Inspire ID: 920989
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.D 84 (2011) 112007,
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing Bbar0, originally Upsilon(4S) decay

Measurement of the helicity angles in the decay B0D0ω. The data were read from the plots in the paper andmay not have been corrected.

Source code: BABAR_2011_I920989.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 -> D*0 omega
 10  class BABAR_2011_I920989 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2011_I920989);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      // projection
 23      UnstableParticles ufs = UnstableParticles(Cuts::abspid==511);
 24      declare(ufs, "UFS");
 25      // histos
 26      for(unsigned int ix=0;ix<4;++ix)
 27	for(unsigned int iy=0;iy<2;++iy)
 28	  book(_h[ix][iy],1,1+ix,1+iy);
 29    }
 30    
 31    void findChildren(const Particle & p, Particles & pim, Particles & pip,
 32		      Particles & pi0, unsigned int &ncount) {
 33      for( const Particle &child : p.children()) {
 34	if(child.pid()==PID::PIPLUS) {
 35	  pip.push_back(child);
 36	  ncount+=1;
 37	}
 38	else if(child.pid()==PID::PIMINUS) {
 39	  pim.push_back(child);
 40	  ncount+=1;
 41	}
 42	else if(child.pid()==PID::PI0) {
 43	  pi0.push_back(child);
 44	  ncount+=1;
 45	}
 46	else if(child.children().empty()) {
 47	  ncount+=1;
 48	}
 49    	else
 50    	  findChildren(child,pim,pip,pi0,ncount);
 51      }
 52    }
 53
 54    /// Perform the per-event analysis
 55    void analyze(const Event& event) {
 56      for(const Particle & B0 : apply<UnstableParticles>(event,"UFS").particles()) {
 57	if(B0.children().size()!=2) continue;
 58	Particle Dstar,omega;
 59	if(B0.children()[0].abspid()==423 &&
 60	   B0.children()[1].pid()==223) {
 61	  Dstar = B0.children()[0];
 62	  omega = B0.children()[1];
 63	}
 64	else if (B0.children()[1].abspid()==423 &&
 65		 B0.children()[0].pid()==223) {
 66	  Dstar = B0.children()[1];
 67	  omega = B0.children()[0];
 68	}
 69	else
 70	  continue;
 71	// check the no of decay products
 72	if(Dstar.children().size()!=2 || omega.children().size()!=3)
 73	  continue;
 74	// find the children of the D* meson
 75	Particle D0;
 76	if(Dstar.children()[0].pid()==111 &&
 77	   Dstar.children()[1].abspid()==421)
 78	  D0 = Dstar.children()[1];
 79	else if(Dstar.children()[1].pid()==111 &&
 80		Dstar.children()[0].abspid()==421)
 81	  D0 = Dstar.children()[0];
 82	else
 83	  continue;
 84	// children of the omega
 85	unsigned int ncount=0;
 86	Particles pip,pim,pi0;
 87	findChildren(omega,pim,pip,pi0,ncount);
 88	if( ncount!=3 || !(pim.size()==1 && pip.size()==1 && pi0.size()==1)) continue;
 89	// boost to B rest frame
 90	LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(B0.momentum().betaVec());
 91	FourMomentum pDstar = boost1.transform(Dstar.momentum());
 92	FourMomentum pD0    = boost1.transform(D0   .momentum());
 93	FourMomentum pomega = boost1.transform(omega.momentum());
 94	FourMomentum pPip   = boost1.transform(pip[0].momentum());
 95	FourMomentum pPim   = boost1.transform(pim[0].momentum());
 96	// boost to D* frame
 97	LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pDstar.betaVec());
 98	pD0 = boost2.transform(pD0);
 99	double c1 = pD0.p3().unit().dot(pDstar.p3().unit());
100	// boost to omega frame
101	LorentzTransform boost3 = LorentzTransform::mkFrameTransformFromBeta(pomega.betaVec());
102	pPip   = boost3.transform(pPip);
103	pPim   = boost3.transform(pPim);
104	Vector3 axisOmega = pPip.p3().cross(pPim.p3()).unit();
105	double c2 = pomega.p3().unit().dot(axisOmega);
106	for(unsigned int ix=0;ix<4;++ix) {
107	  _h[ix][0]->fill(c1);
108	  _h[ix][1]->fill(c2);
109	}
110      }
111    }
112
113
114    /// Normalise histograms etc., after the run
115    void finalize() {
116      for(unsigned int ix=0;ix<4;++ix)
117	for(unsigned int iy=0;iy<2;++iy)
118	  normalize(_h[ix][iy],1.,false);
119    }
120
121    /// @}
122
123
124    /// @name Histograms
125    /// @{
126    Histo1DPtr _h[4][2];
127    /// @}
128
129
130  };
131
132
133  RIVET_DECLARE_PLUGIN(BABAR_2011_I920989);
134
135}