Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef Herwig_DecayMatrixElement_H
0003 #define Herwig_DecayMatrixElement_H
0004 //
0005 // This is the declaration of the DecayMatrixElement class.
0006 //
0007 
0008 #include "ThePEG/Pointer/ReferenceCounted.h"
0009 #include <ThePEG/Config/ThePEG.h>
0010 #include <ThePEG/Helicity/HelicityDefinitions.h>
0011 #include <ThePEG/EventRecord/RhoDMatrix.h>
0012 #include "DecayMatrixElement.fh"
0013 
0014 namespace Herwig {
0015 
0016 using namespace ThePEG;
0017 
0018 /**
0019  * Here is the documentation of the DecayMatrixElement class.
0020  */
0021 class DecayMatrixElement: public Pointer::ReferenceCounted {
0022 
0023 public:
0024 
0025   /** @name Standard constructors and destructors. */
0026   //@{
0027   /**
0028    * The default constructor.
0029    */
0030   DecayMatrixElement(unsigned int ntemp=999, PDT::Spin spin = PDT::SpinUndefined) 
0031     : nOut_(ntemp), inSpin_(spin) {}
0032 
0033   /**
0034    * The destructor.
0035    */
0036   virtual ~DecayMatrixElement();
0037   //@}
0038 
0039 public: 
0040       
0041   /**
0042    * Access to the spins of the particles
0043    */
0044   //@{
0045   /** 
0046    * Get the spin of the incoming particle.
0047    */
0048   PDT::Spin inspin() const {return inSpin_;}
0049 
0050   /** 
0051    * Get the spins of the outgoing particles.
0052    */
0053   const vector<PDT::Spin> & outspin() const {return outSpin_;}
0054   //@}
0055 
0056   /**
0057    *  Get the number of outgoing particles
0058    */
0059   unsigned int nOut() const {return nOut_;}
0060 
0061   /**
0062    * Spin Density matrices
0063    */
0064   //@{
0065   /** 
0066    * Calculate the decay matrix for this decay.
0067    * @param rhoout The \f$D\f$ matrix for this decay.
0068    */
0069   virtual RhoDMatrix calculateDMatrix(const vector<RhoDMatrix> & rhoout) const = 0;
0070 
0071   /** 
0072    * Calculate the \f$\rho\f$ matrix for a given outgoing particle.
0073    * @param ipart The outgoing particle the \f$\rho\f$ matrix is needed for
0074    * @param rhoin The \f$\rho\f$ matrix for the decaying particle.
0075    * @param rhoout he \f$D\f$ matrices for the other decay products.
0076    */
0077   virtual RhoDMatrix calculateRhoMatrix(int ipart,const RhoDMatrix & rhoin,
0078                     const vector<RhoDMatrix> & rhoout) const = 0;
0079 
0080   /** 
0081    * Contract the matrix element with the \f$\rho\f$ matrix of the 
0082    * incoming particle. The spins of the decay products are summed over.
0083    * @param rhoin The \f$\rho\f$ matrix for the decaying particle.
0084    */
0085   virtual Complex contract(const RhoDMatrix & rhoin) const = 0;
0086 
0087   // /** 
0088   //  * Contract the matrix element with the \f$\rho\f$ matrix of the 
0089   //  * incoming particle. The spins of the decay products are summed over.
0090   //  * @param con The conjugate matrix elemetn for the contraction
0091   //  * @param rhoin The \f$\rho\f$ matrix for the decaying particle.
0092   //  */
0093   // Complex contract(const DecayMatrixElement & con, 
0094   //           const RhoDMatrix & rhoin);
0095   //@}
0096 
0097 public:
0098   
0099   /** 
0100    * Access to the individual helicity components. 
0101    */
0102   //@{
0103   /** 
0104    * Get the helicity components for a two body decay
0105    * @param inhel The helicity of the decaying particle.
0106    * @param outhel1 The helicity of the first  decay product.
0107    * @param outhel2 The helicity of the second decay product.
0108    */
0109   virtual Complex   operator () (unsigned int inhel,unsigned int outhel1,
0110                  unsigned int outhel2) const = 0;
0111   
0112   /** 
0113    * Set the helicity components for a two body decay
0114    * @param inhel The helicity of the decaying particle.
0115    * @param outhel1 The helicity of the first  decay product.
0116    * @param outhel2 The helicity of the second decay product.
0117    */
0118   virtual Complex & operator () (unsigned int inhel,unsigned int outhel1,
0119                  unsigned int outhel2) = 0;
0120   
0121   /** 
0122    * Get the helicity components for a three body decay
0123    * @param inhel The helicity of the decaying particle.
0124    * @param outhel1 The helicity of the first  decay product.
0125    * @param outhel2 The helicity of the second decay product.
0126    * @param outhel3 The helicity of the third  decay product.
0127    */
0128   virtual Complex   operator () (unsigned int inhel,unsigned int outhel1,
0129                  unsigned int outhel2,unsigned int outhel3) const = 0;
0130   
0131   /** 
0132    * Set the helicity components for a three body decay
0133    * @param inhel The helicity of the decaying particle.
0134    * @param outhel1 The helicity of the first  decay product.
0135    * @param outhel2 The helicity of the second decay product.
0136    * @param outhel3 The helicity of the third  decay product.
0137    */
0138   virtual Complex & operator () (unsigned int inhel,unsigned int outhel1,
0139                  unsigned int outhel2,unsigned int outhel3) = 0;
0140   
0141   /** 
0142    * Get the helicity components for a four body decay
0143    * @param inhel The helicity of the decaying particle.
0144    * @param outhel1 The helicity of the first  decay product.
0145    * @param outhel2 The helicity of the second decay product.
0146    * @param outhel3 The helicity of the third  decay product.
0147    * @param outhel4 The helicity of the fourth decay product.
0148    */
0149   virtual Complex   operator () (unsigned int inhel,unsigned int outhel1,
0150                  unsigned int outhel2,unsigned int outhel3,
0151                  unsigned int outhel4) const = 0;
0152   
0153   /** 
0154    * Set the helicity components for a four body decay
0155    * @param inhel The helicity of the decaying particle.
0156    * @param outhel1 The helicity of the first  decay product.
0157    * @param outhel2 The helicity of the second decay product.
0158    * @param outhel3 The helicity of the third  decay product.
0159    * @param outhel4 The helicity of the fourth decay product.
0160    */
0161   virtual Complex & operator () (unsigned int inhel,unsigned int outhel1,
0162                  unsigned int outhel2,unsigned int outhel3,
0163                  unsigned int outhel4) = 0;
0164   
0165   /** 
0166    * Get the helicity components for a five body decay
0167    * @param inhel The helicity of the decaying particle.
0168    * @param outhel1 The helicity of the first  decay product.
0169    * @param outhel2 The helicity of the second decay product.
0170    * @param outhel3 The helicity of the third  decay product.
0171    * @param outhel4 The helicity of the fourth decay product.
0172    * @param outhel5 The helicity of the fifth  decay product.
0173    */
0174   virtual Complex   operator () (unsigned int inhel,unsigned int outhel1,
0175                  unsigned int outhel2,unsigned int outhel3,
0176                  unsigned int outhel4,unsigned int outhel5) const = 0;
0177   
0178   /** 
0179    * Set the helicity components for a five body decay
0180    * @param inhel The helicity of the decaying particle.
0181    * @param outhel1 The helicity of the first  decay product.
0182    * @param outhel2 The helicity of the second decay product.
0183    * @param outhel3 The helicity of the third  decay product.
0184    * @param outhel4 The helicity of the fourth decay product.
0185    * @param outhel5 The helicity of the fifth  decay product.
0186    */
0187   virtual Complex & operator () (unsigned int inhel,unsigned int outhel1,
0188                  unsigned int outhel2,unsigned int outhel3,
0189                  unsigned int outhel4,unsigned int outhel5) = 0;
0190   
0191   /** 
0192    * Get the helicity components for a six body decay
0193    * @param inhel The helicity of the decaying particle.
0194    * @param outhel1 The helicity of the first  decay product.
0195    * @param outhel2 The helicity of the second decay product.
0196    * @param outhel3 The helicity of the third  decay product.
0197    * @param outhel4 The helicity of the fourth decay product.
0198    * @param outhel5 The helicity of the fifth  decay product.
0199    * @param outhel6 The helicity of the sixth  decay product.
0200    */
0201   virtual Complex   operator () (unsigned int inhel,unsigned int outhel1,
0202                  unsigned int outhel2,unsigned int outhel3,
0203                  unsigned int outhel4,unsigned int outhel5,
0204                  unsigned int outhel6) const = 0;
0205   
0206   /** 
0207    * Set the helicity components for a six body decay
0208    * @param inhel The helicity of the decaying particle.
0209    * @param outhel1 The helicity of the first  decay product.
0210    * @param outhel2 The helicity of the second decay product.
0211    * @param outhel3 The helicity of the third  decay product.
0212    * @param outhel4 The helicity of the fourth decay product.
0213    * @param outhel5 The helicity of the fifth  decay product.
0214    * @param outhel6 The helicity of the sixth  decay product.
0215    */
0216   virtual Complex & operator () (unsigned int inhel,unsigned int outhel1,
0217                  unsigned int outhel2,unsigned int outhel3,
0218                  unsigned int outhel4,unsigned int outhel5,
0219                  unsigned int outhel6) = 0;
0220   
0221   /**
0222    * Get the helicity components for an \f$n\f$-body decay.
0223    * @param in The helicities of the external particles.
0224    */
0225   virtual Complex   operator () (const vector<unsigned int> & in) const = 0;
0226   
0227   /**
0228    * Set the helicity components for an \f$n\f$-body decay.
0229    * @param in The helicities of the external particles.
0230    */
0231   virtual Complex & operator () (const vector<unsigned int> & in) = 0;
0232   //@}
0233   
0234   /**
0235    *  Member to zero all the elements for the matrix element
0236    */
0237   virtual void zero() = 0;
0238 
0239 private:
0240 
0241   /**
0242    * The assignment operator is private and must never be called.
0243    * In fact, it should not even be implemented.
0244    */
0245   DecayMatrixElement & operator=(const DecayMatrixElement &) = delete;
0246 
0247 protected:
0248 
0249   /** 
0250    * Get the spins of the outgoing particles.
0251    */
0252   vector<PDT::Spin> & outspin() {return outSpin_;}
0253   
0254 private:
0255   
0256   /**
0257    * Number of outgoing particles.
0258    */
0259   unsigned int nOut_;
0260 
0261   /**
0262    * Spin of the incoming particle as 2s+1.
0263    */
0264   PDT::Spin inSpin_;
0265 
0266   /**
0267    * Spins of the outgoing particles.
0268    */
0269   vector<PDT::Spin> outSpin_;
0270 
0271 };
0272 
0273 }
0274 
0275 #endif /* Herwig_DecayMatrixElement_H */