Rivet analyses

CP asymmetry in  → Xs + Dγ decays

Experiment: BABAR (PEP-II)

Inspire ID: 1337783

Status: VALIDATED NOHEPDATA

Authors: - Peter Richardson

References: - Phys.Rev.Lett. 114 (2015) 15, 151601

Beams: * *

Beam energies: ANY

Run details: - B and 0 mesons in Upsilon(4S) decays (needed as photon energy measured in Upsilon(4S) rest frame)

Measurement of the CP asymmetry in  → Xs + Dγ decays

Source code:BABAR_2015_I1337783.cc

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

namespace Rivet {


  /// @brief CP asymetry in B -> X gamma
  class BABAR_2015_I1337783 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2015_I1337783);


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

    /// Book histograms and initialise projections before the run
    void init() {
      // Initialise and register projections
      declare(UnstableParticles(Cuts::pid==300553), "UFS");
      // profile hist for asymmetry
      book(_p,1,1,1);
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {
      if(_edges.empty()) _edges=_p->xEdges();
      // Loop over upslion(4s)
      for (const Particle& p : apply<UnstableParticles>(event, "UFS").particles()) {
        // boost to rest frame
        LorentzTransform cms_boost;
        if (p.p3().mod() > 1*MeV)
          cms_boost = LorentzTransform::mkFrameTransformFromBeta(p.momentum().betaVec());
    // loop over children
        for(const Particle & p2 : p.children(Cuts::abspid==521 || Cuts::abspid==511)) {
      Particle bottom=p2;
      while(bottom.children()[0].abspid()==p2.abspid())
        bottom = bottom.children()[0];
      bool charm = false;
      FourMomentum pgamma(0.,0.,0.,0.);
      unsigned int ngamma = 0;
      for (const Particle & child : bottom.children()) {
        if (child.pid() == PID::PHOTON) {
          ngamma += 1;
          pgamma += child.momentum();
        }
        else if(PID::isCharmHadron(child.pid()))
          charm = true;
      }
      if (ngamma != 1 || charm ) continue;
      double Egamma = cms_boost.transform(pgamma).E();
      double wgt = bottom.pid()<0 ? 100. : -100.;
          double Emin=1.7;
      for(unsigned int ix=0;ix<_edges.size();++ix) {
        if(Egamma>Emin) _p->fill(_edges[ix],wgt);
            Emin+=0.1;
          }
    }
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {
    }

    /// @}


    /// @name Histograms
    /// @{
    BinnedProfilePtr<string> _p;
    vector<string> _edges;
    /// @}


  };


  RIVET_DECLARE_PLUGIN(BABAR_2015_I1337783);

}