Page MenuHomeHEPForge

No OneTemporary

diff --git a/CepGen/StructureFunctions/ALLM.cpp b/CepGen/StructureFunctions/ALLM.cpp
index ecad060..fcf4981 100644
--- a/CepGen/StructureFunctions/ALLM.cpp
+++ b/CepGen/StructureFunctions/ALLM.cpp
@@ -1,155 +1,166 @@
#include "ALLM.h"
+#include "CepGen/Physics/Constants.h"
#include <cmath>
namespace CepGen
{
namespace SF
{
+ ALLM::Parameterisation::Parameterisation()
+ {
+ ratio_comp = E143Ratio();
+ }
+
ALLM::Parameterisation
ALLM::Parameterisation::allm91()
{
Parameterisation p;
p.pomeron = Parameters( {
{ 0.26550, 0.04856, 1.04682 },
{ -0.04503, -0.36407, 8.17091 },
{ 0.49222, 0.52116, 3.5515 } } );
p.reggeon = Parameters( {
{ 0.67639, 0.49027, 2.66275 },
{ 0.60408, 0.17353, 1.61812 },
{ 1.26066, 1.83624, 0.81141 } } );
p.m02 = 0.30508;
p.mp2 = 10.676;
p.mr2 = 0.20623;
p.q02 = 0.27799;
p.lambda2 = 0.06527;
return p;
}
ALLM::Parameterisation
ALLM::Parameterisation::allm97()
{
Parameterisation p;
p.pomeron = Parameters( {
{ 0.28067, 0.22291, 2.1979 },
{ -0.0808, -0.44812, 1.1709 },
{ 0.36292, 1.8917, 1.8439 } } );
p.reggeon = Parameters( {
{ 0.80107, 0.97307, 3.4924 },
{ 0.58400, 0.37888, 2.6063 },
{ 0.01147, 3.7582, 0.49338 } } );
p.m02 = 0.31985;
p.mp2 = 49.457;
p.mr2 = 0.15052;
p.q02 = 0.52544;
p.lambda2 = 0.06526;
return p;
}
ALLM::Parameterisation
ALLM::Parameterisation::hht_allm()
{
Parameterisation p;
p.pomeron = Parameters( {
{ 0.412, 0.164, 17.7 },
{ -0.835, -0.446, 10.6 },
{ -45.8, 55.7, -0.031 } } );
p.reggeon = Parameters( {
{ -1.04, 2.97, 0.163 },
{ 0.706, 0.185, -16.4 },
{ -1.29, 4.51, 1.16 } } );
p.m02 = 0.446;
p.mp2 = 74.2;
p.mr2 = 29.3;
p.q02 = 4.74e-5;
p.lambda2 = 2.2e-8;
return p;
}
ALLM::Parameterisation
ALLM::Parameterisation::hht_allm_ft()
{
Parameterisation p;
p.pomeron = Parameters( {
{ 0.356, 0.171, 18.6 },
{ -0.075, -0.470, 9.2 },
{ -0.477, 54.0, 0.073 } } );
p.reggeon = Parameters( {
{ -0.636, 3.37, -0.660 },
{ 0.882, 0.082, -8.5 },
{ 0.339, 3.38, 1.07 } } );
p.m02 = 0.388;
p.mp2 = 50.8;
p.mr2 = 0.838;
p.q02 = 1.87e-5;
p.lambda2 = 4.4e-9;
return p;
}
ALLM::Parameterisation
ALLM::Parameterisation::gd07p()
{
Parameterisation p;
p.pomeron = Parameters( {
{ 0.339, 0.127, 1.16 },
{ -0.105, -0.495, 1.29 },
{ -1.42, 4.51, 0.551 } } );
p.reggeon = Parameters( {
{ 0.838, 2.36, 1.77 },
{ 0.374, 0.998, 0.775 },
{ 2.71, 1.83, 1.26 } } );
p.m02 = 0.454;
p.mp2 = 30.7;
p.mr2 = 0.117;
p.q02 = 1.15;
p.lambda2 = 0.06527;
return p;
}
ALLM::Parameterisation
ALLM::Parameterisation::gd11p()
{
Parameterisation p;
p.pomeron = Parameters( {
{ 0.3638, 0.1211, 1.166 }, // c
{ -0.11895, -0.4783, 1.353 }, // a
{ 1.0833, 2.656, 1.771 } } ); // b
p.reggeon = Parameters( {
{ 1.3633, 2.256, 2.209 },
{ 0.3425, 1.0603, 0.5164 },
{ -10.408, 14.857, 0.07739 } } );
p.m02 = 0.5063;
p.mp2 = 34.75;
p.mr2 = 0.03190;
p.q02 = 1.374;
p.lambda2 = 0.06527;
return p;
}
StructureFunctions
ALLM::operator()( double q2, double xbj ) const
{
const double factor = q2/( q2+params_.m02 );
const double W2_eff = q2*( 1.-xbj )/xbj;
const double xp = ( q2+params_.mp2 )/( q2+W2_eff+params_.mp2 ),
xr = ( q2+params_.mr2 )/( q2+W2_eff+params_.mr2 );
const double xlog1 = log( ( q2+params_.q02 )/ params_.lambda2 ), xlog2 = log( params_.q02/params_.lambda2 );
const double t = log( xlog1/xlog2 );
const double apom = params_.pomeron.a[0] + ( params_.pomeron.a[0]-params_.pomeron.a[1] )*( 1./( 1.+pow( t, params_.pomeron.a[2] ) ) - 1. );
const double bpom = params_.pomeron.b[0] + params_.pomeron.b[1]*pow( t, params_.pomeron.b[2] );
const double cpom = params_.pomeron.c[0] + ( params_.pomeron.c[0]-params_.pomeron.c[1] )*( 1./( 1.+pow( t, params_.pomeron.c[2] ) ) - 1. );
const double areg = params_.reggeon.a[0] + params_.reggeon.a[1]*pow( t, params_.reggeon.a[2] );
const double breg = params_.reggeon.b[0] + params_.reggeon.b[1]*pow( t, params_.reggeon.b[2] );
const double creg = params_.reggeon.c[0] + params_.reggeon.c[1]*pow( t, params_.reggeon.c[2] );
const double F2_Pom = cpom*pow( xp, apom )*pow( 1.-xbj, bpom ),
F2_Reg = creg*pow( xr, areg )*pow( 1.-xbj, breg );
StructureFunctions allm;
allm.F2 = factor * ( F2_Pom + F2_Reg );
+
+ const double R = params_.ratio_comp( q2, xbj );
+ const double tau = 4.*xbj*xbj+Constants::mp*Constants::mp/q2;
+ allm.FL = allm.F2 * ( 1.+tau ) * ( R/( 1.+R ) );
+
return allm;
}
}
}
diff --git a/CepGen/StructureFunctions/ALLM.h b/CepGen/StructureFunctions/ALLM.h
index 734f0ca..cf11e78 100644
--- a/CepGen/StructureFunctions/ALLM.h
+++ b/CepGen/StructureFunctions/ALLM.h
@@ -1,56 +1,59 @@
#ifndef CepGen_StructureFunctions_ALLM_h
#define CepGen_StructureFunctions_ALLM_h
#include "StructureFunctions.h"
+#include "SigmaRatio.h"
#include <vector>
namespace CepGen
{
namespace SF
{
class ALLM
{
public:
class Parameterisation
{
private:
struct Parameters {
Parameters() :
a( { 0., 0., 0. } ), b( { 0., 0., 0. } ), c( { 0., 0., 0. } ) {}
Parameters( std::vector<double> c, std::vector<double> a, std::vector<double> b ) :
a( a ), b( b ), c( c ) {}
std::vector<double> a, b, c;
};
public:
+ Parameterisation();
/// Pre-HERA data fit (694 data points)
static Parameterisation allm91();
/// Fixed target and HERA photoproduction total cross sections (1356 points)
static Parameterisation allm97();
static Parameterisation hht_allm();
static Parameterisation hht_allm_ft();
static Parameterisation gd07p();
static Parameterisation gd11p();
Parameters pomeron, reggeon;
/// Effective photon squared mass
double m02;
/// Effective pomeron squared mass
double mp2;
/// Effective reggeon squared mass
double mr2;
double q02;
/// Squared QCD scale
double lambda2;
+ SigmaRatio ratio_comp;
};
ALLM( const ALLM::Parameterisation& param = ALLM::Parameterisation::allm97() ) : params_( param ) {}
StructureFunctions operator()( double q2, double xbj ) const;
private:
Parameterisation params_;
};
}
}
#endif
diff --git a/CepGen/StructureFunctions/SigmaRatio.h b/CepGen/StructureFunctions/SigmaRatio.h
new file mode 100644
index 0000000..dd58f34
--- /dev/null
+++ b/CepGen/StructureFunctions/SigmaRatio.h
@@ -0,0 +1,62 @@
+#ifndef CepGen_StructureFunctions_SigmaRatio_h
+#define CepGen_StructureFunctions_SigmaRatio_h
+
+#include <array>
+#include <cmath>
+
+namespace CepGen
+{
+ namespace SF
+ {
+ class SigmaRatio
+ {
+ public:
+ SigmaRatio() {}
+ virtual double operator()( double q2, double xbj ) const { return 0.; }
+ };
+
+ class E143Ratio : public SigmaRatio
+ {
+ public:
+ struct Parameterisation
+ {
+ double q2_b;
+ std::array<double,6> a, b, c;
+ static Parameterisation standard() {
+ Parameterisation out;
+ out.q2_b = 0.34;
+ out.a = { { 0.0485, 0.5470, 2.0621, -0.3804, 0.5090, -0.0285 } };
+ out.b = { { 0.0481, 0.6114, -0.3509, -0.4611, 0.7172, -0.0317 } };
+ out.c = { { 0.0577, 0.4644, 1.8288, 12.3708, -43.1043, 41.7415 } };
+ return out;
+ }
+ };
+ E143Ratio( const Parameterisation& param = Parameterisation::standard() ) : params_( param ) {}
+ double operator()( double q2, double xbj ) const
+ {
+ const double u = q2/params_.q2_b;
+ const double xl = log( 25.*q2 );
+ const double pa = ( 1.+params_.a[3]*xbj+params_.a[4]*xbj*xbj )*pow( xbj, params_.a[5] );
+ const double pb = ( 1.+params_.b[3]*xbj+params_.b[4]*xbj*xbj )*pow( xbj, params_.b[5] );
+ const double tt = theta( q2, xbj );
+ const double q2_thr = params_.c[3]*xbj + params_.c[4]*xbj*xbj+params_.c[5]*xbj*xbj*xbj;
+ const double ra = params_.a[0]/xl*tt + params_.a[1]/pow( pow( q2, 4 )+pow( params_.a[2], 4 ), 0.25 )*pa,
+ rb = params_.b[0]/xl*tt + ( params_.b[1]/q2+params_.b[2]/( q2*q2+0.3*0.3 ) )*pb,
+ rc = params_.c[0]/xl*tt + params_.c[1]*pow( pow( q2-q2_thr, 2 )+pow( params_.c[2], 2 ), -0.5 );
+
+ const double r = ( ra+rb+rc ) / 3.;
+ if ( q2 > params_.q2_b ) return r;
+ return r * 0.5 * ( 3.*u-u*u*u );
+ }
+
+ private:
+ double theta( double q2, double xbj ) const {
+ return 1.+12.*( q2/( q2+1. ) )*( 0.125*0.125/( 0.125*0.125+xbj*xbj ) );
+ }
+ Parameterisation params_;
+ };
+ }
+}
+
+#endif
+

File Metadata

Mime Type
text/x-diff
Expires
Tue, Nov 19, 6:59 PM (1 d, 14 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3805716
Default Alt Text
(9 KB)

Event Timeline