Merge ../libgpiv-omp into fft-omp
[libgpiv.git] / lib / pivpar.c
blobdf1f9544625fe698c8cebe02e5a87449f4eca32b
1 /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 c-style: "K&R" -*- */
3 /*
4 libgpiv - library for Particle Image Velocimetry
6 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008
7 Gerber van der Graaf
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)
14 any later version.
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 ------------------------------------------------------------------------------
28 FILENAME: piv_par.c
29 LIBRARY: libgpiv
30 EXTERNAL FUNCTIONS:
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 --------------------------------------------------------------------- */
48 #include <gpiv.h>
51 * Default values and keys of GpivPivPar
53 enum {
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 */
106 static void
107 piv_ovwrt_parameters (const GpivPivPar *piv_par_src,
108 GpivPivPar *piv_par_dest,
109 const gboolean force
112 static herr_t
113 attr_info (hid_t loc_id,
114 const gchar *name,
115 GpivPivPar *piv_par
118 static void
119 obtain_pivpar_fromline (char line[],
120 GpivPivPar *piv_par,
121 gboolean verbose
125 * Public functions
128 void
129 gpiv_piv_default_parameters (GpivPivPar *piv_par_default,
130 const gboolean force
132 /*-----------------------------------------------------------------------------
133 * DESCRIPTION:
134 * Sets default parameter values
136 * INPUTS:
137 * force: flag to enforce parameters set to defaults
139 * OUTPUTS:
140 * piv_par_default: structure of piv evaluation parameters
142 * RETURNS:
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);
194 GpivPivPar *
195 gpiv_piv_get_parameters_from_resources (const gchar *localrc,
196 const gboolean verbose
199 /*-----------------------------------------------------------------------------
200 * DESCRIPTION:
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);
212 return piv_par;
217 void
218 gpiv_piv_parameters_set (GpivPivPar *piv_par,
219 const gboolean flag
221 /*-----------------------------------------------------------------------------
222 * DESCRIPTION:
223 * Set flags for all piv_par__set
225 * INPUTS:
226 * flag: true (1) or false (0)
228 * OUTPUTS:
229 * piv_par: PIV evaluation parameters
231 * RETURNS:
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;
265 void
266 gpiv_piv_read_parameters (FILE *fp,
267 GpivPivPar *piv_par,
268 const gboolean verbose
270 /*-----------------------------------------------------------------------------
271 * DESCRIPTION:
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);
283 } else {
284 while (fgets(line, GPIV_MAX_CHARS, fp) != NULL) {
285 obtain_pivpar_fromline (line, piv_par, verbose);
290 return;
295 gchar *
296 gpiv_piv_check_parameters_read (GpivPivPar *piv_par,
297 const GpivPivPar *piv_par_default
299 /*-----------------------------------------------------------------------------
300 * DESCRIPTION:
301 * Check out if all parameters have been read
303 * INPUTS:
304 * piv_par_default:
306 * OUTPUTS:
307 * piv_par:
309 * RETURNS:
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;
321 } else {
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,
326 GPIV_PIVPAR_KEY,
327 PIVPAR_KEY__INT_GEO,
328 piv_par->int_geo);
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;
336 } else {
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,
341 GPIV_PIVPAR_KEY,
342 PIVPAR_KEY__COL_START,
343 piv_par->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;
351 } else {
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,
356 GPIV_PIVPAR_KEY,
357 PIVPAR_KEY__COL_END,
358 piv_par->col_end);
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;
366 } else {
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,
371 GPIV_PIVPAR_KEY,
372 PIVPAR_KEY__ROW_START,
373 piv_par->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;
381 } else {
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,
386 GPIV_PIVPAR_KEY,
387 PIVPAR_KEY__ROW_END,
388 piv_par->row_end);
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;
397 } else {
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,
402 GPIV_PIVPAR_KEY,
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;
414 } else {
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,
419 GPIV_PIVPAR_KEY,
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;
431 } else {
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,
436 GPIV_PIVPAR_KEY,
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;
447 } else {
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,
452 GPIV_PIVPAR_KEY,
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;
464 } else {
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,
470 GPIV_PIVPAR_KEY,
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;
482 } else {
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,
487 GPIV_PIVPAR_KEY,
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;
498 } else {
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,
503 GPIV_PIVPAR_KEY,
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;
514 } else {
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,
519 GPIV_PIVPAR_KEY,
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;
531 } else {
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,
536 GPIV_PIVPAR_KEY,
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;
546 } else {
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,
551 GPIV_PIVPAR_KEY,
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;
561 } else {
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,
566 GPIV_PIVPAR_KEY,
567 PIVPAR_KEY__INT_SHIFT,
568 piv_par->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;
576 } else {
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,
581 GPIV_PIVPAR_KEY,
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;
591 } else {
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,
596 GPIV_PIVPAR_KEY,
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: ";
606 } else {
607 err_msg = "Using default: ";
608 piv_par->peak = piv_par_default->peak;
610 gpiv_warning("%s\n%s.%s %d", err_msg,
611 GPIV_PIVPAR_KEY,
612 PIVPAR_KEY__PEAK,
613 piv_par->peak);
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;
621 } else {
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,
626 GPIV_PIVPAR_KEY,
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;
636 } else {
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,
641 GPIV_PIVPAR_KEY,
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;
652 } else {
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,
657 GPIV_PIVPAR_KEY,
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;
667 } else {
668 err_msg = "Using default: ";
669 piv_par->ifit = piv_par_default->ifit;
671 gpiv_warning("%s\n%s.%s %d", err_msg,
672 GPIV_PIVPAR_KEY,
673 PIVPAR_KEY__IFIT,
674 piv_par->ifit);
678 return err_msg;
683 gchar *
684 gpiv_piv_testonly_parameters (const GpivImagePar *image_par,
685 const GpivPivPar *piv_par
687 /*-----------------------------------------------------------------------------
688 * DESCRIPTION:
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",
702 GPIV_PIVPAR_KEY,
703 PIVPAR_KEY__COL_END,
704 GPIV_PIVPAR_KEY,
705 PIVPAR_KEY__PRE_SHIFT_COL);
706 gpiv_warning("%s", err_msg);
707 return 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",
713 GPIV_PIVPAR_KEY,
714 PIVPAR_KEY__ROW_END,
715 GPIV_PIVPAR_KEY,
716 PIVPAR_KEY__PRE_SHIFT_ROW);
717 gpiv_warning("%s", err_msg);
718 return 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);
731 return 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);
741 return 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);
753 return err_msg;
757 * Check ifit
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)",
764 GPIV_PIVPAR_KEY,
765 PIVPAR_KEY__IFIT);
766 gpiv_warning("%s", err_msg);
767 return err_msg;
771 return err_msg;
776 gchar *
777 gpiv_piv_testadjust_parameters (const GpivImagePar *image_par,
778 GpivPivPar *piv_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);
791 return (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",
801 piv_par->col_end);
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",
808 piv_par->col_start);
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",
814 piv_par->row_end);
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",
820 piv_par->row_start);
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);
852 * Check ifit
854 if (piv_par->ifit != 0
855 && piv_par->ifit != 1
856 && piv_par->ifit != 2
857 && piv_par->ifit != 3) {
858 piv_par->ifit = 1;
859 gpiv_warning("gpiv_piv_testadjust_parameters: ifit set to 1 (Gauss)",
860 GPIV_PIVPAR_KEY);
864 return err_msg;
869 void
870 gpiv_piv_print_parameters (FILE *fp,
871 const GpivPivPar *piv_par
873 /*-----------------------------------------------------------------------------
874 * DESCRIPTION:
875 * Prints parameters to fp
877 *---------------------------------------------------------------------------*/
879 if (fp == stdout || fp == NULL) {
881 * prints to stdout
883 if (piv_par->int_geo__set)
884 printf ("%s.%s %d\n",
885 GPIV_PIVPAR_KEY, PIVPAR_KEY__INT_GEO,
886 piv_par->int_geo);
888 if (piv_par->col_start__set)
889 printf ("%s.%s %d\n",
890 GPIV_PIVPAR_KEY, PIVPAR_KEY__COL_START,
891 piv_par->col_start);
893 if (piv_par->col_end__set)
894 printf ("%s.%s %d\n",
895 GPIV_PIVPAR_KEY, PIVPAR_KEY__COL_END,
896 piv_par->col_end);
898 if (piv_par->row_start__set)
899 printf ("%s.%s %d\n",
900 GPIV_PIVPAR_KEY, PIVPAR_KEY__ROW_START,
901 piv_par->row_start);
903 if (piv_par->row_end__set)
904 printf ("%s.%s %d\n",
905 GPIV_PIVPAR_KEY, PIVPAR_KEY__ROW_END,
906 piv_par->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,
986 piv_par->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,
1016 piv_par->ifit);
1020 if (piv_par->peak__set)
1021 printf ("%s.%s %d\n",
1022 GPIV_PIVPAR_KEY, PIVPAR_KEY__PEAK,
1023 piv_par->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);
1030 } else {
1032 * prints to fp
1034 if (piv_par->int_geo__set)
1035 fprintf (fp, "%s.%s %d\n",
1036 GPIV_PIVPAR_KEY, PIVPAR_KEY__INT_GEO,
1037 piv_par->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,
1047 piv_par->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,
1057 piv_par->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,
1167 piv_par->ifit);
1170 if (piv_par->peak__set)
1171 fprintf (fp, "%s.%s %d\n",
1172 GPIV_PIVPAR_KEY, PIVPAR_KEY__PEAK,
1173 piv_par->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);
1184 GpivPivPar *
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;
1202 void
1203 gpiv_piv_cp_undef_parameters (const GpivPivPar *piv_par_src,
1204 GpivPivPar *piv_par_dest
1206 /*-----------------------------------------------------------------------------
1207 * DESCRIPTION:
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);
1216 GpivPivPar *
1217 gpiv_piv_fread_hdf5_parameters (const gchar *fname
1219 /*-----------------------------------------------------------------------------
1220 * DESCRIPTION:
1221 * Reads piv parameters from hdf5 data file
1223 *---------------------------------------------------------------------------*/
1225 GpivPivPar *piv_par = g_new0 (GpivPivPar, 1);
1226 gchar *err_msg = NULL;
1227 gint i;
1229 * HDF declarations
1231 hid_t file_id, group_id, attribute_id;
1232 herr_t status;
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);
1237 return NULL;
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);
1248 return piv_par;
1253 gchar *
1254 gpiv_piv_fwrite_hdf5_parameters (const gchar *fname,
1255 const GpivPivPar *piv_par
1257 /*-----------------------------------------------------------------------------
1258 * DESCRIPTION:
1259 * Writes piv parameters to an existing hdf5 data file
1261 *---------------------------------------------------------------------------*/
1263 gchar *err_msg = NULL;
1264 gint i;
1268 * HDF declarations
1270 hid_t file_id, dataspace_id, group_id, attribute_id;
1271 hsize_t dims[1];
1272 herr_t status;
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);
1277 return err_msg;
1280 file_id = H5Fopen(fname, H5F_ACC_RDWR, H5P_DEFAULT);
1281 group_id = H5Gopen (file_id, "PIV", H5P_DEFAULT);
1285 dims[0] = 1;
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,
1293 H5T_NATIVE_INT,
1294 dataspace_id, H5P_DEFAULT, H5P_DEFAULT);
1295 status = H5Awrite(attribute_id, H5T_NATIVE_INT,
1296 &piv_par->int_geo);
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,
1303 H5T_NATIVE_INT,
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,
1313 H5T_NATIVE_INT,
1314 dataspace_id, H5P_DEFAULT, H5P_DEFAULT);
1315 status = H5Awrite(attribute_id, H5T_NATIVE_INT,
1316 &piv_par->col_end);
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,
1323 H5T_NATIVE_INT,
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,
1333 H5T_NATIVE_INT,
1334 dataspace_id, H5P_DEFAULT, H5P_DEFAULT);
1335 status = H5Awrite(attribute_id, H5T_NATIVE_INT,
1336 &piv_par->row_end);
1337 status = H5Aclose(attribute_id);
1341 * line
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,
1346 H5T_NATIVE_INT,
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,
1356 H5T_NATIVE_INT,
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,
1364 H5T_NATIVE_INT,
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,
1374 H5T_NATIVE_INT,
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,
1384 H5T_NATIVE_INT,
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,
1394 H5T_NATIVE_INT,
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);
1402 * point
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,
1409 H5T_NATIVE_INT,
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,
1418 H5T_NATIVE_INT,
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);
1426 * Interrogation
1428 if (piv_par->int_size_f__set) {
1429 attribute_id = H5Acreate(group_id, PIVPAR_KEY__INT_SIZE_F,
1430 H5T_NATIVE_INT,
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,
1439 H5T_NATIVE_INT,
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,
1448 H5T_NATIVE_INT,
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,
1457 H5T_NATIVE_INT,
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,
1466 H5T_NATIVE_INT,
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,
1478 H5T_NATIVE_INT,
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,
1486 H5T_NATIVE_INT,
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,
1494 H5T_NATIVE_INT,
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,
1503 H5T_NATIVE_INT,
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,
1512 H5T_NATIVE_INT,
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",
1521 H5T_NATIVE_INT,
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);
1532 return err_msg;
1537 #ifdef ENABLE_MPI
1538 gchar *
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;
1545 gint root = 0;
1547 if (
1548 MPI_Bcast(&piv_par->int_geo, 1, MPI_INT, root, MPI_COMM_WORLD)
1549 != MPI_SUCCESS
1550 || MPI_Bcast(&piv_par->int_geo__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1551 != MPI_SUCCESS
1553 || MPI_Bcast(&piv_par->col_start, 1, MPI_INT, root, MPI_COMM_WORLD)
1554 != MPI_SUCCESS
1555 || MPI_Bcast(&piv_par->col_start__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1556 != MPI_SUCCESS
1558 || MPI_Bcast(&piv_par->col_end, 1, MPI_INT, root, MPI_COMM_WORLD)
1559 != MPI_SUCCESS
1560 || MPI_Bcast(&piv_par->col_end__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1561 != MPI_SUCCESS
1563 || MPI_Bcast(&piv_par->row_start, 1, MPI_INT, root, MPI_COMM_WORLD)
1564 != MPI_SUCCESS
1565 || MPI_Bcast(&piv_par->row_start__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1566 != MPI_SUCCESS
1568 || MPI_Bcast(&piv_par->row_end, 1, MPI_INT, root, MPI_COMM_WORLD)
1569 != MPI_SUCCESS
1570 || MPI_Bcast(&piv_par->row_end__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1571 != MPI_SUCCESS
1573 || MPI_Bcast(&piv_par->int_line_col, 1, MPI_INT, root, MPI_COMM_WORLD)
1574 != MPI_SUCCESS
1575 || MPI_Bcast(&piv_par->int_line_col__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1576 != MPI_SUCCESS
1578 || MPI_Bcast(&piv_par->int_line_col_start, 1, MPI_INT, root, MPI_COMM_WORLD)
1579 != MPI_SUCCESS
1580 || MPI_Bcast(&piv_par->int_line_col_start__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1581 != MPI_SUCCESS
1583 || MPI_Bcast(&piv_par->int_line_col_end, 1, MPI_INT, root, MPI_COMM_WORLD)
1584 != MPI_SUCCESS
1585 || MPI_Bcast(&piv_par->int_line_col_end__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1586 != MPI_SUCCESS
1588 || MPI_Bcast(&piv_par->int_line_row, 1, MPI_INT, root, MPI_COMM_WORLD)
1589 != MPI_SUCCESS
1590 || MPI_Bcast(&piv_par->int_line_row__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1591 != MPI_SUCCESS
1593 || MPI_Bcast(&piv_par->int_line_row_start, 1, MPI_INT, root, MPI_COMM_WORLD)
1594 != MPI_SUCCESS
1595 || MPI_Bcast(&piv_par->int_line_row_start__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1596 != MPI_SUCCESS
1598 || MPI_Bcast(&piv_par->int_line_row_end, 1, MPI_INT, root, MPI_COMM_WORLD)
1599 != MPI_SUCCESS
1600 || MPI_Bcast(&piv_par->int_line_row_end__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1601 != MPI_SUCCESS
1603 || MPI_Bcast(&piv_par->int_point_col, 1, MPI_INT, root, MPI_COMM_WORLD)
1604 != MPI_SUCCESS
1605 || MPI_Bcast(&piv_par->int_point_col__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1606 != MPI_SUCCESS
1608 || MPI_Bcast(&piv_par->int_point_row, 1, MPI_INT, root, MPI_COMM_WORLD)
1609 != MPI_SUCCESS
1610 || MPI_Bcast(&piv_par->int_point_row__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1611 != MPI_SUCCESS
1613 || MPI_Bcast(&piv_par->int_size_f, 1, MPI_INT, root, MPI_COMM_WORLD)
1614 != MPI_SUCCESS
1615 || MPI_Bcast(&piv_par->int_size_f__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1616 != MPI_SUCCESS
1618 || MPI_Bcast(&piv_par->int_size_i, 1, MPI_INT, root, MPI_COMM_WORLD)
1619 != MPI_SUCCESS
1620 || MPI_Bcast(&piv_par->int_size_i__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1621 != MPI_SUCCESS
1623 || MPI_Bcast(&piv_par->int_shift, 1, MPI_INT, root, MPI_COMM_WORLD)
1624 != MPI_SUCCESS
1625 || MPI_Bcast(&piv_par->int_shift__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1626 != MPI_SUCCESS
1628 || MPI_Bcast(&piv_par->int_deform, 1, MPI_INT, root, MPI_COMM_WORLD)
1629 != MPI_SUCCESS
1630 || MPI_Bcast(&piv_par->int_deform__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1631 != MPI_SUCCESS
1633 || MPI_Bcast(&piv_par->spline_degree, 1, MPI_INT, root, MPI_COMM_WORLD)
1634 != MPI_SUCCESS
1635 || MPI_Bcast(&piv_par->spline_degree__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1636 != MPI_SUCCESS
1638 || MPI_Bcast(&piv_par->pre_shift_col, 1, MPI_INT, root, MPI_COMM_WORLD)
1639 != MPI_SUCCESS
1640 || MPI_Bcast(&piv_par->pre_shift_col__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1641 != MPI_SUCCESS
1643 || MPI_Bcast(&piv_par->pre_shift_row, 1, MPI_INT, root, MPI_COMM_WORLD)
1644 != MPI_SUCCESS
1645 || MPI_Bcast(&piv_par->pre_shift_row__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1646 != MPI_SUCCESS
1648 || MPI_Bcast(&piv_par->ifit, 1, MPI_INT, root, MPI_COMM_WORLD)
1649 != MPI_SUCCESS
1650 || MPI_Bcast(&piv_par->ifit__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1651 != MPI_SUCCESS
1653 || MPI_Bcast(&piv_par->peak, 1, MPI_INT, root, MPI_COMM_WORLD)
1654 != MPI_SUCCESS
1655 || MPI_Bcast(&piv_par->peak__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1656 != MPI_SUCCESS
1658 || MPI_Bcast(&piv_par->int_scheme__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1659 != MPI_SUCCESS
1660 || MPI_Bcast(&piv_par->int_scheme, 1, MPI_INT, root, MPI_COMM_WORLD)
1661 != MPI_SUCCESS
1663 || MPI_Bcast(&piv_par->gauss_weight_ia, 1, MPI_INT, root, MPI_COMM_WORLD)
1664 != MPI_SUCCESS
1665 || MPI_Bcast(&piv_par->gauss_weight_ia__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1666 != MPI_SUCCESS
1668 || MPI_Bcast(&piv_par->spof_filter, 1, MPI_INT, root, MPI_COMM_WORLD)
1669 != MPI_SUCCESS
1670 || MPI_Bcast(&piv_par->spof_filter__set, 1, MPI_INT, root, MPI_COMM_WORLD)
1671 != MPI_SUCCESS
1673 gpiv_warning("THOUSAND BOMBS AND SHELLS!");
1674 err_msg = "gpiv_piv_mpi_bcast_pivpar: An error ocurred in MPI_Bcast";
1677 return err_msg;
1679 #endif /* ENABLE_MPI */
1683 * Local functions
1686 static void
1687 piv_ovwrt_parameters (const GpivPivPar *piv_par_src,
1688 GpivPivPar *piv_par_dest,
1689 const gboolean force
1691 /*-----------------------------------------------------------------------------
1692 * DESCRIPTION:
1693 * Copies piv parameters
1695 * INPUTS:
1696 * piv_par_src: source piv parameters
1697 * force: flag to force the copying, even if destination
1698 * already exists
1701 * RETURNS:
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;
1891 static herr_t
1892 attr_info (hid_t loc_id,
1893 const gchar *name,
1894 GpivPivPar * piv_par
1896 /*-----------------------------------------------------------------------------
1897 * Operator function.
1900 hid_t attribute_id, atype;
1901 herr_t status;
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,
1911 &piv_par->int_geo);
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,
1929 &piv_par->col_end);
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,
1947 &piv_par->row_end);
1948 status = H5Aclose(attribute_id);
1949 piv_par->row_end__set = TRUE;
1953 * line
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;
2010 * Interrogation
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,
2062 &piv_par->ifit);
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,
2071 &piv_par->peak);
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;
2113 return 0;
2118 static void
2119 obtain_pivpar_fromline (char line[],
2120 GpivPivPar *piv_par,
2121 gboolean verbose
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,
2138 verbose, NULL);
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,
2145 verbose, NULL);
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,
2152 verbose, NULL);
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,
2159 verbose, NULL);
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,
2166 verbose, NULL);
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,
2173 verbose, NULL);
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,
2181 verbose, NULL);
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,
2189 verbose, NULL);
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,
2196 verbose, NULL);
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,
2204 verbose, NULL);
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,
2212 verbose, NULL);
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,
2220 verbose, NULL);
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,
2228 verbose, NULL);
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,
2238 verbose, NULL);
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,
2246 verbose, NULL);
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,
2254 verbose, NULL);
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,
2262 verbose, NULL);
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,
2270 verbose, NULL);
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,
2278 verbose, NULL);
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,
2286 verbose, NULL);
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,
2294 verbose, NULL);
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,
2302 verbose, NULL);
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,
2310 verbose, NULL);
2316 return;