rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

MC_Eta_Decay

Analysis of Kinematic distributions in $\eta$ and $\eta^\prime$ meson decays
Experiment: ()
Status: VALIDATED
Authors:
  • Peter Richardson
No references listed
Beams: * *
Beam energies: ANY
Run details:
  • Any type of process producing eta/eta prime mesons

Analysis of Kinematic distributions in $\eta$ and $\eta^\prime$ meson decays. The mass distributions in the decays $\eta,\eta^\prime\to \gamma\pi^+\pi^-$, $\gamma\gamma\pi^0$, $\pi^0\pi^0\pi^0$, $\pi^+\pi^-\pi^0$ and $\eta^\prime\to\pi^+\pi^-\eta$, $\pi^0\pi^0\eta$ are produced. Based on an +old Herwig++ internal analysis.

Source code: MC_Eta_Decay.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief Add a short analysis description here
  9  class MC_Eta_Decay : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(MC_Eta_Decay);
 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      double meta[2]={547.45, 957.78};
 27      for(unsigned int ix=0;ix<2;++ix) {
 28        std::ostringstream title; title << "_" << ix;
 29        _mgammagamma.push_back(Histo1DPtr());
 30        book(_mgammagamma.back(), "mgammagamma" +title.str(),200,0.,meta[ix]);
 31        _mpi0gamma.push_back(Histo1DPtr());
 32        book(_mpi0gamma.back(), "mpi0gamma"   +title.str(),200,0.,meta[ix]);
 33        _mpipgamma.push_back(Histo1DPtr());
 34        book(_mpipgamma.back(), "mpipgamma"   +title.str(),200,0.,meta[ix]);
 35        _mpimgamma.push_back(Histo1DPtr());
 36        book(_mpimgamma.back(), "mpimgamma"   +title.str(),200,0.,meta[ix]);
 37        _photonenergy.push_back(Histo1DPtr());
 38        book(_photonenergy.back(), "photonenergy"+title.str(),200,0.,meta[ix]);
 39        _mpippim.push_back(Histo1DPtr());
 40        book(_mpippim.back(), "mpippim"     +title.str(),200,0.,meta[ix]);
 41        _dpippim.push_back(Histo1DPtr());
 42        book(_dpippim.back(), "dpippim"     +title.str(),200,200.,meta[ix]);
 43        _dpi0pi0.push_back(Histo1DPtr());
 44        book(_dpi0pi0.back(), "dpi0pi0"     +title.str(),200,200.,meta[ix]);
 45        _dpi0pip.push_back(Histo1DPtr());
 46        book(_dpi0pip.back(), "dpi0pip"     +title.str(),200,200.,meta[ix]);
 47        _dpi0pim.push_back(Histo1DPtr());
 48        book(_dpi0pim.back(), "dpi0pim"     +title.str(),200,200.,meta[ix]);
 49      }
 50      _dpi0pi0.push_back(Histo1DPtr());
 51      book(_dpi0pi0.back(), "dpi0pi0_2",200,200.,500.   );
 52      _dpippim.push_back(Histo1DPtr());
 53      book(_dpippim.back(), "dpippim_2",200,200.,500.   );
 54      book(_dpipeta, "dpipeta",200,500.,meta[1]) ;
 55      book(_dpimeta, "dpimeta",200,500.,meta[1]) ;
 56      book(_dpi0eta, "dpi0eta",200,500.,meta[1]) ;
 57    }
 58
 59    void findDecayProducts(const Particle & mother,
 60                           unsigned int & nstable,
 61                           Particles& pip, Particles& pim,
 62			   Particles& pi0, Particles& eta,
 63			   Particles& gamma) {
 64      for(const Particle & p : mother.children()) {
 65	int id = p.pid();
 66        if ( id == PID::ETA ) {
 67	  eta.push_back(p);
 68	  ++nstable;
 69	}
 70        else if ( id == PID::PHOTON ) {
 71	  gamma.push_back(p);
 72	  ++nstable;
 73	}
 74	else if (id == PID::PIPLUS) {
 75	  pip.push_back(p);
 76	  ++nstable;
 77	}
 78	else if (id == PID::PIMINUS) {
 79	  pim.push_back(p);
 80	  ++nstable;
 81	}
 82	else if (id == PID::PI0 ) {
 83	  pi0.push_back(p);
 84	  ++nstable;
 85	}
 86	else if (id == PID::K0S   || id == PID::K0L ||
 87		 id == PID::KPLUS || id == PID::KMINUS)
 88	  ++nstable;
 89	else if ( !p.children().empty() ) {
 90	  findDecayProducts(p,nstable,pip,pim,pi0,eta,gamma);
 91	}
 92	else
 93	  ++nstable;
 94      }
 95    }
 96
 97    /// Perform the per-event analysis
 98    void analyze(const Event& event) {
 99      // Loop over f_1 mesons
100      for(const Particle& meson : apply<UnstableParticles>(event, "UFS").
101	    particles(Cuts::pid==221||Cuts::pid==331)) {
102	unsigned int nstable(0);
103	Particles pip, pim, pi0, eta, gamma;
104	findDecayProducts(meson,nstable,pip, pim, pi0, eta, gamma);
105	unsigned int imeson = meson.pid()==221 ? 0 : 1;
106	// pi0 gamma gamma
107	if(nstable==3 && pi0.size()==1 && gamma.size()==2) {
108	  _mgammagamma[imeson]->fill((gamma[0].momentum()+gamma[1].momentum()).mass()/MeV);
109	  _mpi0gamma  [imeson]->fill((  pi0[0].momentum()+gamma[0].momentum()).mass()/MeV);
110	  _mpi0gamma  [imeson]->fill((  pi0[0].momentum()+gamma[1].momentum()).mass()/MeV);
111	}  // pi+pi-gamma analysis
112	else if(nstable==3 && pip.size()==1 && pim.size()==1 && gamma.size()==1) {
113	  FourMomentum ptemp = pip[0].momentum()+pim[0].momentum();
114	  double mpipi = ptemp.mass();
115	  _mpippim[imeson]->fill(mpipi/MeV);
116	  double egamma = 0.5*(meson.mass()*meson.mass()-mpipi*mpipi)/meson.mass();
117	  _photonenergy[imeson]->fill(egamma/MeV);
118	  _mpipgamma[imeson]->fill((pip[0].momentum()+gamma[0].momentum()).mass()/MeV);
119	  _mpimgamma[imeson]->fill((pim[0].momentum()+gamma[0].momentum()).mass()/MeV);
120	}
121	else if(nstable==3&& pi0.size()==3) {
122	  _dpi0pi0[imeson]->fill((pi0[0].momentum()+pi0[1].momentum()).mass()/MeV);
123	  _dpi0pi0[imeson]->fill((pi0[0].momentum()+pi0[2].momentum()).mass()/MeV);
124	  _dpi0pi0[imeson]->fill((pi0[1].momentum()+pi0[2].momentum()).mass()/MeV);
125	}
126	else if(nstable==3&& pip.size()==1&&pim.size()==1&&pi0.size()==1) {
127	  _dpi0pip[imeson]->fill((pi0[0].momentum()+pip[0].momentum()).mass()/MeV);
128	  _dpi0pim[imeson]->fill((pi0[0].momentum()+pim[0].momentum()).mass()/MeV);
129	  _dpippim[imeson]->fill((pip[0].momentum()+pim[0].momentum()).mass()/MeV);
130	}
131	else if(nstable==3&& pi0.size()==2&&eta.size()==1) {
132	  _dpi0pi0[2]->fill((pi0[0].momentum()+pi0[1].momentum()).mass()/MeV);
133	  _dpi0eta   ->fill((pi0[0].momentum()+eta[0].momentum()).mass()/MeV);
134	  _dpi0eta   ->fill((pi0[1].momentum()+eta[0].momentum()).mass()/MeV);
135	}
136	else if(nstable==3&& pip.size()==1&&pim.size()==1&&eta.size()==1) {
137	  _dpippim[2]->fill((pip[0].momentum()+pim[0].momentum()).mass()/MeV);
138	  _dpipeta   ->fill((pip[0].momentum()+eta[0].momentum()).mass()/MeV);
139	  _dpimeta   ->fill((pim[0].momentum()+eta[0].momentum()).mass()/MeV);
140	}
141      }
142    }
143
144
145    /// Normalise histograms etc., after the run
146    void finalize() {
147
148      // normalize to unity
149      for(unsigned int ix=0;ix<2;++ix) {
150        normalize(_mgammagamma[ix]);
151        normalize(_mpi0gamma[ix]);
152        normalize(_mpipgamma[ix]);
153        normalize(_mpimgamma[ix]);
154        normalize(_mpippim[ix]);
155        normalize(_photonenergy[ix]);
156        normalize(_dpippim[ix]);
157        normalize(_dpi0pi0[ix]);
158        normalize(_dpi0pip[ix]);
159        normalize(_dpi0pim[ix]);
160      }
161      normalize(_dpi0pi0[2]);
162      normalize(_dpippim[2]);
163      normalize(_dpipeta);
164      normalize(_dpimeta);
165      normalize(_dpi0eta);
166    }
167    //@}
168
169
170    /**
171     *  Histograms for the decay \f$\eta\to\pi^0\gamma\gamma\f$
172     */
173    //@{
174    /**
175     * Histogram for the mass of \f$\gamma\gamma\f$
176     */
177    vector<Histo1DPtr> _mgammagamma;
178    
179    /**
180     * Histogrma for the mass of \f$\pi^0\gamma\f$
181     */
182    vector<Histo1DPtr> _mpi0gamma;
183    //@}
184    
185    /**
186     *  Histograms for the decay \f$\eta\to\pi^+\pi^-\gamma\f$
187     */
188    //@{
189    /**
190     *  Histogram for the mass of \f$\pi^+\gamma\f$
191     */
192    vector<Histo1DPtr> _mpipgamma;
193    
194    /**
195     *  Histogram for the mass of \f$\pi^-\gamma\f$
196     */
197    vector<Histo1DPtr> _mpimgamma;
198    
199    /**
200     *  Histogram for the mass of \f$\pi^+\pi^-\f$
201     */
202    vector<Histo1DPtr> _mpippim;
203    
204    /**
205     *  Histogram for the photon energy
206     */
207    vector<Histo1DPtr> _photonenergy;
208    //@}
209    
210    /**
211     * Histograms for the decay \f$\eta\pi\pi\pi\f$ and \f$\eta'\to\eta\pi\pi\f$.
212     */
213    //@{
214    /**
215     *  Histogram for the mass of \f$\pi^+\pi^-\f$
216     */
217    vector<Histo1DPtr> _dpippim;
218    
219    /**
220     *  Histogram for the mass of \f$\pi^0\pi^0\f$
221     */
222    vector<Histo1DPtr> _dpi0pi0;
223    
224    /**
225     *  Histogram for the mass of \f$\pi^0\pi^+\f$
226     */
227    vector<Histo1DPtr> _dpi0pip;
228    
229    /**
230     *  Histogram for the mass of \f$\pi^0\pi^-\f$
231     */
232    vector<Histo1DPtr> _dpi0pim;
233    
234    /**
235     *  Histogram for the mass of \f$\pi^+\eta\f$
236     */
237    Histo1DPtr  _dpipeta;
238    
239    /**
240     *  Histogram for the mass of \f$\pi^-\eta\f$
241     */
242    Histo1DPtr  _dpimeta;
243    
244    /**
245     *  Histogram for the mass of \f$\pi^0\eta\f$
246     */
247    Histo1DPtr  _dpi0eta;
248    //@}
249    
250
251  };
252
253
254  // The hook for the plugin system
255  RIVET_DECLARE_PLUGIN(MC_Eta_Decay);
256
257
258}