Back to home page

EIC code displayed by LXR

 
 

    


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

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