rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

KLOE2_2016_I1416825

Form factor for the decay $\phi\to\pi^0e^+e^-$
Experiment: KLOE2 (DAPHNE)
Inspire ID: 1416825
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Lett. B757 (2016) 362-367, 2016
Beams: * *
Beam energies: ANY
Run details:
  • phi production with both the dalitz decay and radiative decay for normalization

Measurement of the form factor $\left|F_{\phi\pi^0}(q^2)\right|$ for the decay $\phi\to\pi^0e^+e^-$ by the KLOE experiment at DAPHNE

Source code: KLOE2_2016_I1416825.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief form factor for phi-> pi0
  9  class KLOE2_2016_I1416825 : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(KLOE2_2016_I1416825);
 14
 15
 16    /// @name Analysis methods
 17    /// @{
 18
 19    /// Book histograms and initialise projections before the run
 20    void init() {
 21      // Initialise and register projections
 22      declare(UnstableParticles(), "UFS");
 23      // Book histograms
 24      book(_h_m, 1, 1, 1);
 25      book(_weight,"TMP/weight");
 26    }
 27
 28    void findDecayProducts(const Particle & mother, unsigned int & nstable, unsigned int & npi,
 29                           unsigned int & nep, unsigned int & nem, unsigned int & ngamma,
 30			   FourMomentum & ptot) {
 31      for(const Particle & p : mother.children()) {
 32        int id = p.pid();
 33        if (id == PID::EMINUS ) {
 34	  ++nem;
 35          ++nstable;
 36	  ptot += p.momentum();
 37	}
 38        else if (id == PID::EPLUS) {
 39          ++nep;
 40          ++nstable;
 41	  ptot += p.momentum();
 42        }
 43        else if (id == PID::PI0) {
 44	  ++npi;
 45          ++nstable;
 46        }
 47	else if (id == PID::GAMMA) {
 48	  ++ngamma;
 49	  ++nstable;
 50	}
 51        else if ( !p.children().empty() ) {
 52          findDecayProducts(p, nstable, npi,nep,nem,ngamma,ptot);
 53        }
 54        else
 55          ++nstable;
 56      }
 57    }
 58
 59    /// Perform the per-event analysis
 60    void analyze(const Event& event) {
 61      static double me   = 0.5109989461*MeV;
 62      static double mphi = 1019.461*MeV;
 63      static double mpi  = 134.9770*MeV;
 64
 65      // Loop over phi mesons
 66      for(const Particle& p : apply<UnstableParticles>(event, "UFS").particles(Cuts::pid==333)) {
 67	unsigned nstable(0),npi(0),nep(0),nem(0),ngamma(0);
 68	FourMomentum ptot;
 69	findDecayProducts(p,nstable,npi,nep,nem,ngamma,ptot);
 70	if(nstable==3 && nem==1 && nem==1 && npi==1) {
 71	  double q = ptot.mass();
 72	  double beta = sqrt(1.-4*sqr(me/q));
 73	  double p = sqrt(sqr(1.+sqr(q)/(sqr(mphi)-sqr(mpi)))-4.*sqr(mphi*q/(sqr(mphi)-sqr(mpi))));
 74	  double fact = beta*MeV/q*(1.+2.*sqr(me/q))*pow(p,3);
 75	  _h_m->fill(q/MeV,1./fact);
 76	}
 77	else if(nstable==2 && ngamma ==1 && npi==1) {
 78	  _weight->fill();
 79	}
 80      }
 81
 82    }
 83
 84
 85    /// Normalise histograms etc., after the run
 86    void finalize() {
 87      static double alpha= 7.2973525664e-3;
 88      scale(_h_m, 1.5*M_PI/alpha/ *_weight);
 89
 90    }
 91
 92    /// @}
 93
 94
 95    /// @name Histograms
 96    /// @{
 97    Histo1DPtr _h_m;
 98    CounterPtr _weight;
 99    /// @}
100
101
102  };
103
104
105  RIVET_DECLARE_PLUGIN(KLOE2_2016_I1416825);
106
107
108}