herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
VBFNLOPhasespace.h
1 // -*- C++ -*-
2 //
3 // VBFNLOPhasespace.h is a part of Herwig - A multi-purpose Monte Carlo event generator
4 // Copyright (C) 2002-2019 The Herwig Collaboration
5 //
6 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
7 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
8 //
9 #ifndef Herwig_VBFNLOPhasespace_H
10 #define Herwig_VBFNLOPhasespace_H
11 //
12 // This is the declaration of the VBFNLOPhasespace class.
13 //
14 
15 #include "Herwig/MatrixElement/Matchbox/Phasespace/MatchboxPhasespace.h"
16 
17 namespace Herwig {
18 
19 using namespace ThePEG;
20 
33 
34 public:
35 
42 
46  virtual ~VBFNLOPhasespace();
48 
49 public:
50 
54  virtual void setXComb(tStdXCombPtr);
55 
59  virtual double generateTwoToNKinematics(const double*,
60  vector<Lorentz5Momentum>& momenta);
61 
65  virtual double generateKinematics(const double* random,
66  vector<Lorentz5Momentum>& momenta) {
67  return generateTwoToNKinematics(random,momenta);
68  }
69 
74  virtual int nDimPhasespace(int nFinal) const;
75 
80  virtual bool haveX1X2() const { return true; }
81 
86  virtual bool wantCMS() const { return false; }
87 
91  virtual bool isInvertible() const { return false; }
92 
93 
94 public:
95 
102  void persistentOutput(PersistentOStream & os) const;
103 
109  void persistentInput(PersistentIStream & is, int version);
111 
118  static void Init();
119 
120 protected:
121 
128  virtual IBPtr clone() const;
129 
134  virtual IBPtr fullclone() const;
136 
137 
138 // If needed, insert declarations of virtual function defined in the
139 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
140 
141 
142 protected:
143 
151  virtual void doinit();
152 
157  virtual void doinitrun();
159 
160 
161 private:
162 
167  Energy lastSqrtS;
168 
169 private:
170 
175  VBFNLOPhasespace & operator=(const VBFNLOPhasespace &) = delete;
176 
181 
182 protected:
183 
187  string VBFNLOlib_;
188 
192  void loadVBFNLO();
193 
199 
200  typedef double ArgType;
201  typedef Energy ValType;
202 
203  static double aUnit() { return 1.; }
204  static Energy vUnit() { return 1.*GeV; }
205 
206  Energy operator() (double xi) const;
207 
208  Energy w;
209  cPDVector::const_iterator dataBegin;
210  cPDVector::const_iterator dataEnd;
211  vector<Lorentz5Momentum>::const_iterator momentaBegin;
212  vector<Lorentz5Momentum>::const_iterator momentaEnd;
213 
214  ReshuffleEquation(Energy q,
215  cPDVector::const_iterator dBegin,
216  cPDVector::const_iterator dEnd,
217  vector<Lorentz5Momentum>::const_iterator mBegin,
218  vector<Lorentz5Momentum>::const_iterator mEnd)
219  : w(q),
220  dataBegin(dBegin), dataEnd(dEnd),
221  momentaBegin(mBegin),
222  momentaEnd(mEnd) {}
223 
224  };
225 
226 };
227 
228 }
229 
230 #endif /* Herwig_VBFNLOPhasespace_H */
virtual bool isInvertible() const
Return true, if this phase space generator is invertible.
virtual double generateKinematics(const double *random, vector< Lorentz5Momentum > &momenta)
Generate a phase space point and return its weight.
Energy lastSqrtS
Last hadronic centre-of-mass energy, to update VBFNLO value only when this has changed.
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
MatchboxPhasespace defines an abstract interface to a phase space generator.
The function object defining the equation to be solved.
string VBFNLOlib_
Location of the VBFNLO library.
virtual bool haveX1X2() const
Return true, if this phasespace generator will generate incoming partons itself.
virtual bool wantCMS() const
Return true, if this phase space generator expects the incoming partons in their center-of-mass syste...
-*- C++ -*-
bool needToReshuffle
Whether or not we need to reshuffle.
VBFNLOPhasespace is an interface to the internal phasespace generator of VBFNLO. It uses the informat...