Skip to content

Repository files navigation

QEDonia

QEDonia solves the leading-order DGLAP evolution equations for the three-component system (γ, c, g) → J/ψ in Mellin space, coupling QCD and QED mixing at every scale step. NRQCD initial conditions at μ₀ = 2m_c are provided for the four standard colour-octet/singlet channels. Results can be written directly to LHAPDF grid sets.

Installation

From source (recommended during development)

git clone git@github.com:QCDLab/qedonia.git
cd qedonia
uv sync

To verify that everything has been installed correctly, run the following command:

uv run pytest

Quick start

Evolve a single channel

fromqedoniaimportevolve_jpsi# Evolve D_{c → J/ψ} for the ³S₁^[8] channel from μ₀ = 3 GeV to μ = 10 GeVz, Dc=evolve_jpsi(
channel="3S18",
ldme=1.06e-2, # ⟨O^{J/ψ}(³S₁^[8])⟩ [GeV³]mu_from=3.0, # initial scale μ₀ [GeV]mu_to=10.0, # target scale [GeV]alpha_s_ref=0.26, # αs(μ₀)component="c", # 'gamma', 'c', or 'g'
)
# z and Dc are 1-D numpy arrays of length 60 (default z-grid)

Sum all channels

fromqedoniaimportevolve_all_channelsldmes= {
"1S1": 1.16, # [GeV³]"3S18": 1.06e-2, # [GeV³]"1S08": 8.9e-3, # [GeV³]"3PJ8": 1.6e-2, # [GeV⁵]
}
z, D_total=evolve_all_channels(
ldmes=ldmes,
mu_from=3.0,
mu_to=10.0,
alpha_s_ref=0.26,
component="c",
)

Plot the result

importmatplotlib.pyplotaspltfromqedoniaimportevolve_all_channelsldmes= {"1S1": 1.16, "3S18": 1.06e-2, "1S08": 8.9e-3, "3PJ8": 1.6e-2}
mu_from=3.0alpha_s_ref=0.26fig, ax=plt.subplots()
formu_to, labelin [(3.0, "μ = 3 GeV"), (10.0, "μ = 10 GeV"), (91.2, "μ = MZ")]:
z, D=evolve_all_channels(ldmes, mu_from, mu_to, alpha_s_ref, component="c")
ax.plot(z, z*D, label=label)
ax.set(xlabel="z", ylabel="z D_{c→J/ψ}(z, μ)", xscale="log")
ax.legend()
plt.tight_layout()
plt.savefig("jpsi_ff_charm.pdf")

Generating LHAPDF grids

Minimal example

fromqedoniaimportwrite_lhapdf_setwrite_lhapdf_set(
name="JPsi_FF_LO",
ldmes={"1S1": 1.16, "3S18": 1.06e-2, "1S08": 8.9e-3, "3PJ8": 1.6e-2},
mu_from=3.0,
mu_values=[3.0, 5.0, 10.0, 30.0, 91.2],
alpha_s_ref=0.26,
)

This creates the directory JPsi_FF_LO/ in the current working directory with two files:

JPsi_FF_LO/
├── JPsi_FF_LO.info ← LHAPDF metadata
└── JPsi_FF_LO_0000.dat ← central member grid

The grid stores z · D_{a→J/ψ}(z, Q) for each initial parton a ∈ {γ (PID 22), c (PID 4), g (PID 21)}, following the standard LHAPDF convention. The produced particle is identified as J/ψ via Particle: 443 in the info file.

Full parameter reference

fromqedoniaimportwrite_lhapdf_setimportnumpyasnpwrite_lhapdf_set(
# --- identity ---name="JPsi_FF_LO",
description="J/psi FF LO QCD+QED, NRQCD ICs, mc=1.5 GeV",
authors="A. Author, B. Author",
# --- NRQCD long-distance matrix elements ---ldmes={
"1S1": 1.16, # ³S₁^[1] [GeV³] color-singlet"3S18": 1.06e-2, # ³S₁^[8] [GeV³] color-octet"1S08": 8.9e-3, # ¹S₀^[8] [GeV³] color-octet"3PJ8": 1.6e-2, # ³P_J^[8] [GeV⁵] color-octet
},
# --- scales ---mu_from=3.0, # initial scale μ₀ = mu0_over_mc * mc [GeV]mu_values=np.geomspace(3.0, 1000.0, 40).tolist(), # target Q grid# --- coupling ---alpha_s_ref=0.26, # αs(μ₀)# --- z grid ---z_values=np.geomspace(0.02, 0.99, 100).tolist(),
# --- output location ---output_dir="./grids",
# --- physics parameters ---mc=1.5, # charm mass [GeV]mu0_over_mc=2.0, # μ₀ / mcalpha_em=1.0/133.0, # QED coupling (fixed)nf=4, # active flavours# --- numerics ---n_steps=50, # evolution integration stepsmellin_c=2.0, # Mellin contour offsetmellin_T=60.0, # Mellin contour upper limitmellin_n_nodes=601, # Mellin quadrature nodes
)

Using the grid with LHAPDF

Once the set is installed in your LHAPDF data path (or the directory is on LHAPDF_DATA_PATH), load it like any other set:

importlhapdfff=lhapdf.mkPDF("JPsi_FF_LO", 0)
z, Q=0.5, 10.0Dc=ff.xfxQ(4, z, Q) /z# z·D_c → D_c (divide out the z factor)Dg=ff.xfxQ(21, z, Q) /zDga=ff.xfxQ(22, z, Q) /z

Lower-level API

evolve_ff_grid — multi-scale grid in one call

evolve_ff_grid is the engine behind write_lhapdf_set. It returns a NumPy array so you can post-process the grid before writing it anywhere.

fromqedoniaimportevolve_ff_gridimportnumpyasnpz_arr, mu_arr, grid=evolve_ff_grid(
ldmes={"3S18": 1.06e-2},
mu_from=3.0,
mu_values=[3.0, 10.0, 91.2],
alpha_s_ref=0.26,
z_values=np.linspace(0.1, 0.9, 50),
)
# grid.shape == (3, 50, 3) → (n_comp, n_z, n_mu)# grid[0] → D_γ, grid[1] → D_c, grid[2] → D_gD_charm_at_MZ=grid[1, :, -1] # D_c(z, μ = 91.2 GeV)

evolve_jpsi — single channel, single scale, single component

Useful for quick scans or cross-checks.

fromqedoniaimportevolve_jpsiz, D=evolve_jpsi(
channel="1S1",
ldme=1.16,
mu_from=3.0,
mu_to=91.2,
alpha_s_ref=0.26,
component="g", # gluon FF
)

Building blocks

fromqedoniaimport (
transfer_matrix, # 3×3 LO evolution operator E(N; μ₀² → μ²)gamma_matrix, # 3×3 anomalous-dimension matrix Γ(N, μ²)initial_vector, # NRQCD IC vector D̃(N) for one channelcontour_nodes, # Mellin contour nodes and weightsinvert_mellin, # numerical inverse Mellin transformalpha_s, # LO running couplingS1, # harmonic number S₁(N) via digamma
)

Default parameters

These are the default parameters if not user-input values are provided.

mc: 1.5 GeV # Charm quark massmu0_over_mc: 2.0# μ₀ / mc (initial scale ratio)alpha_em: 1/133# QED coupling (fixed)nf: 4# Active flavours (u, d, s, c)n_steps: 50# Evolution integration stepsmellin_c: 2.0# Contour offset (right of rightmost pole at N = 1)mellin_T: 60.0# Contour upper limitmellin_n_nodes: 601# Trapezoidal quadrature nodesz_grid: 60 log-spaced in [0.05, 0.99] # Default momentum-fraction grid

About

An evolution code for coupled QCD⊗QED quarkonia fragmentation functions

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages