Rivet analyses referenceARGUS_1995_I374784Electron and muon spectrum in leptonic tau decaysExperiment: ARGUS (DORIS) Inspire ID: 374784 Status: VALIDATED NOHEPDATA Authors:
Beam energies: (5.0, 5.0) GeV Run details:
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}
|