Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // FourPionCzyzCurrent.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 #ifndef Herwig_FourPionCzyzCurrent_H
0009 #define Herwig_FourPionCzyzCurrent_H
0010 //
0011 // This is the declaration of the FourPionCzyzCurrent class.
0012 //
0013 
0014 #include "WeakCurrent.h"
0015 
0016 namespace Herwig {
0017 
0018 using namespace ThePEG;
0019 
0020 
0021 /** \ingroup Decay
0022  *
0023  * The FourMesonCzyzCurrent class implements the currents from Phys.Rev. D77 (2008) 114005 
0024  * for 4 pions
0025  * @see WeakCurrent.
0026  * @see \ref FourPionCzyzCurrentInterfaces "The interfaces"
0027  * defined for FourPionCzyzCurrent.
0028  * 
0029  */
0030 class FourPionCzyzCurrent: public WeakCurrent {
0031 
0032 public:
0033 
0034   /**
0035    * The default constructor.
0036    */
0037   FourPionCzyzCurrent();
0038 
0039   /** @name Methods for the construction of the phase space integrator. */
0040   //@{ 
0041   /**
0042    * Complete the construction of the decay mode for integration.classes inheriting
0043    * from this one.
0044    * This method is purely virtual and must be implemented in the classes inheriting
0045    * from WeakCurrent.
0046    * @param icharge   The total charge of the outgoing particles in the current.
0047    * @param resonance If specified only include terms with this particle
0048    * @param flavour Information on the required flavours of the quarks
0049    * @param imode     The mode in the current being asked for.
0050    * @param mode      The phase space mode for the integration
0051    * @param iloc      The location of the of the first particle from the current in
0052    *                  the list of outgoing particles.
0053    * @param ires      The location of the first intermediate for the current.
0054    * @param phase     The prototype phase space channel for the integration.
0055    * @param upp       The maximum possible mass the particles in the current are
0056    *                  allowed to have.
0057    * @return Whether the current was sucessfully constructed.
0058    */
0059   virtual bool createMode(int icharge, tcPDPtr resonance,
0060               FlavourInfo flavour,
0061               unsigned int imode,PhaseSpaceModePtr mode,
0062               unsigned int iloc,int ires,
0063               PhaseSpaceChannel phase, Energy upp );
0064 
0065   /**
0066    * The particles produced by the current. This just returns the two pseudoscalar
0067    * mesons and the photon.
0068    * @param icharge The total charge of the particles in the current.
0069    * @param imode The mode for which the particles are being requested
0070    * @param iq The PDG code for the quark
0071    * @param ia The PDG code for the antiquark
0072    * @return The external particles for the current.
0073    */
0074   virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia);
0075   //@}
0076 
0077   /**
0078    * Hadronic current. This method is purely virtual and must be implemented in
0079    * all classes inheriting from this one.
0080    * @param resonance If specified only include terms with this particle
0081    * @param flavour Information on the required flavours of the quarks
0082    * @param imode The mode
0083    * @param ichan The phase-space channel the current is needed for.
0084    * @param scale The invariant mass of the particles in the current.
0085    * @param outgoing The particles produced in the decay
0086    * @param momenta  The momenta of the particles produced in the decay
0087    * @param meopt Option for the calculation of the matrix element
0088    * @return The current. 
0089    */
0090   virtual vector<LorentzPolarizationVectorE> 
0091   current(tcPDPtr resonance, FlavourInfo flavour,
0092       const int imode, const int ichan,Energy & scale,
0093       const tPDVector & outgoing,
0094       const vector<Lorentz5Momentum> & momenta,
0095       DecayIntegrator::MEOption meopt) const;
0096 
0097   /**
0098    * Accept the decay. Checks the particles are the allowed mode.
0099    * @param id The id's of the particles in the current.
0100    * @return Can this current have the external particles specified.
0101    */
0102   virtual bool accept(vector<int> id);
0103 
0104   /**
0105    * Return the decay mode number for a given set of particles in the current. 
0106    * @param id The id's of the particles in the current.
0107    * @return The number of the mode
0108    */
0109   virtual unsigned int decayMode(vector<int> id);
0110 
0111   /**
0112    * Output the setup information for the particle database
0113    * @param os The stream to output the information to
0114    * @param header Whether or not to output the information for MySQL
0115    * @param create Whether or not to add a statement creating the object
0116    */
0117   virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
0118   
0119 public:
0120 
0121   /** @name Functions used by the persistent I/O system. */
0122   //@{
0123   /**
0124    * Function used to write out object persistently.
0125    * @param os the persistent output stream written to.
0126    */
0127   void persistentOutput(PersistentOStream & os) const;
0128 
0129   /**
0130    * Function used to read in object persistently.
0131    * @param is the persistent input stream read from.
0132    * @param version the version number of the object when written.
0133    */
0134   void persistentInput(PersistentIStream & is, int version);
0135   //@}
0136 
0137   /**
0138    * The standard Init function used to initialize the interfaces.
0139    * Called exactly once for each class by the class description system
0140    * before the main function starts or
0141    * when this class is dynamically loaded.
0142    */
0143   static void Init();
0144 
0145 protected:
0146 
0147   /**
0148    *  Create the channels for 1 term in the current 
0149    */
0150   void createChannels(unsigned int imode,
0151               int icharge,  tcPDPtr resonance,
0152               unsigned int iloc,int ires,
0153               tPDVector outgoing, PhaseSpaceModePtr mode,
0154               PhaseSpaceChannel channel,
0155               unsigned int j1, unsigned int j2,
0156               unsigned int j3, unsigned int j4,
0157               int & nchan);
0158   
0159   /**
0160    *   Basis current in terms of which all the others can be calculated
0161    */
0162   LorentzVector<complex<InvEnergy> > baseCurrent(Energy2 Q2,
0163                          tcPDPtr resonance,
0164                          const int ichan,
0165                          const Lorentz5Momentum & Q,
0166                          const Lorentz5Momentum & q1,
0167                          const Lorentz5Momentum & q2,
0168                          const Lorentz5Momentum & q3,
0169                          const Lorentz5Momentum & q4) const;
0170 protected:
0171 
0172   /** @name Clone Methods. */
0173   //@{
0174   /**
0175    * Make a simple clone of this object.
0176    * @return a pointer to the new object.
0177    */
0178   virtual IBPtr clone() const;
0179 
0180   /** Make a clone of this object, possibly modifying the cloned object
0181    * to make it sane.
0182    * @return a pointer to the new object.
0183    */
0184   virtual IBPtr fullclone() const;
0185   //@}
0186 
0187 protected:
0188 
0189   /** @name Standard Interfaced functions. */
0190   //@{
0191 
0192   /**
0193    * Initialize this object after the setup phase before saving and
0194    * EventGenerator to disk.
0195    * @throws InitException if object could not be initialized properly.
0196    */
0197   virtual void doinit();
0198   //@}
0199 
0200 private:
0201 
0202   /**
0203    * The assignment operator is private and must never be called.
0204    * In fact, it should not even be implemented.
0205    */
0206   FourPionCzyzCurrent & operator=(const FourPionCzyzCurrent &) = delete;
0207 
0208 private:
0209  
0210   /**
0211    *  Masses and widths of the particles
0212    */
0213   //@{
0214   /**
0215    *  Rho masses (PDG for most of current)
0216    */
0217   vector<Energy> rhoMasses_;
0218   /**
0219    *  Rho widths (PDG for most of current)
0220    */
0221   vector<Energy> rhoWidths_;
0222   
0223   /**
0224    *  Rho masses for the \f$F_\rho\f$ piece
0225    */
0226   vector<Energy> rhoMasses_Frho_;
0227   /**
0228    *  Rho widths for the \f$F_\rho\f$ piece
0229    */
0230   vector<Energy> rhoWidths_Frho_;
0231   
0232   /**
0233    *  Omega mass
0234    */
0235   Energy omegaMass_;
0236   /**
0237    *  Omega widths
0238    */
0239   Energy omegaWidth_;
0240   
0241   /**
0242    *  \f$f_0\f$ mass
0243    */
0244   Energy f0Mass_;
0245   /**
0246    *  \f$f_0\f$ width
0247    */
0248   Energy f0Width_;
0249   
0250   /**
0251    *  \f$a_1\f$ mass
0252    */
0253   Energy a1Mass_;
0254   /**
0255    *  \f$a_1\f$ width
0256    */
0257   Energy a1Width_;
0258   //@}
0259 
0260   /**
0261    *  Couplings in the model
0262    */
0263   //@{
0264   /**
0265    *  Coefficents for sum over \f$\rho\f$ resonances in \f$a_1\f$ term
0266    */
0267   vector<double> beta_a1_;
0268   
0269   /**
0270    *  Coefficents for sum over \f$\rho\f$ resonances in \f$f_0\f$ term
0271    */
0272   vector<double> beta_f0_;
0273   
0274   /**
0275    *  Coefficents for sum over \f$\rho\f$ resonances in \f$\omega\f$ term
0276    */
0277   vector<double> beta_omega_;
0278   
0279   /**
0280    *  Coefficents for sum over \f$\rho\f$ resonances in \f$B_\rho\f$ term
0281    */
0282   vector<double> beta_B_;
0283   
0284   /**
0285    *  Coefficents for sum over \f$\rho\f$ resonances in \f$T_\rho\f$ term
0286    */
0287   vector<double> beta_bar_;
0288 
0289   /**
0290    *   Coupling for the \f$a_1\f$ term
0291    */
0292   InvEnergy2 c_a1_;
0293 
0294   /**
0295    *   Coupling for the \f$f_0\f$ term
0296    */
0297   InvEnergy2 c_f0_;
0298 
0299   /**
0300    *   Coupling for the \f$\omega\f$ term
0301    */
0302   InvEnergy c_omega_;
0303 
0304   /**
0305    *   Coupling for the \f\rho\f$ term
0306    */
0307   double c_rho_;
0308 
0309   /**
0310    * \f$g_{\rho\pi\pi}\f$
0311    */
0312   double g_rho_pi_pi_;
0313 
0314   /**
0315    * \f$g_{\omega\pi\prho}\f$
0316    */
0317   ThePEG::Qty<std::ratio<0,1>, std::ratio<-5,1>, std::ratio<0,1> > g_omega_pi_rho_;
0318 
0319   /**
0320    * \f$g_{\rho\gamma}\f$
0321    */
0322   Energy2 g_rho_gamma_;
0323   //@}
0324 
0325   /**
0326    *  Pion masses
0327    */
0328   Energy mpip_, mpi0_;
0329 
0330   /**
0331    *   Map for the phase-space channels
0332    */
0333   vector<vector<int> > channelMap_;
0334 };
0335 
0336 }
0337 
0338 #endif /* Herwig_FourPionCzyzCurrent_H */