Skip to content

Commit a9b51a2

Browse files
committed
Add missing functionality for multiple-scale grids
1 parent eeb7424 commit a9b51a2

File tree

9 files changed

+172
-67
lines changed

9 files changed

+172
-67
lines changed

.github/workflows/rust.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
uses: actions/cache@v4
2626
with:
2727
path: test-data
28-
key: test-data-v16
28+
key: test-data-v17
2929
- name: Download test data
3030
if: steps.cache-test-data.outputs.cache-hit != 'true'
3131
run: |

maintainer/download-test-data.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,5 @@ download 'https://ploughshare.web.cern.ch/ploughshare/db/atlas/atlas-atlas-wpm-a
4646
download 'https://data.nnpdf.science/pineappl/test-data/STAR_WMWP_510GEV_WM-AL-POL.pineappl.lz4'
4747
download 'https://data.nnpdf.science/pineappl/test-data/STAR_WMWP_510GEV_WM-AL-POL_PolPDF.tar'
4848
download 'https://data.nnpdf.science/pineappl/test-data/STAR_WMWP_510GEV_WM-AL-POL_UnpolPDF.tar'
49+
download 'https://data.nnpdf.science/pineappl/test-data/ZEUS_2JET_319GEV_374PB-1_DIF_ETQ2_BIN6.pineappl.lz4'
50+
download 'https://data.nnpdf.science/pineappl/test-data/ZEUS_2JET_319GEV_374PB-1_DIF_ETQ2_BIN6.tar'

pineappl/src/empty_subgrid.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ mod tests {
8585
#[should_panic(expected = "EmptySubgridV1 doesn't support the fill operation")]
8686
fn fill() {
8787
let mut subgrid = EmptySubgridV1;
88-
subgrid.fill(&v0::default_interps(2), &[0.0; 3], 0.0);
88+
subgrid.fill(&v0::default_interps(false, 2), &[0.0; 3], 0.0);
8989
}
9090

9191
#[test]

pineappl/src/evolution.rs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -216,16 +216,12 @@ fn ndarray_from_subgrid_orders_slice_many(
216216
) -> Result<X1aX1bOpDTuple, GridError> {
217217
// TODO: remove these assumptions from the following code
218218
assert_eq!(grid.kinematics()[0], Kinematics::Scale(0));
219-
assert_eq!(
220-
grid.kinematics()[1..]
221-
.iter()
222-
.map(|kin| match kin {
223-
&Kinematics::X(idx) => idx,
224-
Kinematics::Scale(_) => unreachable!(),
225-
})
226-
.collect::<Vec<_>>(),
227-
(0..(grid.kinematics().len() - 1)).collect::<Vec<_>>()
228-
);
219+
let x_start = grid
220+
.kinematics()
221+
.iter()
222+
.position(|kin| matches!(kin, Kinematics::X(_)))
223+
// UNWRAP: there is always at least one X
224+
.unwrap();
229225

230226
// create a Vec of all x values for each dimension
231227
let mut x1n: Vec<_> = kinematics
@@ -350,9 +346,7 @@ fn ndarray_from_subgrid_orders_slice_many(
350346

351347
zero = false;
352348

353-
// TODO: here we assume that all X are consecutive starting from the second element and
354-
// are in ascending order
355-
for (i, &index) in indices.iter().skip(1).enumerate() {
349+
for (i, &index) in indices.iter().skip(x_start).enumerate() {
356350
x1_idx[i] = x1_indices[i][index];
357351
}
358352

@@ -483,6 +477,7 @@ pub(crate) fn evolve_slice_with_many(
483477

484478
sub_fk_tables.extend(tables.into_iter().map(|table| {
485479
ImportSubgridV1::new(
480+
// TODO: insert one more axis if initial frg scale unequals fac
486481
PackedArray::from(table.insert_axis(Axis(0)).view()),
487482
node_values.clone(),
488483
)

pineappl/src/grid.rs

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1390,8 +1390,21 @@ impl Grid {
13901390
channels,
13911391
pid_basis: infos[0].pid_basis,
13921392
convolutions: self.convolutions.clone(),
1393+
// TODO: the next line is probably wrong for flexible-scale grids
13931394
interps: self.interps.clone(),
1394-
kinematics: self.kinematics.clone(),
1395+
kinematics: iter::once(Kinematics::Scale(0))
1396+
.chain(if fac0 < 0.0 && frg0 < 0.0 {
1397+
Some(Kinematics::Scale(1))
1398+
} else {
1399+
None
1400+
})
1401+
.chain(
1402+
self.kinematics
1403+
.iter()
1404+
.filter(|kin| matches!(kin, Kinematics::X(_)))
1405+
.cloned(),
1406+
)
1407+
.collect(),
13951408
scales: Scales {
13961409
// FK-tables have their renormalization scales burnt in
13971410
ren: ScaleFuncForm::NoScale,
@@ -1552,7 +1565,7 @@ mod tests {
15521565
Conv::new(ConvType::UnpolPDF, 2212),
15531566
Conv::new(ConvType::UnpolPDF, 2212),
15541567
],
1555-
v0::default_interps(2),
1568+
v0::default_interps(false, 2),
15561569
vec![Kinematics::Scale(0), Kinematics::X(0), Kinematics::X(1)],
15571570
Scales {
15581571
ren: ScaleFuncForm::Scale(0),
@@ -1581,7 +1594,7 @@ mod tests {
15811594
Conv::new(ConvType::UnpolPDF, 2212),
15821595
Conv::new(ConvType::UnpolPDF, 2212),
15831596
],
1584-
v0::default_interps(2),
1597+
v0::default_interps(false, 2),
15851598
vec![Kinematics::Scale(0), Kinematics::X(0), Kinematics::X(1)],
15861599
Scales {
15871600
ren: ScaleFuncForm::Scale(0),
@@ -1605,7 +1618,7 @@ mod tests {
16051618
Conv::new(ConvType::UnpolPDF, 2212),
16061619
Conv::new(ConvType::UnpolPDF, 2212),
16071620
],
1608-
v0::default_interps(1),
1621+
v0::default_interps(false, 1),
16091622
vec![Kinematics::Scale(0), Kinematics::X(0), Kinematics::X(1)],
16101623
Scales {
16111624
ren: ScaleFuncForm::Scale(0),
@@ -1629,7 +1642,7 @@ mod tests {
16291642
Conv::new(ConvType::UnpolPDF, 2212),
16301643
Conv::new(ConvType::UnpolPDF, 2212),
16311644
],
1632-
v0::default_interps(2),
1645+
v0::default_interps(false, 2),
16331646
vec![Kinematics::Scale(0), Kinematics::X(0), Kinematics::X(1)],
16341647
Scales {
16351648
ren: ScaleFuncForm::Scale(0),
@@ -1660,7 +1673,7 @@ mod tests {
16601673
],
16611674
PidBasis::Pdg,
16621675
vec![Conv::new(ConvType::UnpolPDF, 2212); 2],
1663-
v0::default_interps(2),
1676+
v0::default_interps(false, 2),
16641677
vec![Kinematics::Scale(0), Kinematics::X(0), Kinematics::X(1)],
16651678
Scales {
16661679
ren: ScaleFuncForm::Scale(0),
@@ -1683,7 +1696,7 @@ mod tests {
16831696
],
16841697
PidBasis::Pdg,
16851698
vec![Conv::new(ConvType::UnpolPDF, 2212); 2],
1686-
v0::default_interps(2),
1699+
v0::default_interps(false, 2),
16871700
vec![Kinematics::Scale(0), Kinematics::X(0), Kinematics::X(1)],
16881701
Scales {
16891702
ren: ScaleFuncForm::Scale(0),
@@ -1711,7 +1724,7 @@ mod tests {
17111724
],
17121725
PidBasis::Pdg,
17131726
vec![Conv::new(ConvType::UnpolPDF, 2212); 2],
1714-
v0::default_interps(2),
1727+
v0::default_interps(false, 2),
17151728
vec![Kinematics::Scale(0), Kinematics::X(0), Kinematics::X(1)],
17161729
Scales {
17171730
ren: ScaleFuncForm::Scale(0),
@@ -1737,7 +1750,7 @@ mod tests {
17371750
],
17381751
PidBasis::Pdg,
17391752
vec![Conv::new(ConvType::UnpolPDF, 2212); 2],
1740-
v0::default_interps(2),
1753+
v0::default_interps(false, 2),
17411754
vec![Kinematics::Scale(0), Kinematics::X(0), Kinematics::X(1)],
17421755
Scales {
17431756
ren: ScaleFuncForm::Scale(0),
@@ -1770,7 +1783,7 @@ mod tests {
17701783
],
17711784
PidBasis::Pdg,
17721785
vec![Conv::new(ConvType::UnpolPDF, 2212); 2],
1773-
v0::default_interps(2),
1786+
v0::default_interps(false, 2),
17741787
vec![Kinematics::Scale(0), Kinematics::X(0), Kinematics::X(1)],
17751788
Scales {
17761789
ren: ScaleFuncForm::Scale(0),
@@ -1792,7 +1805,7 @@ mod tests {
17921805
],
17931806
PidBasis::Pdg,
17941807
vec![Conv::new(ConvType::UnpolPDF, 2212); 2],
1795-
v0::default_interps(2),
1808+
v0::default_interps(false, 2),
17961809
vec![Kinematics::Scale(0), Kinematics::X(0), Kinematics::X(1)],
17971810
Scales {
17981811
ren: ScaleFuncForm::Scale(0),
@@ -1822,7 +1835,7 @@ mod tests {
18221835
],
18231836
PidBasis::Pdg,
18241837
vec![Conv::new(ConvType::UnpolPDF, 2212); 2],
1825-
v0::default_interps(2),
1838+
v0::default_interps(false, 2),
18261839
vec![Kinematics::Scale(0), Kinematics::X(0), Kinematics::X(1)],
18271840
Scales {
18281841
ren: ScaleFuncForm::Scale(0),
@@ -1845,7 +1858,7 @@ mod tests {
18451858
],
18461859
PidBasis::Pdg,
18471860
vec![Conv::new(ConvType::UnpolPDF, 2212); 2],
1848-
v0::default_interps(2),
1861+
v0::default_interps(false, 2),
18491862
vec![Kinematics::Scale(0), Kinematics::X(0), Kinematics::X(1)],
18501863
Scales {
18511864
ren: ScaleFuncForm::Scale(0),
@@ -1872,7 +1885,7 @@ mod tests {
18721885
vec![channel![1.0 * (21, 21)]],
18731886
PidBasis::Pdg,
18741887
vec![Conv::new(ConvType::UnpolPDF, 2212); 2],
1875-
v0::default_interps(2),
1888+
v0::default_interps(false, 2),
18761889
vec![Kinematics::Scale(0), Kinematics::X(0), Kinematics::X(1)],
18771890
Scales {
18781891
ren: ScaleFuncForm::Scale(0),

pineappl/src/import_subgrid.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ mod tests {
178178
fn fill_packed_q1x2_subgrid_v1() {
179179
let mut subgrid =
180180
ImportSubgridV1::new(PackedArray::new(vec![0, 0, 0]), vec![Vec::new(); 3]);
181-
subgrid.fill(&v0::default_interps(2), &[0.0; 3], 0.0);
181+
subgrid.fill(&v0::default_interps(false, 2), &[0.0; 3], 0.0);
182182
}
183183

184184
#[test]

pineappl/src/interp_subgrid.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ mod tests {
183183

184184
#[test]
185185
fn fill_zero() {
186-
let interps = v0::default_interps(2);
186+
let interps = v0::default_interps(false, 2);
187187
let mut subgrid = InterpSubgridV1::new(&interps);
188188

189189
subgrid.fill(&interps, &[1000.0, 0.5, 0.5], 0.0);
@@ -204,7 +204,7 @@ mod tests {
204204

205205
#[test]
206206
fn fill_outside_range() {
207-
let interps = v0::default_interps(2);
207+
let interps = v0::default_interps(false, 2);
208208
let mut subgrid = InterpSubgridV1::new(&interps);
209209

210210
subgrid.fill(&interps, &[1000.0, 1e-10, 0.5], 0.0);
@@ -225,7 +225,7 @@ mod tests {
225225

226226
#[test]
227227
fn fill() {
228-
let interps = v0::default_interps(2);
228+
let interps = v0::default_interps(false, 2);
229229
let mut subgrid = InterpSubgridV1::new(&interps);
230230

231231
subgrid.fill(&interps, &[1000.0, 0.5, 0.5], 1.0);

0 commit comments

Comments
 (0)