Rivet analyses referenceARGUS_1987_I237930Spectral functions in $\tau^-\to\pi^-\pi^-\pi^+\pi^0\nu_\tau$Experiment: ARGUS (DORIS) Inspire ID: 237930 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the spectral functions for $\tau^-\to\pi^-\pi^-\pi^+\pi^0\nu_\tau$ and $\tau^-\to\pi^-\omega\nu_\tau$, and the helicity angle in $\tau^-\to\pi^-\omega\nu_\tau$. The corrected data were read from figures 3 and 5 in the paper. Source code: ARGUS_1987_I237930.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4#include "Rivet/Projections/DecayedParticles.hh"
5
6namespace Rivet {
7
8
9 /// @brief tau -> pi- pi- pi+ pi0
10 class ARGUS_1987_I237930 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1987_I237930);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 // Initialise and register projections
23 UnstableParticles ufs = UnstableParticles(Cuts::abspid==15);
24 declare(ufs, "UFS");
25 DecayedParticles TAU(ufs);
26 TAU.addStable(310);
27 TAU.addStable(111);
28 TAU.addStable(221);
29 declare(TAU, "TAU");
30 // histograms
31 book(_h_angle,1,1,1);
32 for (unsigned int ix=0; ix<2; ++ix) {
33 book(_h_spect[ix], 2, 1, 1+ix);
34 }
35 book(_c,"TMP/nTau");
36 }
37
38
39 /// Perform the per-event analysis
40 void analyze(const Event& event) {
41 DecayedParticles TAU = apply<DecayedParticles>(event, "TAU");
42 // loop over particles
43 for (unsigned int ix=0;ix<TAU.decaying().size();++ix) {
44 _c->fill();
45 int sign = TAU.decaying()[ix].pid()>0 ? 1 : -1;
46 if (!(TAU.modeMatches(ix,5,mode) || TAU.modeMatches(ix,5,modeCC))) continue;
47 const Particle & pi0 = TAU.decayProducts()[ix].at( 111 )[0];
48 const Particles& pim = TAU.decayProducts()[ix].at(-211*sign);
49 const Particle & pip = TAU.decayProducts()[ix].at( 211*sign)[0];
50 FourMomentum phad = pim[0].mom()+pim[1].mom()+pip.mom()+pi0.mom();
51 double q = phad.mass();
52 double mtau = TAU.decaying()[ix].mass();
53 _h_spect[0]->fill(phad.mass(),sqr(mtau)*mtau/q/sqr(sqr(mtau)-sqr(q))/(sqr(mtau)+2.*sqr(q)));
54 Particle omega;
55 int iomega=-1;
56 for (unsigned int ix=0; ix<2; ++ix) {
57 Particle parent = pim[ix];
58 while (!parent.parents().empty()) {
59 parent = parent.parents()[0];
60 if (parent.pid()==223) break;
61 }
62 if (parent.pid()==223) {
63 omega=parent;
64 iomega=ix;
65 }
66 }
67 if (iomega<0) continue;
68 int ibatch = iomega == 0 ? 1 : 0;
69 _h_spect[1]->fill(phad.mass(),sqr(mtau)*mtau/q/sqr(sqr(mtau)-sqr(q))/(sqr(mtau)+2.*sqr(q)));
70 LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(omega.mom().betaVec());
71 Vector3 axis = boost.transform(pim[ibatch].mom());
72 FourMomentum ppi0 = boost.transform(pi0.mom());
73 FourMomentum ppip = boost.transform(pip.mom());
74 Vector3 norm = ppi0.p3().cross(pip.p3()).unit();
75 double cTheta = axis.dot(norm);
76 _h_angle->fill(cTheta);
77 }
78 }
79
80
81 /// Normalise histograms etc., after the run
82 void finalize() {
83 normalize(_h_angle, 1.0, false);
84 const double Gamma = 6.582119514e-25/290.3e-15;
85 const double GF = 1.1663787e-5;
86 const double cosC = 0.97373;
87 scale(_h_spect, Gamma*16.*sqr(M_PI)/sqr(GF*cosC)/ *_c);
88 }
89
90 /// @}
91
92
93 /// @name Histograms
94 /// @{
95 Histo1DPtr _h_spect[2],_h_angle;
96 CounterPtr _c;
97 const map<PdgId,unsigned int> mode = { { 111,1},{-211,2},{ 211,1},{ 16,1}};
98 const map<PdgId,unsigned int> modeCC = { { 111,1},{ 211,2},{-211,1},{-16,1}};
99 /// @}
100
101
102 };
103
104
105 RIVET_DECLARE_PLUGIN(ARGUS_1987_I237930);
106
107}
|