Back to home page

EIC code displayed by LXR

 
 

    


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

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