Rivet analyses referenceKLOE2_2016_I1416990Measurement of the Dalitz plot for η→π+π−π0Experiment: KLOE2 (DAPHNE) Inspire ID: 1416990 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of the dalitz plot for the decay η→π+π−π0 by the KLOE2 collaboration. The distributions are normalised such that the bin at X=0, Y=0.05 is 1. Source code: KLOE2_2016_I1416990.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief eta -> 3 pi analysis
9 class KLOE2_2016_I1416990 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(KLOE2_2016_I1416990);
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(UnstableParticles(), "UFS");
23
24 // Book histograms
25 book(_dalitz, 1,1,1);
26 book(_h_dalitz, {-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,
27 0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8});
28 for (unsigned int i=1;i<=_h_dalitz->numBins();++i) {
29 book(_h_dalitz->bins()[i], 2, 1, i);
30 }
31 book(_norm, "TMP/norm");
32 }
33
34 void findDecayProducts(const Particle& mother, unsigned int & nstable,
35 Particles &pi0, Particles &pip, Particles &pim) {
36 for (const Particle & p : mother.children()) {
37 int id = p.pid();
38 if (id == PID::PIMINUS ) {
39 pim.push_back(p);
40 ++nstable;
41 }
42 else if (id == PID::PIPLUS) {
43 pip.push_back(p);
44 ++nstable;
45 }
46 else if (id == PID::PI0) {
47 pi0.push_back(p);
48 ++nstable;
49 }
50 else if ( !p.children().empty() ) {
51 findDecayProducts(p, nstable, pi0,pip,pim);
52 }
53 else {
54 ++nstable;
55 }
56 }
57 }
58
59 /// Perform the per-event analysis
60 void analyze(const Event& event) {
61 // Loop over eta mesons
62 for (const Particle& p : apply<UnstableParticles>(event, "UFS").particles(Cuts::pid==PID::ETA)) {
63 Particles pi0, pip, pim;
64 unsigned nstable(0);
65 findDecayProducts(p,nstable,pi0,pip,pim);
66 if (nstable==3 && pi0.size()==1 && pip.size()==1 && pim.size()==1) {
67 // massesx
68 double meta = p.mass();
69 double mpip = pip[0].mass();
70 double mpim = pim[0].mass();
71 double mpi0 = pi0[0].mass();
72 // kinetic energies
73 double Q = meta-mpip-mpim-mpi0;
74 double Ep = 0.5/meta*(sqr(meta)+sqr(mpip)-(p.momentum()-pip[0].momentum()).mass2())-mpip;
75 double Em = 0.5/meta*(sqr(meta)+sqr(mpim)-(p.momentum()-pim[0].momentum()).mass2())-mpim;
76 double E0 = 0.5/meta*(sqr(meta)+sqr(mpi0)-(p.momentum()-pi0[0].momentum()).mass2())-mpi0;
77 // X and Y variables
78 double X = sqrt(3.)/Q*(Ep-Em);
79 double Y = 3.*E0/Q-1.;
80 _dalitz->fill(X,Y);
81 _h_dalitz->fill(Y,X);
82 if(fabs(X)<0.03225806451612903 && Y>0. && Y<0.1) _norm->fill();
83 }
84 }
85 }
86
87
88 /// Normalise histograms etc., after the run
89 void finalize() {
90 scale(_dalitz, 0.06451612903225806*0.1/ *_norm);
91 scale(_h_dalitz, 0.06451612903225806/ *_norm);
92 }
93
94 /// @}
95
96
97 /// @name Histograms
98 /// @{
99 Histo2DPtr _dalitz;
100 Histo1DGroupPtr _h_dalitz;
101 CounterPtr _norm;
102 /// @}
103
104
105 };
106
107
108 RIVET_DECLARE_PLUGIN(KLOE2_2016_I1416990);
109
110
111}
|