Rivet analyses


title: BABAR_2008_I758167

Helicity angles in $B\to \bar{D} D_{s1}^+(2536)$, $B\to \psi(3770)K$ and $B\to X(3872)K$

Experiment: BABAR (PEP-II)

Inspire ID: 758167

Status: VALIDATED NOHEPDATA

Authors: - Peter Richardson

References: - Phys.Rev.D 77 (2008) 011102

Beams: * *

Beam energies: ANY

Run details: - Any process producing B mesons, originally Upsilon(4S)

Measurement of helicity angles in $B\to \bar{D} D_{s1}^+(2536)$, $B\to \psi(3770)K$ and $B\to X(3872)K$ decays using $B\to \bar{D}^{()}D^{()}K$ modes. The background subtracted, efficiency corrected distributions were read from Figure 1 in the paper. There is no consensus as to the nature of the $X(3872)$ $c\bar{c}$ state and therefore we taken its PDG code to be 9030443, i.e. the first unused code for an undetermined spin one $c\bar{c}$ state. This can be changed using the PID option if a different code is used by the event generator performing the simulation.

Source code:BABAR_2008_I758167.cc

```c++ // -- C++ --

include "Rivet/Analysis.hh"

include "Rivet/Projections/UnstableParticles.hh"

namespace Rivet {

/// @brief B -> D() D() K class BABAR_2008_I758167 : public Analysis { public:

/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2008_I758167);


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

/// Book histograms and initialise projections before the run
void init() {
  // set the PDG code
  _pid = getOption<int>("PID", 9030443);
  // Initialise and register projections
  UnstableParticles ufs = UnstableParticles(Cuts::abspid == 511 || Cuts::abspid == 521);
  declare(ufs, "UFS");
  // histos
  for (unsigned int ix = 0; ix < 3; ++ix) book(_h[ix], 1, 1, 1 + ix);
}

bool isK(int id) {
  return id == 321 || id == 311 || id == 310 || id == 130;
}

/// Perform the per-event analysis
void analyze(const Event& event) {
  UnstableParticles ufs = apply<UnstableParticles>(event, "UFS");
  for (const Particle& B : ufs.particles()) {
    if (B.children().size() != 2) continue;
    int sign = B.pid() / B.abspid(), iD = B.abspid() - 100;
    unsigned int imode = 0;
    // boost to B rest frame
    LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(B.momentum().betaVec());
    Particle resonance;
    if (B.children()[0].pid() == sign * 10433 && B.children()[1].pid() == -sign * iD) {
      imode = 0;
      resonance = B.children()[0];
    }
    else if (B.children()[1].pid() == sign * 10433 && B.children()[0].pid() == -sign * iD) {
      imode = 0;
      resonance = B.children()[1];
    }
    else if (B.children()[0].pid() == 30443 && isK(B.children()[1].pid())) {
      imode = 1;
      resonance = B.children()[0];
    }
    else if (B.children()[1].pid() == 30443 && isK(B.children()[0].pid())) {
      imode = 1;
      resonance = B.children()[1];
    }
    else if (B.children()[0].pid() == _pid && isK(B.children()[1].pid())) {
      imode = 2;
      resonance = B.children()[0];
    }
    else if (B.children()[1].pid() == _pid && isK(B.children()[0].pid())) {
      imode = 2;
      resonance = B.children()[1];
    }
    else
      continue;
    if (resonance.children().size() != 2) continue;
    FourMomentum pRes = boost1.transform(resonance.momentum());
    LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pRes.betaVec());
    Vector3 axis1 = -pRes.p3().unit();
    Particle child;
    if (imode == 0) {
      Particle Dstar;
      if (isK(resonance.children()[1].pid())
          && (resonance.children()[0].pid() == sign * 413 || resonance.children()[0].pid() == sign * 423))
        child = resonance.children()[0];
      else if (isK(resonance.children()[0].pid())
               && (resonance.children()[1].pid() == sign * 413
                   || resonance.children()[1].pid() == sign * 423))
        child = resonance.children()[1];
      else
        continue;
    }
    // B -> D psi(3770)
    else if (imode == 1) {
      if (resonance.children()[0].pid() != -resonance.children()[1].pid()) continue;
      if (resonance.children()[0].abspid() != 411 && resonance.children()[0].abspid() != 421) continue;
      child = resonance.children()[0].pid() > 0 ? resonance.children()[0] : resonance.children()[1];
    }
    else if (imode == 2) {
      if ((resonance.children()[0].abspid() == 423 && resonance.children()[1].abspid() == 421)
          || (resonance.children()[1].abspid() == 423 && resonance.children()[0].abspid() == 421)) {
        child = resonance.children()[0].pid() > 0 ? resonance.children()[0] : resonance.children()[1];
      }
      else
        continue;
    }
    Vector3 axis2 = boost2.transform(boost1.transform(child.momentum())).p3().unit();
    _h[imode]->fill(axis1.dot(axis2));
  }
}


/// Normalise histograms etc., after the run
void finalize() {
  for (unsigned int ix = 0; ix < 3; ++ix) normalize(_h[ix], 1., false);
}

/// @}


/// @name Histograms
/// @{
int _pid;
Histo1DPtr _h[3];
/// @}

};

RIVET_DECLARE_PLUGIN(BABAR_2008_I758167);

} ```