1 /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 c-style: "K&R" -*- */
4 libgpiv - library for Particle Image Velocimetry
6 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008
9 This file is part of libgpiv.
11 Libgpiv is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2, or (at your option)
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software Foundation,
23 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27 ------------------------------------------------------------------------------
31 gpiv_piv_parameters_set
32 gpiv_piv_default_parameters
33 gpiv_get_pivparameter_from_resources
35 gpiv_piv_read_parameters
36 gpiv_piv_check_parameters_read
37 gpiv_piv_testonly_parameters
38 gpiv_piv_testadjust_parameters
39 gpiv_piv_print_parameters
40 gpiv_piv_cp_parameters
41 gpiv_piv_cp_undef_parameters
42 gpiv_piv_fread_hdf5_parameters
43 gpiv_piv_fwrite_hdf5_parameters
45 LAST MODIFICATION DATE: $Id: piv_par.c,v 1.6 2008-09-25 13:19:53 gerber Exp $
46 --------------------------------------------------------------------- */
51 * Default values and keys of GpivPivPar
54 PIVPAR_DEFAULT__INT_GEO
= 0, /**< Default parameter for int_geo of __GpivPivPar */
55 PIVPAR_DEFAULT__COL_START
= 0, /**< Default parameter for col_start of __GpivPivPar */
56 PIVPAR_DEFAULT__COL_END
= 255, /**< Default parameter for col_end of __GpivPivPar */
57 PIVPAR_DEFAULT__ROW_START
= 0, /**< Default parameter for row_start of __GpivPivPar */
58 PIVPAR_DEFAULT__ROW_END
= 255, /**< Default parameter for row_end of __GpivPivPar */
59 PIVPAR_DEFAULT__INT_LINE_ROW
= 64, /**< Default parameter for int_line_row of __GpivPivPar */
60 PIVPAR_DEFAULT__INT_LINE_ROW_START
= 0, /**< Default parameter for int_line_row_start of __GpivPivPar */
61 PIVPAR_DEFAULT__INT_LINE_ROW_END
= 127, /**< Default parameter for int_line_row_end of __GpivPivPar */
62 PIVPAR_DEFAULT__INT_LINE_COL
= 64, /**< Default parameter for int_line_col of __GpivPivPar */
63 PIVPAR_DEFAULT__INT_LINE_COL_START
= 0, /**< Default parameter for int_line_col_start of __GpivPivPar */
64 PIVPAR_DEFAULT__INT_LINE_COL_END
= 127, /**< Default parameter for int_line_col_end of __GpivPivPar */
65 PIVPAR_DEFAULT__INT_POINT_COL
= 64, /**< Default parameter for int_line_col_end of __GpivPivPar */
66 PIVPAR_DEFAULT__INT_POINT_ROW
= 64, /**< Default parameter for int_point_row of __GpivPivPar */
67 PIVPAR_DEFAULT__INT_SIZE_F
= 32, /**< Default parameter for final interrogation size of __GpivPivPar */
68 PIVPAR_DEFAULT__INT_SIZE_I
= 64, /**< Default parameter for initial int_size */
69 PIVPAR_DEFAULT__INT_SHIFT
= 10, /**< Default parameter for int_shift of __GpivPivPar */
70 PIVPAR_DEFAULT__PRE_SHIFT_COL
= 0, /**< Default parameter for pre_shift_col of __GpivPivPar */
71 PIVPAR_DEFAULT__PRE_SHIFT_ROW
= 0, /**< Default parameter for pre_shift_row of __GpivPivPar */
72 PIVPAR_DEFAULT__IFIT
= 1, /**< Default parameter for ifit of __GpivPivPar */
73 PIVPAR_DEFAULT__PEAK
= 1, /**< Default parameter for peak of __GpivPivPar */
74 PIVPAR_DEFAULT__INT_SCHEME
= 4, /**< Default parameter for int_scheme of __GpivPivPar */
75 PIVPAR_DEFAULT__GAUSS_WEIGHT_IA
= 1, /**< Default parameter for gauss_weight_ia of __GpivPivPar */
76 PIVPAR_DEFAULT__SPOF_FILTER
= 0 /**< Default parameter for spof_filter of __GpivPivPar */
80 const gchar
*PIVPAR_KEY__INT_GEO
= "Int_geo"; /**< Key for int_geo of __GpivPivPar */
81 const gchar
*PIVPAR_KEY__COL_START
= "Col_start"; /**< Key for col_start of __GpivPivPar */
82 const gchar
*PIVPAR_KEY__COL_END
= "Col_end"; /**< Key for col_end of __GpivPivPar */
83 const gchar
*PIVPAR_KEY__ROW_START
= "Row_start"; /**< Key for row_start of __GpivPivPar */
84 const gchar
*PIVPAR_KEY__ROW_END
= "Row_end"; /**< Key for row_end of __GpivPivPar */
85 const gchar
*PIVPAR_KEY__INT_LINE_ROW
= "Int_line_row"; /**< Key for int_line_row of __GpivPivPar */
86 const gchar
*PIVPAR_KEY__INT_LINE_ROW_START
= "Int_line_row_start"; /**< Key for int_line_row_start of __GpivPivPar */
87 const gchar
*PIVPAR_KEY__INT_LINE_ROW_END
= "Int_line_row_end"; /**< Key for int_line_row_end of __GpivPivPar */
88 const gchar
*PIVPAR_KEY__INT_LINE_COL
= "Int_line_col"; /**< Key for int_line_col of __GpivPivPar */
89 const gchar
*PIVPAR_KEY__INT_LINE_COL_START
= "Int_line_col_start"; /**< Key for int_line_col_start of __GpivPivPar */
90 const gchar
*PIVPAR_KEY__INT_LINE_COL_END
= "Int_line_col_end"; /**< Key for int_line_col_end of __GpivPivPar */
91 const gchar
*PIVPAR_KEY__INT_POINT_COL
= "Int_point_col"; /**< Key for int_line_col_end of __GpivPivPar */
92 const gchar
*PIVPAR_KEY__INT_POINT_ROW
= "Int_point_row"; /**< Key for int_point_row of __GpivPivPar */
93 const gchar
*PIVPAR_KEY__INT_SIZE_F
= "Int_size_f"; /**< Key for int_size_f of __GpivPivPar */
94 const gchar
*PIVPAR_KEY__INT_SIZE_I
= "Int_size_i"; /**< Key for int_size_i */
95 const gchar
*PIVPAR_KEY__INT_SHIFT
= "Int_shift"; /**< Key for int_shift of __GpivPivPar */
96 const gchar
*PIVPAR_KEY__PRE_SHIFT_COL
= "Pre_shift_col"; /**< Key for pre_shift_col of __GpivPivPar */
97 const gchar
*PIVPAR_KEY__PRE_SHIFT_ROW
= "Pre_shift_row"; /**< Key for pre_shift_row of __GpivPivPar */
98 const gchar
*PIVPAR_KEY__IFIT
= "Ifit"; /**< Key for ifit of __GpivPivPar */
99 const gchar
*PIVPAR_KEY__PEAK
= "Peak"; /**< Key for peak of __GpivPivPar */
100 const gchar
*PIVPAR_KEY__INT_SCHEME
= "Int_scheme"; /**< Key for int_scheme of __GpivPivPar */
101 const gchar
*PIVPAR_KEY__GAUSS_WEIGHT_IA
= "Gauss_weight_ia"; /**< Key for gauss_weight_ia of __GpivPivPar */
102 const gchar
*PIVPAR_KEY__SPOF_FILTER
= "Spof_filter"; /**< Key for spof_filter of __GpivPivPar */
107 piv_ovwrt_parameters (const GpivPivPar
*piv_par_src
,
108 GpivPivPar
*piv_par_dest
,
113 attr_info (hid_t loc_id
,
119 obtain_pivpar_fromline (char line
[],
129 gpiv_piv_default_parameters (GpivPivPar
*piv_par_default
,
132 /*-----------------------------------------------------------------------------
134 * Sets default parameter values
137 * force: flag to enforce parameters set to defaults
140 * piv_par_default: structure of piv evaluation parameters
143 *---------------------------------------------------------------------------*/
145 if (!piv_par_default
->int_geo__set
|| force
)
146 piv_par_default
->int_geo
= PIVPAR_DEFAULT__INT_GEO
;
147 if (!piv_par_default
->col_start__set
|| force
)
148 piv_par_default
->col_start
= PIVPAR_DEFAULT__COL_START
;
149 if (!piv_par_default
->col_end__set
|| force
)
150 piv_par_default
->col_end
= PIVPAR_DEFAULT__COL_END
;
151 if (!piv_par_default
->row_start__set
|| force
)
152 piv_par_default
->row_start
= PIVPAR_DEFAULT__ROW_START
;
153 if (!piv_par_default
->row_end__set
|| force
)
154 piv_par_default
->row_end
= PIVPAR_DEFAULT__ROW_END
;
155 if (!piv_par_default
->int_line_row_start__set
|| force
)
156 piv_par_default
->int_line_row_start
= PIVPAR_DEFAULT__INT_LINE_ROW_START
;
157 if (!piv_par_default
->int_line_row_end__set
|| force
)
158 piv_par_default
->int_line_row_end
= PIVPAR_DEFAULT__INT_LINE_ROW_END
;
159 if (!piv_par_default
->int_line_col_start__set
|| force
)
160 piv_par_default
->int_line_col_start
= PIVPAR_DEFAULT__INT_LINE_COL_START
;
161 if (!piv_par_default
->int_line_col_end__set
|| force
)
162 piv_par_default
->int_line_col_end
= PIVPAR_DEFAULT__INT_LINE_COL_END
;
163 if (!piv_par_default
->int_point_col__set
|| force
)
164 piv_par_default
->int_point_col
= PIVPAR_DEFAULT__INT_POINT_COL
;
165 if (!piv_par_default
->int_point_row__set
|| force
)
166 piv_par_default
->int_point_row
= PIVPAR_DEFAULT__INT_POINT_ROW
;
167 if (!piv_par_default
->int_size_f__set
|| force
)
168 piv_par_default
->int_size_f
= PIVPAR_DEFAULT__INT_SIZE_F
;
169 if (!piv_par_default
->int_size_i__set
|| force
)
170 piv_par_default
->int_size_i
= PIVPAR_DEFAULT__INT_SIZE_I
;
171 if (!piv_par_default
->int_shift__set
|| force
)
172 piv_par_default
->int_shift
= PIVPAR_DEFAULT__INT_SHIFT
;
173 if (!piv_par_default
->pre_shift_col__set
|| force
)
174 piv_par_default
->pre_shift_col
= PIVPAR_DEFAULT__PRE_SHIFT_COL
;
175 if (!piv_par_default
->pre_shift_row__set
|| force
)
176 piv_par_default
->pre_shift_row
= PIVPAR_DEFAULT__PRE_SHIFT_ROW
;
177 if (!piv_par_default
->ifit__set
|| force
)
178 piv_par_default
->ifit
= PIVPAR_DEFAULT__IFIT
;
179 if (!piv_par_default
->peak__set
|| force
)
180 piv_par_default
->peak
= PIVPAR_DEFAULT__PEAK
;
181 if (!piv_par_default
->int_scheme__set
|| force
)
182 piv_par_default
->int_scheme
= PIVPAR_DEFAULT__INT_SCHEME
;
183 if (!piv_par_default
->gauss_weight_ia__set
|| force
)
184 piv_par_default
->gauss_weight_ia
= PIVPAR_DEFAULT__GAUSS_WEIGHT_IA
;
185 if (!piv_par_default
->spof_filter__set
|| force
)
186 piv_par_default
->spof_filter
= PIVPAR_DEFAULT__SPOF_FILTER
;
189 gpiv_piv_parameters_set(piv_par_default
, TRUE
);
195 gpiv_piv_get_parameters_from_resources (const gchar
*localrc
,
196 const gboolean verbose
199 /*-----------------------------------------------------------------------------
201 * Reads piv parameters from system-wide gpiv.conf and $HOME/.gpivrc
202 *---------------------------------------------------------------------------*/
204 GpivPivPar
*piv_par
= g_new0 (GpivPivPar
, 1);
207 gpiv_piv_parameters_set (piv_par
, FALSE
);
208 gpiv_scan_parameter (GPIV_PIVPAR_KEY
, localrc
, piv_par
, verbose
);
209 gpiv_scan_resourcefiles (GPIV_PIVPAR_KEY
, piv_par
, verbose
);
218 gpiv_piv_parameters_set (GpivPivPar
*piv_par
,
221 /*-----------------------------------------------------------------------------
223 * Set flags for all piv_par__set
226 * flag: true (1) or false (0)
229 * piv_par: PIV evaluation parameters
232 * NULL on success or *err_msg on failure
233 *---------------------------------------------------------------------------*/
235 piv_par
->col_start__set
= flag
;
236 piv_par
->col_end__set
= flag
;
237 piv_par
->int_geo__set
= flag
;
238 piv_par
->ifit__set
= flag
;
239 piv_par
->int_line_row__set
= flag
;
240 piv_par
->int_line_row_start__set
= flag
;
241 piv_par
->int_line_row_end__set
= flag
;
242 piv_par
->int_line_col__set
= flag
;
243 piv_par
->int_line_col_start__set
= flag
;
244 piv_par
->int_line_col_end__set
= flag
;
245 piv_par
->int_point_col__set
= flag
;
246 piv_par
->int_point_row__set
= flag
;
247 piv_par
->int_size_f__set
= flag
;
248 piv_par
->int_size_i__set
= flag
;
249 piv_par
->int_shift__set
= flag
;
250 piv_par
->pre_shift_col__set
= flag
;
251 piv_par
->pre_shift_row__set
= flag
;
252 piv_par
->peak__set
= flag
;
253 piv_par
->print_par__set
= flag
;
254 piv_par
->print_piv__set
= flag
;
255 piv_par
->row_start__set
= flag
;
256 piv_par
->row_end__set
= flag
;
257 piv_par
->int_scheme__set
= flag
;
258 piv_par
->gauss_weight_ia__set
= flag
;
259 piv_par
->spof_filter__set
= flag
;
266 gpiv_piv_read_parameters (FILE *fp
,
268 const gboolean verbose
270 /*-----------------------------------------------------------------------------
272 * Read all parameters for PIV evaluation
274 *---------------------------------------------------------------------------*/
276 char line
[GPIV_MAX_CHARS
], par_name
[GPIV_MAX_CHARS
];
279 if (fp
== stdin
|| fp
== NULL
) {
280 while (gets (line
) != NULL
) {
281 obtain_pivpar_fromline (line
, piv_par
, verbose
);
284 while (fgets(line
, GPIV_MAX_CHARS
, fp
) != NULL
) {
285 obtain_pivpar_fromline (line
, piv_par
, verbose
);
296 gpiv_piv_check_parameters_read (GpivPivPar
*piv_par
,
297 const GpivPivPar
*piv_par_default
299 /*-----------------------------------------------------------------------------
301 * Check out if all parameters have been read
310 * NULL on success or *err_msg on failure
311 *---------------------------------------------------------------------------*/
313 gchar
*err_msg
= NULL
;
316 if (piv_par
->int_geo__set
== FALSE
) {
317 piv_par
->int_geo__set
= TRUE
;
318 if (piv_par_default
== NULL
) {
319 err_msg
= "Using default from libgpiv: ";
320 piv_par
->int_geo
= PIVPAR_DEFAULT__INT_GEO
;
322 err_msg
= "Using default: ";
323 piv_par
->int_geo
= piv_par_default
->int_geo
;
325 gpiv_warning("%s\n%s.%s %d", err_msg
,
331 if (piv_par
->int_geo
== GPIV_AOI
&& piv_par
->col_start__set
== FALSE
) {
332 piv_par
->col_start__set
= TRUE
;
333 if (piv_par_default
== NULL
) {
334 err_msg
= "Using default from libgpiv: ";
335 piv_par
->col_start
= PIVPAR_DEFAULT__COL_START
;
337 err_msg
= "Using default: ";
338 piv_par
->col_start
= piv_par_default
->col_start
;
340 gpiv_warning("%s\n%s.%s %d", err_msg
,
342 PIVPAR_KEY__COL_START
,
346 if (piv_par
->int_geo
== GPIV_AOI
&& piv_par
->col_end__set
== FALSE
) {
347 piv_par
->col_end__set
= TRUE
;
348 if (piv_par_default
== NULL
) {
349 err_msg
= "Using default from libgpiv: ";
350 piv_par
->col_end
= PIVPAR_DEFAULT__COL_END
;
352 err_msg
= "Using default: ";
353 piv_par
->col_end
= piv_par_default
->col_end
;
355 gpiv_warning("%s\n%s.%s %d", err_msg
,
361 if (piv_par
->int_geo
== GPIV_AOI
&& piv_par
->row_start__set
== FALSE
) {
362 piv_par
->row_start__set
= TRUE
;
363 if (piv_par_default
== NULL
) {
364 err_msg
= "Using default from libgpiv: ";
365 piv_par
->row_start
= PIVPAR_DEFAULT__ROW_START
;
367 err_msg
= "Using default: ";
368 piv_par
->row_start
= piv_par_default
->row_start
;
370 gpiv_warning("%s\n%s.%s %d", err_msg
,
372 PIVPAR_KEY__ROW_START
,
376 if (piv_par
->int_geo
== GPIV_AOI
&& piv_par
->row_end__set
== FALSE
) {
377 piv_par
->row_end__set
= TRUE
;
378 if (piv_par_default
== NULL
) {
379 err_msg
= "Using default from libgpiv: ";
380 piv_par
->row_end
= PIVPAR_DEFAULT__ROW_END
;
382 err_msg
= "Using default: ";
383 piv_par
->row_end
= piv_par_default
->row_end
;
385 gpiv_warning("%s\n%s.%s %d", err_msg
,
391 if (piv_par
->int_geo
== GPIV_LINE_R
392 && piv_par
->int_line_row__set
== FALSE
) {
393 piv_par
->int_line_row__set
= TRUE
;
394 if (piv_par_default
== NULL
) {
395 err_msg
= "Using default from libgpiv: ";
396 piv_par
->int_line_row
= PIVPAR_DEFAULT__INT_LINE_ROW
;
398 err_msg
= "Using default: ";
399 piv_par
->int_line_row
= piv_par_default
->int_line_row
;
401 gpiv_warning("%s\n%s.%s %d", err_msg
,
403 PIVPAR_KEY__INT_LINE_ROW
,
404 piv_par
->int_line_row
);
407 if (piv_par
->int_geo
== GPIV_LINE_C
408 && piv_par
->int_line_row_start__set
== FALSE
) {
409 piv_par
->int_line_row_start__set
= TRUE
;
410 if (piv_par_default
== NULL
) {
411 err_msg
= "Using default from libgpiv: ";
412 piv_par
->int_line_row_start
=
413 PIVPAR_DEFAULT__INT_LINE_ROW_START
;
415 err_msg
= "Using default: ";
416 piv_par
->int_line_row_start
= piv_par_default
->int_line_row_start
;
418 gpiv_warning("%s\n%s.%s %d", err_msg
,
420 PIVPAR_KEY__INT_LINE_ROW_START
,
421 piv_par
->int_line_row_start
);
424 if (piv_par
->int_geo
== GPIV_LINE_C
425 && piv_par
->int_line_row_end__set
== FALSE
) {
426 piv_par
->int_line_row_end__set
= TRUE
;
427 if (piv_par_default
== NULL
) {
428 err_msg
= "Using default from libgpiv: ";
429 piv_par
->int_line_row_end
=
430 PIVPAR_DEFAULT__INT_LINE_ROW_END
;
432 err_msg
= "Using default: ";
433 piv_par
->int_line_row_end
= piv_par_default
->int_line_row_end
;
435 gpiv_warning("%s\n%s.%s %d", err_msg
,
437 PIVPAR_KEY__INT_LINE_ROW_END
,
438 piv_par
->int_line_row_end
);
441 if (piv_par
->int_geo
== GPIV_LINE_C
442 && piv_par
->int_line_col__set
== FALSE
) {
443 piv_par
->int_line_col__set
= TRUE
;
444 if (piv_par_default
== NULL
) {
445 err_msg
= "Using default from libgpiv: ";
446 piv_par
->int_line_col
= PIVPAR_DEFAULT__INT_LINE_COL
;
448 err_msg
= "Using default: ";
449 piv_par
->int_line_col
= piv_par_default
->int_line_col
;
451 gpiv_warning("%s\n%s.%s %d", err_msg
,
453 PIVPAR_KEY__INT_LINE_COL
,
454 piv_par
->int_line_col
);
457 if (piv_par
->int_geo
== GPIV_LINE_R
458 && piv_par
->int_line_col_start__set
== FALSE
) {
459 piv_par
->int_line_col_start__set
= TRUE
;
460 if (piv_par_default
== NULL
) {
461 err_msg
= "Using default from libgpiv: ";
462 piv_par
->int_line_col_start
=
463 PIVPAR_DEFAULT__INT_LINE_COL_START
;
465 err_msg
= "Using default: ";
466 piv_par
->int_line_col_start
=
467 piv_par_default
->int_line_col_start
;
469 gpiv_warning("%s\n%s.%s %d", err_msg
,
471 PIVPAR_KEY__INT_LINE_COL_START
,
472 piv_par
->int_line_col_start
);
475 if (piv_par
->int_geo
== GPIV_LINE_R
476 && piv_par
->int_line_col_end__set
== FALSE
) {
477 piv_par
->int_line_col_end__set
= TRUE
;
478 if (piv_par_default
== NULL
) {
479 err_msg
= "Using default from libgpiv: ";
480 piv_par
->int_line_col_end
=
481 PIVPAR_DEFAULT__INT_LINE_COL_END
;
483 err_msg
= "Using default: ";
484 piv_par
->int_line_col_end
= piv_par_default
->int_line_col_end
;
486 gpiv_warning("%s\n%s.%s %d", err_msg
,
488 PIVPAR_KEY__INT_LINE_COL_END
,
489 piv_par
->int_line_col_end
);
492 if (piv_par
->int_geo
== GPIV_POINT
493 && piv_par
->int_point_col__set
== FALSE
) {
494 piv_par
->int_point_col__set
= TRUE
;
495 if (piv_par_default
== NULL
) {
496 err_msg
= "Using default from libgpiv: ";
497 piv_par
->int_point_col
= PIVPAR_DEFAULT__INT_POINT_COL
;
499 err_msg
= "Using default: ";
500 piv_par
->int_point_col
= piv_par_default
->int_point_col
;
502 gpiv_warning("%s\n%s.%s %d", err_msg
,
504 PIVPAR_KEY__INT_POINT_COL
,
505 piv_par
->int_point_col
);
508 if (piv_par
->int_geo
== GPIV_POINT
509 && piv_par
->int_point_row__set
== FALSE
) {
510 piv_par
->int_point_row__set
= TRUE
;
511 if (piv_par_default
== NULL
) {
512 err_msg
= "Using default from libgpiv: ";
513 piv_par
->int_point_row
= PIVPAR_DEFAULT__INT_POINT_ROW
;
515 piv_par
->int_point_row
= piv_par_default
->int_point_row
;
516 err_msg
= "Using default: ";
518 gpiv_warning("%s\n%s.%s %d", err_msg
,
520 PIVPAR_KEY__INT_POINT_ROW
,
521 piv_par
->int_point_row
);
526 if (piv_par
->int_size_f__set
== FALSE
) {
527 piv_par
->int_size_f__set
= TRUE
;
528 if (piv_par_default
== NULL
) {
529 err_msg
= "Using default from libgpiv: ";
530 piv_par
->int_size_f
= PIVPAR_DEFAULT__INT_SIZE_F
;
532 err_msg
= "Using default: ";
533 piv_par
->int_size_f
= piv_par_default
->int_size_f
;
535 gpiv_warning("%s\n%s.%s %d", err_msg
,
537 PIVPAR_KEY__INT_SIZE_F
,
538 piv_par
->int_size_f
);
541 if (piv_par
->int_size_i__set
== FALSE
) {
542 piv_par
->int_size_i__set
= TRUE
;
543 if (piv_par_default
== NULL
) {
544 err_msg
= "Using default from libgpiv: ";
545 piv_par
->int_size_i
= PIVPAR_DEFAULT__INT_SIZE_I
;
547 err_msg
= "Using default: ";
548 piv_par
->int_size_i
= piv_par_default
->int_size_i
;
550 gpiv_warning("%s\n%s.%s %d", err_msg
,
552 PIVPAR_KEY__INT_SIZE_I
,
553 piv_par
->int_size_i
);
556 if (piv_par
->int_shift__set
== FALSE
) {
557 piv_par
->int_shift__set
= TRUE
;
558 if (piv_par_default
== NULL
) {
559 err_msg
= "Using default from libgpiv: ";
560 piv_par
->int_shift
= PIVPAR_DEFAULT__INT_SHIFT
;
562 err_msg
= "Using default: ";
563 piv_par
->int_shift
= piv_par_default
->int_shift
;
565 gpiv_warning("%s\n%s.%s %d", err_msg
,
567 PIVPAR_KEY__INT_SHIFT
,
571 if (piv_par
->pre_shift_col__set
== FALSE
) {
572 piv_par
->pre_shift_col__set
= TRUE
;
573 if (piv_par_default
== NULL
) {
574 err_msg
= "Using default from libgpiv: ";
575 piv_par
->pre_shift_col
= PIVPAR_DEFAULT__PRE_SHIFT_COL
;
577 err_msg
= "Using default: ";
578 piv_par
->pre_shift_col
= piv_par_default
->pre_shift_col
;
580 gpiv_warning("%s\n%s.%s %d", err_msg
,
582 PIVPAR_KEY__PRE_SHIFT_COL
,
583 piv_par
->pre_shift_col
);
586 if (piv_par
->pre_shift_row__set
== FALSE
) {
587 piv_par
->pre_shift_row__set
= TRUE
;
588 if (piv_par_default
== NULL
) {
589 err_msg
= "Using default from libgpiv: ";
590 piv_par
->pre_shift_row
= PIVPAR_DEFAULT__PRE_SHIFT_ROW
;
592 err_msg
= "Using default: ";
593 piv_par
->pre_shift_row
= piv_par_default
->pre_shift_row
;
595 gpiv_warning("%s\n%s.%s %d", err_msg
,
597 PIVPAR_KEY__PRE_SHIFT_ROW
,
598 piv_par
->pre_shift_row
);
601 if (piv_par
->peak__set
== FALSE
) {
602 piv_par
->peak__set
= TRUE
;
603 if (piv_par_default
== NULL
) {
604 piv_par
->peak
= PIVPAR_DEFAULT__PEAK
;
605 err_msg
= "Using default from libgpiv: ";
607 err_msg
= "Using default: ";
608 piv_par
->peak
= piv_par_default
->peak
;
610 gpiv_warning("%s\n%s.%s %d", err_msg
,
616 if (piv_par
->int_scheme__set
== FALSE
) {
617 piv_par
->int_scheme__set
= TRUE
;
618 if (piv_par_default
== NULL
) {
619 err_msg
= "Using default from libgpiv: ";
620 piv_par
->int_scheme
= PIVPAR_DEFAULT__INT_SCHEME
;
622 piv_par
->int_scheme
= piv_par_default
->int_scheme
;
623 err_msg
= "Using default: ";
625 gpiv_warning("%s\n%s.%s %d", err_msg
,
627 PIVPAR_KEY__INT_SCHEME
,
628 piv_par
->int_scheme
);
631 if (piv_par
->spof_filter__set
== FALSE
) {
632 piv_par
->spof_filter__set
= TRUE
;
633 if (piv_par_default
== NULL
) {
634 err_msg
= "Using default from libgpiv: ";
635 piv_par
->spof_filter
= PIVPAR_DEFAULT__SPOF_FILTER
;
637 err_msg
= "Using default: ";
638 piv_par
->spof_filter
= piv_par_default
->spof_filter
;
640 gpiv_warning("%s\n%s.%s %d", err_msg
,
642 PIVPAR_KEY__SPOF_FILTER
,
643 piv_par
->spof_filter
);
646 if (piv_par
->gauss_weight_ia__set
== FALSE
) {
647 piv_par
->gauss_weight_ia__set
= TRUE
;
648 if (piv_par_default
== NULL
) {
649 err_msg
= "Using default from libgpiv: ";
650 piv_par
->gauss_weight_ia
=
651 PIVPAR_DEFAULT__GAUSS_WEIGHT_IA
;
653 err_msg
= "Using default: ";
654 piv_par
->gauss_weight_ia
= piv_par_default
->gauss_weight_ia
;
656 gpiv_warning("%s\n%s.%s %d", err_msg
,
658 PIVPAR_KEY__GAUSS_WEIGHT_IA
,
659 piv_par
->gauss_weight_ia
);
662 if (piv_par
->ifit__set
== FALSE
) {
663 piv_par
->ifit__set
= TRUE
;
664 if (piv_par_default
== NULL
) {
665 err_msg
= "Using default from libgpiv: ";
666 piv_par
->ifit
= PIVPAR_DEFAULT__IFIT
;
668 err_msg
= "Using default: ";
669 piv_par
->ifit
= piv_par_default
->ifit
;
671 gpiv_warning("%s\n%s.%s %d", err_msg
,
684 gpiv_piv_testonly_parameters (const GpivImagePar
*image_par
,
685 const GpivPivPar
*piv_par
687 /*-----------------------------------------------------------------------------
689 * Testing parameters on valid values
692 gchar
*err_msg
= NULL
;
696 * Check if col_end and row_end are within the image size
698 if (piv_par
->col_end__set
== TRUE
699 && piv_par
->col_end
> image_par
->ncolumns
- piv_par
->pre_shift_col
- 1) {
700 err_msg
= g_strdup_printf ("gpiv_piv_testonly_parameters: last column to be analysed is out of \
701 image region;\n%s.%s > Ncolumns-%s.%s-1",
705 PIVPAR_KEY__PRE_SHIFT_COL
);
706 gpiv_warning("%s", err_msg
);
710 if (piv_par
->row_end
> image_par
->nrows
- piv_par
->pre_shift_row
- 1) {
711 err_msg
= g_strdup_printf ("gpiv_piv_testonly_parameters: last row to be analysed is out of image "
712 "region;\n%s.%s > Nrows-%s.%s-1",
716 PIVPAR_KEY__PRE_SHIFT_ROW
);
717 gpiv_warning("%s", err_msg
);
722 * Check if size of Interrogation Area's is allowed
724 if (piv_par
->int_size_f
> GPIV_MAX_INTERR_SIZE
||
725 piv_par
->int_size_f
> image_par
->ncolumns
||
726 piv_par
->int_size_f
> image_par
->nrows
) {
727 err_msg
= g_strdup_printf ("gpiv_piv_testonly_parameters: %s = %d larger than allowed maximum, ncolumns or nrows",
728 PIVPAR_KEY__INT_SIZE_F
,
729 piv_par
->int_size_f
);
730 gpiv_warning("%s", err_msg
);
734 if (piv_par
->int_size_i
> GPIV_MAX_INTERR_SIZE
||
735 piv_par
->int_size_i
> image_par
->ncolumns
||
736 piv_par
->int_size_i
> image_par
->nrows
) {
737 err_msg
= g_strdup_printf ("gpiv_piv_testonly_parameters: %s = %d larger than allowed maximum, ncolumns or nrows",
738 PIVPAR_KEY__INT_SIZE_I
,
739 piv_par
->int_size_i
);
740 gpiv_warning("%s", err_msg
);
744 if (piv_par
->int_size_i
< piv_par
->int_size_f
) {
745 err_msg
= g_strdup_printf ("gpiv_piv_testonly_parameters: %s smaller than %s. \n\
746 Use %s larger than %s for adaptive interrogation sizes.",
747 PIVPAR_KEY__INT_SIZE_I
,
748 PIVPAR_KEY__INT_SIZE_F
,
749 PIVPAR_KEY__INT_SIZE_I
,
750 PIVPAR_KEY__INT_SIZE_F
752 gpiv_warning("%s", err_msg
);
759 if (piv_par
->ifit
!= 0
760 && piv_par
->ifit
!= 1
761 && piv_par
->ifit
!= 2
762 && piv_par
->ifit
!= 3) {
763 err_msg
= g_strdup_printf("gpiv_piv_testonly_parameters: invalid value of %s.%s (0, 1, 2 or 3)",
766 gpiv_warning("%s", err_msg
);
777 gpiv_piv_testadjust_parameters (const GpivImagePar
*image_par
,
780 /*-----------------------------------------------------------------------------
781 * Tests if all piv parameters have been read and have been defined
782 * to valid values. Aplies missing parameters to defaults, as hard-coded
783 * in the library and adjusts parameters if necessary.
786 gchar
*err_msg
= NULL
;
789 if ((err_msg
= gpiv_piv_check_parameters_read (piv_par
, NULL
)) != NULL
) {
790 gpiv_warning("gpiv_piv_testadjust_parameters: %s", err_msg
);
795 * Check if col_end and row_end are within the image size
797 if (piv_par
->col_end__set
== TRUE
798 && piv_par
->col_end
> image_par
->ncolumns
- piv_par
->pre_shift_col
- 1) {
799 piv_par
->col_end
= image_par
->ncolumns
- piv_par
->pre_shift_col
- 1;
800 gpiv_warning("gpiv_piv_testadjust_parameters: last column set to %f",
804 if (piv_par
->col_start__set
== TRUE
805 && piv_par
->col_start
> piv_par
->col_end
) {
806 piv_par
->col_start
= PIVPAR_DEFAULT__COL_START
;
807 gpiv_warning("gpiv_piv_testadjust_parameters: first column set to %f",
811 if (piv_par
->row_end
> image_par
->nrows
- piv_par
->pre_shift_row
- 1) {
812 piv_par
->row_end
= image_par
->nrows
- piv_par
->pre_shift_row
- 1;
813 gpiv_warning("gpiv_piv_testadjust_parameters: last row set to %f",
817 if (piv_par
->row_start
> piv_par
->row_start
) {
818 piv_par
->row_start
= PIVPAR_DEFAULT__ROW_START
;
819 gpiv_warning("gpiv_piv_testadjust_parameters: first row set to %f",
824 * Check if size of Interrogation Area's is allowed
826 if (piv_par
->int_size_f
> GPIV_MAX_INTERR_SIZE
827 || piv_par
->int_size_f
> image_par
->ncolumns
828 || piv_par
->int_size_f
> image_par
->nrows
) {
829 piv_par
->int_size_f
= GPIV_MAX_INTERR_SIZE
;
830 gpiv_warning("gpiv_piv_testadjust_parameters: %s = %d larger than allowed maximum, ncolumns or nrows",
831 PIVPAR_KEY__INT_SIZE_F
,
832 piv_par
->int_size_f
);
835 if (piv_par
->int_size_i
> GPIV_MAX_INTERR_SIZE
836 || piv_par
->int_size_i
> image_par
->ncolumns
837 || piv_par
->int_size_i
> image_par
->nrows
) {
838 piv_par
->int_size_i
= GPIV_MAX_INTERR_SIZE
;
839 gpiv_warning("gpiv_piv_testadjust_parameters: %s = %d larger than allowed maximum, ncolumns or nrows",
840 PIVPAR_KEY__INT_SIZE_I
,
841 piv_par
->int_size_i
);
844 if (piv_par
->int_size_i
< piv_par
->int_size_f
) {
845 piv_par
->int_size_i
= piv_par
->int_size_f
;
846 gpiv_warning("Gpiv_piv_testadjust_parameters: %s set equal to %s.",
847 PIVPAR_KEY__INT_SIZE_I
,
848 PIVPAR_KEY__INT_SIZE_F
);
854 if (piv_par
->ifit
!= 0
855 && piv_par
->ifit
!= 1
856 && piv_par
->ifit
!= 2
857 && piv_par
->ifit
!= 3) {
859 gpiv_warning("gpiv_piv_testadjust_parameters: ifit set to 1 (Gauss)",
870 gpiv_piv_print_parameters (FILE *fp
,
871 const GpivPivPar
*piv_par
873 /*-----------------------------------------------------------------------------
875 * Prints parameters to fp
877 *---------------------------------------------------------------------------*/
879 if (fp
== stdout
|| fp
== NULL
) {
883 if (piv_par
->int_geo__set
)
884 printf ("%s.%s %d\n",
885 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_GEO
,
888 if (piv_par
->col_start__set
)
889 printf ("%s.%s %d\n",
890 GPIV_PIVPAR_KEY
, PIVPAR_KEY__COL_START
,
893 if (piv_par
->col_end__set
)
894 printf ("%s.%s %d\n",
895 GPIV_PIVPAR_KEY
, PIVPAR_KEY__COL_END
,
898 if (piv_par
->row_start__set
)
899 printf ("%s.%s %d\n",
900 GPIV_PIVPAR_KEY
, PIVPAR_KEY__ROW_START
,
903 if (piv_par
->row_end__set
)
904 printf ("%s.%s %d\n",
905 GPIV_PIVPAR_KEY
, PIVPAR_KEY__ROW_END
,
910 if (piv_par
->int_geo__set
911 && piv_par
->int_geo
== GPIV_LINE_R
912 && piv_par
->int_line_row__set
)
913 printf ("%s.%s %d\n",
914 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_LINE_ROW
,
915 piv_par
->int_line_row
);
917 if (piv_par
->int_geo__set
918 && piv_par
->int_geo
== GPIV_LINE_C
919 && piv_par
->int_line_row_start__set
)
920 printf ("%s.%s %d\n",
921 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_LINE_ROW_START
,
922 piv_par
->int_line_row_start
);
924 if (piv_par
->int_geo__set
925 && piv_par
->int_geo
== GPIV_LINE_C
926 && piv_par
->int_line_row_end__set
)
927 printf ("%s.%s %d\n",
928 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_LINE_ROW_END
,
929 piv_par
->int_line_row_end
);
933 if (piv_par
->int_geo__set
934 && piv_par
->int_geo
== GPIV_LINE_C
935 && piv_par
->int_line_col__set
)
936 printf ("%s.%s %d\n",
937 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_LINE_COL
,
938 piv_par
->int_line_col
);
940 if (piv_par
->int_geo__set
941 && piv_par
->int_geo
== GPIV_LINE_R
942 && piv_par
->int_line_col_start__set
)
943 printf ("%s.%s %d\n",
944 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_LINE_COL_START
,
945 piv_par
->int_line_col_start
);
947 if (piv_par
->int_geo__set
948 && piv_par
->int_geo
== GPIV_LINE_R
949 && piv_par
->int_line_col_end__set
)
950 printf ("%s.%s %d\n",
951 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_LINE_COL_END
,
952 piv_par
->int_line_col_end
);
956 if (piv_par
->int_geo__set
957 && piv_par
->int_geo
== GPIV_POINT
958 && piv_par
->int_point_row__set
)
959 printf ("%s.%s %d\n",
961 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_POINT_ROW
,
962 piv_par
->int_point_row
);
964 if (piv_par
->int_geo__set
965 && piv_par
->int_geo
== GPIV_POINT
966 && piv_par
->int_point_col__set
)
967 printf ("%s.%s %d\n",
968 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_POINT_COL
,
969 piv_par
->int_point_col
);
973 if (piv_par
->int_size_f__set
)
974 printf ("%s.%s %d\n",
975 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_SIZE_F
,
976 piv_par
->int_size_f
);
978 if (piv_par
->int_size_i__set
)
979 printf ("%s.%s %d\n",
980 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_SIZE_I
,
981 piv_par
->int_size_i
);
983 if (piv_par
->int_shift__set
)
984 printf ("%s.%s %d\n",
985 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_SHIFT
,
988 if (piv_par
->int_scheme__set
)
989 printf ("%s.%s %d\n",
990 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_SCHEME
,
991 piv_par
->int_scheme
);
993 if (piv_par
->spof_filter__set
)
994 printf ("%s.%s %d\n",
995 GPIV_PIVPAR_KEY
, PIVPAR_KEY__SPOF_FILTER
,
996 piv_par
->spof_filter
);
998 if (piv_par
->gauss_weight_ia__set
)
999 printf ("%s.%s %d\n",
1000 GPIV_PIVPAR_KEY
, PIVPAR_KEY__GAUSS_WEIGHT_IA
,
1001 piv_par
->gauss_weight_ia
);
1003 if (piv_par
->pre_shift_col__set
)
1004 printf ("%s.%s %d\n",
1005 GPIV_PIVPAR_KEY
, PIVPAR_KEY__PRE_SHIFT_COL
,
1006 piv_par
->pre_shift_col
);
1008 if (piv_par
->pre_shift_row__set
)
1009 printf ("%s.%s %d\n",
1010 GPIV_PIVPAR_KEY
, PIVPAR_KEY__PRE_SHIFT_ROW
,
1011 piv_par
->pre_shift_row
);
1013 if (piv_par
->ifit__set
)
1014 printf ("%s.%s %d\n",
1015 GPIV_PIVPAR_KEY
, PIVPAR_KEY__IFIT
,
1020 if (piv_par
->peak__set
)
1021 printf ("%s.%s %d\n",
1022 GPIV_PIVPAR_KEY
, PIVPAR_KEY__PEAK
,
1025 if (piv_par
->print_piv__set
)
1026 printf ("%s.%s %d\n",
1027 GPIV_PIVPAR_KEY
, "Print_piv",
1028 piv_par
->print_piv
);
1034 if (piv_par
->int_geo__set
)
1035 fprintf (fp
, "%s.%s %d\n",
1036 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_GEO
,
1039 if (piv_par
->col_start__set
)
1040 fprintf (fp
, "%s.%s %d\n",
1041 GPIV_PIVPAR_KEY
, PIVPAR_KEY__COL_START
,
1042 piv_par
->col_start
);
1044 if (piv_par
->col_end__set
)
1045 fprintf (fp
, "%s.%s %d\n",
1046 GPIV_PIVPAR_KEY
, PIVPAR_KEY__COL_END
,
1049 if (piv_par
->row_start__set
)
1050 fprintf (fp
, "%s.%s %d\n",
1051 GPIV_PIVPAR_KEY
, PIVPAR_KEY__ROW_START
,
1052 piv_par
->row_start
);
1054 if (piv_par
->row_end__set
)
1055 fprintf (fp
, "%s.%s %d\n",
1056 GPIV_PIVPAR_KEY
, PIVPAR_KEY__ROW_END
,
1061 if (piv_par
->int_geo__set
1062 && piv_par
->int_geo
== GPIV_LINE_R
1063 && piv_par
->int_line_row__set
)
1064 fprintf (fp
, "%s.%s %d\n",
1065 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_LINE_ROW
,
1066 piv_par
->int_line_row
);
1068 if (piv_par
->int_geo__set
1069 && piv_par
->int_geo
== GPIV_LINE_C
1070 && piv_par
->int_line_row_start__set
)
1071 fprintf (fp
, "%s.%s %d\n",
1072 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_LINE_ROW_START
,
1073 piv_par
->int_line_row_start
);
1075 if (piv_par
->int_geo__set
1076 && piv_par
->int_geo
== GPIV_LINE_C
1077 && piv_par
->int_line_row_end__set
)
1078 fprintf (fp
, "%s.%s %d\n",
1079 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_LINE_ROW_END
,
1080 piv_par
->int_line_row_end
);
1084 if (piv_par
->int_geo__set
1085 && piv_par
->int_geo
== GPIV_LINE_C
1086 && piv_par
->int_line_col__set
)
1087 fprintf (fp
, "%s.%s %d\n",
1088 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_LINE_COL
,
1089 piv_par
->int_line_col
);
1091 if (piv_par
->int_geo__set
1092 && piv_par
->int_geo
== GPIV_LINE_R
1093 && piv_par
->int_line_col_start__set
)
1094 fprintf (fp
, "%s.%s %d\n",
1095 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_LINE_COL_START
,
1096 piv_par
->int_line_col_start
);
1098 if (piv_par
->int_geo__set
1099 && piv_par
->int_geo
== GPIV_LINE_R
1100 && piv_par
->int_line_col_end__set
)
1101 fprintf (fp
, "%s.%s %d\n",
1102 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_LINE_COL_END
,
1103 piv_par
->int_line_col_end
);
1107 if (piv_par
->int_geo__set
1108 && piv_par
->int_geo
== GPIV_POINT
1109 && piv_par
->int_point_row__set
)
1110 fprintf (fp
, "%s.%s %d\n",
1112 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_POINT_ROW
,
1113 piv_par
->int_point_row
);
1115 if (piv_par
->int_geo__set
1116 && piv_par
->int_geo
== GPIV_POINT
1117 && piv_par
->int_point_col__set
)
1118 fprintf (fp
, "%s.%s %d\n",
1119 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_POINT_COL
,
1120 piv_par
->int_point_col
);
1124 if (piv_par
->int_size_f__set
)
1125 fprintf (fp
, "%s.%s %d\n",
1126 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_SIZE_F
,
1127 piv_par
->int_size_f
);
1129 if (piv_par
->int_size_i__set
)
1130 fprintf (fp
, "%s.%s %d\n",
1131 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_SIZE_I
,
1132 piv_par
->int_size_i
);
1134 if (piv_par
->int_shift__set
)
1135 fprintf (fp
, "%s.%s %d\n",
1136 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_SHIFT
,
1137 piv_par
->int_shift
);
1139 if (piv_par
->int_scheme__set
)
1140 fprintf (fp
, "%s.%s %d\n",
1141 GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_SCHEME
,
1142 piv_par
->int_scheme
);
1144 if (piv_par
->spof_filter__set
)
1145 fprintf (fp
, "%s.%s %d\n",
1146 GPIV_PIVPAR_KEY
, PIVPAR_KEY__SPOF_FILTER
,
1147 piv_par
->spof_filter
);
1149 if (piv_par
->gauss_weight_ia__set
)
1150 fprintf (fp
, "%s.%s %d\n",
1151 GPIV_PIVPAR_KEY
, PIVPAR_KEY__GAUSS_WEIGHT_IA
,
1152 piv_par
->gauss_weight_ia
);
1154 if (piv_par
->pre_shift_col__set
)
1155 fprintf (fp
, "%s.%s %d\n",
1156 GPIV_PIVPAR_KEY
, PIVPAR_KEY__PRE_SHIFT_COL
,
1157 piv_par
->pre_shift_col
);
1159 if (piv_par
->pre_shift_row__set
)
1160 fprintf (fp
, "%s.%s %d\n",
1161 GPIV_PIVPAR_KEY
, PIVPAR_KEY__PRE_SHIFT_ROW
,
1162 piv_par
->pre_shift_row
);
1164 if (piv_par
->ifit__set
)
1165 fprintf (fp
, "%s.%s %d\n",
1166 GPIV_PIVPAR_KEY
, PIVPAR_KEY__IFIT
,
1170 if (piv_par
->peak__set
)
1171 fprintf (fp
, "%s.%s %d\n",
1172 GPIV_PIVPAR_KEY
, PIVPAR_KEY__PEAK
,
1175 if (piv_par
->print_piv__set
)
1176 fprintf (fp
, "%s.%s %d\n",
1177 GPIV_PIVPAR_KEY
, "Print_piv",
1178 piv_par
->print_piv
);
1185 gpiv_piv_cp_parameters (const GpivPivPar
*piv_par
1187 /*-----------------------------------------------------------------------------
1190 GpivPivPar
*piv_par_dest
= g_new0 (GpivPivPar
, 1);
1193 gpiv_piv_parameters_set (piv_par_dest
, FALSE
);
1194 piv_ovwrt_parameters (piv_par
, piv_par_dest
, TRUE
);
1197 return piv_par_dest
;
1203 gpiv_piv_cp_undef_parameters (const GpivPivPar
*piv_par_src
,
1204 GpivPivPar
*piv_par_dest
1206 /*-----------------------------------------------------------------------------
1208 * Duplicates piv parameters from _src to _dest if _dest has not been set
1211 piv_ovwrt_parameters (piv_par_src
, piv_par_dest
, FALSE
);
1217 gpiv_piv_fread_hdf5_parameters (const gchar
*fname
1219 /*-----------------------------------------------------------------------------
1221 * Reads piv parameters from hdf5 data file
1223 *---------------------------------------------------------------------------*/
1225 GpivPivPar
*piv_par
= g_new0 (GpivPivPar
, 1);
1226 gchar
*err_msg
= NULL
;
1231 hid_t file_id
, group_id
, attribute_id
;
1234 if ((i
= H5Fis_hdf5(fname
)) == 0) {
1235 err_msg
= "gpiv_piv_fread_hdf5_parameters: not an hdf5 file";
1236 gpiv_warning("%s", err_msg
);
1240 file_id
= H5Fopen(fname
, H5F_ACC_RDONLY
, H5P_DEFAULT
);
1241 group_id
= H5Gopen (file_id
, "PIV", H5P_DEFAULT
);
1242 H5Aiterate (group_id
, H5_INDEX_CRT_ORDER
, H5_ITER_NATIVE
, 0,
1243 (H5A_operator_t
)attr_info
, piv_par
);
1246 status
= H5Gclose (group_id
);
1247 status
= H5Fclose(file_id
);
1254 gpiv_piv_fwrite_hdf5_parameters (const gchar
*fname
,
1255 const GpivPivPar
*piv_par
1257 /*-----------------------------------------------------------------------------
1259 * Writes piv parameters to an existing hdf5 data file
1261 *---------------------------------------------------------------------------*/
1263 gchar
*err_msg
= NULL
;
1270 hid_t file_id
, dataspace_id
, group_id
, attribute_id
;
1274 if ((i
= H5Fis_hdf5(fname
)) == 0) {
1275 err_msg
= "gpiv_piv_fwrite_hdf5_parameters: not an hdf5 file";
1276 gpiv_warning("%s", err_msg
);
1280 file_id
= H5Fopen(fname
, H5F_ACC_RDWR
, H5P_DEFAULT
);
1281 group_id
= H5Gopen (file_id
, "PIV", H5P_DEFAULT
);
1286 dataspace_id
= H5Screate_simple(1, dims
, NULL
);
1289 * Image piv parametes
1291 if (piv_par
->int_geo__set
) {
1292 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__INT_GEO
,
1294 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1295 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1297 status
= H5Aclose(attribute_id
);
1300 if (piv_par
->int_geo
== GPIV_AOI
1301 && piv_par
->col_start__set
) {
1302 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__COL_START
,
1304 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1305 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1306 &piv_par
->col_start
);
1307 status
= H5Aclose(attribute_id
);
1310 if (piv_par
->int_geo
== GPIV_AOI
1311 && piv_par
->col_end__set
) {
1312 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__COL_END
,
1314 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1315 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1317 status
= H5Aclose(attribute_id
);
1320 if (piv_par
->int_geo
== GPIV_AOI
1321 && piv_par
->row_start__set
) {
1322 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__ROW_START
,
1324 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1325 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1326 &piv_par
->row_start
);
1327 status
= H5Aclose(attribute_id
);
1330 if (piv_par
->int_geo
== GPIV_AOI
1331 && piv_par
->row_end__set
) {
1332 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__ROW_END
,
1334 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1335 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1337 status
= H5Aclose(attribute_id
);
1343 if (piv_par
->int_geo
== GPIV_LINE_R
1344 && piv_par
->int_line_row__set
) {
1345 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__INT_LINE_ROW
,
1347 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1348 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1349 &piv_par
->int_line_row
);
1350 status
= H5Aclose(attribute_id
);
1353 if (piv_par
->int_geo
== GPIV_LINE_C
1354 && piv_par
->int_line_row_start__set
) {
1355 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__INT_LINE_ROW_START
,
1357 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1358 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
, &piv_par
->int_line_row_start
);
1359 status
= H5Aclose(attribute_id
);
1362 if (piv_par
->int_geo
== GPIV_LINE_C
&& piv_par
->int_line_row_end__set
) {
1363 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__INT_LINE_ROW_END
,
1365 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1366 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1367 &piv_par
->int_line_row_end
);
1368 status
= H5Aclose(attribute_id
);
1371 if (piv_par
->int_geo
== GPIV_LINE_C
1372 && piv_par
->int_line_col__set
) {
1373 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__INT_LINE_COL
,
1375 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1376 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1377 &piv_par
->int_line_col
);
1378 status
= H5Aclose(attribute_id
);
1381 if (piv_par
->int_geo
== GPIV_LINE_R
1382 && piv_par
->int_line_col_start__set
) {
1383 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__INT_LINE_COL_START
,
1385 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1386 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1387 &piv_par
->int_line_col_start
);
1388 status
= H5Aclose(attribute_id
);
1391 if (piv_par
->int_geo
== GPIV_LINE_R
1392 && piv_par
->int_line_col_end__set
) {
1393 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__INT_LINE_COL_END
,
1395 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1396 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1397 &piv_par
->int_line_col_end
);
1398 status
= H5Aclose(attribute_id
);
1406 if (piv_par
->int_geo
== GPIV_POINT
1407 && piv_par
->int_point_col__set
) {
1408 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__INT_POINT_COL
,
1410 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1411 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1412 &piv_par
->int_point_col
);
1413 status
= H5Aclose(attribute_id
);
1416 if (piv_par
->int_geo
== GPIV_POINT
&& piv_par
->int_point_row__set
) {
1417 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__INT_POINT_ROW
,
1419 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1420 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1421 &piv_par
->int_point_row
);
1422 status
= H5Aclose(attribute_id
);
1428 if (piv_par
->int_size_f__set
) {
1429 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__INT_SIZE_F
,
1431 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1432 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1433 &piv_par
->int_size_f
);
1434 status
= H5Aclose(attribute_id
);
1437 if (piv_par
->int_size_i__set
) {
1438 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__INT_SIZE_I
,
1440 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1441 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1442 &piv_par
->int_size_i
);
1443 status
= H5Aclose(attribute_id
);
1446 if (piv_par
->int_shift__set
) {
1447 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__INT_SHIFT
,
1449 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1450 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1451 &piv_par
->int_shift
);
1452 status
= H5Aclose(attribute_id
);
1455 if (piv_par
->pre_shift_col__set
) {
1456 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__PRE_SHIFT_COL
,
1458 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1459 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1460 &piv_par
->pre_shift_col
);
1461 status
= H5Aclose(attribute_id
);
1464 if (piv_par
->pre_shift_row__set
) {
1465 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__PRE_SHIFT_ROW
,
1467 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1468 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1469 &piv_par
->pre_shift_row
);
1470 status
= H5Aclose(attribute_id
);
1474 * Sub-pixel interrogation
1476 if (piv_par
->ifit__set
) {
1477 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__IFIT
,
1479 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1480 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
, &piv_par
->ifit
);
1481 status
= H5Aclose(attribute_id
);
1484 if (piv_par
->peak__set
) {
1485 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__PEAK
,
1487 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1488 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
, &piv_par
->peak
);
1489 status
= H5Aclose(attribute_id
);
1492 if (piv_par
->int_scheme__set
) {
1493 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__INT_SCHEME
,
1495 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1496 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1497 &piv_par
->int_scheme
);
1498 status
= H5Aclose(attribute_id
);
1501 if (piv_par
->spof_filter__set
) {
1502 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__SPOF_FILTER
,
1504 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1505 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1506 &piv_par
->spof_filter
);
1507 status
= H5Aclose(attribute_id
);
1510 if (piv_par
->gauss_weight_ia__set
) {
1511 attribute_id
= H5Acreate(group_id
, PIVPAR_KEY__GAUSS_WEIGHT_IA
,
1513 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1514 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1515 &piv_par
->gauss_weight_ia
);
1516 status
= H5Aclose(attribute_id
);
1519 if (piv_par
->print_piv__set
) {
1520 attribute_id
= H5Acreate(group_id
, "print_piv",
1522 dataspace_id
, H5P_DEFAULT
, H5P_DEFAULT
);
1523 status
= H5Awrite(attribute_id
, H5T_NATIVE_INT
,
1524 &piv_par
->print_piv
);
1525 status
= H5Aclose(attribute_id
);
1529 status
= H5Sclose(dataspace_id
);
1530 status
= H5Gclose (group_id
);
1531 status
= H5Fclose(file_id
);
1539 gpiv_piv_mpi_bcast_pivpar (GpivPivPar
*piv_par
)
1540 /*-----------------------------------------------------------------------------
1541 * Broadcasts piv_par, usring root as 0 and MPI_COMM_WORLD
1544 gchar
*err_msg
= NULL
;
1548 MPI_Bcast(&piv_par
->int_geo
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1550 || MPI_Bcast(&piv_par
->int_geo__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1553 || MPI_Bcast(&piv_par
->col_start
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1555 || MPI_Bcast(&piv_par
->col_start__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1558 || MPI_Bcast(&piv_par
->col_end
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1560 || MPI_Bcast(&piv_par
->col_end__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1563 || MPI_Bcast(&piv_par
->row_start
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1565 || MPI_Bcast(&piv_par
->row_start__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1568 || MPI_Bcast(&piv_par
->row_end
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1570 || MPI_Bcast(&piv_par
->row_end__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1573 || MPI_Bcast(&piv_par
->int_line_col
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1575 || MPI_Bcast(&piv_par
->int_line_col__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1578 || MPI_Bcast(&piv_par
->int_line_col_start
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1580 || MPI_Bcast(&piv_par
->int_line_col_start__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1583 || MPI_Bcast(&piv_par
->int_line_col_end
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1585 || MPI_Bcast(&piv_par
->int_line_col_end__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1588 || MPI_Bcast(&piv_par
->int_line_row
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1590 || MPI_Bcast(&piv_par
->int_line_row__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1593 || MPI_Bcast(&piv_par
->int_line_row_start
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1595 || MPI_Bcast(&piv_par
->int_line_row_start__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1598 || MPI_Bcast(&piv_par
->int_line_row_end
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1600 || MPI_Bcast(&piv_par
->int_line_row_end__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1603 || MPI_Bcast(&piv_par
->int_point_col
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1605 || MPI_Bcast(&piv_par
->int_point_col__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1608 || MPI_Bcast(&piv_par
->int_point_row
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1610 || MPI_Bcast(&piv_par
->int_point_row__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1613 || MPI_Bcast(&piv_par
->int_size_f
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1615 || MPI_Bcast(&piv_par
->int_size_f__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1618 || MPI_Bcast(&piv_par
->int_size_i
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1620 || MPI_Bcast(&piv_par
->int_size_i__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1623 || MPI_Bcast(&piv_par
->int_shift
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1625 || MPI_Bcast(&piv_par
->int_shift__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1628 || MPI_Bcast(&piv_par
->int_deform
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1630 || MPI_Bcast(&piv_par
->int_deform__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1633 || MPI_Bcast(&piv_par
->spline_degree
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1635 || MPI_Bcast(&piv_par
->spline_degree__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1638 || MPI_Bcast(&piv_par
->pre_shift_col
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1640 || MPI_Bcast(&piv_par
->pre_shift_col__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1643 || MPI_Bcast(&piv_par
->pre_shift_row
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1645 || MPI_Bcast(&piv_par
->pre_shift_row__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1648 || MPI_Bcast(&piv_par
->ifit
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1650 || MPI_Bcast(&piv_par
->ifit__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1653 || MPI_Bcast(&piv_par
->peak
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1655 || MPI_Bcast(&piv_par
->peak__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1658 || MPI_Bcast(&piv_par
->int_scheme__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1660 || MPI_Bcast(&piv_par
->int_scheme
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1663 || MPI_Bcast(&piv_par
->gauss_weight_ia
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1665 || MPI_Bcast(&piv_par
->gauss_weight_ia__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1668 || MPI_Bcast(&piv_par
->spof_filter
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1670 || MPI_Bcast(&piv_par
->spof_filter__set
, 1, MPI_INT
, root
, MPI_COMM_WORLD
)
1673 gpiv_warning("THOUSAND BOMBS AND SHELLS!");
1674 err_msg
= "gpiv_piv_mpi_bcast_pivpar: An error ocurred in MPI_Bcast";
1679 #endif /* ENABLE_MPI */
1687 piv_ovwrt_parameters (const GpivPivPar
*piv_par_src
,
1688 GpivPivPar
*piv_par_dest
,
1689 const gboolean force
1691 /*-----------------------------------------------------------------------------
1693 * Copies piv parameters
1696 * piv_par_src: source piv parameters
1697 * force: flag to force the copying, even if destination
1702 * *piv_par_dest: destination piv parameters
1704 *---------------------------------------------------------------------------*/
1706 if ((force
&& piv_par_src
->col_start__set
)
1707 || ( piv_par_src
->col_start__set
1708 && !piv_par_dest
->col_start__set
)) {
1709 piv_par_dest
->col_start
= piv_par_src
->col_start
;
1710 piv_par_dest
->col_start__set
= TRUE
;
1713 if ((force
&& piv_par_src
->col_end__set
)
1714 || ( piv_par_src
->col_end__set
1715 && !piv_par_dest
->col_end__set
)) {
1716 piv_par_dest
->col_end
= piv_par_src
->col_end
;
1717 piv_par_dest
->col_end__set
= TRUE
;
1720 if ((force
&& piv_par_src
->row_start__set
)
1721 || ( piv_par_src
->row_start__set
1722 && !piv_par_dest
->row_start__set
)) {
1723 piv_par_dest
->row_start
= piv_par_src
->row_start
;
1724 piv_par_dest
->row_start__set
= TRUE
;
1727 if ((force
&& piv_par_src
->row_end__set
)
1728 || ( piv_par_src
->row_end__set
1729 && !piv_par_dest
->row_end__set
)) {
1730 piv_par_dest
->row_end
= piv_par_src
->row_end
;
1731 piv_par_dest
->row_end__set
= TRUE
;
1735 if ((force
&& piv_par_src
->int_geo__set
)
1736 || ( piv_par_src
->int_geo__set
1737 && !piv_par_dest
->int_geo__set
)) {
1738 piv_par_dest
->int_geo
= piv_par_src
->int_geo
;
1739 piv_par_dest
->int_geo__set
= TRUE
;
1742 if ((force
&& piv_par_src
->int_line_col__set
)
1743 || ( piv_par_src
->int_line_col__set
1744 && !piv_par_dest
->int_line_col__set
)) {
1745 piv_par_dest
->int_line_col
= piv_par_src
->int_line_col
;
1746 piv_par_dest
->int_line_col__set
= TRUE
;
1749 if ((force
&& piv_par_src
->int_line_col_start__set
)
1750 || ( piv_par_src
->int_line_col_start__set
1751 && !piv_par_dest
->int_line_col_start__set
)) {
1752 piv_par_dest
->int_line_col_start
=
1753 piv_par_src
->int_line_col_start
;
1754 piv_par_dest
->int_line_col_start__set
= TRUE
;
1757 if ((force
&& piv_par_src
->int_line_col_end__set
)
1758 || ( piv_par_src
->int_line_col_end__set
1759 && !piv_par_dest
->int_line_col_end__set
)) {
1760 piv_par_dest
->int_line_col_end
=
1761 piv_par_src
->int_line_col_end
;
1762 piv_par_dest
->int_line_col_end__set
= TRUE
;
1765 if ((force
&& piv_par_src
->int_line_row__set
)
1766 || ( piv_par_src
->int_line_row__set
1767 && !piv_par_dest
->int_line_row__set
)) {
1768 piv_par_dest
->int_line_row
= piv_par_src
->int_line_row
;
1769 piv_par_dest
->int_line_row__set
= TRUE
;
1772 if ((force
&& piv_par_src
->int_line_row_start__set
)
1773 || ( piv_par_src
->int_line_row_start__set
1774 && !piv_par_dest
->int_line_row_start__set
)) {
1775 piv_par_dest
->int_line_row_start
=
1776 piv_par_src
->int_line_row_start
;
1777 piv_par_dest
->int_line_row_start__set
= TRUE
;
1780 if ((force
&& piv_par_src
->int_line_row_end__set
)
1781 || ( piv_par_src
->int_line_row_end__set
1782 && !piv_par_dest
->int_line_row_end__set
)) {
1783 piv_par_dest
->int_line_row_end
=
1784 piv_par_src
->int_line_row_end
;
1785 piv_par_dest
->int_line_row_end__set
= TRUE
;
1788 if ((force
&& piv_par_src
->int_point_col__set
)
1789 || ( piv_par_src
->int_point_col__set
1790 && !piv_par_dest
->int_point_col__set
)) {
1791 piv_par_dest
->int_point_col
= piv_par_src
->int_point_col
;
1792 piv_par_dest
->int_point_col__set
= TRUE
;
1795 if ((force
&& piv_par_src
->int_point_row__set
)
1796 || ( piv_par_src
->int_point_row__set
1797 && !piv_par_dest
->int_point_row__set
)) {
1798 piv_par_dest
->int_point_row
= piv_par_src
->int_point_row
;
1799 piv_par_dest
->int_point_row__set
= TRUE
;
1802 if ((force
&& piv_par_src
->int_size_f__set
)
1803 || ( piv_par_src
->int_size_f__set
1804 && !piv_par_dest
->int_size_f__set
)) {
1805 piv_par_dest
->int_size_f
= piv_par_src
->int_size_f
;
1806 piv_par_dest
->int_size_f__set
= TRUE
;
1809 if ((force
&& piv_par_src
->int_size_i__set
)
1810 || ( piv_par_src
->int_size_i__set
1811 && !piv_par_dest
->int_size_i__set
)) {
1812 piv_par_dest
->int_size_i
= piv_par_src
->int_size_i
;
1813 piv_par_dest
->int_size_i__set
= TRUE
;
1816 if ((force
&& piv_par_src
->int_shift__set
)
1817 || ( piv_par_src
->int_shift__set
1818 && !piv_par_dest
->int_shift__set
)) {
1819 piv_par_dest
->int_shift
=
1820 piv_par_src
->int_shift
;
1821 piv_par_dest
->int_shift__set
= TRUE
;
1824 if ((force
&& piv_par_src
->pre_shift_col__set
)
1825 || ( piv_par_src
->pre_shift_col__set
1826 && !piv_par_dest
->pre_shift_col__set
)) {
1827 piv_par_dest
->pre_shift_col
= piv_par_src
->pre_shift_col
;
1828 piv_par_dest
->pre_shift_col__set
= TRUE
;
1831 if ((force
&& piv_par_src
->pre_shift_row__set
)
1832 || ( piv_par_src
->pre_shift_row__set
1833 && !piv_par_dest
->pre_shift_row__set
)) {
1834 piv_par_dest
->pre_shift_row
= piv_par_src
->pre_shift_row
;
1835 piv_par_dest
->pre_shift_row__set
= TRUE
;
1838 if ((force
&& piv_par_src
->peak__set
)
1839 || ( piv_par_src
->peak__set
1840 && !piv_par_dest
->peak__set
)) {
1841 piv_par_dest
->peak
= piv_par_src
->peak
;
1842 piv_par_dest
->peak__set
= TRUE
;
1845 if ((force
&& piv_par_src
->print_par__set
)
1846 || ( piv_par_src
->print_par__set
1847 && !piv_par_dest
->print_par__set
)) {
1848 piv_par_dest
->print_par
= piv_par_src
->print_par
;
1849 piv_par_dest
->print_par__set
= TRUE
;
1852 if ((force
&& piv_par_src
->print_piv__set
)
1853 || ( piv_par_src
->print_piv__set
1854 && !piv_par_dest
->print_piv__set
)) {
1855 piv_par_dest
->print_piv
= piv_par_src
->print_piv
;
1856 piv_par_dest
->print_piv__set
= TRUE
;
1859 if ((force
&& piv_par_src
->int_scheme__set
)
1860 || ( piv_par_src
->int_scheme__set
1861 && !piv_par_dest
->int_scheme__set
)) {
1862 piv_par_dest
->int_scheme
= piv_par_src
->int_scheme
;
1863 piv_par_dest
->int_scheme__set
= TRUE
;
1866 if ((force
&& piv_par_src
->spof_filter__set
)
1867 || ( piv_par_src
->spof_filter__set
1868 && !piv_par_dest
->spof_filter__set
)) {
1869 piv_par_dest
->spof_filter
= piv_par_src
->spof_filter
;
1870 piv_par_dest
->spof_filter__set
= TRUE
;
1873 if ((force
&& piv_par_src
->gauss_weight_ia__set
)
1874 || ( piv_par_src
->gauss_weight_ia__set
1875 && !piv_par_dest
->gauss_weight_ia__set
)) {
1876 piv_par_dest
->gauss_weight_ia
= piv_par_src
->gauss_weight_ia
;
1877 piv_par_dest
->gauss_weight_ia__set
= TRUE
;
1880 if ((force
&& piv_par_src
->ifit__set
)
1881 || ( piv_par_src
->ifit__set
1882 && !piv_par_dest
->ifit__set
)) {
1883 piv_par_dest
->ifit
= piv_par_src
->ifit
;
1884 piv_par_dest
->ifit__set
= TRUE
;
1892 attr_info (hid_t loc_id
,
1894 GpivPivPar
* piv_par
1896 /*-----------------------------------------------------------------------------
1897 * Operator function.
1900 hid_t attribute_id
, atype
;
1906 * Image piv parametes
1908 if (strcmp(name
, PIVPAR_KEY__INT_GEO
) == 0) {
1909 attribute_id
= H5Aopen_name(loc_id
, name
);
1910 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
1912 status
= H5Aclose(attribute_id
);
1913 piv_par
->int_geo__set
= TRUE
;
1917 if (strcmp(name
, PIVPAR_KEY__COL_START
) == 0) {
1918 attribute_id
= H5Aopen_name(loc_id
, name
);
1919 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
1920 &piv_par
->col_start
);
1921 status
= H5Aclose(attribute_id
);
1922 piv_par
->col_start__set
= TRUE
;
1926 if (strcmp(name
, PIVPAR_KEY__COL_END
) == 0) {
1927 attribute_id
= H5Aopen_name(loc_id
, name
);
1928 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
1930 status
= H5Aclose(attribute_id
);
1931 piv_par
->col_end__set
= TRUE
;
1935 if (strcmp(name
, PIVPAR_KEY__ROW_START
) == 0) {
1936 attribute_id
= H5Aopen_name(loc_id
, name
);
1937 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
1938 &piv_par
->row_start
);
1939 status
= H5Aclose(attribute_id
);
1940 piv_par
->row_start__set
= TRUE
;
1944 if (strcmp(name
, PIVPAR_KEY__ROW_END
) == 0) {
1945 attribute_id
= H5Aopen_name(loc_id
, name
);
1946 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
1948 status
= H5Aclose(attribute_id
);
1949 piv_par
->row_end__set
= TRUE
;
1955 if (strcmp(name
, PIVPAR_KEY__INT_LINE_ROW
) == 0) {
1956 attribute_id
= H5Aopen_name(loc_id
, name
);
1957 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
1958 &piv_par
->int_line_row
);
1959 status
= H5Aclose(attribute_id
);
1960 piv_par
->int_line_row__set
= TRUE
;
1964 if (strcmp(name
, PIVPAR_KEY__INT_LINE_ROW_START
) == 0) {
1965 attribute_id
= H5Aopen_name(loc_id
, name
);
1966 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
1967 &piv_par
->int_line_row_start
);
1968 status
= H5Aclose(attribute_id
);
1969 piv_par
->int_line_row_start__set
= TRUE
;
1973 if (strcmp(name
, PIVPAR_KEY__INT_LINE_ROW_END
) == 0) {
1974 attribute_id
= H5Aopen_name(loc_id
, name
);
1975 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
1976 &piv_par
->int_line_row_end
);
1977 status
= H5Aclose(attribute_id
);
1978 piv_par
->int_line_row_end__set
= TRUE
;
1982 if (strcmp(name
, PIVPAR_KEY__INT_LINE_COL
) == 0) {
1983 attribute_id
= H5Aopen_name(loc_id
, name
);
1984 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
1985 &piv_par
->int_line_col
);
1986 status
= H5Aclose(attribute_id
);
1987 piv_par
->int_line_col__set
= TRUE
;
1991 if (strcmp(name
, PIVPAR_KEY__INT_LINE_COL_START
) == 0) {
1992 attribute_id
= H5Aopen_name(loc_id
, name
);
1993 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
1994 &piv_par
->int_line_col_start
);
1995 status
= H5Aclose(attribute_id
);
1996 piv_par
->int_line_col_start__set
= TRUE
;
2000 if (strcmp(name
, PIVPAR_KEY__INT_LINE_COL_END
) == 0) {
2001 attribute_id
= H5Aopen_name(loc_id
, name
);
2002 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
2003 &piv_par
->int_line_col_end
);
2004 status
= H5Aclose(attribute_id
);
2005 piv_par
->int_line_col_end__set
= TRUE
;
2012 if (strcmp(name
, PIVPAR_KEY__INT_SIZE_F
) == 0) {
2013 attribute_id
= H5Aopen_name(loc_id
, name
);
2014 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
2015 &piv_par
->int_size_f
);
2016 status
= H5Aclose(attribute_id
);
2017 piv_par
->int_size_f__set
= TRUE
;
2021 if (strcmp(name
, PIVPAR_KEY__INT_SIZE_I
) == 0) {
2022 attribute_id
= H5Aopen_name(loc_id
, name
);
2023 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
2024 &piv_par
->int_size_i
);
2025 status
= H5Aclose(attribute_id
);
2026 piv_par
->int_size_i__set
= TRUE
;
2030 if (strcmp(name
, PIVPAR_KEY__INT_SHIFT
) == 0) {
2031 attribute_id
= H5Aopen_name(loc_id
, name
);
2032 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
2033 &piv_par
->int_shift
);
2034 status
= H5Aclose(attribute_id
);
2035 piv_par
->int_shift__set
= TRUE
;
2039 if (strcmp(name
, PIVPAR_KEY__PRE_SHIFT_COL
) == 0) {
2040 attribute_id
= H5Aopen_name(loc_id
, name
);
2041 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
2042 &piv_par
->pre_shift_col
);
2043 status
= H5Aclose(attribute_id
);
2044 piv_par
->pre_shift_col__set
= TRUE
;
2048 if (strcmp(name
, PIVPAR_KEY__PRE_SHIFT_ROW
) == 0) {
2049 attribute_id
= H5Aopen_name(loc_id
, name
);
2050 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
2051 &piv_par
->pre_shift_row
);
2052 status
= H5Aclose(attribute_id
);
2053 piv_par
->pre_shift_row__set
= TRUE
;
2057 * Sub-pixel interrogation
2059 if (strcmp(name
, PIVPAR_KEY__IFIT
) == 0) {
2060 attribute_id
= H5Aopen_name(loc_id
, name
);
2061 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
2063 status
= H5Aclose(attribute_id
);
2064 piv_par
->ifit__set
= TRUE
;
2068 if (strcmp(name
, PIVPAR_KEY__PEAK
) == 0) {
2069 attribute_id
= H5Aopen_name(loc_id
, name
);
2070 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
2072 status
= H5Aclose(attribute_id
);
2073 piv_par
->peak__set
= TRUE
;
2077 if (strcmp(name
, PIVPAR_KEY__INT_SCHEME
) == 0) {
2078 attribute_id
= H5Aopen_name(loc_id
, name
);
2079 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
2080 &piv_par
->int_scheme
);
2081 status
= H5Aclose(attribute_id
);
2082 piv_par
->int_scheme__set
= TRUE
;
2086 if (strcmp(name
, PIVPAR_KEY__SPOF_FILTER
) == 0) {
2087 attribute_id
= H5Aopen_name(loc_id
, name
);
2088 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
2089 &piv_par
->spof_filter
);
2090 status
= H5Aclose(attribute_id
);
2091 piv_par
->spof_filter__set
= TRUE
;
2095 if (strcmp(name
, PIVPAR_KEY__GAUSS_WEIGHT_IA
) == 0) {
2096 attribute_id
= H5Aopen_name(loc_id
, name
);
2097 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
2098 &piv_par
->gauss_weight_ia
);
2099 status
= H5Aclose(attribute_id
);
2100 piv_par
->gauss_weight_ia__set
= TRUE
;
2104 if (strcmp(name
, "print_piv") == 0) {
2105 attribute_id
= H5Aopen_name(loc_id
, name
);
2106 status
= H5Aread(attribute_id
, H5T_NATIVE_INT
,
2107 &piv_par
->print_piv
);
2108 status
= H5Aclose(attribute_id
);
2109 piv_par
->print_piv__set
= TRUE
;
2119 obtain_pivpar_fromline (char line
[],
2120 GpivPivPar
*piv_par
,
2123 /*-----------------------------------------------------------------------------
2124 * Scans a line to get a member of GpivPivPar
2127 char par_name
[GPIV_MAX_CHARS
];
2130 if (line
[0] != '#' && line
[0] != '\n' && line
[0] != ' '
2131 && line
[0] != '\t') {
2132 sscanf (line
,"%s", par_name
);
2134 if (piv_par
->int_geo__set
== FALSE
) {
2135 piv_par
->int_geo__set
=
2136 gpiv_scan_iph (GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_GEO
, TRUE
,
2137 line
, par_name
, &piv_par
->int_geo
,
2141 if (piv_par
->col_start__set
== FALSE
) {
2142 piv_par
->col_start__set
=
2143 gpiv_scan_iph (GPIV_PIVPAR_KEY
, PIVPAR_KEY__COL_START
, TRUE
,
2144 line
, par_name
, &piv_par
->col_start
,
2148 if (piv_par
->col_end__set
== FALSE
) {
2149 piv_par
->col_end__set
=
2150 gpiv_scan_iph (GPIV_PIVPAR_KEY
, PIVPAR_KEY__COL_END
, TRUE
,
2151 line
, par_name
, &piv_par
->col_end
,
2155 if (piv_par
->row_start__set
== FALSE
) {
2156 piv_par
->row_start__set
=
2157 gpiv_scan_iph (GPIV_PIVPAR_KEY
, PIVPAR_KEY__ROW_START
, TRUE
,
2158 line
, par_name
, &piv_par
->row_start
,
2162 if (piv_par
->row_end__set
== FALSE
) {
2163 piv_par
->row_end__set
=
2164 gpiv_scan_iph (GPIV_PIVPAR_KEY
, PIVPAR_KEY__ROW_END
, TRUE
,
2165 line
, par_name
, &piv_par
->row_end
,
2169 if (piv_par
->int_line_row__set
== FALSE
) {
2170 piv_par
->int_line_row__set
=
2171 gpiv_scan_iph (GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_LINE_ROW
, TRUE
,
2172 line
, par_name
, &piv_par
->int_line_row
,
2176 if (piv_par
->int_line_row_start__set
== FALSE
) {
2177 piv_par
->int_line_row_start__set
=
2178 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2179 PIVPAR_KEY__INT_LINE_ROW_START
, TRUE
,
2180 line
, par_name
, &piv_par
->int_line_row_start
,
2184 if (piv_par
->int_line_row_end__set
== FALSE
) {
2185 piv_par
->int_line_row_end__set
=
2186 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2187 PIVPAR_KEY__INT_LINE_ROW_END
, TRUE
,
2188 line
, par_name
, &piv_par
->int_line_row_end
,
2192 if (piv_par
->int_line_col__set
== FALSE
) {
2193 piv_par
->int_line_col__set
=
2194 gpiv_scan_iph (GPIV_PIVPAR_KEY
, PIVPAR_KEY__INT_LINE_COL
, TRUE
,
2195 line
, par_name
, &piv_par
->int_line_col
,
2199 if (piv_par
->int_line_col_start__set
== FALSE
) {
2200 piv_par
->int_line_col_start__set
=
2201 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2202 PIVPAR_KEY__INT_LINE_COL_START
, TRUE
,
2203 line
, par_name
, &piv_par
->int_line_col_start
,
2207 if (piv_par
->int_line_col_end__set
== FALSE
) {
2208 piv_par
->int_line_col_end__set
=
2209 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2210 PIVPAR_KEY__INT_LINE_COL_END
, TRUE
,
2211 line
, par_name
, &piv_par
->int_line_col_end
,
2215 if (piv_par
->int_point_col__set
== FALSE
) {
2216 piv_par
->int_point_col__set
=
2217 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2218 PIVPAR_KEY__INT_POINT_COL
, TRUE
,
2219 line
, par_name
, &piv_par
->int_point_col
,
2223 if (piv_par
->int_point_row__set
== FALSE
) {
2224 piv_par
->int_point_row__set
=
2225 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2226 PIVPAR_KEY__INT_POINT_ROW
, TRUE
,
2227 line
, par_name
, &piv_par
->int_point_row
,
2233 if (piv_par
->int_size_f__set
== FALSE
) {
2234 piv_par
->int_size_f__set
=
2235 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2236 PIVPAR_KEY__INT_SIZE_F
, TRUE
,
2237 line
, par_name
, &piv_par
->int_size_f
,
2241 if (piv_par
->int_size_i__set
== FALSE
) {
2242 piv_par
->int_size_i__set
=
2243 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2244 PIVPAR_KEY__INT_SIZE_I
, TRUE
,
2245 line
, par_name
, &piv_par
->int_size_i
,
2249 if (piv_par
->int_shift__set
== FALSE
) {
2250 piv_par
->int_shift__set
=
2251 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2252 PIVPAR_KEY__INT_SHIFT
, TRUE
,
2253 line
, par_name
, &piv_par
->int_shift
,
2257 if (piv_par
->pre_shift_col__set
== FALSE
) {
2258 piv_par
->pre_shift_col__set
=
2259 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2260 PIVPAR_KEY__PRE_SHIFT_COL
, TRUE
,
2261 line
, par_name
, &piv_par
->pre_shift_col
,
2265 if (piv_par
->pre_shift_row__set
== FALSE
) {
2266 piv_par
->pre_shift_row__set
=
2267 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2268 PIVPAR_KEY__PRE_SHIFT_ROW
, TRUE
,
2269 line
, par_name
, &piv_par
->pre_shift_row
,
2273 if (piv_par
->int_scheme__set
== FALSE
) {
2274 piv_par
->int_scheme__set
=
2275 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2276 PIVPAR_KEY__INT_SCHEME
, TRUE
,
2277 line
, par_name
, (int *) &piv_par
->int_scheme
,
2281 if (piv_par
->spof_filter__set
== FALSE
) {
2282 piv_par
->spof_filter__set
=
2283 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2284 PIVPAR_KEY__SPOF_FILTER
, TRUE
,
2285 line
, par_name
, (int *) &piv_par
->spof_filter
,
2289 if (piv_par
->gauss_weight_ia__set
== FALSE
) {
2290 piv_par
->gauss_weight_ia__set
=
2291 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2292 PIVPAR_KEY__GAUSS_WEIGHT_IA
, TRUE
,
2293 line
, par_name
, (int *) &piv_par
->gauss_weight_ia
,
2297 if (piv_par
->peak__set
== FALSE
) {
2298 piv_par
->peak__set
=
2299 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2300 PIVPAR_KEY__PEAK
, TRUE
,
2301 line
, par_name
, &piv_par
->peak
,
2305 if (piv_par
->ifit__set
== FALSE
) {
2306 piv_par
->ifit__set
=
2307 gpiv_scan_iph (GPIV_PIVPAR_KEY
,
2308 PIVPAR_KEY__IFIT
, TRUE
,
2309 line
, par_name
, &piv_par
->ifit
,