Nanga Parbat 1.1.0
A TMD fitting framework
PV20Sivers.h
Go to the documentation of this file.
1//
2// Author: Valerio Bertone: valerio.bertone@cern.ch
3//
4
5#pragma once
6
8
9#include <math.h>
10
11namespace NangaParbat
12{
18 {
19 public:
20 // The default parameters correspond to those of replica 105 of
21 // the PV20Sivers fit. See Tabs. X and XI of
22 // https://arxiv.org/pdf/1703.10157.pdf.
23 PV20Sivers(): Parameterisation{"PV20Sivers", 2, std::vector<double>{0.128, 0.285, 2.98, 0.173, 0.39, 0.212, 2.10, 0.094, 2.52, 5.29, 0.033}} { };
24
25 double Evaluate(double const& x, double const& b, double const& zeta, int const& ifunc) const
26 {
27 if (ifunc < 0 || ifunc >= this->_nfuncs)
28 throw std::runtime_error("[PV20Sivers::Evaluate]: function index out of range");
29
30 // If the value of 'x' exceeds one returns zero
31 if (x >= 1)
32 return 0;
33
34 // Evolution
35 const double g2 = this->_pars[0];
36 const double Q02 = 1;
37 const double evol = exp( - g2 * log(zeta / Q02) * b * b / 4 );
38
39 // TMD PDFs
40 if (ifunc == 0)
41 {
42 const double N1 = this->_pars[1];
43 const double alpha = this->_pars[2];
44 const double sigma = this->_pars[3];
45 const double lambda = this->_pars[4];
46 const double xhat = 0.1;
47 const double g1 = N1 * pow(x / xhat, sigma) * pow((1 - x) / (1 - xhat), alpha);
48 return evol * exp( - g1 * pow(b / 2, 2) ) * ( 1 - lambda * pow(g1 * b / 2, 2) / ( 1 + lambda * g1 ) );
49 }
50 // TMD FFs
51 else
52 {
53 const double N3 = this->_pars[5];
54 const double beta = this->_pars[6];
55 const double delta = this->_pars[7];
56 const double gamma = this->_pars[8];
57 const double lambdaF = this->_pars[9];
58 const double N4 = this->_pars[10];
59 const double zhat = 0.5;
60 const double cmn = ( ( pow(x, beta) + delta ) / ( pow(zhat, beta) + delta ) ) * pow((1 - x) / (1 - zhat), gamma);
61 const double g3 = N3 * cmn;
62 const double g4 = N4 * cmn;
63 const double z2 = x * x;
64 return evol * ( g3 * exp( - g3 * pow(b / 2, 2) / z2 )
65 + ( lambdaF / z2 ) * pow(g4, 2) * ( 1 - g4 * pow(b / 2, 2) / z2 ) * exp( - g4 * pow(b / 2, 2) / z2 ) )
66 / ( g3 + ( lambdaF / z2 ) * pow(g4, 2) );
67 }
68 };
69
70 std::string LatexFormula() const
71 {
72 std::string formula;
73 formula = R"delimiter($$f_{\rm NP}(x,\zeta, b_T)=\exp\left[ - \left( g_1(x) + \frac{1}{2}g_2 \log\left(\frac{\zeta}{Q_0^2}\right) \right) b_T^2 \right])delimiter";
74 formula += R"delimiter(\left[1 - \frac{\lambda g_1^2(x) b_T^2}{4(1 + \lambda g_1(x))}\right]$$\\)delimiter";
75 formula += R"delimiter($$D_{\rm NP}(x,\zeta, b_T)=\mbox{ Whatever}$$\\)delimiter";
76 formula += R"delimiter($$g_1(x) = N_1 \frac{x^{\sigma}(1-x)^{\alpha}}{\hat{x}^{\sigma}(1-\hat{x})^{\alpha}}$$\\)delimiter";
77 formula += R"delimiter($$g_{3,4}(z) = N_{3,4} \frac{(z^{\beta}+\delta)(1-z)^{\gamma}}{(\hat{z}^{\beta}+\delta)(1-\hat{x})^{\gamma}}$$\\)delimiter";
78 formula += R"delimiter($$Q_0^2 = 1\;{\rm GeV}^2$$\\)delimiter";
79 formula += R"delimiter($$\hat{x} = 0.1$$\\)delimiter";
80 formula += R"delimiter($$\hat{z} = 0.5$$)delimiter";
81 return formula;
82 };
83
84 std::vector<std::string> GetParameterNames() const
85 {
86 return {R"delimiter($g_2$)delimiter",
87 R"delimiter($N_1$)delimiter",
88 R"delimiter($\alpha$)delimiter",
89 R"delimiter($\sigma$)delimiter",
90 R"delimiter($\lambda$)delimiter",
91 R"delimiter($N_3$)delimiter",
92 R"delimiter($\beta$)delimiter",
93 R"delimiter($\delta$)delimiter",
94 R"delimiter($\gamma$)delimiter",
95 R"delimiter($\lambda_F$)delimiter",
96 R"delimiter($N_4$)delimiter"};
97 };
98
99 std::string GetDescription() const
100 {
101 return "Parameterisation used for the Pavia 2017 TMD analysis.";
102 };
103 };
104}
Pavia 2017 parameterisation derived from the "Parameterisation" mother class.
Definition: PV20Sivers.h:18
std::vector< std::string > GetParameterNames() const
Virtual function that returns a vector of strings containing the names of the parameters in LaTex for...
Definition: PV20Sivers.h:84
std::string LatexFormula() const
Virtual function that returns a string with the formula of the non-perturbative function(s) in LaTex ...
Definition: PV20Sivers.h:70
double Evaluate(double const &x, double const &b, double const &zeta, int const &ifunc) const
Virtual function that returns the value of one of the functions.
Definition: PV20Sivers.h:25
std::string GetDescription() const
Virtual function that returns a short description of the parametrisation.
Definition: PV20Sivers.h:99
PV20Sivers()
Definition: PV20Sivers.h:23
Mother class that implements the main feautures of a functional parameterisation of non-perturbative ...
Definition: parameterisation.h:20
Definition: bstar.h:12