Back to home page

EIC code displayed by LXR

 
 

    


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

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