00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef ThePEG_PDFBase_H
00010 #define ThePEG_PDFBase_H
00011
00012
00013 #include "ThePEG/Config/ThePEG.h"
00014 #include "ThePEG/Handlers/HandlerBase.h"
00015 #include "ThePEG/PDF/PDFCuts.h"
00016 #include "PDFBase.xh"
00017
00018 namespace ThePEG {
00019
00040 class PDFBase: public HandlerBase {
00041
00042 public:
00043
00049 PDFBase();
00050
00054 PDFBase(const PDFBase &);
00055
00059 virtual ~PDFBase();
00061
00062 public:
00063
00070 virtual bool canHandleParticle(tcPDPtr particle) const = 0;
00071
00077 virtual bool canHandle(tcPDPtr particle) const;
00078
00084 virtual bool hasPoleIn1(tcPDPtr particle, tcPDPtr parton) const;
00085
00090 virtual cPDVector partons(tcPDPtr particle) const = 0;
00091
00098 virtual double xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
00099 double l, Energy2 particleScale = ZERO) const;
00100
00107 virtual double xfx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
00108 double x, double eps = 0.0,
00109 Energy2 particleScale = ZERO) const;
00110
00121 virtual double xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
00122 double l, Energy2 particleScale = ZERO) const;
00123
00133 virtual double xfvx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
00134 double x, double eps = 0.0,
00135 Energy2 particleScale = ZERO) const;
00136
00146 virtual double xfsl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
00147 double l, Energy2 particleScale = ZERO) const;
00148
00158 virtual double xfsx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
00159 double x, double eps = 0.0,
00160 Energy2 particleScale = ZERO) const;
00161
00172 virtual double flattenL(tcPDPtr particle, tcPDPtr parton, const PDFCuts &cut,
00173 double z, double & jacobian) const;
00174
00187 virtual double flattenScale(tcPDPtr particle, tcPDPtr parton,
00188 const PDFCuts & cut, double l, double z,
00189 double & jacobian) const;
00191
00196 tcRemHPtr remnantHandler() const { return theRemnantHandler; }
00197
00198
00199 public:
00200
00207 void persistentOutput(PersistentOStream & os) const;
00208
00214 void persistentInput(PersistentIStream & is, int version);
00216
00220 static void Init();
00221
00222 protected:
00223
00231 virtual void doinit();
00232
00233 protected:
00234
00239 RemHPtr theRemnantHandler;
00240
00241 protected:
00242
00246 enum RangeException {
00247 rangeFreeze,
00248 rangeZero,
00249 rangeThrow
00250 };
00251
00256 RangeException rangeException;
00257
00258 private:
00259
00260
00265 static AbstractClassDescription<PDFBase> initPDFBase;
00266
00270 PDFBase & operator=(const PDFBase &);
00271
00272 };
00273
00274 ThePEG_DECLARE_CLASS_TRAITS(PDFBase,HandlerBase);
00275
00276 }
00277
00278 #endif