rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CLEO_2013_I1081165

Kinematic distributions in $D^0\to \pi^-\pi^0 e^+\nu_e$ and $D^+\to \pi^+\pi^- e^+\nu_e$
Experiment: CLEO (CESR)
Inspire ID: 1081165
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 110 (2013) 13, 131802
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing D0 or D+

Measurement of the kinematic distributions in $D^0\to \pi^-\pi^0 e^+\nu_e$ and $D^+\to \pi^+\pi^- e^+\nu_e$ by CLEO. N.B. the plots where read from the paper and may not have been corrected for acceptance.

Source code: CLEO_2013_I1081165.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 D -> rho e nu
 10  class CLEO_2013_I1081165 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(CLEO_2013_I1081165);
 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::pid==411 ||Cuts::pid==421);
 24      declare(ufs, "UFS");
 25      DecayedParticles DD(ufs);
 26      DD.addStable(PID::PI0);
 27      DD.addStable(PID::K0S);
 28      DD.addStable(PID::ETA);
 29      DD.addStable(PID::ETAPRIME);
 30      declare(DD, "DD");
 31      
 32      // Book histograms
 33      for(unsigned int ix=0;ix<4;++ix)
 34	book(_h[ix],1,1,1+ix);
 35    }
 36
 37
 38    /// Perform the per-event analysis
 39    void analyze(const Event& event) {
 40      static const map<PdgId,unsigned int> & mode1 = { { 111,1}, {-211,1}, {-11,1}, { 12,1}};
 41      static const map<PdgId,unsigned int> & mode2 = { { 211,1}, {-211,1}, {-11,1}, { 12,1}};
 42      DecayedParticles DD = apply<DecayedParticles>(event, "DD");
 43      // loop over particles
 44      for(unsigned int ix=0;ix<DD.decaying().size();++ix) {
 45	Particle pi2;
 46	if     (DD.decaying()[ix].pid()==421 && DD.modeMatches(ix,4,mode1)) {
 47	  pi2= DD.decayProducts()[ix].at(111)[0];
 48	}
 49      	else if(DD.decaying()[ix].pid()==411 && DD.modeMatches(ix,4,mode2)) {
 50	  pi2= DD.decayProducts()[ix].at(211)[0];
 51	}
 52	else continue;
 53	const Particle & pim= DD.decayProducts()[ix].at(-211)[0];
 54       	const Particle & ep = DD.decayProducts()[ix].at(-11)[0];
 55       	const Particle & nue= DD.decayProducts()[ix].at( 12)[0];
 56	FourMomentum pRho = pi2.momentum()+pim.momentum();
 57	if(abs(pRho.mass()-0.7753)>0.15) continue;
 58        FourMomentum qq = DD.decaying()[ix].momentum()-pRho;
 59        _h[0]->fill(qq.mass2());
 60      	// boost momenta to D rest frame
 61       	LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(DD.decaying()[ix].momentum().betaVec());
 62       	FourMomentum pPP = boost.transform(pRho);
 63      	Matrix3 ptoz(-pPP.p3().unit(), Vector3(0,0,1));
 64      	boost.preMult(ptoz);
 65       	// the momenta in frane to W along z
 66       	FourMomentum pD  = boost.transform(DD.decaying()[ix].momentum());
 67       	FourMomentum ppi2 = boost.transform(pi2.momentum());
 68       	FourMomentum ppim = boost.transform(pim.momentum());
 69      	FourMomentum pe  = boost.transform(ep .momentum());
 70      	FourMomentum pnu = boost.transform(nue.momentum());
 71       	pRho = ppi2+ppim;
 72       	qq = pD-pRho;
 73       	LorentzTransform boostRho = LorentzTransform::mkFrameTransformFromBeta(pRho.betaVec());
 74       	Vector3 axisRho = boostRho.transform(ppim).p3().unit();
 75	_h[1]->fill(axisRho.dot(pRho.p3().unit()));
 76      	LorentzTransform boostW = LorentzTransform::mkFrameTransformFromBeta(    qq.betaVec());
 77	Vector3 axisE = boostW.transform(pe).p3().unit();
 78	_h[2]->fill(axisE.dot(qq.p3().unit()));
 79	axisRho.setZ(0.);
 80	axisE.setZ(0.);
 81	double chi = atan2(axisE.cross(axisRho).dot(qq.p3().unit()), axisE.dot(axisRho));
 82	_h[3]->fill(chi);
 83      }
 84    }
 85
 86
 87    /// Normalise histograms etc., after the run
 88    void finalize() {
 89      for(unsigned int ix=0;ix<4;++ix)
 90	normalize(_h[ix]);
 91    }
 92
 93    /// @}
 94
 95
 96    /// @name Histograms
 97    /// @{
 98    Histo1DPtr _h[4];
 99    /// @}
100
101
102  };
103
104
105  RIVET_DECLARE_PLUGIN(CLEO_2013_I1081165);
106
107}