Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // VBFNLOAmplitude.h is a part of Herwig - A multi-purpose Monte Carlo event generator
0004 // Copyright (C) 2002-2019 The Herwig Collaboration
0005 //
0006 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
0007 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
0008 //
0009 #ifndef Herwig_VBFNLOAmplitude_H
0010 #define Herwig_VBFNLOAmplitude_H
0011 //
0012 // This is the declaration of the VBFNLOAmplitude class.
0013 //
0014 
0015 #include "Herwig/MatrixElement/Matchbox/Base/MatchboxOLPME.h"
0016 
0017 namespace Herwig {
0018 
0019 using namespace ThePEG;
0020 
0021 /**
0022  * \ingroup Matchbox
0023  * \author Simon Platzer
0024  *
0025  * \brief VBFNLOAmplitude implements an interface to VBFNLO
0026  */
0027 class VBFNLOAmplitude: public MatchboxOLPME {
0028 
0029 public:
0030 
0031   /** @name Standard constructors and destructors. */
0032   //@{
0033   /**
0034    * The default constructor.
0035    */
0036   VBFNLOAmplitude();
0037 
0038   /**
0039    * The destructor.
0040    */
0041   virtual ~VBFNLOAmplitude();
0042   //@}
0043 
0044 public:
0045 
0046   /**
0047    * Return true, if this amplitude already includes averaging over
0048    * incoming parton's quantum numbers.
0049    */
0050   virtual bool hasInitialAverage() const { return false; }
0051 
0052   /**
0053    * Return true, if this amplitude already includes symmetry factors
0054    * for identical outgoing particles.
0055    */
0056   virtual bool hasFinalStateSymmetry() const { return false; }
0057 
0058   /**
0059    * Set options
0060    */
0061   virtual bool isCS() const { return false; }
0062   virtual bool isExpanded() const { return true; }
0063   virtual bool isBDK() const { return false; }
0064   virtual bool isDR() const { return false; }
0065   virtual bool isDRbar() const { return false; }
0066 
0067   /**
0068    * Request an additional random number if we are doing random helicity
0069    * summation.
0070    */
0071   virtual int nDimAdditional() const { return theRanHelSum?1:0; }
0072 
0073   /**
0074    * Set an OLP parameter (assuming real parameters only)
0075    */
0076   void setOLPParameter(const string& name, double value) const;
0077 
0078   /**
0079    * Start the one loop provider, if appropriate, giving order and
0080    * contract files
0081    */
0082   virtual void signOLP(const string&, const string&);
0083 
0084   /**
0085    * Start the one loop provider, if appropriate
0086    */
0087   virtual void startOLP(const string&, int& status);
0088 
0089   /**
0090    * Start the one loop provider, if appropriate. This default
0091    * implementation writes an BLHA 2.0 order file and starts the OLP
0092    */
0093   virtual bool startOLP(const map<pair<Process,int>,int>& procs);
0094 
0095   /**
0096    * Call OLP_EvalSubProcess and fill in the results
0097    */
0098   virtual void evalSubProcess() const;
0099 
0100   /**
0101    * Fill in results for the given colour correlator
0102    */
0103   virtual void evalColourCorrelator(pair<int,int> ij) const;
0104 
0105   /**
0106    * Return the large-N matrix element squared.
0107    */
0108   virtual double largeNME2(Ptr<ColourBasis>::tptr) const;
0109 
0110   /**
0111    * Call OLP_EvalSubProcess in the large-N limit and fill in the results
0112    */
0113   virtual void evalLargeNSubProcess(Ptr<ColourBasis>::tptr) const;
0114 
0115   /**
0116    * Return the large-N colour correlated matrix element.
0117    */
0118   virtual double largeNColourCorrelatedME2(pair<int,int>,
0119                        Ptr<ColourBasis>::tptr) const;
0120 
0121   /**
0122    * Fill in results for the given large-N colour correlator
0123    */
0124   virtual void evalLargeNColourCorrelator(pair<int,int> ij,
0125                                           Ptr<ColourBasis>::tptr) const;
0126 
0127   /**
0128    * Return a positive helicity polarization vector for a gluon of
0129    * momentum p (with reference vector n) to be used when evaluating
0130    * spin correlations.
0131    */
0132   virtual LorentzVector<Complex> plusPolarization(const Lorentz5Momentum& p,
0133                           const Lorentz5Momentum& n,
0134                           int id = -1) const;
0135 
0136   /**
0137    * Fill in results for the given colour/spin correlator
0138    */
0139   virtual void evalSpinColourCorrelator(pair<int,int> ij) const;
0140 
0141 public:
0142 
0143   /** @name Functions used by the persistent I/O system. */
0144   //@{
0145   /**
0146    * Function used to write out object persistently.
0147    * @param os the persistent output stream written to.
0148    */
0149   void persistentOutput(PersistentOStream & os) const;
0150 
0151   /**
0152    * Function used to read in object persistently.
0153    * @param is the persistent input stream read from.
0154    * @param version the version number of the object when written.
0155    */
0156   void persistentInput(PersistentIStream & is, int version);
0157   //@}
0158 
0159   /**
0160    * The standard Init function used to initialize the interfaces.
0161    * Called exactly once for each class by the class description system
0162    * before the main function starts or
0163    * when this class is dynamically loaded.
0164    */
0165   static void Init();
0166 
0167 protected:
0168 
0169   /** @name Standard Interfaced functions. */
0170   //@{
0171 
0172   /**
0173    * Initialize this object after the setup phase before saving an
0174    * EventGenerator to disk.
0175    * @throws InitException if object could not be initialized properly.
0176    */
0177   virtual void doinit();
0178 
0179   /**
0180    * Initialize this object. Called in the run phase just before
0181    * a run begins.
0182    */
0183   virtual void doinitrun();
0184   //@}
0185 
0186 protected:
0187 
0188   /** @name Clone Methods. */
0189   //@{
0190   /**
0191    * Make a simple clone of this object.
0192    * @return a pointer to the new object.
0193    */
0194   virtual IBPtr clone() const;
0195 
0196   /** Make a clone of this object, possibly modifying the cloned object
0197    * to make it sane.
0198    * @return a pointer to the new object.
0199    */
0200   virtual IBPtr fullclone() const;
0201   //@}
0202 
0203 private:
0204 
0205   /**
0206    * The assignment operator is private and must never be called.
0207    * In fact, it should not even be implemented.
0208    */
0209   VBFNLOAmplitude & operator=(const VBFNLOAmplitude &) = delete;
0210 
0211   /**
0212    * Store colour correlator results
0213    */
0214   mutable vector<double> colourCorrelatorResults;
0215 
0216   /**
0217    * Store spin colour correlator results
0218    */
0219   mutable vector<double> spinColourCorrelatorResults;
0220 
0221   /**
0222    * Switch for random helicity summation 
0223    */
0224   bool theRanHelSum;
0225 
0226   /**
0227    * Switch for anomalous couplings 
0228    */
0229   bool theAnomCoupl;
0230 
0231 protected:
0232 
0233   /**
0234    * Location of the VBFNLO library
0235    */
0236   string VBFNLOlib_;
0237 
0238   /**
0239    *  load the VBFNLO library
0240    */
0241   void loadVBFNLO();
0242 
0243 };
0244 
0245 }
0246 
0247 #endif /* Herwig_VBFNLOAmplitude_H */