Saturation physics at One Loop Order
This project is maintained by diazona
This is the program used to calculate the complete next-to-leading cross section for inclusive hadron production in pA collisions, described in the paper
Anna M. Stasto, Bo-Wen Xiao, David Zaslavsky
"Towards the Test of Saturation Physics Beyond Leading Logarithm"
arXiv:1307.4057 [hep-ph]
Please cite this paper if you use the results of the code in a publication.
The quickest way to obtain the code is to use git. Run the following commands:
git clone https://github.com/diazona/SOLO.git
cd SOLO
git submodule init
git submodule update
If you don't have git (and don't want to download it), you can download the source code manually.
SOLO-0.1/
cmake/ (contains files)interp2d/ (empty)quasimontecarlo/ (empty)src/ (contains files)READMECMakeLists.txt.gitmodulesinterp2d-0.1/
CMakeLists.txtCOPYINGDoxyfile.inREADME.mdbicubic.cbilinear.cinterp2d.cinterp2d.hinterp2d.kdev4interp2d_spline.cinterp2d_spline.htest.cinterp2d-0.1/ into SOLO-0.1/interp2d/.quasimontecarlo-0.1/
CMakeLists.txtREADME.mdcmake/ (contains files)quasimontecarlo.cquasimontecarlo.hquasimontecarlo.kdev4test.cquasimontecarlo-0.1/ into SOLO-0.1/quasimontecarlo/.At this point you will need to manually download the MSTW PDF interface from http://mstwpdf.hepforge.org/code/code.html. Extract the files mstwpdf.cc and mstwpdf.h from the tarball and place them in SOLO's src/ directory. (We are not authorized to distribute the MSTW PDF interface as part of SOLO, which is why this has to be done manually.)
You will need to have the following dependencies already installed:
CMake is a cross-platform build system that fills roughly the same role as configure from GNU autotools. If you have it installed, it will check that the dependencies are satisfied, and show an error message if they are not.
To compile with CMake: from the directory SOLO/ or SOLO-0.1/ (the parent directory of src/), run these commands:
mkdir build
cd build
cmake .. && make
At the end of this you should have a build/ directory containing the executable files.
If you don't have CMake installed (and don't want to download it), you can compile the source code manually, but it is up to you to make sure all the dependencies are properly installed. In the directory src/, make an empty file named git_revision.h. Then, from the parent directory of src/, run this command:
c++ src/oneloopcalc.cpp src/integrator.cpp src/hardfactors_position.cpp \
src/hardfactors_radial.cpp src/hardfactors_momentum.cpp src/dss_pinlo.cpp \
src/mstwpdf.cc src/cubature.c src/gluondist.cpp src/coupling.cpp \
src/factorizationscale.cpp src/integrationcontext.cpp \
src/integrationtype.cpp src/context.cpp src/utils.cpp interp2d/interp2d.c \
interp2d/bilinear.c interp2d/bicubic.c quasimontecarlo/quasimontecarlo.c \
-I interp2d/ -I quasimontecarlo/ -lgsl -lgslcblas -lm -lssl -lcrypto \
-o oneloopcalc
At least, this is the command for GCC; if you are using a different compiler, adjust it accordingly.
In order to run the program, you will need two additional files:
The grid file for the MSTW 2008 PDF at NLO, from the paper
A. D. Martin, W. J. Stirling, R. S. Thorne and G. Watt,
"Parton distributions for the LHC",
Eur. Phys. J. C 63 (2009) 189-285
arXiv:0901.0002 [hep-ph].
The filename is mstw2008nlo.00.dat, and it can be downloaded as part of an archive at the MSTW PDF site.
The data file for the DSS fragmentation functions at NLO, from the paper
Daniel de Florian, Rodolfo Sassot, Marco Stratmann
"Global analysis of fragmentation functions for pions and kaons and their uncertainties"
Phys. Rev. D 75, 114010 (2007)
arXiv:hep-ph/0703242
The filename is PINLO.DAT, and it is reportedly available on request from the authors of the DSS paper. Unfortunately we (authors of SOLO) are not aware of a website where this file is directly downloadable.
The main executable is called oneloopcalc. It should be invoked as
./oneloopcalc <options>
where the <options> can include any number of the following, in any order:
Hard factor specifications and hard factor group specifications tell the program which terms to calculate out of the complete NLO expression.
A hard factor specification is a string like "p:h02qq" or "m:h16gg". The "p:" at the beginning specifies the position space implementation, "r:" specifies a position space implementation with the angular integral already done, and the "m:" specifies the momentum space implementation. The prefix can be omitted, in which case position space is taken as the default. (Not recommended, as position space is highly inaccurate for some terms.)
The rest of the string gives the name of a hard factor. The set of possible names that can be used with a "p:" prefix are all the return values from the get_name() methods in hardfactors_position.h, and similarly for "r:" with hardfactors_radial.h and "m:" with hardfactors_momentum.h. Here's a list transcribed from those files (but check the source code because this could be out of date):
p:h02qq m:h02qq p:h12qq r:h12qq p:h14qq m:h14qq p:h02gg m:h02gg p:h12gg r:h12gg p:h12qqbar m:h12qqbar p:h16gg m:h16gg p:h112qg r:h112qg p:h122qg r:h122qg p:h14qg m:h14qg p:h112gq r:h112gq p:h122gq r:h122gq p:h14gq m:h14gq
The names are case-insensitive.
A hard factor group specification is made of any number of individual hard factor specifications separated by commas. The program will report only the total of all terms in the group. (A hard factor specification as in the last paragraph can be considered a group of one.)
There are some hard factor groups that have abbreviated names:
lo is equivalent to m:h02qq,m:h02gg
nlo is equivalent to r:h12qq,m:h14qq,r:h12gg,m:h12qqbar,m:h16gg,r:h112gq, r:h122gq,m:h14gq,r:h112qg,r:h122qg,m:h14qg
These are defined in oneloopcalc.cpp.
If no hard factor groups are specified on the command line, the program behaves as if lo nlo was given, which prints out the total of the LO terms and the total of the NLO terms, as well as the overall total.
Note that specifying several hard factors as a group (with commas) is considerably more efficient than specifying them individually and having the program print out the results for each one separately.
Command-line arguments can also include the names of any number of configuration files, which contain parameters for the program in the format
key1=value1
key2=value2
and so on. Keys are case-insensitive. All the possible keys are defined throughout the file context.cpp. Here's a list which should be complete:
A (no default)abserr (default 10-20)alphas (default 0.2)beta (default 11-2*Nf/3)c (no default)c0r_optimization (default true)c0r, whether to skip calculating terms that should be zeroCF (default 1.5)coupling_type (default fixed)fixed or runningcubature_iterations (default 1000000)exact_kinematics (default false)factorization_scale (default fixed)factorization_scale_coefficient (no default)factorization_scale is "CpT2", this is the coefficient to multiply by pT2 to get mu2 (setting this to 4 is equivalent to specifying factorization_scale = 4pT2)ff_filename (default PINLO.DAT)gammaMV (default 1)gdist_type is set to MV, the anomalous dimension in the MV gluon distributiongdist_momentum_filename (no default)gdist_position_filename (no default)gdist_subinterval_limit (default 10000)gdist_type is set to MV, the number of subdivisions to use when performing the Fourier integral of the position-space gluon distributiongdist_type (default GBW)GBW, MV, fMV, file, GBW+file (which uses the GBW distribution at large x and data from a file at small x), or MV+file (same but with MV)hadron (no default)pi-, pi0, or pi+ (this influences which fragmentation function is used)inf (default 40)infintegration_strategy (default VEGAS)MISER, VEGAS (best), or QUASIlambda (default 0.288)gdist_type is GBW, MV, GBW+file, or MV+file, the exponent in the definition of the saturation scalelambdaMV (default 0.241)gdist_type is MV or MV+file, the scale for 1/r in the MV gluon distribution, in GeVlambdaQCD (default 0.2428711 = sqrt(0.0588))coupling_type is running, the QCD scale in GeVmiser_iterations (default 10000000)integration_strategy is MISER, the number of iterations to use in MISER integrationmu2 (default 10)factorization_scale is fixed, the factorization scale in GeVNc (default 3)Nf (default 3)pdf_filename (default mstw2008nlo.00.dat)projectile (no default)deuteron or protonpseudorandom_generator_seed (default 0)pseudorandom_generator_type (default mt19937)pT (no default)quasirandom_generator_type (default halten)quasi_iterations (default 1000000)regulator (default 1)coupling is running, the position of the Landau pole for the regulated LO running couplingrelerr (default 0)satscale_source (default extract from momentum)analytic (Q0²(x0/x)^λ), extract from momentum, which determines the saturation scale by finding the momentum where the gluon distribution equals a fixed fraction of its value at a reference momentum, and extract from position, which finds the radius where the gluon distribution equals a fixed threshold valuesatscale_threshold (no default)extract from momentum or extract from position, this is the fixed threshold value (or fraction of its value at a reference point, in the momentum case) that the gluon distribution should equal at the saturation scaleSperp (default 1)sqs (no default)TR (default 0.5)vegas_incremental_iterations (default 1000000)vegas_initial_iterations (default 100000)x0 (default 0.000304)Y (no default)The configuration files have to at least set A, c, sqs, and Y, and also pT if no transverse momenta are specified as command line arguments.
Any numbers given as command line arguments are put together into one big list of transverse momentum values to run the calculation at. If a comma-separated list of numbers is given, then it will be split apart and each number added to the one big list. There's no significance to putting certain pT values together and others not. (0.5 0.7 0.8,0.9 and 0.5,0.7 0.8 0.9 are exactly equivalent.) Any pT values specified on the command line will replace pT values specified in configuration files.
--separate--minmax--trace-gdisttrace_gdist.output in the working directory. (Expect this file to grow to several hundred megabytes.)--trace=var1,var2,...trace.output in the working directory. (Expect this file to grow to several megabytes.) The allowable variables are those in ictx_var_list.inc, or you can use --trace=all or --trace=* to print out all available variables.Basically the code runs as follows:
ResultsCalculatorFor each combination of pT and Y, and for each hard factor group:
Integrator with the current values of pT and Y and the current hard factor groupIntegrator calls the GSL Monte Carlo integration routineIntegrationContextHardFactor instances in the current group and get a value from each oneoneloopcalc.cpplog.hgsl_exception.hhardfactors.hhardfactors_momentum.hhardfactors_momentum.cpp
hardfactors_position.hhardfactors_position.cpp
gluondist.hgluondist.cpp
gluondist_driver.cppcoupling.hcoupling.cpp
dss_pinlo.hdss_pinlo.cpp
factorizationscale.hfactorizationscale.cpp
integrationcontext.hintegrationcontext.cpp
integrator.hintegrator.cpp
integrationtype.hintegrationtype.cpp
utils.hutils.cpp
ictx_var_list.incinterp2d.hlibinterp2d.a
quasimontecarlo.hlibquasimontecarlo.a
mstwpdf.hmstwpdf.cc
cubature.hcubature.c
CMakeFiles.txtPINLO.DATpinlo_extended.datmstw2008nlo.00.dat