GenXicc

GitLab GitLab Repository ./enable GenXicc/HEAD

Authors: Philip Ilten ORCID iD; Jake Pfaller ORCID iD

Keywords: doubly heavy baryons, heavy quarks, Les Houches Accord, Fortran

Plugins: LHAupGenXicc (LHAup)

Dependencies: PYTHIA8>=8.318, GFORTRAN

Pythia Versions: 8.318

PythiaParallel: No

XML Documentation: No

Test Image: pythia8/dev:test

License: GNU GPL v2 or later


This package interfaces the GENXICC Fortran generator for the hadronic production of the doubly heavy baryons \(\Xi_{cc}\), \(\Xi_{bc}\), and \(\Xi_{bb}\), and the corresponding \(\Omega\) baryons, with Pythia. GENXICC events are passed to Pythia through the Les Houches Accord user-process class LHAupGenXicc, after which Pythia performs the showering, hadronization, and decays. The Fortran source is GENXICC 2.0, as modified for the LHCb Gauss interface, and the interface follows LHAupGenXicc of the LHCb LbGenXicc package.

Requirements

Building

The package uses the standard PYTHIA-CONTRIB build system. The pythia8-config script must either be along PATH or passed to configure.

./configure --with-pythia8-config=/path/to/pythia8-config
make -j

This first builds the Fortran source into lib/libGenXiccFortran.a, and then the plugin library lib/libGenXicc.so.

Usage

The generator is loaded in Pythia with the following setting. Note that loading the plugin sets Beams:frameType = 5.

Init:plugins = {libGenXicc.so::LHAupGenXicc}

The center-of-mass energy, in GeV, must be set with the GENXICC command upcom ecm, e.g., GenXicc:cmnds += {upcom ecm 13000}.

By default, the VEGAS grids and the CTEQ6HQ PDF table are read from the directory given by the GENXICCDATAROOT environment variable, which must point to share/GenXicc of this package, as $GENXICCDATAROOT/data/<energy>/<baryon>_<state>.grid and $GENXICCDATAROOT/data/<energy>/cteq6hq.dat, for the energies 7, 8, 13, 13.6, and 14 TeV, where <baryon> is, e.g., xiccu for the \(\Xi_{cc}^{++}\) and <state> is, e.g., gg3s1c3. The grids and the PDF table of the LHCb GenXiccData package, version v3r5, are provided in share/GenXicc/data, for the baryons and energies of the following table, where gg, gc stands for the four grids gg3s1c3, gg1s0c6, gc3s1c3, and gc1s0c6, i.e., counter ixiccstate 1 to 4.

Baryon 7 TeV 8 TeV 13 TeV 13.6 TeV 14 TeV
xiccu, \(\Xi_{cc}^{++}\) gg, gc gg, gc gg, gc gg3s1c3 gg, gc
xiccd, \(\Xi_{cc}^{+}\) gg, gc gg, gc gg, gc gg3s1c3 gg, gc
xiccs, \(\Omega_{cc}^{+}\) gg3s1c3 gg, gc gg3s1c3 gg, gc
xibcu, \(\Xi_{bc}^{+}\) admixgg admixgg admixgg admixgg admixgg
xibcd, \(\Xi_{bc}^{0}\) admixgg admixgg admixgg admixgg admixgg
xibbu, \(\Xi_{bb}^{0}\) admixgg admixgg admixgg admixgg

These grids were generated by LHCb with the GENXICC commands of the table in Generating Grids, e.g., with mixevnt imix 1 and vegasbin nvbin 300 for the \(\Xi_{bc}\) and \(\Xi_{bb}\) baryons, and must be used with the same commands, where the number of values in the grid file is checked. According to the GenXiccData release notes, the \(\Xi_{cc}^{++}\) grids were generated for a \(\Xi_{cc}^{++}\) mass of 3.7 GeV, and the 13 and 14 TeV \(\Omega_{cc}^{+}\) grids are those of the \(\Xi_{cc}^{+}\). New grid files can be generated as described in Generating Grids. With loggrade iusecurdir 1, these files are instead read from the current directory, as <baryon>_<state>.grid and cteq6hq.dat, for any energy, while with loggrade ivegasopen 1 the grid is calculated with VEGAS, and written to the grid file, which overwrites any provided grid. A minimal test that loads and initializes the plugin, reading the provided grid for the \(\Xi_{cc}^{+}\) at 13 TeV, is provided in share/GenXicc/examples.

cd share/GenXicc/examples
make testPlugins
./testPlugins LHAupGenXicc.cmnd

Settings

The following Pythia settings are defined by the package.

The GENXICC defaults are set first, and then the commands are applied in the order GenXicc:defaultCmnds, then the files of GenXicc:cmndFiles, and finally GenXicc:cmnds, where a later command overrides an earlier one.

GENXICC Commands

GENXICC is configured by setting variables in its Fortran common blocks. Each command has the form

<common block> <variable> <value> [<index>]

and is case insensitive.

If an invalid command is given, e.g., an unknown variable, an index outside its dimension, or a malformed value, it is reported as an error and Pythia initialization fails. The configuration is also checked before GENXICC is initialized, and an inconsistent configuration fails the initialization.

The baryon is selected by the heavy diquark, with mtypeofxi mgenxi, and the light quark, with wbstate nbound. For wbstate nbound 4, the light quark of each event is selected randomly, with the relative probabilities wbstate ratiou, ratiod, and ratios, by default 1:1:0.3.

mgenxi nbound 1 nbound 2 nbound 3
1, \((cc)\) \(\Xi_{cc}^{++}\) (4422) \(\Xi_{cc}^+\) (4412) \(\Omega_{cc}^+\) (4432)
2, \((bc)\) \(\Xi_{bc}^+\) (5242) \(\Xi_{bc}^0\) (5142) \(\Omega_{bc}^0\) (5342)
3, \((bb)\) \(\Xi_{bb}^0\) (5522) \(\Xi_{bb}^-\) (5512) \(\Omega_{bb}^-\) (5532)

The diquark state and production mechanism is selected with counter ixiccstate, for mixevnt imix 0. For the \((cc)\) diquark, the gluon-gluon (gg), gluon-charm (gc), and charm-charm (cc) mechanisms are available, while only the gg mechanism is available for the \((bc)\) and \((bb)\) diquarks.

ixiccstate mgenxi 1 mgenxi 2 mgenxi 3
1 \((^3S_1)_{\bar{3}}\), gg \((^3S_1)_{\bar{3}}\), gg \((^3S_1)_{\bar{3}}\), gg
2 \((^1S_0)_6\), gg \((^1S_0)_6\), gg \((^1S_0)_6\), gg
3 \((^3S_1)_{\bar{3}}\), gc \((^3S_1)_6\), gg
4 \((^1S_0)_6\), gc \((^1S_0)_{\bar{3}}\), gg
5 \((^3S_1)_{\bar{3}}\), cc
6 \((^1S_0)_6\), cc

With mixevnt imix 1, the states of one mechanism are mixed, selected with mixevnt imixtype: for the \((cc)\) diquark, 1, 2, and 3 for the gg, gc, and cc mechanisms; for the \((bc)\) diquark, 1 or 2, both for the gg mechanism; and for the \((bb)\) diquark, 1.

Note the following for the use of GENXICC with Pythia.

Generating Grids

New grid files, e.g., after changing the PDFs, or for a new energy, can be generated with share/GenXicc/examples/grids.cc, which follows scripts/grids.py of the LHCb GenXiccData package.

cd share/GenXicc/examples
make grids
./grids 13000 grids13TeV -t                      # quick test of the setup only
./grids 13000 grids13TeV [-s BARYON] [FILE ...]  # full grids, which take hours

The program runs the VEGAS integration of GENXICC (loggrade ivegasopen 1) for each baryon at the given energy, in GeV, and writes the grid files to the given directory, without generating any events. As in $GENXICCDATAROOT/data/<energy>, the grid file of each baryon is named after the baryon and the state, e.g., xiccu_gg3s1c3.grid for the \(\Xi_{cc}^{++}\), and existing grid files are overwritten. By default, the grids of all the baryons of the table below are generated, while single baryons can be selected with -s, e.g., -s Xi_cc++, which can be repeated. With the default VEGAS options, the grid of each baryon takes about 40 to 50 minutes, so the baryons can be generated in parallel, by running the program for each baryon with -s. Each baryon is configured with the GENXICC commands of its LHCb event types, given in the table. The -t option uses only a few VEGAS points, to test the setup, and the resulting grids should not be used. Optional Pythia command files can set, e.g., the PDFs, or the number of VEGAS points per iteration and iterations, with the defaults GenXicc:cmnds += {vegasinf number 1000000, vegasinf nitmx 20}. These files can override the commands of the baryon, except for mtypeofxi mgenxi and wbstate nbound. The CTEQ6HQ PDF table, which is used by default, is read from $GENXICCDATAROOT/data/7TeV/cteq6hq.dat. The VEGAS cross section, in pb, is printed after each iteration, but is not stored in the grid file.

For the energies known to GENXICC, i.e., 7, 8, 13, 13.6, and 14 TeV, the grid files can then be copied to $GENXICCDATAROOT/data/<energy>, e.g., data/13TeV. Otherwise, the grid files can be used by running from their directory, which then also needs the CTEQ6HQ table cteq6hq.dat, with GenXicc:cmnds += {loggrade iusecurdir 1}. In both cases, the grids must be used with the same GENXICC commands, e.g., with the same vegasbin nvbin.

Baryon -s Grid file GENXICC commands
\(\Xi_{cc}^{++}\) Xi_cc++ xiccu_gg3s1c3.grid mtypeofxi mgenxi 1, wbstate nbound 1
\(\Xi_{cc}^{+}\) Xi_cc+ xiccd_gg3s1c3.grid mtypeofxi mgenxi 1, wbstate nbound 2
\(\Omega_{cc}^{+}\) Omega_cc+ xiccs_gg3s1c3.grid mtypeofxi mgenxi 1, wbstate nbound 3
\(\Xi_{bc}^{+}\) Xi_bc+ xibcu_admixgg.grid mtypeofxi mgenxi 2, wbstate nbound 1, and the \(\Xi_{bc}\) commands
\(\Xi_{bc}^{0}\) Xi_bc0 xibcd_admixgg.grid mtypeofxi mgenxi 2, wbstate nbound 2, and the \(\Xi_{bc}\) commands
\(\Xi_{bb}^{0}\) Xi_bb0 xibbu_admixgg.grid mtypeofxi mgenxi 3, wbstate nbound 1, and the \(\Xi_{bb}\) commands

The \(\Xi_{bc}\) commands are mixevnt imix 1, vegasbin nvbin 300, counter xmaxwgt 5000000, confine pscutmin 0.0, and confine pscutmax 7.0, and the \(\Xi_{bb}\) commands are the same, but with confine pscutmax 11.0. These mix the states 1 and 2, i.e., with the default mixevnt imixtype 1, use 300 VEGAS bins, and restrict the baryon pseudorapidity to between 0 and 7 (11), so that only one hemisphere is generated. The LHCb \(\Xi_{cc}^{++}\) event types also set a \(\Xi_{cc}^{++}\) mass of 3.7 GeV with subopen ichange 1, upcom pmb 1.85, and upcom pmc 1.85, which according to its release notes the GenXiccData \(\Xi_{cc}^{++}\) grids use. These commands are not set by grids, but can be given in a command file.

Chang:2007pp Comparison

The directory share/GenXicc/validate/Chang:2007pp compares GenXicc with the results of the GENXICC 1.0 paper, hep-ph/0702054: the partonic cross sections of the gluon fusion to the \((cc)\), \((bc)\), and \((bb)\) diquarks versus the partonic energy (Fig. 6), and the \(p_\mathrm{T}\) and \(y\) distributions of the \(\Xi_{cc}\) of a test run at the Tevatron (Figs. 7 and 8).

cd share/GenXicc/validate/Chang:2007pp
make
./generate 6 [N] [OUTPUT] [FILE ...]  # writes genxicc6.dat
./generate 8 [N] [OUTPUT] [FILE ...]  # writes genxicc8.dat
python3 compare.py                    # writes compare.pdf

The generate program uses the parameters of the paper, where, as for GENXICC 1.0, the diquark becomes the baryon with a probability of one, i.e., wbstate nbound 4. For Fig. 6, it calculates the partonic cross sections with VEGAS, using subopen isubonly 1 with the constant \(\alpha_s = 0.2\), at 8 energies for each diquark, with N points (by default 100000) and 20 iterations. With fewer points, VEGAS underestimates these cross sections at large energies. The \((cc)\) curve of the paper is reproduced with the charm mass of 1.8 GeV of the \((bc)\) diquark, rather than with the 1.75 GeV of the test run, so 1.8 GeV is used for this curve. For Fig. 8, it generates N events (by default 20000) at the parton level for each of the \(p_\mathrm{T}\) cuts 0, 4, 10, and 20 GeV of the test run. The VEGAS grids and cross sections of the test run are first calculated in grids, and are reused by later runs. GenXicc unweights the events itself, with a maximum weight of 100 times the cross section, where a larger weight is rejected, so the fraction of events with a weight above half of this maximum is also written. The CTEQ6HQ table is read from $GENXICCDATAROOT/data/7TeV/cteq6hq.dat. With the defaults, Fig. 6 takes roughly 2.5 hours, and Fig. 8 roughly 2 hours, or 15 minutes with the existing grids, so the figures can be run in parallel. The paper only gives its results as figures, so compare.py contains the curves of Figs. 6 and 8, read from the vector graphics of the arXiv source. It requires numpy and matplotlib, and compares the cross sections and distributions with these curves.

Development

The Fortran source in fortran/src is that of the LHCb GenXicc package, with a simpler layout of the grid files, the random numbers of Pythia, and three fixes. In upopenfile.F, outerpdf.F, and evntinit.F, the grid files and the CTEQ6HQ table are read from data/<energy>/<baryon>_<state>.grid and data/<energy>/cteq6hq.dat, rather than from data/<energy>/data/<baryon>/<state>.grid and data/<energy>/data/cteq6hq.dat as for the LHCb GenXiccData package, and from <baryon>_<state>.grid rather than <state>.grid in the current directory. In genxicc_upevnt.F, the unweighting of the events uses the random numbers of Pythia, PYR, rather than the gfortran rand function, which does not depend on the Pythia seed. The fixes are: in parameter.F, the light quark masses, which determine the heavy quark masses, are set before they are used to set the masses, since they were otherwise undefined, which could, e.g., give an infinite loop for the \(\Omega_{cc}^{+}\); in genxicc_upevnt.F, the events of the gc and cc mechanisms are generated with the number of VEGAS dimensions used for the grid, which were otherwise those of the gg mechanism for mixevnt imixtype 1 or counter ixiccstate 1 or 2, including the defaults, irrespective of mixevnt imix; and in colorflow.F, the gluon of the charge-conjugated gc and cc events has the PDG ID 21, rather than -21.

The C++ bindings to the Fortran procedures and common blocks, include/GenXicc/Wrapper.h and src/Wrapper.cc, are generated automatically and should not be edited by hand. They can be regenerated from the Fortran source, which requires gfortran, as follows.

cd fortran
python3 wrapper.py

References

GENXICC is described in hep-ph/0702054 and arXiv:0910.4462.