Rivet analyses


title: BABAR_2015_I1337783

CP asymmetry in $\bar{B}\to X_{s+D}\gamma$ 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 $\bar{B}^0$ mesons in Upsilon(4S) decays (needed as photon energy measured in Upsilon(4S) rest frame)

Measurement of the CP asymmetry in $\bar{B}\to X_{s+D}\gamma$ decays

Source code:BABAR_2015_I1337783.cc

```c++ // -- 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);

} ```