Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef Herwig_TwoKaonCzyzCurrent_H
0003 #define Herwig_TwoKaonCzyzCurrent_H
0004 //
0005 // This is the declaration of the TwoKaonCzyzCurrent class.
0006 //
0007 
0008 #include "WeakCurrent.h"
0009 
0010 namespace Herwig {
0011 
0012 using namespace ThePEG;
0013 
0014 /**
0015  * The TwoKaonCzyzCurrent class implements the current of PRD 81 094014 for the
0016  * production of two kaons.
0017  *
0018  * @see \ref TwoKaonCzyzCurrentInterfaces "The interfaces"
0019  * defined for TwoKaonCzyzCurrent.
0020  */
0021 class TwoKaonCzyzCurrent: public WeakCurrent {
0022 
0023 public:
0024 
0025   /**
0026    * The default constructor.
0027    */
0028   TwoKaonCzyzCurrent();
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,FlavourInfo flavour,
0052               unsigned int imode,PhaseSpaceModePtr mode,
0053               unsigned int iloc,int ires,
0054               PhaseSpaceChannel phase, Energy upp );
0055 
0056   /**
0057    * The particles produced by the current. This just returns the two pseudoscalar
0058    * mesons and the photon.
0059    * @param icharge The total charge of the particles in the current.
0060    * @param imode The mode for which the particles are being requested
0061    * @param iq The PDG code for the quark
0062    * @param ia The PDG code for the antiquark
0063    * @return The external particles for the current.
0064    */
0065   virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia);
0066   //@}
0067 
0068   /**
0069    * Hadronic current. This method is purely virtual and must be implemented in
0070    * all classes inheriting from this one.
0071    * @param resonance If specified only include terms with this particle
0072    * @param flavour Information on the required flavours of the quarks
0073    * @param imode The mode
0074    * @param ichan The phase-space channel the current is needed for.
0075    * @param scale The invariant mass of the particles in the current.
0076    * @param outgoing The particles produced in the decay
0077    * @param momenta  The momenta of the particles produced in the decay
0078    * @param meopt Option for the calculation of the matrix element
0079    * @return The current. 
0080    */
0081   virtual vector<LorentzPolarizationVectorE> 
0082   current(tcPDPtr resonance, FlavourInfo flavour,
0083       const int imode, const int ichan,Energy & scale,
0084       const tPDVector & outgoing,
0085       const vector<Lorentz5Momentum> & momenta,
0086       DecayIntegrator::MEOption meopt) const;
0087 
0088   /**
0089    * Accept the decay. Checks the particles are the allowed mode.
0090    * @param id The id's of the particles in the current.
0091    * @return Can this current have the external particles specified.
0092    */
0093   virtual bool accept(vector<int> id);
0094 
0095   /**
0096    * Return the decay mode number for a given set of particles in the current. 
0097    * @param id The id's of the particles in the current.
0098    * @return The number of the mode
0099    */
0100   virtual unsigned int decayMode(vector<int> id);
0101 
0102   /**
0103    * Output the setup information for the particle database
0104    * @param os The stream to output the information to
0105    * @param header Whether or not to output the information for MySQL
0106    * @param create Whether or not to add a statement creating the object
0107    */
0108   virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
0109   
0110   /**
0111    *  Calculation of the kaon form factor
0112    */
0113   Complex Fkaon(Energy2 q2,const int imode, const int ichan,
0114         IsoSpin::IsoSpin Itotal,
0115         Strangeness::Strange strange,
0116         tcPDPtr resonance,
0117         Energy ma, Energy mb) const;
0118   
0119   /**
0120    *  Calculation of the kaon form factor, remainder I=1
0121    */
0122   Complex FkaonRemainderI1(Energy2 q2) const;
0123   
0124   /**
0125    *  Calculation of the kaon form factor, remainder I=0
0126    */
0127   Complex FkaonRemainderI0(Energy2 q2,Energy ma, Energy mb) const;
0128   
0129 public:
0130 
0131   /** @name Functions used by the persistent I/O system. */
0132   //@{
0133   /**
0134    * Function used to write out object persistently.
0135    * @param os the persistent output stream written to.
0136    */
0137   void persistentOutput(PersistentOStream & os) const;
0138 
0139   /**
0140    * Function used to read in object persistently.
0141    * @param is the persistent input stream read from.
0142    * @param version the version number of the object when written.
0143    */
0144   void persistentInput(PersistentIStream & is, int version);
0145   //@}
0146 
0147   /**
0148    * The standard Init function used to initialize the interfaces.
0149    * Called exactly once for each class by the class description system
0150    * before the main function starts or
0151    * when this class is dynamically loaded.
0152    */
0153   static void Init();
0154 
0155 protected:
0156 
0157   /** @name Clone Methods. */
0158   //@{
0159   /**
0160    * Make a simple clone of this object.
0161    * @return a pointer to the new object.
0162    */
0163   virtual IBPtr clone() const;
0164 
0165   /** Make a clone of this object, possibly modifying the cloned object
0166    * to make it sane.
0167    * @return a pointer to the new object.
0168    */
0169   virtual IBPtr fullclone() const;
0170   //@}
0171 
0172 protected:
0173 
0174   /** @name Standard Interfaced functions. */
0175   //@{
0176 
0177   /**
0178    * Initialize this object after the setup phase before saving and
0179    * EventGenerator to disk.
0180    * @throws InitException if object could not be initialized properly.
0181    */
0182   virtual void doinit();
0183   //@}
0184 
0185   /**
0186    *   Construct the interpolators
0187    */
0188   void constructInterpolators() const;
0189 
0190 private:
0191 
0192   /**
0193    * The assignment operator is private and must never be called.
0194    * In fact, it should not even be implemented.
0195    */
0196   TwoKaonCzyzCurrent & operator=(const TwoKaonCzyzCurrent &) = delete;
0197 
0198 private:
0199 
0200   /**
0201    * Weights for the different \f$\rho\f$ resonances in the current, \f$\alpha_k\f$.
0202    */
0203   //@{
0204   /**
0205    *  The Complex weight used in the calculation
0206    */
0207   vector<Complex> rhoWgt_;
0208 
0209   /**
0210    *  The magnitude for input
0211    */
0212   vector<double> rhoMag_;
0213 
0214   /**
0215    *  The phase for input
0216    */
0217   vector<double> rhoPhase_;
0218   //@}
0219 
0220   /**
0221    * Weights for the different \f$\omega\f$ resonances in the current, \f$\alpha_k\f$.
0222    */
0223   //@{
0224   /**
0225    *  The Complex weight used in the calculation
0226    */
0227   vector<Complex> omegaWgt_;
0228 
0229   /**
0230    *  The magnitude for input
0231    */
0232   vector<double> omegaMag_;
0233 
0234   /**
0235    *  The phase for input
0236    */
0237   vector<double> omegaPhase_;
0238   //@}
0239 
0240   /**
0241    * Weights for the different \f$\phi\f$ resonances in the current, \f$\alpha_k\f$.
0242    */
0243   //@{
0244   /**
0245    *  The Complex weight used in the calculation
0246    */
0247   vector<Complex> phiWgt_;
0248 
0249   /**
0250    *  The magnitude for input
0251    */
0252   vector<double> phiMag_;
0253 
0254   /**
0255    *  The phase for input
0256    */
0257   vector<double> phiPhase_;
0258   //@}
0259   
0260   /**
0261    * The masses of the \f$\rho\f$ resonances.
0262    */
0263   vector<Energy> rhoMasses_;
0264 
0265   /**
0266    * The widths of the \f$\rho\f$ resonances.
0267    */
0268   vector<Energy> rhoWidths_;
0269 
0270   /**
0271    * The masses of the \f$\omega\f$ resonances.
0272    */
0273   vector<Energy> omegaMasses_;
0274 
0275   /**
0276    * The widths of the \f$\omega\f$ resonances.
0277    */
0278   vector<Energy> omegaWidths_;
0279   
0280   /**
0281    * The masses of the \f$\phi\f$ resonances.
0282    */
0283   vector<Energy> phiMasses_;
0284 
0285   /**
0286    * The widths of the \f$\phi\f$ resonances.
0287    */
0288   vector<Energy> phiWidths_;
0289 
0290   /**
0291    *   Regge \f$\beta\f$ parameter for \f$\rho\f$ resonances
0292    */
0293   double betaRho_;
0294 
0295   /**
0296    *   Regge \f$\beta\f$ parameter for \f$\omega\f$ resonances
0297    */
0298   double betaOmega_;
0299 
0300   /**
0301    *   Regge \f$\beta\f$ parameter for \f$\phi\f$ resonances
0302    */
0303   double betaPhi_;
0304   
0305   /**
0306    *  Number of resonaces at which to trucated the series
0307    */
0308   unsigned int nMax_;
0309 
0310   /**
0311    *  The \f$\eta_\phi\f$ parameter
0312    */
0313   double etaPhi_;
0314 
0315   /**
0316    *  The \f$\gamma_\omega\f$ parameter
0317    */
0318   double gammaOmega_;
0319 
0320   /**
0321    *  The \f$\gamma_\phi\f$ parameter
0322    */
0323   double gammaPhi_;
0324   
0325   /**
0326    *   Masses of the resonances
0327    */
0328   vector<vector<Energy> > mass_;
0329 
0330   /**
0331    *   Widths of the resonances
0332    */
0333   vector<vector<Energy> > width_;
0334 
0335   /**
0336    *   Couplings of the resonaces
0337    */
0338   vector<vector<Complex> > coup_;
0339 
0340   /**
0341    * The function \f$\frac{\\hat{H}}{dq^2}\f$ at \f$q^2=m^2\f$ for the GS form of the
0342    *  Breit-Wigner
0343    */
0344   vector<double> dh_;
0345 
0346   /**
0347    * The function \f$\\hat{H}\f$ at \f$q^2=m^2\f$ for the GS form of the
0348    *  Breit-Wigner
0349    */
0350   vector<Energy2> hres_;
0351 
0352   /**
0353    * The \f$H(0)\f$ parameter  for the GS form of the
0354    *  Breit-Wigner
0355    */
0356   vector<Energy2> h0_;
0357 
0358   /**
0359    *  The charged pion mass
0360    */
0361   Energy mpi_;
0362 
0363   /**
0364    *  The maximum energy
0365    */
0366   Energy eMax_;
0367 
0368   /**
0369    *  Interpolators for the higher resonance components for speed
0370    */
0371   mutable Interpolator<double,Energy2>::Ptr fKI0Re_, fKI0Im_,fKI1Re_, fKI1Im_;
0372   
0373 };
0374 
0375 }
0376 
0377 #endif /* Herwig_TwoKaonCzyzCurrent_H */