rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BABAR_2012_I1107905

Cross section for $e^+e^-\to J/\psi\pi^+\pi^-$ at energies between 3.75 and 5.5 GeV
Experiment: BABAR (PEP-II)
Inspire ID: 1107905
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.D 86 (2012) 051102
Beams: e+ e-
Beam energies: ANY
Run details:
  • e+ e- to hadrons

Measurement of the cross section for $e^+e^-\to J/\psi\pi^+\pi^-$ at energies between 3.75 and 5.5 GeV using radiative return by BABAR.

Source code: BABAR_2012_I1107905.cc
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/FinalState.hh"
 4#include "Rivet/Projections/UnstableParticles.hh"
 5
 6namespace Rivet {
 7
 8
 9  /// @brief e+ e- > pi+ pi- J/psi
10  class BABAR_2012_I1107905 : public Analysis {
11  public:
12
13    /// Constructor
14    RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2012_I1107905);
15
16
17    /// @name Analysis methods
18    /// @{
19
20    /// Book histograms and initialise projections before the run
21    void init() {
22      declare(FinalState(), "FS");
23      declare(UnstableParticles(Cuts::pid==443), "UFS");
24      book(_sigmaJPsi, "TMP/jpsi", refData(1,1,1));
25    }
26
27    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
28      for (const Particle &child : p.children()) {
29        if (child.children().empty()) {
30          --nRes[child.pid()];
31          --ncount;
32        }
33        else {
34          findChildren(child,nRes,ncount);
35        }
36      }
37    }
38
39    /// Perform the per-event analysis
40    void analyze(const Event& event) {
41      const FinalState& fs = apply<FinalState>(event, "FS");
42      map<long,int> nCount;
43      int ntotal(0);
44      for (const Particle& p : fs.particles()) {
45        nCount[p.pid()] += 1;
46        ++ntotal;
47      }
48      const FinalState& ufs = apply<FinalState>(event, "UFS");
49      for (const Particle& p : ufs.particles()) {
50        if (p.children().empty()) continue;
51        map<long,int> nRes = nCount;
52        int ncount = ntotal;
53        findChildren(p,nRes,ncount);
54        // J/psi pi+pi-
55        if (ncount!=2) continue;
56        bool matched = true;
57        for (const auto& val : nRes) {
58          if (abs(val.first)==211) {
59            if (val.second !=1) {
60              matched = false;
61              break;
62            }
63          }
64          else if (val.second!=0) {
65            matched = false;
66            break;
67          }
68        }
69        if (matched) {
70          _sigmaJPsi->fill(sqrtS());
71          break;
72        }
73      }
74    }
75
76
77    /// Normalise histograms etc., after the run
78    void finalize() {
79      scale(_sigmaJPsi,crossSection()/ sumOfWeights() /picobarn);
80      Estimate1DPtr tmp;
81      book(tmp,1,1,1);
82      barchart(_sigmaJPsi,tmp);
83    }
84
85    /// @}
86
87
88    /// @name Histograms
89    /// @{
90    Histo1DPtr _sigmaJPsi;
91    /// @}
92
93
94  };
95
96
97  RIVET_DECLARE_PLUGIN(BABAR_2012_I1107905);
98
99}