herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
PomeronPDF.h
1 // -*- C++ -*-
2 //
3 // PomeronPDF.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_PomeronPDF_H
10 #define HERWIG_PomeronPDF_H
11 
12 #include <ThePEG/PDF/PDFBase.h>
13 #include <iostream>
14 #include <fstream>
15 #include <string>
16 #include <cmath>
17 
18 namespace Herwig {
19 
20 using namespace ThePEG;
21 
29 class PomeronPDF : public PDFBase {
30 public:
31 
37  PomeronPDF();
38 
39 
47  virtual bool canHandleParticle(tcPDPtr particle) const;
48 
54  virtual cPDVector partons(tcPDPtr p) const;
55 
65  virtual double xfx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
66  double x, double eps = 0.0,
67  Energy2 particleScale = ZERO) const;
68 
78  virtual double xfvx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
79  double x, double eps = 0.0,
80  Energy2 particleScale = ZERO) const;
82 
83 public:
84 
91  void persistentOutput(PersistentOStream & os) const;
92 
98  void persistentInput(PersistentIStream & is, int version);
100 
107  static void Init();
108 
109 
110 protected:
111 
119  virtual void doinit();
120 
121 protected:
122 
129  virtual IBPtr clone() const;
130 
135  virtual IBPtr fullclone() const;
137 
138 
139 private:
143  enum PDFFlavour {charm, gluon, singlet};
144 
149  PomeronPDF & operator=(const PomeronPDF &) = delete;
150 
151 private:
152 
160  double getPDFValue(PDFFlavour flPDF, double x, Energy2 qq) const;
161 
165  void loadTables() const;
166 
167 private:
168 
172  static const int nPDFFlavour_;
173 
174 
179  mutable vector<vector<vector<double> > > pdfTable_;
180 
184  mutable vector<vector<double> > lxGrid_;
185 
189  mutable vector<vector<double> > lqqGrid_;
190 
194  vector<string> fileName_;
195 
199  string rootName_;
200 
205 
210 
214  int PDFFit_;
215 
220 
221 
222 };
223 
224 }
225 
226 #endif
vector< vector< vector< double > > > pdfTable_
Vector of matrixes of PDF functions for different flavours: pdfTable [Flavours][Q^2][log x]...
Definition: PomeronPDF.h:179
int nxPoints_
Number of ln x points.
Definition: PomeronPDF.h:204
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
int boundary_
Switch between different aproaches when the values are out of PDF range: 0 Extrapolate, 1 Freeze.
Definition: PomeronPDF.h:219
static const int nPDFFlavour_
Number of PDF flavours.
Definition: PomeronPDF.h:172
PDFFlavour
Enumeration to storage the types of partons.
Definition: PomeronPDF.h:143
Implementation of the PomeronPDF PDFs.
Definition: PomeronPDF.h:29
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
vector< vector< double > > lxGrid_
Vector of grid with log x values: lxGrid [Flavours] [log x].
Definition: PomeronPDF.h:184
vector< cPDPtr > cPDVector
int PDFFit_
Switch between different PDF fits.
Definition: PomeronPDF.h:214
vector< vector< double > > lqqGrid_
Vector of grid with log qq values: lxGrid [Flavours] [log qq].
Definition: PomeronPDF.h:189
-*- C++ -*-
vector< string > fileName_
Vector of names of PDF data files for each flavour.
Definition: PomeronPDF.h:194
string rootName_
Base of the filename.
Definition: PomeronPDF.h:199
int nqPoints_
Number of qq flavours.
Definition: PomeronPDF.h:209
constexpr ZeroUnit ZERO