Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:24:21

0001 // -*- C++ -*-
0002 //
0003 // ScalarMassGenerator.h is a part of Herwig - A multi-purpose Monte Carlo event generator
0004 // Copyright (C) 2002-2019 The Herwig Collaboration
0005 //
0006 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
0007 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
0008 //
0009 #ifndef HERWIG_ScalarMassGenerator_H
0010 #define HERWIG_ScalarMassGenerator_H
0011 // This is the declaration of the ScalarMassGenerator class.
0012 
0013 #include "GenericMassGenerator.h"
0014 #include "ScalarMassGenerator.fh"
0015 #include "ThePEG/Config/Complex.h"
0016 
0017 namespace Herwig {
0018 using namespace ThePEG;
0019 
0020 /** \ingroup PDT
0021  *
0022  *  The <code>ScalarMassGenerator</code> class is designed for the generation
0023  *  of the masses of the \f$a_0\f$ and \f$f_0\f$ mesons which have \f$K\bar{K}\f$
0024  *  modes close to the on-shell mass of the particle. 
0025  *
0026  *  The form based on the Flatte parameterisation of PLB63, 224, we use a weight
0027  * \f[\frac{1}{\pi}\frac{m\Gamma(m)}{|M^2-m^2-i\sum_ig^2_i\rho_i|^2}\f],
0028  * where
0029  * -  \f$g_i\f$  is the coupling for a given decay mode
0030  * -  \f$\rho_i=2p_i/m\f$ is Lorentz-invariant phase-space where \f$p_i\f$ is the 
0031  *     momentum release in the decay, this analytically continued
0032  *     below the threshold.
0033  * In this case the running width given by the sum of the running partial widths
0034  * \f[\Gamma_i(m) = 2g^2_i\frac{p_i}{m^2}\f],
0035  * and we differ from the Flatte approach in not analytically 
0036  * continuing below the threshold for the numerator.
0037  *
0038  * @see MassGenerator
0039  * @see GenericMassGenerator
0040  * 
0041  */
0042 class ScalarMassGenerator: public GenericMassGenerator {
0043 
0044 public:
0045 
0046   /** @name Functions used by the persistent I/O system. */
0047   //@{
0048   /**
0049    * Function used to write out object persistently.
0050    * @param os the persistent output stream written to.
0051    */
0052   void persistentOutput(PersistentOStream & os) const;
0053 
0054   /**
0055    * Function used to read in object persistently.
0056    * @param is the persistent input stream read from.
0057    * @param version the version number of the object when written.
0058    */
0059   void persistentInput(PersistentIStream & is, int version);
0060   //@}
0061 
0062   /**
0063    * Standard Init function used to initialize the interfaces.
0064    */
0065   static void Init();
0066 
0067 public:
0068 
0069   /**
0070    * Weight for the factor for an off-shell mass
0071    * @param mass The off-shell mass
0072    * @param shape The type of shape to use as for the BreitWignerShape interface
0073    * @return The weight.
0074    */
0075   virtual double weight(Energy mass,int shape) const;
0076 
0077   /**
0078    * output for the database
0079    */
0080   virtual void dataBaseOutput(ofstream &,bool);
0081 
0082 protected:
0083 
0084   /**
0085    *  Return the full weight
0086    */
0087   virtual InvEnergy2 BreitWignerWeight(Energy q, int shape) const;
0088 
0089 protected:
0090 
0091   /** @name Clone Methods. */
0092   //@{
0093   /**
0094    * Make a simple clone of this object.
0095    * @return a pointer to the new object.
0096    */
0097   virtual IBPtr clone() const {return new_ptr(*this);}
0098 
0099   /** Make a clone of this object, possibly modifying the cloned object
0100    * to make it sane.
0101    * @return a pointer to the new object.
0102    */
0103   virtual IBPtr fullclone() const {return new_ptr(*this);}
0104   //@}
0105 
0106 protected:
0107 
0108   /** @name Standard Interfaced functions. */
0109   //@{
0110   /**
0111    * Initialize this object after the setup phase before saving and
0112    * EventGenerator to disk.
0113    * @throws InitException if object could not be initialized properly.
0114    */
0115   virtual void doinit();
0116   //@}
0117 
0118 private:
0119 
0120   /**
0121    * Private and non-existent assignment operator.
0122    */
0123   ScalarMassGenerator & operator=(const ScalarMassGenerator &) = delete;
0124 
0125 private:
0126 
0127   /**
0128    * couplings for the decay channels
0129    */
0130   vector<Energy> _coupling;
0131 
0132   /**
0133    * The first outgoing mass for the channels
0134    */
0135   vector<Energy> _mass1;
0136 
0137   /**
0138    * The second outgoing mass for the channels
0139    */
0140   vector<Energy> _mass2;
0141 
0142   /**
0143    * calculated values to speed things up
0144    */
0145   //@{
0146   /**
0147    *  Maximum mass squared
0148    */
0149   vector<Energy2> _m2plus;
0150 
0151   /**
0152    *  Minimum mass squared
0153    */
0154   vector<Energy2> _m2minus;
0155   //@}
0156 
0157 };
0158 
0159 }
0160 
0161 
0162 #endif /* HERWIG_ScalarMassGenerator_H */