Rivet analyses

Momentum Spectra and cross sections for DsJ*(2317)+ and DsJ*(2460)+ at 10.6 GeV

Experiment: BABAR (PEP-II)

Inspire ID: 714447

Status: VALIDATED

Authors: - Peter Richardson

References: - Phys.Rev. D74 (2006) 032007

Beams: e+ e-

Beam energies: (5.3, 5.3)GeV

Run details: - e+e- to hadrons

Momentum Spectra and cross sections for DsJ*(2317)+ and DsJ*(2460)+ at 10.6 GeV. All spectra and cross sections are for the centre-of-mass momentum of the excited Ds state, p*, greater than 3.2 GeV.

Source code:BABAR_2006_I714447.cc

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

namespace Rivet {


  /// @brief D*(sJ) production
  class BABAR_2006_I714447 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2006_I714447);


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

    /// Book histograms and initialise projections before the run
    void init() {
      // projections
      declare(UnstableParticles(), "UFS");
      // histograms
      // dists
      book(_s_2317, 2, 1, 1);
      book(_s_2460_1, 3, 1, 1);
      book(_s_2460_2, 4, 1, 1);
      book(_hel, 5, 1, 1);
      // rates
      book(_r_2317, 1, 1, 1);
      book(_r_2460_1, 1, 1, 2);
      book(_r_2460_2, 1, 1, 3);
      book(_r_2460_3, 1, 1, 4);
      book(_r_2460_4, 1, 1, 5);
      book(_r_2536, 1, 1, 6);
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {
      for (const Particle& Ds :
           apply<UnstableParticles>(event, "UFS")
               .particles(Cuts::pid == 10433 or Cuts::pid == 20433 or Cuts::pid == 10431)) {
        // cut of 3.2 GeV of the momentum
        double mom = Ds.momentum().p3().mod();
        if (mom <= 3.2) continue;
        if (Ds.abspid() == 10431) {
          _s_2317->fill(mom);
        }
        else if (Ds.abspid() == 20433) {
          _s_2460_1->fill(mom);
          _s_2460_2->fill(mom);
        }
        int sign = Ds.pid() / Ds.abspid();
        Particle DsStar;
        bool doHelicity = false;
        // identify the decay mode
        if (Ds.children().size() == 2) {
          if (Ds.children()[0].pid() == sign * 431 && Ds.children()[1].pid() == 111) {
            if (Ds.abspid() == 10431) _r_2317->fill("10.6"s);
          }
          else if (Ds.children()[1].pid() == sign * 431 && Ds.children()[0].pid() == 111) {
            if (Ds.abspid() == 10431) _r_2317->fill("10.6"s);
          }
          else if (Ds.children()[0].pid() == sign * 433 && Ds.children()[1].pid() == 111) {
            if (Ds.abspid() == 20433) {
              _r_2460_3->fill("10.6"s);
              DsStar = Ds.children()[0];
              doHelicity = true;
            }
          }
          else if (Ds.children()[1].pid() == sign * 433 && Ds.children()[0].pid() == 111) {
            if (Ds.abspid() == 20433) {
              _r_2460_3->fill("10.6"s);
              DsStar = Ds.children()[1];
              doHelicity = true;
            }
          }
          else if (Ds.children()[0].pid() == sign * 431 && Ds.children()[1].pid() == 22) {
            if (Ds.abspid() == 20433) _r_2460_1->fill("10.6"s);
          }
          else if (Ds.children()[1].pid() == sign * 431 && Ds.children()[0].pid() == 22) {
            if (Ds.abspid() == 20433) _r_2460_1->fill("10.6"s);
          }
          if (doHelicity && DsStar.children().size() == 2) {
            Particle gamma;
            doHelicity = false;
            for (const Particle& p : DsStar.children()) {
              if (p.pid() == 22) {
                doHelicity = true;
                gamma = p;
              }
            }
            if (doHelicity) {
              LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(Ds.momentum().betaVec());
              FourMomentum pDsStar = boost.transform(DsStar.momentum());
              FourMomentum pGamma = boost.transform(gamma.momentum());
              LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pDsStar.betaVec());
              FourMomentum pGamma2 = boost2.transform(pGamma);
              double cTheta = pGamma2.p3().unit().dot(pDsStar.p3().unit());
              _hel->fill(cTheta);
            }
          }
        }
        Particles D, pip, pi0, gamma;
        unsigned int nstable(0);
        findDecayProducts(Ds, D, pip, pi0, gamma, nstable);
        if (nstable == 3) {
          if (D.size() == 1 && pip.size() == 2) {
            if (Ds.abspid() == 20433) {
              _r_2460_4->fill("10.6"s);
            }
            else if (Ds.abspid() == 10433) {
              _r_2536->fill("10.6"s);
            }
          }
          else if (D.size() == 1 && pi0.size() == 1 && gamma.size() == 1) {
            if (Ds.abspid() == 20433) _r_2460_2->fill("10.6"s);
          }
        }
      }
    }

    void findDecayProducts(Particle parent,
                           Particles& Ds,
                           Particles& pip,
                           Particles& pi0,
                           Particles& gamma,
                           unsigned int& nstable) {
      for (const Particle& p : parent.children()) {
        if (p.pid() == 111) {
          pi0.push_back(p);
          ++nstable;
        }
        else if (p.pid() == 22) {
          gamma.push_back(p);
          ++nstable;
        }
        else if (p.abspid() == 211) {
          pip.push_back(p);
          ++nstable;
        }
        else if (p.abspid() == 431) {
          Ds.push_back(p);
          ++nstable;
        }
        else if (p.children().empty()) {
          ++nstable;
        }
        else
          findDecayProducts(p, Ds, pip, pi0, gamma, nstable);
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      normalize(_s_2317, 1., false);
      normalize(_s_2460_1, 1., false);
      normalize(_s_2460_2, 1., false);
      normalize(_hel, 1., false);
      scale(_r_2317, crossSection() / femtobarn / sumOfWeights());
      scale(_r_2460_1, crossSection() / femtobarn / sumOfWeights());
      scale(_r_2460_2, crossSection() / femtobarn / sumOfWeights());
      scale(_r_2460_3, crossSection() / femtobarn / sumOfWeights());
      scale(_r_2460_4, crossSection() / femtobarn / sumOfWeights());
      scale(_r_2536, crossSection() / femtobarn / sumOfWeights());
    }

    /// @}


    /// @name Histograms
    /// @{
    Histo1DPtr _s_2317, _s_2460_1, _s_2460_2, _hel;
    BinnedHistoPtr<string> _r_2317, _r_2460_1, _r_2460_2, _r_2460_3, _r_2460_4, _r_2536;
    /// @}
  };


  RIVET_DECLARE_PLUGIN(BABAR_2006_I714447);

}