Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/unittests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on: push
jobs:
test:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12"]

Expand Down
41 changes: 27 additions & 14 deletions src/pinefarm/external/positivity.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,22 @@ def run(self):
) as o:
self.runcard = yaml.safe_load(o)

def read_kinematics(self):
"""Read kinematics from runcard."""
if "kinematics" in self.runcard:
kinematics = self.runcard["kinematics"]
xgrid = np.array([point["x"] for point in kinematics])
q2grid = np.array([point["q2"] for point in kinematics])
else:
xgrid = np.array(self.runcard["xgrid"])
q2 = self.runcard["q2"]
q2grid = np.full_like(xgrid, q2)
return xgrid, q2grid

def generate_pineappl(self):
"""Generate grid."""
self.xgrid = np.array(self.runcard["xgrid"])
self.xgrid, self.q2grid = self.read_kinematics()
self.pid = self.runcard["pid"]
self.q2 = self.runcard["q2"]
self.hadron_pid = self.runcard["hadron_pid"]
self.convolution_type = self.runcard.get("convolution_type", "UnpolPDF")

Expand Down Expand Up @@ -92,16 +103,16 @@ def generate_pineappl(self):

limits = []
# add each point as a bin
for bin_, x in enumerate(self.xgrid):
for bin_, (x, q2) in enumerate(zip(self.xgrid, self.q2grid)):
# keep DIS bins
limits.append([(self.q2, self.q2), (x, x)])
limits.append([(q2, q2), (x, x)])
# Fill the subgrid with delta functions
array_subgrid = np.zeros((1, self.xgrid.size))
array_subgrid[0][bin_] = x
# create and set the subgrid
subgrid = pineappl.subgrid.ImportSubgridV1(
array=array_subgrid,
node_values=[[self.q2], self.xgrid],
node_values=[[q2], self.xgrid],
)
grid.set_subgrid(0, bin_, 0, subgrid.into())
# set the correct observables
Expand All @@ -125,27 +136,29 @@ def results(self):

pdf = lhapdf.mkPDF(self.pdf)
d = {
"result": [pdf.xfxQ2(self.pid, x, self.q2) for x in self.xgrid],
"result": [
pdf.xfxQ2(self.pid, x, q2) for (x, q2) in zip(self.xgrid, self.q2grid)
],
"error": [1e-15] * len(self.xgrid),
"sv_min": [
np.amin(
[
pdf.xfxQ2(self.pid, x, 0.25 * self.q2),
pdf.xfxQ2(self.pid, x, self.q2),
pdf.xfxQ2(self.pid, x, 4.0 * self.q2),
pdf.xfxQ2(self.pid, x, 0.25 * q2),
pdf.xfxQ2(self.pid, x, q2),
pdf.xfxQ2(self.pid, x, 4.0 * q2),
]
)
for x in self.xgrid
for (x, q2) in zip(self.xgrid, self.q2grid)
],
"sv_max": [
np.amax(
[
pdf.xfxQ2(self.pid, x, 0.25 * self.q2),
pdf.xfxQ2(self.pid, x, self.q2),
pdf.xfxQ2(self.pid, x, 4.0 * self.q2),
pdf.xfxQ2(self.pid, x, 0.25 * q2),
pdf.xfxQ2(self.pid, x, q2),
pdf.xfxQ2(self.pid, x, 4.0 * q2),
]
)
for x in self.xgrid
for (x, q2) in zip(self.xgrid, self.q2grid)
],
}
results = pd.DataFrame(data=d)
Expand Down