19 #include "midiAppendPropertylist.h"
23 cpl_error_code appendPropertylist(
const char *ProductFile,
26 cpl_frameset *frameset,
27 cpl_parameterlist *parlist)
29 cpl_image * pImage = NULL;
30 cpl_frame * pFrameProduct = NULL;
31 cpl_propertylist * pHeader = NULL;
34 const char *szProduct=ProductFile;
35 const char *szRawFile=ProductFile;
38 pImage = cpl_image_load(szRawFile, CPL_TYPE_FLOAT, 0, 0 );
42 pHeader = cpl_propertylist_load(szRawFile, 0 );
45 pFrameProduct = cpl_frame_new();
46 cpl_frame_set_filename( pFrameProduct, szProduct );
47 cpl_frame_set_type ( pFrameProduct, type );
48 cpl_frame_set_tag ( pFrameProduct, tag );
49 cpl_frame_set_group ( pFrameProduct, CPL_FRAME_GROUP_PRODUCT );
50 cpl_frame_set_level ( pFrameProduct, CPL_FRAME_LEVEL_FINAL );
56 #if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0)
57 if (CPL_ERROR_NONE != cpl_dfs_setup_product_header(pHeader, pFrameProduct, frameset, parlist,
"dummy-recid", PACKAGE
"/" PACKAGE_VERSION, PRODUCT_DID, NULL))
59 cpl_msg_error(cpl_func,
"Error in cpl_dfs_setup_product_header: %s %s",cpl_error_get_message(),cpl_error_get_where());
62 if (CPL_ERROR_NONE != cpl_dfs_setup_product_header(pHeader, pFrameProduct, frameset, parlist,
"dummy-recid", PACKAGE
"/" PACKAGE_VERSION, PRODUCT_DID))
64 cpl_msg_error(cpl_func,
"Error in cpl_dfs_setup_product_header: %s %s",cpl_error_get_message(),cpl_error_get_where());
87 if (CPL_ERROR_NONE != cpl_image_save(pImage, szProduct, CPL_BPP_IEEE_FLOAT, pHeader, CPL_IO_DEFAULT ))
89 cpl_msg_error(cpl_func,
"Error in cpl_image_save");
92 if (CPL_ERROR_NONE != cpl_frameset_insert( frameset, pFrameProduct ))
94 cpl_msg_error(cpl_func,
"Error in cpl_frameset_insert");
97 cpl_image_delete( pImage );
98 cpl_propertylist_delete(pHeader );
103 cpl_error_code appendPropertylist_table(
const char *ProductFile,
106 cpl_frameset *frameset,
107 cpl_parameterlist *parlist)
113 cpl_table ** pTable_ext = NULL;
115 cpl_propertylist * pHeader = NULL;
116 cpl_propertylist ** pHeader_ext = NULL;
118 cpl_frame * pFrameProduct = NULL;
119 cpl_frame * pFrame_tmp = NULL;
122 const char *szProduct=ProductFile;
123 const char *szRawFile=ProductFile;
124 char * current_extension;
126 pFrameProduct = cpl_frame_new();
127 cpl_frame_set_filename( pFrameProduct, szProduct );
128 cpl_frame_set_type ( pFrameProduct, type );
129 cpl_frame_set_tag ( pFrameProduct, tag );
130 cpl_frame_set_group ( pFrameProduct, CPL_FRAME_GROUP_PRODUCT );
131 cpl_frame_set_level ( pFrameProduct, CPL_FRAME_LEVEL_FINAL );
137 pFrame_tmp = cpl_frame_new();
138 cpl_frame_set_filename( pFrame_tmp, szRawFile );
139 extnum=cpl_frame_get_nextensions(pFrame_tmp);
140 cpl_frame_delete(pFrame_tmp);
142 pHeader = cpl_propertylist_load(szRawFile, 0 );
147 cpl_msg_error(cpl_func,
"Error loading the propertylist of %s",szRawFile);
151 pTable_ext = cpl_malloc((extnum) *
sizeof(cpl_table *));
152 pHeader_ext = cpl_malloc((extnum) *
sizeof(cpl_propertylist *));
156 for (i=0; i<extnum; i++)
158 pHeader_ext[i] = cpl_propertylist_load(szRawFile, i+1 );
159 pTable_ext[i] = cpl_table_load(szRawFile, i+1, 1 );
161 if (pHeader_ext[i] ==NULL || pTable_ext[i]==NULL)
163 cpl_msg_error(cpl_func,
"Error loading the extended header or table of %s",szRawFile);
165 for (i=0; i<extnum; i++)
167 cpl_propertylist_delete(pHeader_ext[i]);
168 cpl_table_delete(pTable_ext[i]);
170 cpl_free (pHeader_ext);
171 cpl_free (pTable_ext);
179 current_extension=(
char *)cpl_propertylist_get_string(pHeader_ext[i],
"EXTNAME");
181 if (strcmp(current_extension,
"OI_VIS")==0 || strcmp(current_extension,
"OI_VIS2")==0){
183 if (cpl_table_has_column(pTable_ext[i],
"FLAG")){
184 cpl_table_set_column_savetype(pTable_ext[i],
"FLAG", CPL_TYPE_BOOL);
192 #if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0)
193 if (CPL_ERROR_NONE != cpl_dfs_setup_product_header(pHeader, pFrameProduct, frameset, parlist,
"dummy-recid", PACKAGE
"/" PACKAGE_VERSION, PRODUCT_DID, NULL))
195 cpl_msg_error(cpl_func,
"Error in cpl_dfs_setup_product_header: %s %s",cpl_error_get_message(),cpl_error_get_where());
198 if (CPL_ERROR_NONE != cpl_dfs_setup_product_header(pHeader, pFrameProduct, frameset, parlist,
"dummy-recid", PACKAGE
"/" PACKAGE_VERSION, PRODUCT_DID))
200 cpl_msg_error(cpl_func,
"Error in cpl_dfs_setup_product_header: %s %s",cpl_error_get_message(),cpl_error_get_where());
205 if (CPL_ERROR_NONE != cpl_table_save(pTable_ext[0],pHeader, pHeader_ext[0], szProduct, CPL_IO_DEFAULT ))
207 cpl_msg_error(cpl_func,
"Error when saving primary header: %s %s",cpl_error_get_message(),cpl_error_get_where());
210 for (i=1; i<extnum; i++)
212 if (CPL_ERROR_NONE != cpl_table_save(pTable_ext[i], NULL, pHeader_ext[i], szProduct, CPL_IO_EXTEND ))
214 cpl_msg_error(cpl_func,
"Error when saving Extension: %s %s",cpl_error_get_message(),cpl_error_get_where());
221 if (CPL_ERROR_NONE != cpl_frameset_insert( frameset, pFrameProduct ))
223 cpl_msg_error(cpl_func,
"Error in cpl_frameset_insert");
227 cpl_propertylist_delete(pHeader);
229 for (i=0; i<extnum; i++)
231 cpl_propertylist_delete(pHeader_ext[i]);
232 cpl_table_delete (pTable_ext[i]);
234 cpl_free (pTable_ext);
235 cpl_free (pHeader_ext);
243 cpl_error_code appendPropertylist_statistics(
const char *InputFile,
244 const char *ProductFile,
247 cpl_frameset *frameset,
248 cpl_parameterlist *parlist,
249 struct plots *plotfiles_lambda,
250 struct plots *plotfiles_frames,
251 struct plots *plotfiles_scans,
260 cpl_table ** pTable_ext = NULL;
262 cpl_propertylist * pHeader = NULL;
263 cpl_propertylist ** pHeader_ext = NULL;
264 cpl_propertylist ** pHeader_ext_append = NULL;
266 cpl_frame * pFrameProduct = NULL;
267 cpl_frame * pFrame_tmp = NULL;
270 const char *szProduct=ProductFile;
271 const char *szRawFile=InputFile;
272 char * current_extension;
280 cpl_vector *vec_lambda;
281 cpl_vector *vec_frames;
282 cpl_vector *vec_scans;
286 cpl_table *table_lambda;
287 cpl_table *table_frames;
288 cpl_table *table_scans;
293 vec_lambda= vector_read(plotfiles_lambda[0].filename) ;
294 table_lambda=cpl_table_new(cpl_vector_get_size(vec_lambda));
295 cpl_vector_delete(vec_lambda);
297 vec_frames= vector_read(plotfiles_frames[0].filename) ;
298 table_frames=cpl_table_new(cpl_vector_get_size(vec_frames));
299 cpl_vector_delete(vec_frames);
301 vec_scans= vector_read(plotfiles_scans[0].filename) ;
302 table_scans=cpl_table_new(cpl_vector_get_size(vec_scans));
303 cpl_vector_delete(vec_scans);
307 for(i=0; i<dimen_lambda; i++)
309 vec_lambda= vector_read(plotfiles_lambda[i].filename) ;
310 cpl_table_wrap_double(table_lambda, cpl_vector_get_data(vec_lambda), plotfiles_lambda[i].label) ;
311 cpl_vector_unwrap(vec_lambda);
314 for(i=0; i<dimen_frames; i++)
316 vec_frames= vector_read(plotfiles_frames[i].filename) ;
317 cpl_table_wrap_double(table_frames, cpl_vector_get_data(vec_frames), plotfiles_frames[i].label) ;
318 cpl_vector_unwrap(vec_frames);
321 for(i=0; i<dimen_scans; i++)
323 vec_scans= vector_read(plotfiles_scans[i].filename) ;
324 cpl_table_wrap_double(table_scans, cpl_vector_get_data(vec_scans), plotfiles_scans[i].label) ;
325 cpl_vector_unwrap(vec_scans);
331 pFrame_tmp = cpl_frame_new();
332 cpl_frame_set_filename( pFrame_tmp, szRawFile );
333 extnum=cpl_frame_get_nextensions(pFrame_tmp);
334 cpl_frame_delete(pFrame_tmp);
338 pFrameProduct = cpl_frame_new();
339 cpl_frame_set_filename( pFrameProduct, szProduct );
340 cpl_frame_set_type ( pFrameProduct, type );
341 cpl_frame_set_tag ( pFrameProduct, tag );
342 cpl_frame_set_group ( pFrameProduct, CPL_FRAME_GROUP_PRODUCT );
343 cpl_frame_set_level ( pFrameProduct, CPL_FRAME_LEVEL_FINAL );
351 pHeader = cpl_propertylist_load(szRawFile, 0 );
354 cpl_msg_error(cpl_func,
"Error loading the propertylist of %s",szRawFile);
358 pTable_ext = cpl_malloc((extnum) *
sizeof(cpl_table *));
359 pHeader_ext = cpl_malloc((extnum) *
sizeof(cpl_propertylist *));
363 for (i=0; i<extnum; i++)
365 pHeader_ext[i] = cpl_propertylist_load(szRawFile, i+1 );
366 pTable_ext[i] = cpl_table_load(szRawFile, i+1, 1 );
368 if (pHeader_ext[i] ==NULL || pTable_ext[i]==NULL)
370 cpl_msg_error(cpl_func,
"Error loading the extended header or table of %s",szRawFile);
372 for (i=0; i<extnum; i++)
374 cpl_propertylist_delete(pHeader_ext[i]);
375 cpl_table_delete(pTable_ext[i]);
377 cpl_free (pHeader_ext);
378 cpl_free (pTable_ext);
388 current_extension=(
char *)cpl_propertylist_get_string(pHeader_ext[i],
"EXTNAME");
390 if (strcmp(current_extension,
"OI_VIS")==0 || strcmp(current_extension,
"OI_VIS2")==0){
392 if (cpl_table_has_column(pTable_ext[i],
"FLAG")){
393 cpl_table_set_column_savetype(pTable_ext[i],
"FLAG", CPL_TYPE_BOOL);
401 #if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0)
402 if (CPL_ERROR_NONE != cpl_dfs_setup_product_header(pHeader, pFrameProduct, frameset, parlist,
"dummy-recid", PACKAGE
"/" PACKAGE_VERSION, PRODUCT_DID, NULL))
404 cpl_msg_error(cpl_func,
"Error in cpl_dfs_setup_product_header: %s %s",cpl_error_get_message(),cpl_error_get_where());
407 if (CPL_ERROR_NONE != cpl_dfs_setup_product_header(pHeader, pFrameProduct, frameset, parlist,
"dummy-recid", PACKAGE
"/" PACKAGE_VERSION, PRODUCT_DID))
409 cpl_msg_error(cpl_func,
"Error in cpl_dfs_setup_product_header: %s %s",cpl_error_get_message(),cpl_error_get_where());
414 if (CPL_ERROR_NONE != cpl_table_save(pTable_ext[0],pHeader, pHeader_ext[0], szProduct, CPL_IO_DEFAULT ))
416 cpl_msg_error(cpl_func,
"Error when saving primary header: %s %s",cpl_error_get_message(),cpl_error_get_where());
420 for (i=1; i<extnum; i++)
422 if (CPL_ERROR_NONE != cpl_table_save(pTable_ext[i], NULL, pHeader_ext[i], szProduct, CPL_IO_EXTEND ))
424 cpl_msg_error(cpl_func,
"Error when saving Extension: %s %s",cpl_error_get_message(),cpl_error_get_where());
433 pHeader_ext_append = cpl_malloc(3 *
sizeof(cpl_propertylist *));
435 pHeader_ext_append[0]=cpl_propertylist_new();
436 pHeader_ext_append[1]=cpl_propertylist_new();
437 pHeader_ext_append[2]=cpl_propertylist_new();
440 cpl_propertylist_append_string (pHeader_ext_append[0],
"EXTNAME",
"STATISTICS1");
441 cpl_propertylist_append_string (pHeader_ext_append[1],
"EXTNAME",
"STATISTICS2");
442 cpl_propertylist_append_string (pHeader_ext_append[2],
"EXTNAME",
"STATISTICS3");
444 if (CPL_ERROR_NONE != cpl_table_save(table_lambda, NULL, pHeader_ext_append[0], szProduct, CPL_IO_EXTEND ))
446 cpl_msg_error(cpl_func,
"Error when saving Extension: %s %s",cpl_error_get_message(),cpl_error_get_where());
450 if (CPL_ERROR_NONE != cpl_table_save(table_frames, NULL, pHeader_ext_append[1], szProduct, CPL_IO_EXTEND ))
452 cpl_msg_error(cpl_func,
"Error when saving Extension: %s %s",cpl_error_get_message(),cpl_error_get_where());
455 if (CPL_ERROR_NONE != cpl_table_save(table_scans, NULL, pHeader_ext_append[2], szProduct, CPL_IO_EXTEND ))
457 cpl_msg_error(cpl_func,
"Error when saving Extension: %s %s",cpl_error_get_message(),cpl_error_get_where());
462 if (CPL_ERROR_NONE != cpl_frameset_insert( frameset, pFrameProduct ))
464 cpl_msg_error(cpl_func,
"Error in cpl_frameset_insert");
470 cpl_table_delete(table_lambda);
471 cpl_table_delete(table_frames);
472 cpl_table_delete(table_scans);
479 cpl_propertylist_delete(pHeader);
481 for (i=0; i<extnum; i++)
483 cpl_propertylist_delete(pHeader_ext[i]);
484 cpl_table_delete(pTable_ext[i]);
486 cpl_free (pHeader_ext);
487 cpl_free (pTable_ext);
490 cpl_propertylist_delete (pHeader_ext_append[0]);
491 cpl_propertylist_delete (pHeader_ext_append[1]);
492 cpl_propertylist_delete (pHeader_ext_append[2]);
493 cpl_free(pHeader_ext_append);
525 cpl_vector * vector_read(
const char * filename)
534 cpl_ensure(filename != NULL, CPL_ERROR_NULL_INPUT, NULL);
537 in = fopen(filename,
"r");
538 cpl_ensure(in != NULL, CPL_ERROR_FILE_IO, NULL);
541 v = cpl_vector_new(size);
543 while (fgets(line, 1024, in) != NULL) {
544 if (line[0] !=
'#' && sscanf(line,
"%lg", &x) == 1) {
549 if (np == size) cpl_vector_set_size(v, size *= 2);
550 cpl_vector_set(v, np++, x);
557 cpl_vector_delete(v);
558 cpl_ensure(0, CPL_ERROR_FILE_IO, NULL);
564 if (np == 0 || cpl_vector_set_size(v, np)) {
565 cpl_vector_delete(v);
566 cpl_ensure(0, CPL_ERROR_BAD_FILE_FORMAT, NULL);