Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef Herwig_MEff2rf_H
0003 #define Herwig_MEff2rf_H
0004 //
0005 // This is the declaration of the MEff2rf class.
0006 //
0007 
0008 #include "GeneralHardME.h"
0009 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
0010 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
0011 #include "ThePEG/Helicity/WaveFunction/RSSpinorWaveFunction.h"
0012 #include "ThePEG/Helicity/WaveFunction/RSSpinorBarWaveFunction.h"
0013 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
0014 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
0015 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
0016 #include "ThePEG/Helicity/Vertex/AbstractRFSVertex.h"
0017 #include "ThePEG/Helicity/Vertex/AbstractRFVVertex.h"
0018 
0019 namespace Herwig {
0020 
0021 using namespace ThePEG;
0022 using Helicity::SpinorWaveFunction;
0023 using Helicity::SpinorBarWaveFunction;
0024 using Helicity::RSSpinorWaveFunction;
0025 using Helicity::RSSpinorBarWaveFunction;
0026 
0027 /**
0028  * This is the implementation of the \f$ 2\to 2\f$ matrix element for
0029  * a fermion-fermion to fermion RS fermion process. It inherits from 
0030  * GeneralHardME and implements the appropriate virtual functions.
0031  *
0032  * @see GeneralHardME
0033  */
0034 class MEff2rf: public GeneralHardME {
0035 
0036 public:
0037   
0038   /** Vector of SpinorWaveFunctions. */
0039   typedef vector<SpinorWaveFunction> SpinorVector;
0040 
0041   /** Vector of SpinorBarWaveFunctions. */
0042   typedef vector<SpinorBarWaveFunction> SpinorBarVector;
0043   
0044   /** Vector of RSSpinorWaveFunctions. */
0045   typedef vector<RSSpinorWaveFunction> RSSpinorVector;
0046 
0047   /** Vector of RSSpinorBarWaveFunctions. */
0048   typedef vector<RSSpinorBarWaveFunction> RSSpinorBarVector;
0049 
0050 public:
0051 
0052   /** @name Virtual functions required by the MEBase class. */
0053   //@{
0054   /**
0055    * The matrix element for the kinematical configuration
0056    * previously provided by the last call to setKinematics(), suitably
0057    * scaled by sHat() to give a dimension-less number.
0058    * @return the matrix element scaled with sHat() to give a
0059    * dimensionless number.
0060    */
0061   virtual double me2() const;
0062   //@}
0063 
0064 private:
0065   
0066   /** @name Functions to compute the ProductionMatrixElement. */
0067   //@{
0068   /**
0069    * Compute the matrix element for \f$\Psi\bar{\Psi}\to\Psi\bar{\Psi}\f$
0070    * @param me2 colour averaged, spin summed ME
0071    * @param first Whether or not first call to decide if colour decomposition etc
0072    * should be calculated
0073    * @return ProductionMatrixElement containing results of 
0074    * helicity calculations
0075    */
0076   ProductionMatrixElement
0077   ffb2rfbHeME(double & me2, bool first) const;
0078   
0079   /**
0080    * Compute the matrix element for \f$\Psi\bar{\Psi}\to\Psi\bar{\Psi}\f$
0081    * @param me2 colour averaged, spin summed ME
0082    * @param first Whether or not first call to decide if colour decomposition etc
0083    * should be calculated
0084    * @return ProductionMatrixElement containing results of 
0085    * helicity calculations
0086    */
0087   ProductionMatrixElement
0088   ffb2rbfHeME(double & me2, bool first) const;
0089 
0090   /**
0091    * Compute the matrix element for \f$\Psi\Psi\to\Psi\Psi\f$
0092    * @param first Whether or not first call to decide if colour decomposition etc
0093    * should be calculated
0094    * @return ProductionMatrixElement containing results of 
0095    * helicity calculations
0096    */
0097   ProductionMatrixElement ff2rfHeME(double & me2, bool first) const;
0098   
0099   /**
0100    * Compute the matrix element for 
0101    * \f$\bar{\Psi}\bar{\Psi}\to\bar{\Psi}\bar{\Psi}\f$
0102    * @param me2 colour averaged, spin summed ME
0103    * @param first Whether or not first call to decide if colour decomposition etc
0104    * should be calculated
0105    * @return ProductionMatrixElement containing results of 
0106    * helicity calculations
0107    */
0108   ProductionMatrixElement fbfb2rbfbHeME(double & me2, bool first) const;
0109 
0110   /**
0111    * Compute the matrix element for \f$\Psi\bar{\Psi}\to\lambda\lambda\f$
0112    * @param me2 colour averaged, spin summed ME
0113    * @param first Whether or not first call to decide if colour decomposition etc
0114    * should be calculated
0115    * @return ProductionMatrixElement containing results of 
0116    * helicity calculations
0117    */
0118   ProductionMatrixElement 
0119   ffb2mfmfHeME(double & me2, bool first) const;
0120   //@}
0121 
0122   /**
0123    * Construct the vertex information for the spin correlations
0124    * @param sub Pointer to the relevent SubProcess
0125    */
0126   virtual void constructVertex(tSubProPtr sub);
0127 
0128 public:
0129 
0130   /** @name Functions used by the persistent I/O system. */
0131   //@{
0132   /**
0133    * Function used to write out object persistently.
0134    * @param os the persistent output stream written to.
0135    */
0136   void persistentOutput(PersistentOStream & os) const;
0137 
0138   /**
0139    * Function used to read in object persistently.
0140    * @param is the persistent input stream read from.
0141    * @param version the version number of the object when written.
0142    */
0143   void persistentInput(PersistentIStream & is, int version);
0144   //@}
0145 
0146   /**
0147    * The standard Init function used to initialize the interfaces.
0148    * Called exactly once for each class by the class description system
0149    * before the main function starts or
0150    * when this class is dynamically loaded.
0151    */
0152   static void Init();
0153 
0154 protected:
0155 
0156   /** @name Clone Methods. */
0157   //@{
0158   /**
0159    * Make a simple clone of this object.
0160    * @return a pointer to the new object.
0161    */
0162   virtual IBPtr clone() const;
0163 
0164   /** Make a clone of this object, possibly modifying the cloned object
0165    * to make it sane.
0166    * @return a pointer to the new object.
0167    */
0168   virtual IBPtr fullclone() const;
0169   //@}
0170 
0171 protected:
0172 
0173   /** @name Standard Interfaced functions. */
0174   //@{
0175   /**
0176    * Initialize this object after the setup phase before saving an
0177    * EventGenerator to disk.
0178    * @throws InitException if object could not be initialized properly.
0179    */
0180   virtual void doinit();
0181   //@}
0182 
0183 private:
0184 
0185   /**
0186    * The assignment operator is private and must never be called.
0187    * In fact, it should not even be implemented.
0188    */
0189   MEff2rf & operator=(const MEff2rf &) = delete;
0190 
0191 private:
0192   
0193   /**
0194    * Store the vector of FFSVertex pairs
0195    */
0196   vector<pair<AbstractFFSVertexPtr, AbstractRFSVertexPtr> > scalar_;
0197 
0198   /**
0199    * Store the vector of FFVVertex pairs
0200    */
0201   vector<pair<AbstractFFVVertexPtr, AbstractRFVVertexPtr> > vector_;
0202 
0203   /**
0204    *  Spinors
0205    */
0206   mutable std::array<SpinorVector,3> spin_;
0207 
0208   /**
0209    *  Barred spinors
0210    */
0211   mutable std::array<SpinorBarVector,3> sbar_;
0212 
0213   mutable RSSpinorVector rs_;
0214   mutable RSSpinorBarVector rsbar_;
0215 };
0216 
0217 }
0218 
0219 #endif /* Herwig_MEff2rf_H */