Skip to content

Commit dcd6082

Browse files
committed
Use Conv in the CAPI
1 parent 480a13f commit dcd6082

9 files changed

Lines changed: 48 additions & 47 deletions

File tree

examples/cpp/advanced-filling.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ int main() {
3737
// hadrons. Then we add the corresponding PID of each of the hadrons, and finally define the
3838
// Basis onto which the partons are mapped.
3939
pineappl_pid_basis pid_basis = PINEAPPL_PID_BASIS_EVOL;
40-
int32_t pdg_ids[2] = { 2212, 2212};
41-
pineappl_conv_type h1 = PINEAPPL_CONV_TYPE_UNPOL_PDF;
42-
pineappl_conv_type h2 = PINEAPPL_CONV_TYPE_UNPOL_PDF;
43-
pineappl_conv_type convolution_types[2] = { h1, h2 };
40+
pineappl_conv convs[] = {
41+
{ PINEAPPL_CONV_TYPE_UNPOL_PDF, 2212 },
42+
{ PINEAPPL_CONV_TYPE_UNPOL_PDF, 2212 },
43+
};
4444

4545
// Define the kinematics required for this process. In the following example we have ONE
4646
// single scale and two momentum fractions (corresponding to the two initial-state hadrons).
@@ -74,7 +74,7 @@ int main() {
7474
// exponents in `orders`, 24 bins given as the 25 limits in `bins` and potential extra
7575
// parameters in `keyval`.
7676
auto* grid = pineappl_grid_new2(bins.size() - 1, bins.data(), orders.size() / 5, orders.data(),
77-
channels, pid_basis, convolution_types, pdg_ids, 3, interpolations, kinematics, mu_scales);
77+
channels, pid_basis, convs, 3, interpolations, kinematics, mu_scales);
7878

7979
// now we no longer need `channels`
8080
pineappl_channels_delete(channels);

examples/cpp/fill-grid.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -180,10 +180,10 @@ int main() {
180180
// hadrons. Then we add the corresponding PID of each of the hadrons, and finally define the
181181
// Basis onto which the partons are mapped.
182182
pineappl_pid_basis pid_basis = PINEAPPL_PID_BASIS_EVOL;
183-
int32_t pdg_ids[2] = { 2212, 2212};
184-
pineappl_conv_type h1 = PINEAPPL_CONV_TYPE_UNPOL_PDF;
185-
pineappl_conv_type h2 = PINEAPPL_CONV_TYPE_UNPOL_PDF;
186-
pineappl_conv_type convolution_types[2] = { h1, h2 };
183+
pineappl_conv convs[] = {
184+
{ PINEAPPL_CONV_TYPE_UNPOL_PDF, 2212 },
185+
{ PINEAPPL_CONV_TYPE_UNPOL_PDF, 2212 },
186+
};
187187

188188
// Define the kinematics required for this process. In the following example we have ONE
189189
// single scale and two momentum fractions (corresponding to the two initial-state hadrons).
@@ -217,7 +217,7 @@ int main() {
217217
// exponents in `orders`, 24 bins given as the 25 limits in `bins` and potential extra
218218
// parameters in `keyval`.
219219
auto* grid = pineappl_grid_new2(bins.size() - 1, bins.data(), orders.size() / 5, orders.data(),
220-
channels, pid_basis, convolution_types, pdg_ids, 3, interpolations, kinematics, mu_scales);
220+
channels, pid_basis, convs, 3, interpolations, kinematics, mu_scales);
221221

222222
// now we no longer need `keyval` and `channels`
223223
pineappl_channels_delete(channels);

examples/fortran/lhapdf_example.f90

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ program lhapdf_example
1111
type(pineappl_kinematics) :: kinematics(3)
1212
type(pineappl_scale_func_form) :: mu_scales_form(3)
1313
type(pineappl_interp) :: interp_info(3)
14+
type(pineappl_conv) :: convolutions(2)
1415

1516
type(pineappl_xfx) :: xfx
1617
type(pineappl_alphas) :: alphas
@@ -53,8 +54,13 @@ program lhapdf_example
5354
pineappl_scale_func_form(PINEAPPL_SCALE_FUNC_FORM_NO_SCALE, pineappl_scale_func_form_body(0, 0)) &
5455
]
5556

57+
convolutions = [ &
58+
pineappl_conv(pineappl_unpol_pdf, 2212), &
59+
pineappl_conv(pineappl_unpol_pdf, 2212) &
60+
]
61+
5662
grid = pineappl_grid_new2(2, [0.0_dp, 1.0_dp, 2.0_dp], 1, [2_1, 0_1, 0_1, 0_1, 0_1], channels, pineappl_pdg, &
57-
[pineappl_unpol_pdf, pineappl_unpol_pdf], [2212, 2212], 3, interp_info, kinematics, mu_scales_form)
63+
convolutions, 3, interp_info, kinematics, mu_scales_form)
5864

5965
call pineappl_grid_fill_all2(grid, 0, 0.5_dp, [100.0_dp, 0.5_dp, 0.5_dp], [0.5_dp, 0.5_dp, 0.5_dp])
6066
call pineappl_grid_fill_all2(grid, 0, 1.5_dp, [100.0_dp, 0.5_dp, 0.5_dp], [1.5_dp, 1.5_dp, 1.5_dp])

examples/fortran/pineappl.f90

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ module pineappl
105105
type(pineappl_scale_func_form_body) :: body
106106
end type
107107

108+
type, bind(c) :: pineappl_conv
109+
integer(kind(pineappl_conv_type)) :: conv_type
110+
integer(c_int32_t) :: pid
111+
end type
112+
108113
type, bind(c) :: pineappl_interp
109114
real(c_double) :: min
110115
real(c_double) :: max
@@ -345,18 +350,17 @@ type (c_ptr) function grid_new(lumi, orders, order_params, bins, bin_limits, key
345350
end function
346351

347352
type (c_ptr) function grid_new2(bins, bin_limits, orders, order_params, channels, &
348-
pid_basis, convolution_types, convolution_pdg_ids, interpolations, interp_info, &
353+
pid_basis, convolutions, interpolations, interp_info, &
349354
kinematics, mu_scales) bind(c, name = 'pineappl_grid_new2')
350355
use iso_c_binding
351356
import ! so we can use pineappl_kinematics and pineappl_interp
352357

353358
integer (c_int32_t), value :: pid_basis
354359
type (c_ptr), value :: channels
355-
integer (c_int32_t) :: convolution_types(*)
356360
integer (c_size_t), value :: orders, bins, interpolations
357361
integer (c_int8_t) :: order_params(*)
358362
real (c_double) :: bin_limits(*)
359-
integer (c_int32_t) :: convolution_pdg_ids(*)
363+
type (pineappl_conv) :: convolutions(*)
360364
type (pineappl_kinematics) :: kinematics(*)
361365
type (pineappl_interp) :: interp_info(*)
362366
type (pineappl_scale_func_form) :: mu_scales(*)
@@ -932,17 +936,15 @@ type (pineappl_grid) function pineappl_grid_new(lumi, orders, order_params, bins
932936
end function
933937

934938
type (pineappl_grid) function pineappl_grid_new2(bins, bin_limits, orders, order_params, &
935-
channels, pid_basis, convolution_types, convolution_pdg_ids, interpolations, interp_info, &
936-
kinematics, mu_scales)
939+
channels, pid_basis, convolutions, interpolations, interp_info, kinematics, mu_scales)
937940
implicit none
938941

939942
integer(kind(pineappl_pid_basis)), intent(in) :: pid_basis
940943
type (pineappl_channels), intent(in) :: channels
941944
integer, intent(in) :: orders, bins, interpolations
942945
integer(int8), dimension(5 * orders), intent(in) :: order_params
943946
real (dp), dimension(bins + 1), intent(in) :: bin_limits
944-
integer(kind(pineappl_conv_type)), dimension(interpolations - 1), intent(in) :: convolution_types
945-
integer, dimension(interpolations - 1), intent(in) :: convolution_pdg_ids
947+
type (pineappl_conv), dimension(*), intent(in), target :: convolutions
946948
type (pineappl_kinematics), dimension(interpolations), intent(in), target :: kinematics
947949
type (pineappl_interp), dimension(interpolations), intent(in) :: interp_info
948950
type (pineappl_scale_func_form), dimension(interpolations) :: mu_scales
@@ -956,8 +958,7 @@ type (pineappl_grid) function pineappl_grid_new2(bins, bin_limits, orders, order
956958
order_params, &
957959
channels%ptr, &
958960
pid_basis, &
959-
convolution_types, &
960-
convolution_pdg_ids, &
961+
convolutions, &
961962
int(interpolations, c_size_t), &
962963
interp_info, &
963964
kinematics, &

examples/fortran/test.f90

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ program test_pineappl
1111
type(pineappl_kinematics) :: kinematics(3)
1212
type(pineappl_scale_func_form) :: mu_scales_form(3)
1313
type(pineappl_interp) :: interp_info(3)
14+
type(pineappl_conv) :: convolutions(2)
1415

1516
real(dp), allocatable :: result(:), bin_limits_left(:), bin_limits_right(:), bin_normalizations(:)
1617

@@ -63,8 +64,13 @@ program test_pineappl
6364
pineappl_scale_func_form(PINEAPPL_SCALE_FUNC_FORM_NO_SCALE, pineappl_scale_func_form_body(0, 0)) &
6465
]
6566

67+
convolutions = [ &
68+
pineappl_conv(pineappl_unpol_pdf, 2212), &
69+
pineappl_conv(pineappl_unpol_pdf, 2212) &
70+
]
71+
6672
grid = pineappl_grid_new2(2, [0.0_dp, 1.0_dp, 2.0_dp], 1, [2_1, 0_1, 0_1, 0_1, 0_1], channels, pineappl_pdg, &
67-
[pineappl_unpol_pdf, pineappl_unpol_pdf], [2212, 2212], 3, interp_info, kinematics, mu_scales_form)
73+
convolutions, 3, interp_info, kinematics, mu_scales_form)
6874

6975
if (pineappl_grid_order_count(grid) /= 1) then
7076
write(*, *) "pineappl_grid_order_count(): ", pineappl_grid_order_count(grid)
@@ -131,7 +137,7 @@ program test_pineappl
131137
end if
132138

133139
grid2 = pineappl_grid_new2(1, [2.0_dp, 3.0_dp], 1, [2_1, 0_1, 0_1, 0_1, 0_1], channels, pineappl_pdg, &
134-
[pineappl_unpol_pdf, pineappl_unpol_pdf], [2212, 2212], 3, interp_info, kinematics, mu_scales_form)
140+
convolutions, 3, interp_info, kinematics, mu_scales_form)
135141

136142
call pineappl_grid_merge_and_delete(grid, grid2)
137143

examples/object-oriented-cpp/dyaa.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,12 @@ int main() {
130130

131131
// --- Construct the PineAPPL grid
132132
pineappl_pid_basis pid_basis = PINEAPPL_PID_BASIS_EVOL;
133-
std::vector<std::int32_t> pids = {2212, 2212};
134133

135134
// Define the types of convolutions
136-
pineappl_conv_type h1 = PINEAPPL_CONV_TYPE_UNPOL_PDF;
137-
pineappl_conv_type h2 = PINEAPPL_CONV_TYPE_UNPOL_PDF;
138-
std::vector<pineappl_conv_type> convolution_types = {h1, h2};
135+
std::vector<pineappl_conv> convolutions = {
136+
{PINEAPPL_CONV_TYPE_UNPOL_PDF, 2212},
137+
{PINEAPPL_CONV_TYPE_UNPOL_PDF, 2212}
138+
};
139139

140140
// Define the Kinematics
141141
pineappl_kinematics scales = {PINEAPPL_KINEMATICS_SCALE, 0};
@@ -164,7 +164,7 @@ int main() {
164164
pineappl_scale_func_form no_scale_form = {PINEAPPL_SCALE_FUNC_FORM_NO_SCALE, 0};
165165
std::vector<pineappl_scale_func_form> mu_scales = {scale_form, scale_form, no_scale_form};
166166

167-
PineAPPL::Grid grid(orders, channels, pid_basis, pids, convolution_types,
167+
PineAPPL::Grid grid(orders, channels, pid_basis, convolutions,
168168
kinematics, interpolations, bins, mu_scales);
169169

170170
// fill the grid with phase-space points

pineappl_capi/cbindgen.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ rename_variants = "ScreamingSnakeCase"
3535

3636
[export.rename]
3737
"Channels" = "pineappl_channels"
38+
"Conv" = "pineappl_conv"
3839
"ConvType" = "pineappl_conv_type"
3940
"Grid" = "pineappl_grid"
4041
"GridOptFlags" = "pineappl_gof"

pineappl_capi/include/PineAPPL.hpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,21 +153,18 @@ struct Grid {
153153
Grid(std::vector<Order> &orders,
154154
const Channels &channels,
155155
pineappl_pid_basis pid_basis,
156-
std::vector<int32_t> pids,
157-
std::vector<pineappl_conv_type> &convolution_types,
156+
std::vector<pineappl_conv> &convolutions,
158157
std::vector<pineappl_kinematics> &kinematics,
159158
std::vector<pineappl_interp> &interp,
160159
std::vector<double> &bin_limits,
161160
std::vector<pineappl_scale_func_form> &mu_scales)
162161
: Grid(nullptr) {
163162
const std::size_t n_orders = orders.size();
164163
const std::size_t n_bins = bin_limits.size() - 1;
165-
const std::size_t n_convs = convolution_types.size();
164+
const std::size_t n_convs = convolutions.size();
166165

167166
// Various checks for the input arguments
168167
assert(n_orders >= 1 && "Orders cannot be empty.");
169-
assert(n_convs == pids.size() &&
170-
"Number of convolutions and pids are different.");
171168
assert(n_convs == kinematics.size() - 1 &&
172169
"Mismatch in the number of convolutions and the kinematics.");
173170
assert(kinematics.size() == interp.size() &&
@@ -186,7 +183,7 @@ struct Grid {
186183

187184
this->raw = pineappl_grid_new2(
188185
n_bins, bin_limits.data(), n_orders, raw_orders.data(), channels.raw,
189-
pid_basis, convolution_types.data(), pids.data(), interp.size(),
186+
pid_basis, convolutions.data(), interp.size(),
190187
interp.data(), kinematics.data(), mu_scales.data());
191188
}
192189

pineappl_capi/src/lib.rs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ use std::collections::HashMap;
6767
use std::ffi::{CStr, CString};
6868
use std::fs::File;
6969
use std::mem;
70-
use std::os::raw::{c_char, c_int, c_void};
70+
use std::os::raw::{c_char, c_void};
7171
use std::path::Path;
7272
use std::slice;
7373

@@ -1625,8 +1625,7 @@ pub unsafe extern "C" fn pineappl_grid_new2(
16251625
order_params: *const u8,
16261626
channels: *const Channels,
16271627
pid_basis: PidBasis,
1628-
convolution_types: *const ConvType,
1629-
convolution_pdg_ids: *const c_int,
1628+
convolutions: *const Conv,
16301629
interpolations: usize,
16311630
interps: *const Interp,
16321631
kinematics: *const Kinematics,
@@ -1649,19 +1648,10 @@ pub unsafe extern "C" fn pineappl_grid_new2(
16491648
.collect();
16501649
let Channels {
16511650
channels,
1652-
convolutions,
1651+
convolutions: nb_convolutions,
16531652
} = unsafe { &*channels }.clone();
16541653

1655-
// Construct the convolution objects
1656-
let convolution_types =
1657-
unsafe { slice::from_raw_parts(convolution_types, convolutions).to_vec() };
1658-
let convolution_pdg_ids =
1659-
unsafe { slice::from_raw_parts(convolution_pdg_ids, convolutions).to_vec() };
1660-
let convolutions = convolution_types
1661-
.iter()
1662-
.zip(convolution_pdg_ids)
1663-
.map(|(&convolution_type, pdg_id)| Conv::new(convolution_type, pdg_id))
1664-
.collect();
1654+
let convolutions = unsafe { slice::from_raw_parts(convolutions, nb_convolutions) }.to_vec();
16651655

16661656
// Grid interpolations
16671657
let interp_slices = unsafe { std::slice::from_raw_parts(interps, interpolations) };

0 commit comments

Comments
 (0)