00001
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef __PDF_PARTONDISTRIBUTION_H__
00027 #define __PDF_PARTONDISTRIBUTION_H__
00028
00029 #include <valarray>
00030
00031 #include "complex_d.h"
00032
00033 namespace pdf {
00034
00064 class partondistribution {
00065
00066 public :
00067 partondistribution(void);
00068 partondistribution(int n, double Q0,
00069 double A[], double alpha[], double beta[], int eta = 1);
00070 partondistribution(int n, double Q0,
00071 const std::valarray<double> & A,
00072 const std::valarray<double> & alpha, const std::valarray<double> & beta, int eta = 1);
00073
00074
00075 public :
00076 double get_Q0(void) const;
00077 int get_eta(void) const;
00078
00079 complex_d get_Mellin_transform(complex_d z) const;
00080 double get_F(double x, double z) const;
00081 double get_dF(double x, double z) const;
00082 double get_ddF(double x, double z) const;
00083 double get_dddF(double x, double z) const;
00084 double get_c0(double x) const;
00085
00086 private :
00087 double root_safeI(double a, double b, double x) const;
00088
00089
00090 public :
00091
00099 virtual bool with_qed(void) const {return false;}
00100
00108 virtual double get_electric_charge(void) const {return 0.0;}
00109
00110
00111 friend partondistribution operator+ (const partondistribution & f1, const partondistribution & f2);
00112
00113
00114 protected :
00115 int n;
00116 double Q0;
00117 std::valarray<double> A;
00118 std::valarray<double> alpha;
00119 std::valarray<double> beta;
00120 int eta;
00121 };
00122
00123
00129 class partondistribution_with_qed : public partondistribution {
00130
00131 public :
00132 partondistribution_with_qed(void);
00133 partondistribution_with_qed(int n, double Q0,
00134 double A[], double alpha[], double beta[], double electric_charge = 0.0, int eta = 1);
00135 partondistribution_with_qed(int n, double Q0,
00136 const std::valarray<double> & A,
00137 const std::valarray<double> & alpha, const std::valarray<double> & beta,
00138 double electric_charge, int eta = 1);
00139
00140
00141 public :
00142
00148 bool with_qed(void) const {return true;}
00149
00155 double get_electric_charge(void) const {return electric_charge;}
00156
00157
00158 friend partondistribution_with_qed operator+ (const partondistribution_with_qed & f1, const partondistribution_with_qed & f2);
00159
00160
00161 protected :
00163 double electric_charge;
00164
00165 };
00166
00167
00168 }
00169
00170 #endif // ndef __PDF_PARTONDISTRIBUTION_H__
00171