Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // ShowerVertex.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_ShowerVertex_H
0010 #define HERWIG_ShowerVertex_H
0011 //
0012 // This is the declaration of the ShowerVertex class.
0013 //
0014 
0015 #include "ThePEG/EventRecord/HelicityVertex.h"
0016 #include "Herwig/Decay/DecayMatrixElement.h"
0017 #include "ShowerVertex.fh"
0018 
0019 namespace Herwig {
0020 
0021 using namespace ThePEG;
0022 
0023 /** \ingroup Helicity
0024  *  \author Peter Richardson
0025  *
0026  * The ShowerVertex class is designed to implement the vertex for a branching
0027  * in the shower for use with the spin correlation alogorithm.
0028  *  It inherits from HelicityVertex class of ThePEG and implements 
0029  *  the methods to calculate the \f$\rho\f$ and \f$D\f$ matrices.
0030  *
0031  *  It uses the DecayMatrixElement class to store the matrix element and
0032  *  it is this class which performs the calculations of the matrices.
0033  *
0034  *  @see HelicityVertex
0035  *  @see DecayMatrixElement
0036  *
0037  * @see \ref ShowerVertexInterfaces "The interfaces"
0038  * defined for ShowerVertex.
0039  */
0040 class ShowerVertex: public HelicityVertex {
0041 
0042 public:
0043 
0044   /**
0045    * Default constructor
0046    */
0047   ShowerVertex() : convertIn_(false), convertOut_(2,false), outMatrix_(2,RhoDMatrix())
0048   {}
0049 
0050 public:
0051 
0052   /**
0053    *  Access to the matrix element
0054    */
0055   //@{
0056   /**
0057    * Get the matrix element
0058    */
0059   inline const DecayMEPtr ME() const {
0060     return matrixElement_;
0061   }
0062 
0063   /**
0064    * Set the matrix element
0065    */
0066   inline void ME(DecayMEPtr in) const {
0067     matrixElement_ = in;
0068   }
0069   //@}
0070 
0071   /**
0072    *  Set the change of basis for the incoming particle
0073    */
0074   inline void incomingBasisTransform(RhoDMatrix conv) {
0075     convertIn_ = true;
0076     inMatrix_ = conv;
0077   }
0078 
0079 public:
0080   
0081   /**
0082    * Method to calculate the \f$\rho\f$ matrix for one of the decay products
0083    * @param iprod The product we are calculating the \f$\rho\f$ matrix for.
0084    */
0085   virtual RhoDMatrix getRhoMatrix(int iprod, bool ) const;
0086 
0087   /**
0088    * Method to calculate the \f$D\f$ matrix for the decaying particle. It this
0089    * case the argument is a dummy.
0090    */
0091   virtual RhoDMatrix getDMatrix(int) const;
0092 
0093   /**
0094    *  Get the transformed rho matrix
0095    */ 
0096   RhoDMatrix mapIncoming(RhoDMatrix rho) const;
0097 
0098 public:
0099 
0100   /**
0101    * The standard Init function used to initialize the interfaces.
0102    * Called exactly once for each class by the class description system
0103    * before the main function starts or
0104    * when this class is dynamically loaded.
0105    */
0106   static void Init();
0107 
0108 private:
0109 
0110   /**
0111    * The assignment operator is private and must never be called.
0112    * In fact, it should not even be implemented.
0113    */
0114   ShowerVertex & operator=(const ShowerVertex &) = delete;
0115 
0116 private:
0117   
0118   /**
0119    * Storage of the decay matrix element.
0120    */
0121   mutable DecayMEPtr matrixElement_;
0122 
0123   /**
0124    *  Whether or not the incoming spin density matrices need to be converted
0125    */
0126   bool convertIn_;
0127 
0128   /**
0129    *  Whether or not the outgoing spin density matrices need to be converted
0130    */
0131   vector<bool> convertOut_;
0132 
0133   /**
0134    * Storage of conversion for incoming particle
0135    */
0136   RhoDMatrix inMatrix_;
0137   
0138 
0139   /**
0140    *  Storage of conversion for outgoing particles
0141    */
0142   vector<RhoDMatrix> outMatrix_;
0143 
0144 };
0145 }
0146 
0147 #endif /* HERWIG_ShowerVertex_H */