Rivet analyses referenceNA60_2016_I1452485Form factors for the decays $\omega\to\pi^0\mu^+\mu^-$ and $\eta\to\gamma \mu^+\mu^-$Experiment: NA60 (SPS) Inspire ID: 1452485 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of the form factors $\left|F_{\omega\pi^0}(q^2)\right|$ for the decay $\phi\to\pi^0\mu^+\mu^-$ and $\left|F_{\eta}(q^2)\right|$ for the decay $\eta\to\gamma \mu^+\mu^-$ by the NA60 experiment at CERN. Source code: NA60_2016_I1452485.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief form factors for omega->pi and eta->gamma
9 class NA60_2016_I1452485 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(NA60_2016_I1452485);
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 // Book histograms
24 book(_h_eta , 1, 1, 1);
25 book(_h_omega, 2, 1, 1);
26 book(_weight_eta ,"TMP/weight_eta");
27 book(_weight_omega,"TMP/weight_omega");
28 }
29
30 void findDecayProducts(const Particle & mother, unsigned int & nstable, unsigned int & npi,
31 unsigned int & nmup, unsigned int & nmum, unsigned int & ngamma,
32 FourMomentum & ptot) {
33 for(const Particle & p : mother.children()) {
34 int id = p.pid();
35 if (id == PID::MUON ) {
36 ++nmum;
37 ++nstable;
38 ptot += p.momentum();
39 }
40 else if (id == PID::ANTIMUON) {
41 ++nmup;
42 ++nstable;
43 ptot += p.momentum();
44 }
45 else if (id == PID::PI0) {
46 ++npi;
47 ++nstable;
48 }
49 else if (id == PID::GAMMA && p.children().empty() ) {
50 ++ngamma;
51 ++nstable;
52 }
53 else if ( !p.children().empty() ) {
54 findDecayProducts(p, nstable, npi,nmup,nmum,ngamma,ptot);
55 }
56 else
57 ++nstable;
58 }
59 }
60
61 /// Perform the per-event analysis
62 void analyze(const Event& event) {
63 static double me = 105.6583745*MeV;
64 static double momega = 782.65*MeV;
65 static double meta = 547.862 *MeV;
66 static double mpi = 134.9770*MeV;
67
68 // Loop over eta and omega mesons
69 for( const Particle& p : apply<UnstableParticles>(event, "UFS").particles(Cuts::pid==223 or Cuts::pid==221)) {
70 unsigned nstable(0),npi(0),nmup(0),nmum(0),ngamma(0);
71 FourMomentum ptot;
72 findDecayProducts(p,nstable,npi,nmup,nmum,ngamma,ptot);
73 if(p.pid()==221) {
74 if(nstable==3 && nmum==1 && nmum==1 && ngamma==1) {
75 double q = ptot.mass();
76 double beta = sqrt(1.-4*sqr(me/q));
77 double p = 1.-sqr(q/meta);
78 double fact = beta*GeV/q*(1.+2.*sqr(me/q))*pow(p,3);
79 _h_eta->fill(q/GeV,1./fact);
80 }
81 else if(nstable==2 && ngamma==2) {
82 _weight_eta->fill();
83 }
84 }
85 else {
86 if(nstable==3 && nmum==1 && nmum==1 && npi==1) {
87 double q = ptot.mass();
88 double beta = sqrt(1.-4*sqr(me/q));
89 double p = sqrt(sqr(1.+sqr(q)/(sqr(momega)-sqr(mpi)))-4.*sqr(momega*q/(sqr(momega)-sqr(mpi))));
90 double fact = beta*GeV/q*(1.+2.*sqr(me/q))*pow(p,3);
91 _h_omega->fill(q/GeV,1./fact);
92 }
93 else if(nstable==2 && ngamma ==1 && npi==1) {
94 _weight_omega->fill();
95 }
96 }
97 }
98 }
99
100
101 /// Normalise histograms etc., after the run
102 void finalize() {
103 static double alpha= 7.2973525664e-3;
104 scale(_h_eta , 0.75*M_PI/alpha/ *_weight_eta );
105 scale(_h_omega, 1.5 *M_PI/alpha/ *_weight_omega);
106 }
107
108 ///@}
109
110
111 /// @name Histograms
112 ///@{
113 Histo1DPtr _h_eta,_h_omega;
114 CounterPtr _weight_eta,_weight_omega;
115 ///@}
116
117
118 };
119
120
121 RIVET_DECLARE_PLUGIN(NA60_2016_I1452485);
122
123}
|