@@ -190,7 +190,7 @@ the internal **subgrid structure**, similar to what the CLI `read` commands expo
190190use neopdf :: pdf :: PDF ;
191191
192192fn main () {
193- let pdf_name = " NNPDF40_nnlo_as_01180.neopdf.lz4 " ;
193+ let pdf_name = " NNPDF40_nnlo_as_01180" ;
194194 let member = 0usize ;
195195 let pdf = PDF :: load (pdf_name , member );
196196
@@ -219,19 +219,15 @@ fn main() {
219219 println! (" x knots: len = {}" , sg . xs. len ());
220220 println! (" Q2 knots: len = {}" , sg . q2s. len ());
221221 }
222-
223- // --- Parameter ranges ---
224- let ranges = pdf . param_ranges ();
225- println! (" \ n Parameter ranges: {:?}" , ranges );
226222}
227223```
228224
229225This is the Rust equivalent of running commands such as:
230226
231227``` bash
232- neopdf read metadata NNPDF40_nnlo_as_01180.neopdf.lz4
233- neopdf read num_subgrids NNPDF40_nnlo_as_01180.neopdf.lz4
234- neopdf read subgrid-info NNPDF40_nnlo_as_01180.neopdf.lz4 --member=0 --subgrid-index=0
228+ neopdf read metadata NNPDF40_nnlo_as_01180
229+ neopdf read num_subgrids NNPDF40_nnlo_as_01180
230+ neopdf read subgrid-info NNPDF40_nnlo_as_01180 --member=0 --subgrid-index=0
235231```
236232
237233---
@@ -245,7 +241,7 @@ use neopdf::gridpdf::ForcePositive;
245241use neopdf :: pdf :: PDF ;
246242
247243fn main () {
248- let pdf_name = " NNPDF40_nnlo_as_01180.neopdf.lz4 " ;
244+ let pdf_name = " NNPDF40_nnlo_as_01180" ;
249245 let mut pdf = PDF :: load (pdf_name , 0 );
250246
251247 // Set positivity clipping for a single member.
@@ -277,9 +273,6 @@ compressed `NeoPDF` grid with the extension `.neopdf.lz4`.
277273 that actually fill the grid are highlighted.
278274
279275``` rust linenums="1"
280- use std :: env;
281-
282- use ndarray :: Array1 ;
283276use neopdf :: gridpdf :: GridArray ;
284277use neopdf :: metadata :: {InterpolatorType , MetaData , SetType };
285278use neopdf :: pdf :: PDF ;
@@ -327,7 +320,8 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
327320 let q2s = sg . q2s. clone ();
328321
329322 // Compute grid_data as [nucleon][alpha][pid][kt][x][q2].
330- // Here we assume a standard LHAPDF-like grid: no explicit A or alpha_s dependence.
323+ // Here we assume a standard LHAPDF-like grid: no explicit
324+ // A or alpha_s dependence.
331325 let n_nuc = nucleons . len (). max (1 );
332326 let n_alp = alphas . len (). max (1 );
333327 let n_kt = kts . len (). max (1 );
@@ -338,29 +332,23 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
338332 let mut data = vec! [0.0_f64 ; n_nuc * n_alp * n_pid * n_kt * n_x * n_q2 ];
339333 let mut idx = 0 ;
340334
341- for _ in 0 .. n_nuc {
342- for _ in 0 .. n_alp {
343- for pid in pids . iter () {
344- for _kt in 0 .. n_kt {
345- for & x in & xs {
346- for & q2 in & q2s {
347- let val = pdf . xfxq2 (* pid , & [x , q2 ]);
348- data [idx ] = val ;
349- idx += 1 ;
350- }
351- }
352- }
353- }
354- }
355- }
356-
357- let grid = GridData :: Grid6D (
358- ndarray :: Array :: from_shape_vec (
359- (n_nuc , n_alp , n_pid , n_kt , n_x , n_q2 ),
360- data ,
361- )?
362- . into_dyn (),
363- );
335+ data . iter_mut ()
336+ . zip (
337+ (0 .. n_nuc )
338+ . flat_map (| _ | (0 .. n_alp ))
339+ . flat_map (| _ | pids . iter ())
340+ . flat_map (| pid | (0 .. n_kt ). map (move | _ | pid ))
341+ . flat_map (| pid | xs . iter (). map (move | & x | (pid , x )))
342+ . flat_map (| (pid , x )| q2s . iter (). map (move | & q2 | (pid , x , q2 ))),
343+ )
344+ . for_each (| (slot , (pid , x , q2 ))| {
345+ * slot = pdf . xfxq2 (* pid , & [x , q2 ]);
346+ });
347+
348+ let grid = GridData :: Grid6D (ndarray :: Array :: from_shape_vec (
349+ (n_nuc , n_alp , n_pid , n_kt , n_x , n_q2 ),
350+ data ,
351+ )? );
364352
365353 // Build parameter ranges for this subgrid.
366354 let nucleons_range = ParamRange :: new (
@@ -375,7 +363,8 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
375363 kts . first (). copied (). unwrap_or (0.0 ),
376364 kts . last (). copied (). unwrap_or (0.0 ),
377365 );
378- let x_range = ParamRange :: new (xs . first (). copied (). unwrap (), xs . last (). copied (). unwrap ());
366+ let x_range =
367+ ParamRange :: new (xs . first (). copied (). unwrap (), xs . last (). copied (). unwrap ());
379368 let q2_range =
380369 ParamRange :: new (q2s . first (). copied (). unwrap (), q2s . last (). copied (). unwrap ());
381370
0 commit comments