From 9c012f414558b7ee500c5bb18df4f299a631db68 Mon Sep 17 00:00:00 2001 From: peterkrack Date: Fri, 14 Nov 2025 16:43:26 +0100 Subject: [PATCH 1/5] add delete bins to capi. --- pineappl_capi/src/lib.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/pineappl_capi/src/lib.rs b/pineappl_capi/src/lib.rs index b2ef04a47..c5f18748c 100644 --- a/pineappl_capi/src/lib.rs +++ b/pineappl_capi/src/lib.rs @@ -847,7 +847,7 @@ pub unsafe extern "C" fn pineappl_grid_read(filename: *const c_char) -> Box Date: Mon, 17 Nov 2025 15:28:59 +0100 Subject: [PATCH 2/5] resolve requested small changes. --- pineappl_capi/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pineappl_capi/src/lib.rs b/pineappl_capi/src/lib.rs index c5f18748c..22ec18b2f 100644 --- a/pineappl_capi/src/lib.rs +++ b/pineappl_capi/src/lib.rs @@ -847,7 +847,7 @@ pub unsafe extern "C" fn pineappl_grid_read(filename: *const c_char) -> Box Date: Mon, 17 Nov 2025 18:59:08 +0100 Subject: [PATCH 3/5] use delete_bins in advanced_filling.cpp example. --- examples/cpp/advanced-filling.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/examples/cpp/advanced-filling.cpp b/examples/cpp/advanced-filling.cpp index 7b8be66c1..4e330355e 100644 --- a/examples/cpp/advanced-filling.cpp +++ b/examples/cpp/advanced-filling.cpp @@ -173,6 +173,37 @@ int main() { pineappl_grid_write(grid, "advanced-filling.pineappl.lz4"); + //-----------------------------------------------------------------------// + + // Remove the bins for which the convolution is zero. + std::vector zero_indices; + zero_indices.reserve(dxsec.size()); + for (size_t i = 0; i < dxsec.size(); ++i) { + if (dxsec[i] == 0.0) { + zero_indices.push_back(static_cast(i)); + } + } + pineappl_grid_delete_bins(grid, zero_indices.data(), zero_indices.size()); + + std::vector dxsec_no_zeros(pineappl_grid_bin_count(grid)); + pineappl_grid_convolve(grid, xfx, alphas, pdf_states, pdf.get(), order_mask, channel_mask, + nullptr, 1, mmu_scales.data(), dxsec_no_zeros.data()); + + // Print table header + std::cout << " " << std::endl; + std::cout << std::setw(10) << "bin left" + << std::setw(12) << "bin right" + << std::setw(15) << "dsig/dx" << std::endl; + std::cout << std::string(37, '-') << std::endl; + + // Loop through bins and print results + for (size_t i = 0; i < dxsec_no_zeros.size(); ++i) { + std::cout << std::setw(10) << bins[i] + << std::setw(12) << bins[i + 1] + << std::setw(15) << std::scientific << std::setprecision(3) << dxsec_no_zeros[i] + << std::endl; + } + // release memory pineappl_grid_delete(grid); } From a1a089d7e107be2ffd68a211add92d4046b31a85 Mon Sep 17 00:00:00 2001 From: peterkrack Date: Mon, 17 Nov 2025 19:02:12 +0100 Subject: [PATCH 4/5] Update expected output. --- examples/cpp/advanced-filling.output | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/cpp/advanced-filling.output b/examples/cpp/advanced-filling.output index bfcfdfe51..173db1e88 100644 --- a/examples/cpp/advanced-filling.output +++ b/examples/cpp/advanced-filling.output @@ -24,3 +24,7 @@ 2.100e+00 2.200e+00 0.000e+00 2.200e+00 2.300e+00 0.000e+00 2.300e+00 2.400e+00 0.000e+00 + + bin left bin right dsig/dx +------------------------------------- + 0.000e+00 1.000e-01 6.683e+03 From 7188e8adcf0356dc7f7be75586f1392043964d46 Mon Sep 17 00:00:00 2001 From: Radonirinaunimi Date: Mon, 17 Nov 2025 21:34:43 +0100 Subject: [PATCH 5/5] Fix formatting --- pineappl_capi/src/lib.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pineappl_capi/src/lib.rs b/pineappl_capi/src/lib.rs index 22ec18b2f..cdab06e62 100644 --- a/pineappl_capi/src/lib.rs +++ b/pineappl_capi/src/lib.rs @@ -873,9 +873,11 @@ pub unsafe extern "C" fn pineappl_grid_merge_bins(grid: *mut Grid, from: usize, /// /// TODO #[no_mangle] -pub unsafe extern "C" fn pineappl_grid_delete_bins(grid: *mut Grid, - bin_indices_ptr: *const usize, - bin_indices_len: usize) { +pub unsafe extern "C" fn pineappl_grid_delete_bins( + grid: *mut Grid, + bin_indices_ptr: *const usize, + bin_indices_len: usize, +) { let grid = unsafe { &mut *grid }; let bin_indices = unsafe { std::slice::from_raw_parts(bin_indices_ptr, bin_indices_len) }; grid.delete_bins(bin_indices);