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);

}