Rivet analyses referenceALEPH_1996_I421984Tau decays to $\omega\pi^-$ and $\omega\pi^-\pi^0$Experiment: ALEPH (LEP) Inspire ID: 421984 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of mass spectra in the tau lepton decays $\tau^-\to\nu_\tau \pi^-\pi^+\pi^-\pi^0$ and $\tau^-\to\nu_\tau \pi^-\pi^0\pi^+\pi^-\pi^0$ Source code: ALEPH_1996_I421984.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief tau -> omega pi(pi)
9 class ALEPH_1996_I421984 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(ALEPH_1996_I421984);
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(_h_omegapi_momega[0], 1, 1, 1);
27 book(_h_omegapi_momega[1], 2, 1, 1);
28 book(_h_omegapi_momegapi, 3, 1, 1);
29 book(_h_omegapipi_momega , 6, 1, 1);
30 }
31
32 void findDecayProducts(const Particle &mother, unsigned int & nstable,
33 Particles& pip, Particles& pim, Particles & pi0) {
34 for (const Particle &p : mother.children()) {
35 long id = p.pid();
36 if (id == PID::PI0 ) {
37 pi0.push_back(p);
38 ++nstable;
39 }
40 else if (id == PID::K0S || id == PID::K0L)
41 ++nstable;
42 else if (id == PID::PIPLUS) {
43 pip.push_back(p);
44 ++nstable;
45 }
46 else if (id == PID::PIMINUS) {
47 pim.push_back(p);
48 ++nstable;
49 }
50 else if (id == PID::KPLUS) {
51 ++nstable;
52 }
53 else if (id == PID::KMINUS) {
54 ++nstable;
55 }
56 else if (!p.children().empty()) {
57 findDecayProducts(p, nstable, pip, pim, pi0);
58 }
59 else ++nstable;
60 }
61 }
62
63 /// Perform the per-event analysis
64 void analyze(const Event& event) {
65 // Find the taus
66 Particles taus;
67 for(const Particle& p : apply<UnstableParticles>(event, "UFS").particles(Cuts::pid==PID::TAU)) {
68 Particles pip, pim, pi0;
69 unsigned int nstable = 0;
70 // Find the decay products we want
71 findDecayProducts(p, nstable, pip, pim, pi0);
72 if (p.pid() < 0) {
73 swap(pip, pim);
74 }
75 if(nstable==5&&pip.size()==1&&pim.size()==2&&pi0.size()==1) {
76 for(unsigned int ix=0;ix<2;++ix) {
77 double momega = (pim[ix].momentum()+pip[0].momentum()+pi0[0].momentum()).mass();
78 _h_omegapi_momega[0]->fill(momega);
79 _h_omegapi_momega[1]->fill(momega);
80 }
81 double mtotal = (pim[0].momentum()+pim[1].momentum()+pip[0].momentum()+pi0[0].momentum()).mass();
82 _h_omegapi_momegapi->fill(mtotal);
83 }
84 else if(nstable==6&&pip.size()==1&&pim.size()==2&&pi0.size()==2) {
85 for(unsigned int ix=0;ix<2;++ix) {
86 for(unsigned int iy=0;iy<2;++iy) {
87 double momega = (pim[ix].momentum()+pip[0].momentum()+pi0[iy].momentum()).mass();
88 _h_omegapipi_momega->fill(momega);
89 }
90 }
91 }
92 }
93 }
94
95
96 /// Normalise histograms etc., after the run
97 void finalize() {
98
99 // normalized measurement
100 normalize(_h_omegapi_momegapi);
101 // normalize to integral of data
102 normalize(_h_omegapi_momega[0],4164.8*0.01 );
103 normalize(_h_omegapi_momega[1],5936.3*0.01 );
104 normalize(_h_omegapipi_momega ,1967.6*0.035);
105 }
106
107 /// @}
108
109
110 /// @name Histograms
111 /// @{
112 Histo1DPtr _h_omegapi_momega[2], _h_omegapi_momegapi,_h_omegapipi_momega;
113 /// @}
114
115
116 };
117
118
119 RIVET_DECLARE_PLUGIN(ALEPH_1996_I421984);
120
121
122}
|