Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // VectorMesonVectorPScalarDecayer.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_VectorMesonVectorPScalarDecayer_H
0010 #define HERWIG_VectorMesonVectorPScalarDecayer_H
0011 // This is the declaration of the VectorMesonVectorPScalarDecayer class.
0012 
0013 #include "Herwig/Decay/DecayIntegrator.h"
0014 #include "Herwig/Decay/PhaseSpaceMode.h"
0015 #include "ThePEG/Helicity/LorentzPolarizationVector.h"
0016 
0017 namespace Herwig {
0018 
0019 /** \ingroup Decay
0020  *
0021  *  This class is designed for the decay of a vector meson to another spin-1 
0022  *  particle, either another vector meson or a photon, and a pseduoscalar meson.
0023  *  The matrix element for the decay is 
0024  *  \f[\mathcal{M} = g\epsilon^{\mu\nu\alpha\beta} 
0025  *     \epsilon_{0\mu} p_{0\nu}  p_{1\alpha} \epsilon_{1\beta}, \f]
0026  *  where \f$p_0\f$ is the momentum of the decaying particle, \f$p_1\f$ is the momentum
0027  *  of the outgoing vector particle, \f$\epsilon_0\f$ is the polarization vector of
0028  * the incoming meson and \f$\epsilon_1\f$ is the polarization vector of the
0029  * outgoing vector particle..
0030  *
0031  *  Examples of such decays are \f$\rho\to\pi\gamma\f$.
0032  *
0033  *  The incoming vector mesons together with their decay products and the coupling 
0034  *  \f$g\f$ can be specified using the interfaces for the class. The maximum weights
0035  *  for the decays can be calculated using the Initialize interface of the
0036  *  DecayIntegrator class or specified using the interface.
0037  *
0038  *  The incoming and outgoing particles, couplings and maximum weights for
0039  *  many of the common \f$V\to PV\f$ decays are specified in the default
0040  *  constructor.
0041  *
0042  * @see DecayIntegrator
0043  * @see \ref VectorMesonVectorPScalarDecayerInterfaces "The interfaces"
0044  * defined for VectorMesonVectorPScalarDecayer.
0045  * 
0046  *  \author Peter Richardson
0047  *
0048  */
0049 class VectorMesonVectorPScalarDecayer: public DecayIntegrator {
0050 
0051 public:
0052 
0053   /**
0054    * Default constructor.
0055    */
0056   VectorMesonVectorPScalarDecayer();
0057 
0058   /**
0059    * Which of the possible decays is required
0060    * @param cc Is this mode the charge conjugate
0061    * @param parent The decaying particle
0062    * @param children The decay products
0063    */
0064   virtual int modeNumber(bool & cc, tcPDPtr parent, 
0065              const tPDVector & children) const;
0066  
0067   /**
0068    * Return the matrix element squared for a given mode and phase-space channel.
0069    * @param ichan The channel we are calculating the matrix element for. 
0070    * @param part The decaying Particle.
0071    * @param outgoing The particles produced in the decay
0072    * @param momenta  The momenta of the particles produced in the decay
0073    * @param meopt Option for the calculation of the matrix element
0074    * @return The matrix element squared for the phase-space configuration.
0075    */
0076   double me2(const int ichan,const Particle & part,
0077          const tPDVector & outgoing,
0078          const vector<Lorentz5Momentum> & momenta,
0079          MEOption meopt) const;
0080 
0081   /**
0082    *   Construct the SpinInfos for the particles produced in the decay
0083    */
0084   virtual void constructSpinInfo(const Particle & part,
0085                  ParticleVector outgoing) const;
0086 
0087   /**
0088    * Specify the \f$1\to2\f$ matrix element to be used in the running width calculation.
0089    * @param dm The DecayMode
0090    * @param mecode The code for the matrix element as described
0091    *               in the GenericWidthGenerator class, in this case 1.
0092    * @param coupling The coupling for the matrix element.
0093    * @return True or False if this mode can be handled.
0094    */
0095   bool twoBodyMEcode(const DecayMode & dm, int & mecode, double & coupling) const;
0096 
0097   /**
0098    * Output the setup information for the particle database
0099    * @param os The stream to output the information to
0100    * @param header Whether or not to output the information for MySQL
0101    */
0102   virtual void dataBaseOutput(ofstream & os,bool header) const;
0103 
0104 public:
0105   
0106   /** @name Functions used by the persistent I/O system. */
0107   //@{
0108   /**
0109    * Function used to write out object persistently.
0110    * @param os the persistent output stream written to.
0111    */
0112   void persistentOutput(PersistentOStream & os) const;
0113 
0114   /**
0115    * Function used to read in object persistently.
0116    * @param is the persistent input stream read from.
0117    * @param version the version number of the object when written.
0118    */
0119   void persistentInput(PersistentIStream & is, int version);
0120   //@}
0121   
0122   /**
0123    * Standard Init function used to initialize the interfaces.
0124    */
0125   static void Init();
0126 
0127 protected:
0128 
0129   /** @name Clone Methods. */
0130   //@{
0131   /**
0132    * Make a simple clone of this object.
0133    * @return a pointer to the new object.
0134    */
0135   virtual IBPtr clone() const {return new_ptr(*this);}
0136 
0137   /** Make a clone of this object, possibly modifying the cloned object
0138    * to make it sane.
0139    * @return a pointer to the new object.
0140    */
0141   virtual IBPtr fullclone() const {return new_ptr(*this);}
0142   //@}
0143 
0144 protected:
0145 
0146   /** @name Standard Interfaced functions. */
0147   //@{
0148   /**
0149    * Initialize this object after the setup phase before saving and
0150    * EventGenerator to disk.
0151    * @throws InitException if object could not be initialized properly.
0152    */
0153   virtual void doinit();
0154 
0155   /**
0156    * Initialize this object to the begining of the run phase.
0157    */
0158   virtual void doinitrun();
0159   //@}
0160 
0161 private:
0162 
0163   /**
0164    * Private and non-existent assignment operator.
0165    */
0166   VectorMesonVectorPScalarDecayer & operator=(const VectorMesonVectorPScalarDecayer &) = delete;
0167 
0168 public:
0169 
0170   /**
0171    *   Set the parameters for a decay mode
0172    */
0173   string setUpDecayMode(string arg);
0174 
0175 private:
0176 
0177   /**
0178    * coupling for a decay
0179    */
0180   vector<InvEnergy> coupling_;
0181 
0182   /**
0183    * the PDG codes for the incoming particle
0184    */
0185   vector<long> incoming_;
0186 
0187   /**
0188    * the PDG codes for the outgoing particles (vector first)
0189    */
0190   vector<pair<long,long> > outgoing_;
0191 
0192   /**
0193    * maximum weight for a decay
0194    */
0195   vector<double> maxweight_;
0196 
0197   /**
0198    *  Spin density matrix
0199    */
0200   mutable RhoDMatrix rho_;
0201 
0202   /**
0203    *  Polarization vectors
0204    */
0205   mutable vector<Helicity::LorentzPolarizationVector> vectors_[2];
0206 
0207 };
0208 
0209 }
0210 
0211 
0212 #endif /* HERWIG_VectorMesonVectorPScalarDecayer_H */