ThePEG  1.8.0
GRVBase.h
1 // -*- C++ -*-
2 //
3 // GRVBase.h is a part of ThePEG - Toolkit for HEP Event Generation
4 // Copyright (C) 1999-2011 Leif Lonnblad
5 //
6 // ThePEG is licenced under version 2 of the GPL, see COPYING for details.
7 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
8 //
9 #ifndef ThePEG_GRVBase_H
10 #define ThePEG_GRVBase_H
11 // This is the declaration of the GRVBase class.
12 
13 #include "ThePEG/PDF/PDFBase.h"
14 
15 namespace ThePEG {
16 
24 class GRVBase: public PDFBase {
25 
26 public:
27 
33  GRVBase();
34 
38  virtual ~GRVBase();
40 
41 public:
42 
49  virtual bool canHandleParticle(tcPDPtr particle) const;
50 
55  virtual cPDVector partons(tcPDPtr p) const;
56 
62  virtual double xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
63  double l, Energy2 particleScale) const;
64 
70  virtual double xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
71  double l, Energy2 particleScale) const;
73 
74 public:
75 
82  double S() const { return theS; }
83 
88  double S2() const { return theS2; }
89 
94  double S3() const { return theS3; }
95 
100  double rootS() const { return theRootS; }
101 
105  double x() const { return thex; }
106 
111  double lx() const { return theLx; }
112 
116  double eps() const { return theEps; }
117 
122  double rootx() const { return theRootx; }
123 
125 
126 protected:
127 
132  virtual void setup(double l, Energy2 scale) const = 0;
133 
138  void setup(double l, Energy2 scale, Energy2 mu2, Energy2 lam2) const;
139 
143  double valens(double N, double ak, double bk,
144  double a, double b, double c, double d) const;
145 
150  double lightsea(double al, double be, double ak, double bk, double a,
151  double b, double c, double d, double e, double es) const;
152 
156  double heavysea(double sth, double al, double be, double ak, double ag,
157  double b, double d, double e, double es) const;
158 
163  virtual double uv() const = 0;
164 
169  virtual double dv() const = 0;
170 
175  virtual double del() const = 0;
176 
181  virtual double udb() const = 0;
182 
187  virtual double sb() const = 0;
188 
193  virtual double cb() const = 0;
194 
199  virtual double bb() const = 0;
200 
205  virtual double gl() const = 0;
206 
211  double fuv() const { return uvSave >= 0.0? uvSave: ( uvSave = uv() ); }
212 
217  double fdv() const { return dvSave >= 0.0? dvSave: ( dvSave = dv() ); }
218 
223  double fdel() const { return delSave >= 0.0? delSave: ( delSave = del() ); }
224 
229  double fudb() const { return udbSave >= 0.0? udbSave: ( udbSave = udb() ); }
230 
235  double fsb() const { return sbSave >= 0.0? sbSave: ( sbSave = sb() ); }
236 
241  double fcb() const { return cbSave >= 0.0? cbSave: ( cbSave = cb() ); }
242 
247  double fbb() const { return bbSave >= 0.0? bbSave: ( bbSave = bb() ); }
248 
253  double fgl() const { return glSave >= 0.0? glSave: ( glSave = gl() ); }
254 
255 public:
256 
260  static void Init();
261 
262 private:
263 
268  mutable double theLx;
269 
273  mutable double thex;
274 
278  mutable double theEps;
279 
283  mutable double theRootx;
284 
288  mutable Energy2 Q2;
289 
293  mutable Energy2 theLam2;
294 
298  mutable Energy2 theMu2;
299 
304  mutable double theS;
305 
309  mutable double theS2;
310 
314  mutable double theS3;
315 
319  mutable double theRootS;
320 
324  mutable double uvSave;
325 
329  mutable double dvSave;
330 
334  mutable double delSave;
335 
339  mutable double udbSave;
340 
344  mutable double sbSave;
345 
349  mutable double cbSave;
350 
354  mutable double bbSave;
355 
359  mutable double glSave;
360 
361 private:
362 
366  GRVBase & operator=(const GRVBase &);
367 
368 };
369 
370 }
371 
372 #endif /* ThePEG_GRVBase_H */