Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_MEPP2SingleTop_H
0003 #define HERWIG_MEPP2SingleTop_H
0004 //
0005 // This is the declaration of the MEPP2SingleTop class.
0006 //
0007 
0008 #include "Herwig/MatrixElement/HwMEBase.h"
0009 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
0010 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
0011 
0012 namespace Herwig {
0013 
0014 using namespace ThePEG;
0015 
0016 /**
0017  * The MEPP2SingleTop class implements the matrix element for the
0018  * production of a single top quark.
0019  *
0020  * @see \ref MEPP2SingleTopInterfaces "The interfaces"
0021  * defined for MEPP2SingleTop.
0022  */
0023 class MEPP2SingleTop: public HwMEBase {
0024 
0025 public:
0026 
0027   /**
0028    * The default constructor.
0029    */
0030   MEPP2SingleTop();
0031 
0032   /** @name Virtual functions required by the MEBase class. */
0033   //@{
0034   /**
0035    * Return the order in \f$\alpha_S\f$ in which this matrix
0036    * element is given.
0037    */
0038   virtual unsigned int orderInAlphaS() const;
0039 
0040   /**
0041    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
0042    * element is given.
0043    */
0044   virtual unsigned int orderInAlphaEW() const;
0045 
0046   /**
0047    * The matrix element for the kinematical configuration
0048    * previously provided by the last call to setKinematics(), suitably
0049    * scaled by sHat() to give a dimension-less number.
0050    * @return the matrix element scaled with sHat() to give a
0051    * dimensionless number.
0052    */
0053   virtual double me2() const;
0054 
0055   /**
0056    * Return the scale associated with the last set phase space point.
0057    */
0058   virtual Energy2 scale() const;
0059 
0060   /**
0061    * Add all possible diagrams with the add() function.
0062    */
0063   virtual void getDiagrams() const;
0064 
0065   /**
0066    * Get diagram selector. With the information previously supplied with the
0067    * setKinematics method, a derived class may optionally
0068    * override this method to weight the given diagrams with their
0069    * (although certainly not physical) relative probabilities.
0070    * @param dv the diagrams to be weighted.
0071    * @return a Selector relating the given diagrams to their weights.
0072    */
0073   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
0074 
0075   /**
0076    * Return a Selector with possible colour geometries for the selected
0077    * diagram weighted by their relative probabilities.
0078    * @param diag the diagram chosen.
0079    * @return the possible colour geometries weighted by their
0080    * relative probabilities.
0081    */
0082   virtual Selector<const ColourLines *>
0083   colourGeometries(tcDiagPtr diag) const;
0084 
0085   /**
0086    *  Construct the vertex of spin correlations.
0087    */
0088   virtual void constructVertex(tSubProPtr);
0089   //@}
0090 
0091 public:
0092 
0093   /** @name Functions used by the persistent I/O system. */
0094   //@{
0095   /**
0096    * Function used to write out object persistently.
0097    * @param os the persistent output stream written to.
0098    */
0099   void persistentOutput(PersistentOStream & os) const;
0100 
0101   /**
0102    * Function used to read in object persistently.
0103    * @param is the persistent input stream read from.
0104    * @param version the version number of the object when written.
0105    */
0106   void persistentInput(PersistentIStream & is, int version);
0107   //@}
0108 
0109   /**
0110    * The standard Init function used to initialize the interfaces.
0111    * Called exactly once for each class by the class description system
0112    * before the main function starts or
0113    * when this class is dynamically loaded.
0114    */
0115   static void Init();
0116 
0117 protected:
0118 
0119   /**
0120    *  Matrix Elements ofr the different processes
0121    */
0122   //@{
0123   /**
0124    * Matrix element for \f$q\bar{q}\to W \to t\bar{f}\f$.
0125    * @param fin  Spinors for incoming quark
0126    * @param ain  Spinors for incoming antiquark
0127    * @param fout Spinors for incoming quark
0128    * @param aout Spinors for incoming antiquark
0129    * @param me  Whether or not to calculate the matrix element for spin correlations
0130    */
0131   double sChannelME(vector<SpinorWaveFunction>    & fin ,
0132             vector<SpinorBarWaveFunction> & ain ,
0133             vector<SpinorBarWaveFunction> & fout,
0134             vector<SpinorWaveFunction>    & aout,
0135             bool me) const;
0136 
0137   /**
0138    * Matrix element for \f$qq\to t q\f$.
0139    * @param f1  Spinors for incoming quark
0140    * @param a1  Spinors for incoming antiquark
0141    * @param f2 Spinors for incoming quark
0142    * @param a2 Spinors for incoming antiquark
0143    * @param me  Whether or not to calculate the matrix element for spin correlations
0144    */
0145   double tChannelME(vector<SpinorWaveFunction>    & f1 ,
0146             vector<SpinorBarWaveFunction> & a1 ,
0147             vector<SpinorWaveFunction> & f2,
0148             vector<SpinorBarWaveFunction>    & a2,
0149             bool me) const;
0150 
0151   /**
0152    * Matrix element for \f$qg\to t W\f$.
0153    * @param fin  Spinors for incoming quark
0154    * @param gin  Polarization vectors for the incoming gluon
0155    * @param fout Spinors for outgoing quark
0156    * @param Wout Polarization vectors for the outgoing W
0157    * @param me  Whether or not to calculate the matrix element for spin correlations
0158    */
0159   double tWME(vector<SpinorWaveFunction> & fin,
0160              vector<VectorWaveFunction> & gin,
0161              vector<SpinorBarWaveFunction> & fout,
0162              vector<VectorWaveFunction> & Wout,
0163              bool me) const;
0164   //@}
0165 
0166 protected:
0167 
0168   /** @name Clone Methods. */
0169   //@{
0170   /**
0171    * Make a simple clone of this object.
0172    * @return a pointer to the new object.
0173    */
0174   virtual IBPtr clone() const;
0175 
0176   /** Make a clone of this object, possibly modifying the cloned object
0177    * to make it sane.
0178    * @return a pointer to the new object.
0179    */
0180   virtual IBPtr fullclone() const;
0181   //@}
0182 
0183 protected:
0184 
0185   /** @name Standard Interfaced functions. */
0186   //@{
0187   /**
0188    * Initialize this object after the setup phase before saving an
0189    * EventGenerator to disk.
0190    * @throws InitException if object could not be initialized properly.
0191    */
0192   virtual void doinit();
0193   //@}
0194 
0195 private:
0196 
0197   /**
0198    * The assignment operator is private and must never be called.
0199    * In fact, it should not even be implemented.
0200    */
0201   MEPP2SingleTop & operator=(const MEPP2SingleTop &) = delete;
0202 
0203 private:
0204 
0205   /**
0206    *  Vertices
0207    */
0208   //@{
0209   /**
0210    *   FFWVertex
0211    */
0212   AbstractFFVVertexPtr FFWvertex_;
0213 
0214   /**
0215    *   FFGVertex
0216    */
0217   AbstractFFVVertexPtr FFGvertex_;
0218   //@}
0219 
0220   /**
0221    *  Which processes to include
0222    */
0223   unsigned int process_;
0224 
0225   /**
0226    *  Allowed flavours of the incoming quarks
0227    */
0228   int maxflavour_;
0229 
0230   /**
0231    *  Treatment of the top quark mass
0232    */
0233   int topOption_;
0234 
0235   /**
0236    *  Treatment of the W mass
0237    */
0238   int wOption_;
0239 
0240   /**
0241    *  The matrix element
0242    */
0243   mutable ProductionMatrixElement me_;
0244 
0245 };
0246 
0247 }
0248 
0249 #endif /* HERWIG_MEPP2SingleTop_H */