Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // NJetsAmplitude.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_NJetsAmplitude_H
0010 #define Herwig_NJetsAmplitude_H
0011 //
0012 // This is the declaration of the NJetsAmplitude 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 NJetsAmplitude implements an interface to NJets
0026  */
0027 class NJetsAmplitude: public MatchboxOLPME {
0028 
0029 public:
0030 
0031   /**
0032    * The default constructor.
0033    */
0034   NJetsAmplitude();
0035 
0036 public:
0037 
0038   /**
0039    * Return true, if this amplitude already includes averaging over
0040    * incoming parton's quantum numbers.
0041    */
0042   virtual bool hasInitialAverage() const { return false; }
0043 
0044   /**
0045    * Return true, if this amplitude already includes symmetry factors
0046    * for identical outgoing particles.
0047    */
0048   virtual bool hasFinalStateSymmetry() const { return false; }
0049 
0050   /**
0051    * Start the one loop provider, if appropriate, giving order and
0052    * contract files
0053    */
0054   virtual void signOLP(const string&, const string&);
0055 
0056   /**
0057    * Start the one loop provider, if appropriate
0058    */
0059   virtual void startOLP(const string&, int& status);
0060 
0061   /**
0062    * Start the one loop provider, if appropriate. This default
0063    * implementation writes an BLHA 2.0 order file and starts the OLP
0064    */
0065   virtual bool startOLP(const map<pair<Process,int>,int>& procs);
0066 
0067   /**
0068    * Call OLP_EvalSubProcess and fill in the results
0069    */
0070   virtual void evalSubProcess() const;
0071 
0072   /**
0073    * Fill in results for the given colour correlator
0074    */
0075   virtual void evalColourCorrelator(pair<int,int> ij) const;
0076 
0077   /**
0078    * Return a positive helicity polarization vector for a gluon of
0079    * momentum p (with reference vector n) to be used when evaluating
0080    * spin correlations.
0081    */
0082   virtual LorentzVector<Complex> plusPolarization(const Lorentz5Momentum& p,
0083                           const Lorentz5Momentum& n,
0084                           int id = -1) const;
0085 
0086   /**
0087    * Fill in results for the given colour/spin correlator
0088    */
0089   virtual void evalSpinColourCorrelator(pair<int,int> ij) const;
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   /** @name Standard Interfaced functions. */
0120   //@{
0121 
0122   /**
0123    * Initialize this object after the setup phase before saving an
0124    * EventGenerator to disk.
0125    * @throws InitException if object could not be initialized properly.
0126    */
0127   virtual void doinit();
0128 
0129   /**
0130    * Initialize this object. Called in the run phase just before
0131    * a run begins.
0132    */
0133   virtual void doinitrun();
0134   //@}
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 // If needed, insert declarations of virtual function defined in the
0155 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
0156 
0157 
0158 private:
0159 
0160   /**
0161    * The assignment operator is private and must never be called.
0162    * In fact, it should not even be implemented.
0163    */
0164   NJetsAmplitude & operator=(const NJetsAmplitude &) = delete;
0165 
0166   /**
0167    * Store colour correlator results
0168    */
0169   mutable vector<double> colourCorrelatorResults;
0170 
0171   /**
0172    * Store spin colour correlator results
0173    */
0174   mutable vector<double> spinColourCorrelatorResults;
0175 
0176   /**
0177    *  Location of NJETs
0178    */
0179   string NJetsPrefix_;
0180 
0181   /**
0182    *  Location of NJET librarys
0183    */
0184   string NJetsLibs_;
0185 
0186   /**
0187    * Load the NJET library
0188    */
0189   void loadNJET();
0190 
0191 };
0192 
0193 }
0194 
0195 #endif /* Herwig_NJetsAmplitude_H */