rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CLEOII_1999_I504672

Charged Particle Multiplicity in $\Upsilon(4S)$ decays
Experiment: CLEOII (CESR)
Inspire ID: 504672
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Rev. D61 (2000) 072002
Beams: * *
Beam energies: ANY
Run details:
  • Upsilon(4S) decays

Charged particle multiplicity in $\Upsilon(4S)$ decays measured by CLEOII.

Source code: CLEOII_1999_I504672.cc
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/UnstableParticles.hh"
 4
 5namespace Rivet {
 6
 7
 8  /// @brief Charged particle multplicity in Upsilon 4s decays
 9  class CLEOII_1999_I504672 : public Analysis {
10  public:
11
12    /// Constructor
13    RIVET_DEFAULT_ANALYSIS_CTOR(CLEOII_1999_I504672);
14
15
16    /// @name Analysis methods
17    //@{
18
19    /// Book histograms and initialise projections before the run
20    void init() {
21
22      // Initialise and register projections
23      declare(UnstableParticles(), "UFS");
24
25      // Book histograms
26      book(_n_tot  , 1, 1, 1);
27      book(_n_lep  , 1, 1, 2);
28      book(_n_nolep, 1, 1, 3);
29      book(_h_n    , 2, 1, 1);
30      book(_n_Ups_All  ,"/TMP/n_Ups_All");
31      book(_n_Ups_Lep  ,"/TMP/n_Ups_Lep");
32      book(_n_Ups_NoLep,"/TMP/n_Ups_NoLep");
33    }
34
35    void findChildren(const Particle & p,int & nCharged, int & nLep) {
36      bool isBottom = PID::isBottomHadron(p.pid());
37      for( const Particle &child : p.children()) {
38	if(child.children().empty()) {
39	  if(PID::isCharged(child.pid())           ) ++nCharged;
40	  if(isBottom && (child.abspid()==11||child.abspid()==13)) ++nLep;
41	}
42	else
43	  findChildren(child,nCharged,nLep);
44      }
45    }
46
47    /// Perform the per-event analysis
48    void analyze(const Event& event) {
49      for (const Particle& p :  apply<FinalState>(event, "UFS").particles(Cuts::pid==300553)) {
50	_n_Ups_All->fill();
51	int nCharged(0),nLep(0);
52	findChildren(p,nCharged,nLep);
53	_h_n->fill(nCharged);
54	_n_tot->fill(10.1,nCharged);
55	if(nLep==2) {
56	  _n_lep  ->fill(10.1,nCharged);
57	  _n_Ups_Lep->fill();
58	}
59	else {
60	  _n_nolep->fill(10.1,nCharged);
61	  _n_Ups_NoLep->fill();
62	}
63      }
64    }
65
66
67    /// Normalise histograms etc., after the run
68    void finalize() {
69      scale(_h_n    , 1./ *_n_Ups_All  );
70      scale(_n_tot  , 1./ *_n_Ups_All  );
71      scale(_n_lep  , 1./ *_n_Ups_Lep  );
72      scale(_n_nolep, 1./ *_n_Ups_NoLep);
73    }
74
75    //@}
76
77
78    /// @name Histograms
79    //@{
80    Histo1DPtr _h_n;
81    Histo1DPtr _n_tot,_n_lep,_n_nolep;
82    CounterPtr _n_Ups_All,_n_Ups_Lep,_n_Ups_NoLep;
83    
84    //@}
85
86
87  };
88
89
90  RIVET_DECLARE_PLUGIN(CLEOII_1999_I504672);
91
92}