Back to home page

EIC code displayed by LXR

 
 

    


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

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