Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef Herwig_MEfv2rs_H
0003 #define Herwig_MEfv2rs_H
0004 //
0005 // This is the declaration of the MEfv2rs 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 "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0014 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
0015 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
0016 #include "ThePEG/Helicity/Vertex/AbstractRFVVertex.h"
0017 #include "ThePEG/Helicity/Vertex/AbstractRFSVertex.h"
0018 #include "ThePEG/Helicity/Vertex/AbstractRFVSVertex.h"
0019 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
0020 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
0021 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
0022 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
0023 
0024 namespace Herwig {
0025 
0026 using namespace ThePEG;
0027 
0028 /**
0029  * This class is designed to implement the matrix element for 
0030  * fermion-vector to RS fermion scalar. It inherits from GeneralHardME 
0031  * and implements the required virtual functions.
0032  *
0033  * @see GeneralHardME
0034  */
0035 class MEfv2rs: public GeneralHardME {
0036 
0037   /** Vector of SpinorWaveFunctions. */
0038   typedef vector<SpinorWaveFunction> SpinorVector;
0039 
0040   /** Vector of SpinorBarWaveFunctions. */
0041   typedef vector<SpinorBarWaveFunction> SpinorBarVector;
0042 
0043   /** Vector of RSSpinorWaveFunctions. */
0044   typedef vector<RSSpinorWaveFunction> RSSpinorVector;
0045 
0046   /** Vector of RSSpinorBarWaveFunctions. */
0047   typedef vector<RSSpinorBarWaveFunction> RSSpinorBarVector;
0048 
0049   /** Vector of VectorWaveFunctions. */
0050   typedef vector<VectorWaveFunction> VecWFVector;
0051 
0052 public:
0053 
0054   /** @name Virtual functions required by the MEBase class. */
0055   //@{
0056   /**
0057    * The matrix element for the kinematical configuration
0058    * previously provided by the last call to setKinematics(), suitably
0059    * scaled by sHat() to give a dimension-less number.
0060    * @return the matrix element scaled with sHat() to give a
0061    * dimensionless number.
0062    */
0063   virtual double me2() const;
0064   //@}
0065 
0066   /**
0067    * Construct the vertex information for the spin correlations
0068    * @param subp Pointer to the relevent SubProcess
0069    */
0070   virtual void constructVertex(tSubProPtr subp);
0071 
0072 private:
0073 
0074   /** @name Functions to calculate production matrix elements and me2. */
0075   //@{
0076   /**
0077    * Calculate me2 and the production matrix element for the normal mode.
0078    * @param spIn Vector of SpinorWaveFunction for the incoming fermion
0079    * @param vecIn Vector of VectorWaveFunction for incoming boson
0080    * @param spbOut Vector of SpinorBarWaveFunction for outgoing fermion
0081    * @param scaOut ScalarWaveFunction for outgoing scalar.
0082    * @param first Whether or not first call to decide if colour decomposition etc
0083    * should be calculated
0084    * @param full_me The value of me2 calculation
0085    */
0086   ProductionMatrixElement fv2rbsHeME(const SpinorVector & spIn, 
0087                      const VecWFVector & vecIn,
0088                      const RSSpinorBarVector & spbOut,
0089                      const ScalarWaveFunction & scaOut,
0090                      double & full_me, bool first) const;
0091   
0092   /**
0093    * Calculate me2 and the production matrix element for the cc mode.
0094    * @param spbIn Vector of SpinorBarWaveFunction for the incoming fermion
0095    * @param vecIn Vector of VectorWaveFunction for incoming boson
0096    * @param spOut Vector of SpinorWaveFunction for outgoing fermion
0097    * @param scaOut ScalarWaveFunction for outgoing scalar.
0098    * @param first Whether or not first call to decide if colour decomposition etc
0099    * should be calculated
0100    * @param full_me The value of me2 calculation
0101    */
0102   ProductionMatrixElement fbv2rsHeME(const SpinorBarVector & spbIn, 
0103                      const VecWFVector & vecIn,
0104                      const RSSpinorVector & spOut,
0105                      const ScalarWaveFunction & scaOut,
0106                      double & full_me, bool first) const;
0107   //@}
0108 
0109 
0110 public:
0111 
0112   /** @name Functions used by the persistent I/O system. */
0113   //@{
0114   /**
0115    * Function used to write out object persistently.
0116    * @param os the persistent output stream written to.
0117    */
0118   void persistentOutput(PersistentOStream & os) const;
0119 
0120   /**
0121    * Function used to read in object persistently.
0122    * @param is the persistent input stream read from.
0123    * @param version the version number of the object when written.
0124    */
0125   void persistentInput(PersistentIStream & is, int version);
0126   //@}
0127 
0128   /**
0129    * The standard Init function used to initialize the interfaces.
0130    * Called exactly once for each class by the class description system
0131    * before the main function starts or
0132    * when this class is dynamically loaded.
0133    */
0134   static void Init();
0135 
0136 protected:
0137 
0138   /** @name Clone Methods. */
0139   //@{
0140   /**
0141    * Make a simple clone of this object.
0142    * @return a pointer to the new object.
0143    */
0144   virtual IBPtr clone() const;
0145 
0146   /** Make a clone of this object, possibly modifying the cloned object
0147    * to make it sane.
0148    * @return a pointer to the new object.
0149    */
0150   virtual IBPtr fullclone() const;
0151   //@}
0152 
0153 
0154 protected:
0155 
0156   /** @name Standard Interfaced functions. */
0157   //@{
0158   /**
0159    * Initialize this object after the setup phase before saving an
0160    * EventGenerator to disk.
0161    * @throws InitException if object could not be initialized properly.
0162    */
0163   virtual void doinit();
0164   //@}
0165 
0166 private:
0167 
0168   /**
0169    * The assignment operator is private and must never be called.
0170    * In fact, it should not even be implemented.
0171    */
0172   MEfv2rs & operator=(const MEfv2rs &) = delete;
0173 
0174 private:
0175 
0176   /**
0177    * Store a pair of  FFSVertex and VSSVertex pointers  
0178    */
0179   vector<pair<AbstractRFSVertexPtr, AbstractVSSVertexPtr> > scalar_;
0180 
0181   /**
0182    * Store a pair of  FFSVertex and FFVVertex pointers  
0183    */
0184   vector<pair<AbstractFFVVertexPtr, AbstractRFSVertexPtr> > fermion1_;
0185 
0186   /**
0187    * Store a pair of  FFSVertex and FFVVertex pointers  
0188    */
0189   vector<pair<AbstractFFSVertexPtr, AbstractRFVVertexPtr> > fermion2_;
0190 
0191   /**
0192    * Store a pair of  VVSVertex and FFVVertex pointers  
0193    */
0194   vector<pair<AbstractRFVVertexPtr,AbstractVVSVertexPtr> > vector_;
0195 
0196   /**
0197    *  Store the 4-point vertices
0198    */
0199   vector<AbstractRFVSVertexPtr> four_;
0200 };
0201 
0202 }
0203 
0204 #endif /* Herwig_MEfv2rs_H */