Rivet analyses referenceCLEOII_2000_I505170Spectral functions in $\tau^-\to\pi^-\pi^-\pi^+\pi^0\nu_\tau$Experiment: CLEOII (CESR) Inspire ID: 505170 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the spectral functions for $\tau^-\to\pi^-\pi^-\pi^+\pi^0\nu_\tau$, $\tau^-\to\pi^-\omega\nu_\tau$ and non-$\omega$ $\tau^-\to\pi^-\pi^-\pi^+\pi^0\nu_\tau$. The helicity angle in $\tau^-\to\pi^-\omega\nu_\tau$ and mass distributions are also measured. Source code: CLEOII_2000_I505170.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 -> 4 pions
10 class CLEOII_2000_I505170 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(CLEOII_2000_I505170);
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 // histos
31 for (unsigned int ix=0; ix<6; ++ix) {
32 book(_h_mass[ix], 3, 1, 1+ix);
33 if (ix>2) continue;
34 book(_h_spect[ix], 1, 1, 1+ix);
35 }
36 book(_h_angle, 2, 1, 1);
37 book(_c,"TMP/nTau");
38 }
39
40
41 /// Perform the per-event analysis
42 void analyze(const Event& event) {
43 DecayedParticles TAU = apply<DecayedParticles>(event, "TAU");
44 // loop over particles
45 for (unsigned int ix=0; ix<TAU.decaying().size(); ++ix) {
46 _c->fill();
47 int sign = TAU.decaying()[ix].pid()>0 ? 1 : -1;
48 if (!(TAU.modeMatches(ix,5,mode ) ||
49 TAU.modeMatches(ix,5,modeCC))) continue;
50 const Particle & pi0 = TAU.decayProducts()[ix].at( 111 )[0];
51 const Particles & pim = TAU.decayProducts()[ix].at(-211*sign);
52 const Particle & pip = TAU.decayProducts()[ix].at( 211*sign)[0];
53 FourMomentum phad = pim[0].mom()+pim[1].mom()+pip.mom()+pi0.mom();
54 const double q = phad.mass();
55 const double mtau = TAU.decaying()[ix].mass();
56 _h_spect[0]->fill(phad.mass(),sqr(mtau)*mtau/q/sqr(sqr(mtau)-sqr(q))/(sqr(mtau)+2.*sqr(q)));
57 Particle omega;
58 int iomega=-1;
59 for (unsigned int ix=0; ix<2; ++ix) {
60 Particle parent = pim[ix];
61 while (!parent.parents().empty()) {
62 parent = parent.parents()[0];
63 if (parent.pid()==223) break;
64 }
65 if (parent.pid()==223) {
66 omega=parent;
67 iomega=ix;
68 }
69 }
70 if (iomega>=0) {
71 _h_spect[1]->fill(phad.mass(),sqr(mtau)*mtau/q/sqr(sqr(mtau)-sqr(q))/(sqr(mtau)+2.*sqr(q)));
72 const int ibatch = iomega == 0 ? 1 : 0;
73 const LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(omega.mom().betaVec());
74 const Vector3 axis = boost.transform(pim[ibatch].mom());
75 const FourMomentum ppi0 = boost.transform(pi0.mom());
76 const FourMomentum ppip = boost.transform(pip.mom());
77 const Vector3 norm = ppi0.p3().cross(pip.p3()).unit();
78 const double cTheta = axis.dot(norm);
79 _h_angle->fill(cTheta);
80 }
81 else {
82 _h_spect[2]->fill(phad.mass(),sqr(mtau)*mtau/q/sqr(sqr(mtau)-sqr(q))/(sqr(mtau)+2.*sqr(q)));
83 }
84 _h_mass[0]->fill((phad-pim[0].mom()).mass());
85 _h_mass[0]->fill((phad-pim[1].mom()).mass());
86 _h_mass[1]->fill((pim[0].mom()+pi0.mom()).mass());
87 _h_mass[1]->fill((pim[1].mom()+pi0.mom()).mass());
88 _h_mass[2]->fill((pim[1].mom()+pip.mom()).mass());
89 _h_mass[3]->fill((pip .mom()+pi0.mom()).mass());
90 _h_mass[4]->fill(q);
91 _h_mass[5]->fill((phad-pi0.mom()).mass());
92 }
93 }
94
95
96 /// Normalise histograms etc., after the run
97 void finalize() {
98 const double Gamma = 6.582119514e-25/290.3e-15;
99 const double GF = 1.1663787e-5;
100 const double cosC = 0.97373;
101 scale(_h_spect, Gamma*16.*sqr(M_PI)/sqr(GF*cosC)/ *_c);
102 normalize(_h_mass, 1.0, false);
103 normalize(_h_angle, 1.0, false);
104
105 }
106
107 /// @}
108
109
110 /// @name Histograms
111 /// @{
112 Histo1DPtr _h_spect[3],_h_angle,_h_mass[6];
113 CounterPtr _c;
114 const map<PdgId,unsigned int> mode = { { 111,1},{-211,2},{ 211,1},{ 16,1}};
115 const map<PdgId,unsigned int> modeCC = { { 111,1},{ 211,2},{-211,1},{-16,1}};
116 /// @}
117
118
119 };
120
121
122 RIVET_DECLARE_PLUGIN(CLEOII_2000_I505170);
123
124}
|