Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef Herwig_EtaPiPiCurrent_H
0003 #define Herwig_EtaPiPiCurrent_H
0004 //
0005 // This is the declaration of the EtaPiPiCurrent class.
0006 //
0007 
0008 #include "WeakCurrent.h"
0009 
0010 namespace Herwig {
0011 
0012 using namespace ThePEG;
0013 
0014 /**
0015  * The EtaPiPiCurrent class implements the weak current for
0016  * two pions and the \f$\eta\f$ meson.
0017  *
0018  * @see \ref EtaPiPiCurrentInterfaces "The interfaces"
0019  * defined for EtaPiPiCurrent.
0020  */
0021 class EtaPiPiCurrent: public WeakCurrent {
0022 
0023 public:
0024 
0025   /**
0026    * The default constructor.
0027    */
0028   EtaPiPiCurrent();
0029 
0030 
0031   /** @name Methods for the construction of the phase space integrator. */
0032   //@{
0033   /**
0034    * Complete the construction of the decay mode for integration.classes inheriting
0035    * from this one.
0036    * This method is purely virtual and must be implemented in the classes inheriting
0037    * from WeakCurrent.
0038    * @param icharge   The total charge of the outgoing particles in the current.
0039    * @param resonance If specified only include terms with this particle
0040    * @param flavour Information on the required flavours of the quarks
0041    * @param imode     The mode in the current being asked for.
0042    * @param mode      The phase space mode for the integration
0043    * @param iloc      The location of the of the first particle from the current in
0044    *                  the list of outgoing particles.
0045    * @param ires      The location of the first intermediate for the current.
0046    * @param phase     The prototype phase space channel for the integration.
0047    * @param upp       The maximum possible mass the particles in the current are
0048    *                  allowed to have.
0049    * @return Whether the current was sucessfully constructed.
0050    */
0051   virtual bool createMode(int icharge, tcPDPtr resonance,
0052               FlavourInfo flavour,
0053               unsigned int imode,PhaseSpaceModePtr mode,
0054               unsigned int iloc,int ires,
0055               PhaseSpaceChannel phase, Energy upp );
0056 
0057   /**
0058    * The particles produced by the current. This just returns the two pseudoscalar
0059    * mesons and the photon.
0060    * @param icharge The total charge of the particles in the current.
0061    * @param imode The mode for which the particles are being requested
0062    * @param iq The PDG code for the quark
0063    * @param ia The PDG code for the antiquark
0064    * @return The external particles for the current.
0065    */
0066   virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia);
0067   //@}
0068 
0069   /**
0070    * Hadronic current. This method is purely virtual and must be implemented in
0071    * all classes inheriting from this one.
0072    * @param resonance If specified only include terms with this particle
0073    * @param flavour Information on the required flavours of the quarks
0074    * @param imode The mode
0075    * @param ichan The phase-space channel the current is needed for.
0076    * @param scale The invariant mass of the particles in the current.
0077    * @param outgoing The particles produced in the decay
0078    * @param momenta  The momenta of the particles produced in the decay
0079    * @param meopt Option for the calculation of the matrix element
0080    * @return The current. 
0081    */
0082   virtual vector<LorentzPolarizationVectorE> 
0083   current(tcPDPtr resonance,
0084       FlavourInfo flavour,
0085       const int imode, const int ichan,Energy & scale,
0086       const tPDVector & outgoing,
0087       const vector<Lorentz5Momentum> & momenta,
0088       DecayIntegrator::MEOption meopt) const;
0089 
0090   /**
0091    * Accept the decay. Checks the particles are the allowed mode.
0092    * @param id The id's of the particles in the current.
0093    * @return Can this current have the external particles specified.
0094    */
0095   virtual bool accept(vector<int> id);
0096 
0097   /**
0098    * Return the decay mode number for a given set of particles in the current. 
0099    * @param id The id's of the particles in the current.
0100    * @return The number of the mode
0101    */
0102   virtual unsigned int decayMode(vector<int> id);
0103 
0104   /**
0105    * Output the setup information for the particle database
0106    * @param os The stream to output the information to
0107    * @param header Whether or not to output the information for MySQL
0108    * @param create Whether or not to add a statement creating the object
0109    */
0110   virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
0111   
0112 public:
0113 
0114   /** @name Functions used by the persistent I/O system. */
0115   //@{
0116   /**
0117    * Function used to write out object persistently.
0118    * @param os the persistent output stream written to.
0119    */
0120   void persistentOutput(PersistentOStream & os) const;
0121 
0122   /**
0123    * Function used to read in object persistently.
0124    * @param is the persistent input stream read from.
0125    * @param version the version number of the object when written.
0126    */
0127   void persistentInput(PersistentIStream & is, int version);
0128   //@}
0129 
0130   /**
0131    * The standard Init function used to initialize the interfaces.
0132    * Called exactly once for each class by the class description system
0133    * before the main function starts or
0134    * when this class is dynamically loaded.
0135    */
0136   static void Init();
0137 
0138 protected:
0139 
0140   /** @name Clone Methods. */
0141   //@{
0142   /**
0143    * Make a simple clone of this object.
0144    * @return a pointer to the new object.
0145    */
0146   virtual IBPtr clone() const;
0147 
0148   /** Make a clone of this object, possibly modifying the cloned object
0149    * to make it sane.
0150    * @return a pointer to the new object.
0151    */
0152   virtual IBPtr fullclone() const;
0153   //@}
0154 
0155 protected:
0156 
0157   /** @name Standard Interfaced functions. */
0158   //@{
0159   /**
0160    * Initialize this object after the setup phase before saving an
0161    * EventGenerator to disk.
0162    * @throws InitException if object could not be initialized properly.
0163    */
0164   virtual void doinit();
0165   //@}
0166 
0167 private:
0168 
0169   /**
0170    * The assignment operator is private and must never be called.
0171    * In fact, it should not even be implemented.
0172    */
0173   EtaPiPiCurrent & operator=(const EtaPiPiCurrent &) = delete;
0174 
0175 private:
0176 
0177   /**
0178    *  The weights for the form factor
0179    */
0180   vector<Complex> weights_;
0181 
0182   /**
0183    *   The amplitudes of the weights
0184    */
0185   vector<double> amp_;
0186 
0187   /**
0188    *   The phases of the weights
0189    */
0190   vector<double> phase_;
0191   
0192   /**
0193    * The masses of the \f$\rho\f$ resonances.
0194    */
0195   vector<Energy> rhoMasses_;
0196 
0197   /**
0198    * The widths of the \f$\rho\f$ resonances.
0199    */
0200   vector<Energy> rhoWidths_;
0201 
0202   /**
0203    *   Pion decay constant
0204    */
0205   Energy fpi_;
0206   
0207 };
0208 
0209 }
0210 
0211 #endif /* Herwig_EtaPiPiCurrent_H */