rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ARGUS_1995_I374784

Electron and muon spectrum in leptonic tau decays
Experiment: ARGUS (DORIS)
Inspire ID: 374784
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Lett.B 341 (1995) 441-447
Beams: e+ e-
Beam energies: (5.0, 5.0) GeV
Run details:
  • e+e- -> tau+tau-, needed due pseudo-rest frame definition

Measurement of the electron and muon spectrum in leptonic tau decays in the pseudo-rest frame of the tau lepton. Correccted data read from figures 3 and 4 in the paper.

Source code: ARGUS_1995_I374784.cc
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/ChargedFinalState.hh"
 4
 5namespace Rivet {
 6
 7
 8  /// @brief tau -> e/mu nu nu
 9  class ARGUS_1995_I374784 : public Analysis {
10  public:
11
12    /// Constructor
13    RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1995_I374784);
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(ChargedFinalState(),"CFS");
23      // hists
24      for (unsigned int ix=0; ix<2; ++ix) {
25        book(_h[ix], 1, 1, 1+ix);
26      }
27    }
28
29
30    /// Perform the per-event analysis
31    void analyze(const Event& event) {
32      const double mtau=1.77686;
33      Particles charged = apply<ChargedFinalState>(event,"CFS").particles();
34      if (charged.size()!=4) vetoEvent;
35      // find the charged lepton
36      int il=-1;
37      for (unsigned int ix=0; ix<charged.size(); ++ix) {
38        if (charged[ix].abspid()==11 || charged[ix].abspid()==13) {
39          if (il>0) vetoEvent;
40          il=ix;
41        }
42      }
43      if (il<0) vetoEvent;
44      // cuts angle charged<90 each other and >90 lepton
45      FourMomentum phad;
46      Vector3 axisL = charged[il].mom().p3().unit();
47      for (int ix=0; ix<4; ++ix) {
48        if (ix==il) continue;
49        phad += charged[ix];
50        Vector3 axis = charged[ix].mom().p3().unit();
51        if (axis.dot(axisL)>0) vetoEvent;
52        for (int iy=ix+1; iy<4; ++iy) {
53          if (iy==il) continue;
54          if (axis.dot(charged[iy].mom().p3().unit())<0) vetoEvent;
55        }
56      }
57      const double pp = sqrt(sqr(0.5*sqrtS())-sqr(mtau));
58      Vector3 axis =-phad.p3().unit();
59      FourMomentum ptau;
60      ptau.setT(0.5*sqrtS());
61      ptau.setX(pp*axis.x());
62      ptau.setY(pp*axis.y());
63      ptau.setZ(pp*axis.z());
64      LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(ptau.betaVec());
65      FourMomentum pl = boost.transform(charged[il].mom());
66      if (charged[il].abspid()==11) {
67      	_h[0]->fill(pl.p3().mod());
68      }
69      else {
70      	_h[1]->fill(pl.p3().mod());
71      }
72    }
73
74
75    /// Normalise histograms etc., after the run
76    void finalize() {
77      normalize(_h, 1.0, false);
78    }
79
80    /// @}
81
82
83    /// @name Histograms
84    /// @{
85    Histo1DPtr _h[2];
86    /// @}
87
88
89  };
90
91
92  RIVET_DECLARE_PLUGIN(ARGUS_1995_I374784);
93
94}