00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef ThePEG_GRVBase_H
00010 #define ThePEG_GRVBase_H
00011
00012
00013 #include "ThePEG/PDF/PDFBase.h"
00014
00015 namespace ThePEG {
00016
00024 class GRVBase: public PDFBase {
00025
00026 public:
00027
00033 GRVBase();
00034
00038 virtual ~GRVBase();
00040
00041 public:
00042
00049 virtual bool canHandleParticle(tcPDPtr particle) const;
00050
00055 virtual cPDVector partons(tcPDPtr p) const;
00056
00062 virtual double xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
00063 double l, Energy2 particleScale) const;
00064
00070 virtual double xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
00071 double l, Energy2 particleScale) const;
00073
00074 public:
00075
00082 double S() const { return theS; }
00083
00088 double S2() const { return theS2; }
00089
00094 double S3() const { return theS3; }
00095
00100 double rootS() const { return theRootS; }
00101
00105 double x() const { return thex; }
00106
00111 double lx() const { return theLx; }
00112
00116 double eps() const { return theEps; }
00117
00122 double rootx() const { return theRootx; }
00123
00125
00126 protected:
00127
00132 virtual void setup(double l, Energy2 scale) const = 0;
00133
00138 void setup(double l, Energy2 scale, Energy2 mu2, Energy2 lam2) const;
00139
00143 double valens(double N, double ak, double bk,
00144 double a, double b, double c, double d) const;
00145
00150 double lightsea(double al, double be, double ak, double bk, double a,
00151 double b, double c, double d, double e, double es) const;
00152
00156 double heavysea(double sth, double al, double be, double ak, double ag,
00157 double b, double d, double e, double es) const;
00158
00163 virtual double uv() const = 0;
00164
00169 virtual double dv() const = 0;
00170
00175 virtual double del() const = 0;
00176
00181 virtual double udb() const = 0;
00182
00187 virtual double sb() const = 0;
00188
00193 virtual double cb() const = 0;
00194
00199 virtual double bb() const = 0;
00200
00205 virtual double gl() const = 0;
00206
00211 double fuv() const { return uvSave >= 0.0? uvSave: ( uvSave = uv() ); }
00212
00217 double fdv() const { return dvSave >= 0.0? dvSave: ( dvSave = dv() ); }
00218
00223 double fdel() const { return delSave >= 0.0? delSave: ( delSave = del() ); }
00224
00229 double fudb() const { return udbSave >= 0.0? udbSave: ( udbSave = udb() ); }
00230
00235 double fsb() const { return sbSave >= 0.0? sbSave: ( sbSave = sb() ); }
00236
00241 double fcb() const { return cbSave >= 0.0? cbSave: ( cbSave = cb() ); }
00242
00247 double fbb() const { return bbSave >= 0.0? bbSave: ( bbSave = bb() ); }
00248
00253 double fgl() const { return glSave >= 0.0? glSave: ( glSave = gl() ); }
00254
00255 public:
00256
00260 static void Init();
00261
00262 private:
00263
00268 mutable double theLx;
00269
00273 mutable double thex;
00274
00278 mutable double theEps;
00279
00283 mutable double theRootx;
00284
00288 mutable Energy2 Q2;
00289
00293 mutable Energy2 theLam2;
00294
00298 mutable Energy2 theMu2;
00299
00304 mutable double theS;
00305
00309 mutable double theS2;
00310
00314 mutable double theS3;
00315
00319 mutable double theRootS;
00320
00324 mutable double uvSave;
00325
00329 mutable double dvSave;
00330
00334 mutable double delSave;
00335
00339 mutable double udbSave;
00340
00344 mutable double sbSave;
00345
00349 mutable double cbSave;
00350
00354 mutable double bbSave;
00355
00359 mutable double glSave;
00360
00361 private:
00362
00366 static AbstractNoPIOClassDescription<GRVBase> initGRVBase;
00367
00371 GRVBase & operator=(const GRVBase &);
00372
00373 };
00374
00379 template <>
00380 struct BaseClassTrait<GRVBase,1>: public ClassTraitsType {
00382 typedef PDFBase NthBase;
00383 };
00384
00387 template <>
00388 struct ClassTraits<GRVBase>: public ClassTraitsBase<GRVBase> {
00390 static string className() { return "ThePEG::GRVBase"; }
00394 static string library() { return "GRVBase.so"; }
00395 };
00396
00399 }
00400
00401 #endif