00001 #include "sinfoni_pro_save.h"
00002 #include <qfits.h>
00003 #include <cpl_dfs.h>
00004
00005
00006 int sinfoni_save_paf(char* name_p,
00007 const char* rec_id,
00008 char* ref_file,
00009 cpl_table* qclog,
00010 cpl_propertylist* plist,
00011 const char* pro_catg)
00012 {
00013
00014
00015 const char * _id = "sinfoni_write_paf" ;
00016 FILE * paf ;
00017 char * sval ;
00018 char key_name[FILE_NAME_SZ] ;
00019 char key_paf[FILE_NAME_SZ] ;
00020 char key_dpaf[FILE_NAME_SZ] ;
00021 char key_type[FILE_NAME_SZ] ;
00022 char key_value[FILE_NAME_SZ] ;
00023
00024 int i =0;
00025 int n=0;
00026 cpl_msg_info(_id, "Writing %s" , name_p) ;
00027
00028 if ((paf = qfits_paf_print_header(name_p,
00029 (char*) rec_id,
00030 (char*) "QC file",
00031 qfits_get_login_name(),
00032 qfits_get_datetime_iso8601())) == NULL) {
00033 cpl_msg_error(_id, "cannot open file [%s] for output", name_p) ;
00034 return -1 ;
00035 }
00036
00037
00038 sinfoni_blank2dot(PAF_NAME_PIPE_ID,key_dpaf);
00039 fprintf(paf,"%-21s \"%s\" ;# %s\" \n", key_dpaf,
00040 VERSION,KEY_HELP_PIPE_ID);
00041
00042 strcpy(key_name,KEY_NAME_PIPEFILE);
00043 strcpy(key_paf,KEY_NAME_PIPEFILE);
00044 sinfoni_blank2dot(key_paf,key_dpaf);
00045 if (cpl_propertylist_contains(plist, key_name)) {
00046 fprintf(paf,"%-21s \"%s\" ;# %s\" \n",key_dpaf,
00047 cpl_propertylist_get_string(plist,key_name),KEY_HELP_PIPEFILE);
00048 }
00049
00050
00051
00052 strcpy(key_name,KEY_NAME_PRO_TYPE);
00053 strcpy(key_paf,PAF_NAME_PRO_TYPE);
00054 sinfoni_blank2dot(key_paf,key_dpaf);
00055 if (cpl_propertylist_contains(plist, key_name)) {
00056 fprintf(paf,"%-21s \"%s\" ;# %s\" \n", key_dpaf,
00057 cpl_propertylist_get_string(plist,key_name),KEY_HELP_PRO_TYPE);
00058 }
00059
00060 strcpy(key_name,KEY_NAME_PRO_DATANCOM);
00061 strcpy(key_paf,PAF_NAME_PRO_DATANCOM);
00062 sinfoni_blank2dot(key_paf,key_dpaf);
00063 if (cpl_propertylist_contains(plist,key_name)) {
00064 fprintf(paf,"%-21s %d ;# %s\" \n",key_dpaf,
00065 cpl_propertylist_get_int(plist,key_name),KEY_HELP_PRO_DATANCOM);
00066 }
00067
00068
00069 strcpy(key_name,KEY_NAME_NCORRS_NAME);
00070 strcpy(key_paf,PAF_NAME_NCORRS_NAME);
00071 sinfoni_blank2dot(key_paf,key_dpaf);
00072 if (cpl_propertylist_contains(plist, key_name)) {
00073 fprintf(paf,"%-21s \"%s\" ;# %s \n", key_dpaf,
00074 cpl_propertylist_get_string(plist,key_name),KEY_HELP_NCORRS_NAME);
00075 }
00076
00077 strcpy(key_name,KEY_NAME_DET_NDSAMPLES);
00078 strcpy(key_paf,PAF_NAME_DET_NDSAMPLES);
00079 sinfoni_blank2dot(key_paf,key_dpaf);
00080 if (cpl_propertylist_contains(plist, key_name)) {
00081 fprintf(paf,"%-21s %d ;# %s \n",key_dpaf,
00082 cpl_propertylist_get_int(plist,key_name),KEY_HELP_DET_NDSAMPLES);
00083 }
00084
00085 strcpy(key_name,KEY_NAME_FILT_NAME);
00086 strcpy(key_paf,PAF_NAME_FILT_NAME);
00087 sinfoni_blank2dot(key_paf,key_dpaf);
00088 if (cpl_propertylist_contains(plist, key_name)) {
00089 fprintf(paf,"%-21s \"%s\" ;# %s \n", key_dpaf,
00090 cpl_propertylist_get_string(plist,key_name),KEY_HELP_FILT_NAME);
00091 }
00092
00093 strcpy(key_name,KEY_NAME_FILT_ID);
00094 strcpy(key_paf,PAF_NAME_FILT_ID);
00095 sinfoni_blank2dot(key_paf,key_dpaf);
00096 if (cpl_propertylist_contains(plist, key_name)) {
00097 fprintf(paf,"%-21s \"%s\" ;# %s \n",key_dpaf,
00098 cpl_propertylist_get_string(plist,key_name),KEY_HELP_FILT_ID);
00099 }
00100
00101
00102 strcpy(key_name,KEY_NAME_PREOPTICS);
00103 strcpy(key_paf,PAF_NAME_PREOPTICS);
00104 sinfoni_blank2dot(key_paf,key_dpaf);
00105 if (cpl_propertylist_contains(plist, key_name)) {
00106 fprintf(paf,"%-21s \"%s\" ;# %s \n",key_dpaf,
00107 cpl_propertylist_get_string(plist,key_name),KEY_HELP_PREOPTICS);
00108 }
00109
00110 strcpy(key_name,KEY_NAME_GRAT_NAME);
00111 strcpy(key_paf,PAF_NAME_GRAT_NAME);
00112 sinfoni_blank2dot(key_paf,key_dpaf);
00113 if (cpl_propertylist_contains(plist, key_name)) {
00114 fprintf(paf, "%-21s \"%s\" ;# %s \n",key_dpaf,
00115 cpl_propertylist_get_string(plist,key_name),KEY_HELP_GRAT_NAME);
00116 }
00117
00118 strcpy(key_name,KEY_NAME_GRAT_WLEN);
00119 strcpy(key_paf,PAF_NAME_GRAT_WLEN);
00120 sinfoni_blank2dot(key_paf,key_dpaf);
00121
00122 if (cpl_propertylist_contains(plist, key_name)) {
00123 fprintf(paf, "%-21s %f ;# %s \n", key_dpaf,
00124 cpl_propertylist_get_double(plist,key_name),KEY_HELP_GRAT_WLEN);
00125 }
00126
00127
00128 strcpy(key_name,KEY_NAME_PRO_RECID);
00129 strcpy(key_paf,PAF_NAME_PRO_RECID);
00130 sinfoni_blank2dot(key_paf,key_dpaf);
00131
00132 if (cpl_propertylist_contains(plist, key_name)) {
00133 fprintf(paf,"%-21s \"%s\" ;# %s \n", key_dpaf,
00134 cpl_propertylist_get_string(plist,key_name),KEY_HELP_PRO_RECID);
00135 }
00136
00137
00138
00139 strcpy(key_name,KEY_NAME_PRO_DRSID);
00140 strcpy(key_paf,PAF_NAME_PRO_DRSID);
00141 sinfoni_blank2dot(key_paf,key_dpaf);
00142 if (cpl_propertylist_contains(plist, key_name)) {
00143 fprintf(paf,"%-21s \"%s\" ;# %s \n",key_dpaf,
00144 cpl_propertylist_get_string(plist,key_name),KEY_HELP_PRO_DRSID);
00145 }
00146
00147 if ((sval = sinfoni_pfits_get_date_obs(ref_file)) != NULL) {
00148 strcpy(key_paf,KEY_NAME_DATE_OBS);
00149 sinfoni_blank2dot(key_paf,key_dpaf);
00150 fprintf(paf, "%-21s \"%s\" ;# %s\n",key_dpaf,
00151 sval,KEY_HELP_DATE_OBS) ;
00152 }
00153 if ((sval = sinfoni_pfits_get_airmass_start(ref_file)) != NULL) {
00154 strcpy(key_paf,PAF_NAME_TEL_AIRM_START);
00155 sinfoni_blank2dot(key_paf,key_dpaf);
00156 fprintf(paf, "%-21s \"%s\" ;# %s \n",key_dpaf,
00157 sval,KEY_HELP_TEL_AIRM_START) ;
00158 }
00159 if ((sval = sinfoni_pfits_get_arcfile(ref_file)) != NULL) {
00160 strcpy(key_paf,KEY_NAME_ARCFILE);
00161 sinfoni_blank2dot(key_paf,key_dpaf);
00162 fprintf(paf, "%-21s \"%s\" ;# %s \n", key_dpaf,
00163 sval,KEY_HELP_ARCFILE) ;
00164 } else if ((sval = sinfoni_pfits_get_rec1raw1name(ref_file)) != NULL) {
00165 strcpy(key_paf,KEY_NAME_ARCFILE);
00166 sinfoni_blank2dot(key_paf,key_dpaf);
00167 fprintf(paf, "%-21s \"%s\" ;# %s \n", key_dpaf,
00168 sval,KEY_HELP_ARCFILE) ;
00169 } else {
00170 cpl_msg_error(_id,"%s is missing QC LOG will fail!",KEY_NAME_ARCFILE);
00171 }
00172
00173 if ((sval = sinfoni_pfits_get_templateid(ref_file)) != NULL) {
00174 strcpy(key_paf,PAF_NAME_TPL_ID);
00175 sinfoni_blank2dot(key_paf,key_dpaf);
00176 fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,
00177 sval,KEY_HELP_TPL_ID) ;
00178 }
00179
00180 if ((sval = sinfoni_pfits_get_dit(ref_file)) != NULL) {
00181 strcpy(key_paf,PAF_NAME_DET_DIT);
00182 sinfoni_blank2dot(key_paf,key_dpaf);
00183 fprintf(paf,"%-21s %f ; # %s\n", key_dpaf,
00184 atof(sval),KEY_HELP_DET_DIT) ;
00185 }
00186
00187 if ((sval = sinfoni_pfits_get_ndit(ref_file)) != NULL) {
00188 strcpy(key_paf,PAF_NAME_DET_NDIT);
00189 sinfoni_blank2dot(key_paf,key_dpaf);
00190 fprintf(paf,"%-21s %d ; # %s\n", key_dpaf,
00191 atoi(sval),KEY_HELP_DET_NDIT) ;
00192 }
00193
00194 if ((sval = sinfoni_pfits_get_ncorrs_name(ref_file)) != NULL) {
00195 strcpy(key_paf,PAF_NAME_NCORRS_NAME);
00196 sinfoni_blank2dot(key_paf,key_dpaf);
00197
00198 fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,
00199 sval, KEY_HELP_NCORRS_NAME) ;
00200 }
00201
00202 if ((sval = sinfoni_pfits_get_dpr_type(ref_file)) != NULL) {
00203 strcpy(key_paf,PAF_NAME_DPR_TYPE);
00204 sinfoni_blank2dot(key_paf,key_dpaf);
00205 fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,
00206 sval, KEY_HELP_DPR_TYPE) ;
00207 }
00208
00209 if ((sval = sinfoni_pfits_get_dpr_tech(ref_file)) != NULL) {
00210 strcpy(key_paf,PAF_NAME_DPR_TECH);
00211 sinfoni_blank2dot(key_paf,key_dpaf);
00212 fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,
00213 sval, KEY_HELP_DPR_TECH) ;
00214 }
00215
00216 if ((sval = sinfoni_pfits_get_dpr_catg(ref_file)) != NULL) {
00217 strcpy(key_paf,PAF_NAME_DPR_CATG);
00218 sinfoni_blank2dot(key_paf,key_dpaf);
00219 fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,
00220 sval, KEY_HELP_DPR_CATG) ;
00221 }
00222
00223 strcpy(key_paf,PAF_NAME_PRO_CATG);
00224 sinfoni_blank2dot(key_paf,key_dpaf);
00225 fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,
00226 pro_catg, KEY_HELP_PRO_CATG) ;
00227
00228
00229 if ((sval = sinfoni_pfits_get_ins_setup(ref_file)) != NULL) {
00230 strcpy(key_paf,PAF_NAME_INS_SETUP);
00231 sinfoni_blank2dot(key_paf,key_dpaf);
00232 fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,
00233 sval, KEY_HELP_INS_SETUP) ;
00234 }
00235
00236
00237
00238 n=cpl_table_get_nrow(qclog);
00239 for(i=0;i<n;i++) {
00240 strcpy(key_paf,cpl_table_get_string(qclog,"key_name",i));
00241 sinfoni_blank2dot(key_paf,key_name);
00242 strcpy(key_type,cpl_table_get_string(qclog,"key_type",i));
00243 strcpy(key_value,cpl_table_get_string(qclog,"key_value",i));
00244 if(strcmp(key_type,"CPL_TYPE_STRING") == 0) {
00245 strcat(key_name," \"%s\"\n");
00246 fprintf(paf, key_name, key_value) ;
00247 } else if(strcmp(key_type,"CPL_TYPE_BOOL") == 0) {
00248 strcat(key_name," ");
00249 strcat(key_name,"%d\n");
00250 fprintf(paf, key_name, atoi(key_value)) ;
00251 } else if(strcmp(key_type,"CPL_TYPE_INT") == 0) {
00252 strcat(key_name," ");
00253 strcat(key_name,"%d\n");
00254 fprintf(paf, key_name, atoi(key_value)) ;
00255 } else if(strcmp(key_type,"CPL_TYPE_FLOAT") == 0) {
00256 strcat(key_name," ");
00257 strcat(key_name,"%g\n");
00258 fprintf(paf, key_name, (float) atof(key_value)) ;
00259 } else if(strcmp(key_type,"CPL_TYPE_DOUBLE") == 0) {
00260 strcat(key_name," ");
00261 strcat(key_name,"%g\n");
00262 fprintf(paf, key_name, atof(key_value)) ;
00263 }
00264
00265 }
00266 fprintf(paf, "\n");
00267 fclose(paf) ;
00268 return 0;
00269
00270 }
00271
00272
00273
00274
00282
00283
00284
00285 int sinfoni_pro_save_ima(
00286 cpl_image * ima,
00287 cpl_frameset * ref,
00288 cpl_frameset * set,
00289 char * out_file,
00290 const char * pro_catg,
00291 cpl_table * qclog,
00292 const char * recid,
00293 cpl_parameterlist* parlist)
00294
00295 {
00296 const char * _id = "sinfoni_save_ima" ;
00297 char * name_o ;
00298 char * name_p ;
00299
00300 cpl_propertylist * plist =NULL;
00301 cpl_frame * first_frame=NULL;
00302 char * ref_file=NULL;
00303
00304
00305 first_frame = cpl_frameset_get_frame(ref, 0) ;
00306 ref_file = (char*) cpl_strdup(cpl_frame_get_filename(first_frame)) ;
00307
00308 name_o = cpl_malloc(FILE_NAME_SZ * sizeof(char));
00309 name_p = cpl_malloc(FILE_NAME_SZ * sizeof(char));
00310 sinfoni_check_name(out_file, &name_o, CPL_FRAME_TYPE_IMAGE, &name_p);
00311 cpl_msg_info(_id, "Writing ima %s" , name_o) ;
00312
00313
00314 if ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
00315 cpl_msg_error(_id, "getting header from reference ima frame %s",ref_file);
00316 cpl_propertylist_delete(plist) ;
00317 cpl_free(ref_file);
00318 return -1 ;
00319 }
00320 sinfoni_clean_header(&plist);
00321 if ( ( strstr(pro_catg,"MASTER_PSF") != NULL ) ||
00322 ( strstr(pro_catg,"STD_STAR_SPECTRUM") != NULL ) ||
00323 ( strstr(pro_catg,"STD_STAR_SPECTRA") != NULL ) ) {
00324 sinfoni_clean_cube_header(&plist);
00325 }
00326
00327
00328 sinfoni_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_IMAGE, &set,&plist,parlist,recid);
00329 sinfoni_pfits_put_qc(plist, qclog) ;
00330
00331 if (cpl_image_save(ima, name_o, CPL_BPP_DEFAULT, plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
00332 cpl_msg_error(_id, "Cannot save the product %s",name_o);
00333 cpl_propertylist_delete(plist) ;
00334 cpl_free(ref_file);
00335 cpl_free(name_o);
00336 cpl_free(name_p);
00337 return -1 ;
00338 }
00339
00340 sinfoni_save_paf(name_p,recid,ref_file,qclog,plist,pro_catg);
00341 cpl_propertylist_delete(plist) ;
00342 cpl_msg_indent_less() ;
00343 cpl_free(name_o);
00344 cpl_free(name_p);
00345 cpl_free(ref_file);
00346 return 0 ;
00347 }
00348
00349
00350
00351 int sinfoni_pro_dump_ima(
00352 cpl_image * ima,
00353 cpl_frameset * ref,
00354 cpl_frameset * set,
00355 char * out_file,
00356 const char * pro_catg,
00357 const char * recid,
00358 cpl_parameterlist* parlist)
00359
00360 {
00361 const char * _id = "sinfoni_dump_ima" ;
00362 char * name_o=NULL;
00363 char * name_p=NULL;
00364 cpl_propertylist * plist=NULL ;
00365 cpl_frame * first_frame=NULL;
00366 char * ref_file=NULL;
00367
00368
00369 first_frame = cpl_frameset_get_frame(ref, 0) ;
00370 ref_file = (char*) cpl_strdup(cpl_frame_get_filename(first_frame)) ;
00371
00372 name_o = cpl_malloc(FILE_NAME_SZ * sizeof(char));
00373 name_p = cpl_malloc(FILE_NAME_SZ * sizeof(char));
00374 sinfoni_check_name(out_file, &name_o, CPL_FRAME_TYPE_IMAGE, &name_p);
00375 cpl_msg_info(_id, "Writing ima %s" , name_o) ;
00376
00377
00378 if ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
00379 cpl_msg_error(_id, "getting header from ima frame %s",ref_file);
00380 cpl_propertylist_delete(plist) ;
00381 cpl_free(ref_file);
00382 cpl_free(name_o);
00383 cpl_free(name_p);
00384 return -1 ;
00385 }
00386 sinfoni_clean_header(&plist);
00387 if ( ( strstr(pro_catg,"MASTER_PSF") != NULL ) ||
00388 ( strstr(pro_catg,"STD_STAR_SPECTRUM") != NULL ) ||
00389 ( strstr(pro_catg,"STD_STAR_SPECTRA") != NULL ) ) {
00390 sinfoni_clean_cube_header(&plist);
00391 }
00392
00393
00394 sinfoni_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_IMAGE, &set,&plist,parlist,recid);
00395
00396
00397
00398 if (cpl_image_save(ima, name_o, CPL_BPP_DEFAULT, plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
00399 cpl_msg_error(_id, "Cannot save the product %s",name_o);
00400 cpl_propertylist_delete(plist) ;
00401 cpl_free(ref_file);
00402 cpl_free(name_o);
00403 cpl_free(name_p);
00404 return -1 ;
00405 }
00406
00407 cpl_propertylist_delete(plist) ;
00408 cpl_msg_indent_less() ;
00409 cpl_free(name_o);
00410 cpl_free(name_p);
00411 cpl_free(ref_file);
00412
00413 return 0 ;
00414 }
00415
00416
00417
00418
00426
00427
00428
00429
00430 int sinfoni_pro_save_tbl(
00431 cpl_table * table,
00432 cpl_frameset * ref,
00433 cpl_frameset * set,
00434 char * out_file,
00435 const char * pro_catg,
00436 cpl_table * qclog,
00437 const char * recid,
00438 cpl_parameterlist* parlist)
00439
00440 {
00441 const char * _id = "sinfoni_dump_tbl" ;
00442 char * name_o =NULL;
00443 char * name_p =NULL;
00444 cpl_propertylist * plist=NULL ;
00445 cpl_frame* first_frame=NULL;
00446 char* ref_file=NULL;
00447
00448
00449 first_frame = cpl_frameset_get_frame(ref, 0) ;
00450 ref_file = cpl_strdup(cpl_frame_get_filename(first_frame)) ;
00451
00452 name_o = cpl_malloc(FILE_NAME_SZ * sizeof(char));
00453 name_p = cpl_malloc(FILE_NAME_SZ * sizeof(char));
00454 sinfoni_check_name(out_file, &name_o, CPL_FRAME_TYPE_TABLE, &name_p);
00455 cpl_msg_info(_id, "Writing tbl %s" , name_o) ;
00456
00457
00458 if ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
00459 cpl_msg_error(_id, "getting header from tbl frame %s",ref_file);
00460 cpl_propertylist_delete(plist) ;
00461 cpl_free(ref_file);
00462 cpl_free(name_o);
00463 cpl_free(name_p);
00464 return -1 ;
00465 }
00466 sinfoni_clean_header(&plist);
00467
00468
00469 sinfoni_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_TABLE, &set,&plist,parlist,recid);
00470 sinfoni_pfits_put_qc(plist, qclog) ;
00471
00472
00473 if (cpl_table_save(table, plist, NULL, name_o, 0) != CPL_ERROR_NONE) {
00474 cpl_msg_error(_id, "Cannot save the product: %s", name_o);
00475 cpl_propertylist_delete(plist) ;
00476 cpl_free(ref_file);
00477 cpl_free(name_o);
00478 cpl_free(name_p);
00479 return -1 ;
00480 }
00481
00482
00483
00484 sinfoni_save_paf(name_p,recid,ref_file,qclog,plist,pro_catg);
00485 cpl_propertylist_delete(plist) ;
00486 cpl_msg_indent_less() ;
00487 cpl_free(name_o);
00488 cpl_free(name_p);
00489 cpl_free(ref_file);
00490 return 0 ;
00491 }
00492
00493
00494
00495 int sinfoni_pro_dump_tbl(
00496 cpl_table * table,
00497 cpl_frameset * ref,
00498 cpl_frameset * set,
00499 char * out_file,
00500 const char * pro_catg,
00501 const char * recid,
00502 cpl_parameterlist* parlist)
00503
00504 {
00505 const char * _id = "sinfoni_dump_tbl" ;
00506 char * name_o = NULL ;
00507 char * name_p = NULL;
00508
00509 cpl_propertylist * plist=NULL ;
00510 cpl_frame* first_frame=NULL;
00511 char* ref_file=NULL;
00512
00513
00514 first_frame = cpl_frameset_get_frame(ref, 0) ;
00515 ref_file = cpl_strdup(cpl_frame_get_filename(first_frame)) ;
00516
00517 name_o = cpl_malloc(FILE_NAME_SZ * sizeof(char));
00518 name_p = cpl_malloc(FILE_NAME_SZ * sizeof(char));
00519 sinfoni_check_name(out_file, &name_o, CPL_FRAME_TYPE_TABLE, &name_p);
00520 cpl_msg_info(_id, "Writing tbl %s" , name_o) ;
00521
00522
00523 if ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
00524 cpl_msg_error(_id, "getting header from tbl frame %s",ref_file);
00525 cpl_propertylist_delete(plist) ;
00526 cpl_free(ref_file);
00527 cpl_free(name_o);
00528 cpl_free(name_p);
00529 return -1 ;
00530 }
00531 sinfoni_clean_header(&plist);
00532
00533
00534 sinfoni_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_TABLE, &set,&plist,parlist,recid);
00535
00536
00537 if (cpl_table_save(table, plist, NULL, name_o, 0) != CPL_ERROR_NONE) {
00538 cpl_msg_error(_id, "Cannot save the product: %s", name_o);
00539 cpl_propertylist_delete(plist) ;
00540 cpl_free(ref_file);
00541 cpl_free(name_o);
00542 cpl_free(name_p);
00543 return -1 ;
00544 }
00545
00546 cpl_propertylist_delete(plist) ;
00547 cpl_msg_indent_less() ;
00548 cpl_free(name_o);
00549 cpl_free(name_p);
00550 cpl_free(ref_file);
00551 return 0 ;
00552 }
00553
00554
00555
00556
00564
00565
00566
00567
00568 int sinfoni_pro_save_ims(
00569 cpl_imagelist * ims,
00570 cpl_frameset * ref,
00571 cpl_frameset * set,
00572 char * out_file,
00573 const char * pro_catg,
00574 cpl_table * qclog,
00575 const char * recid,
00576 cpl_parameterlist* parlist)
00577
00578 {
00579 const char * _id = "sinfoni_save_ims" ;
00580 char * name_o=NULL;
00581 char * name_p=NULL;
00582
00583 cpl_propertylist * plist=NULL ;
00584 cpl_frame* first_frame=NULL;
00585 char* ref_file=NULL;
00586
00587
00588 first_frame = cpl_frameset_get_frame(ref, 0) ;
00589 ref_file = cpl_strdup(cpl_frame_get_filename(first_frame)) ;
00590
00591 name_o = cpl_malloc(FILE_NAME_SZ * sizeof(char));
00592 name_p = cpl_malloc(FILE_NAME_SZ * sizeof(char));
00593 sinfoni_check_name(out_file, &name_o, CPL_FRAME_TYPE_IMAGE, &name_p);
00594 cpl_msg_info(_id, "Writing ims %s" , name_o) ;
00595
00596
00597 if ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
00598 cpl_msg_error(_id, "getting header from ims frame %s",ref_file);
00599 cpl_propertylist_delete(plist) ;
00600 cpl_free(ref_file);
00601 cpl_free(name_o);
00602 cpl_free(name_p);
00603 return -1 ;
00604 }
00605 sinfoni_clean_header(&plist);
00606 if ( ( strstr(pro_catg,"STD") != NULL ) ||
00607 ( strstr(pro_catg,"PSF") != NULL ) ||
00608 ( strstr(pro_catg,"OBJ") != NULL ) ) {
00609 sinfoni_clean_cube_header(&plist);
00610 }
00611
00612
00613 sinfoni_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_IMAGE, &set,&plist,parlist,recid);
00614 sinfoni_pfits_put_qc(plist, qclog) ;
00615
00616
00617 if (cpl_imagelist_save(ims, name_o, CPL_BPP_DEFAULT, plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
00618 cpl_msg_error(_id, "Cannot save the product %s",name_o);
00619 cpl_propertylist_delete(plist) ;
00620 cpl_free(ref_file);
00621 cpl_free(name_o);
00622 cpl_free(name_p);
00623 return -1 ;
00624 }
00625
00626
00627 sinfoni_save_paf(name_p,recid,ref_file,qclog,plist,pro_catg);
00628 cpl_propertylist_delete(plist) ;
00629 cpl_msg_indent_less() ;
00630 cpl_free(name_o);
00631 cpl_free(name_p);
00632 cpl_free(ref_file);
00633 return 0 ;
00634 }
00635
00636
00637
00638
00639 int sinfoni_pro_dump_ims(
00640 cpl_imagelist * ims,
00641 cpl_frameset * ref,
00642 cpl_frameset * set,
00643 char * out_file,
00644 const char * pro_catg,
00645 const char * recid,
00646 cpl_parameterlist* parlist)
00647 {
00648 const char * _id = "sinfoni_dump_ims" ;
00649 char * name_o=NULL ;
00650 char * name_p=NULL ;
00651
00652 cpl_propertylist * plist ;
00653 cpl_frame* first_frame=NULL;
00654 char* ref_file=NULL;
00655
00656
00657 first_frame = cpl_frameset_get_frame(ref, 0) ;
00658 ref_file = cpl_strdup(cpl_frame_get_filename(first_frame)) ;
00659
00660 name_o = cpl_malloc(FILE_NAME_SZ * sizeof(char));
00661 name_p = cpl_malloc(FILE_NAME_SZ * sizeof(char));
00662 sinfoni_check_name(out_file, &name_o, CPL_FRAME_TYPE_IMAGE, &name_p);
00663 cpl_msg_info(_id, "Writing ims %s" , name_o) ;
00664
00665
00666 if ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
00667 cpl_msg_error(_id, "getting header from ims frame %s",ref_file);
00668 cpl_propertylist_delete(plist) ;
00669 cpl_free(ref_file);
00670 cpl_free(name_o);
00671 cpl_free(name_p);
00672 return -1 ;
00673 }
00674 sinfoni_clean_header(&plist);
00675 if ( ( strstr(pro_catg,"STD") != NULL ) ||
00676 ( strstr(pro_catg,"PSF") != NULL ) ||
00677 ( strstr(pro_catg,"OBJ") != NULL ) ) {
00678 sinfoni_clean_cube_header(&plist);
00679 }
00680
00681
00682 sinfoni_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_IMAGE, &set,&plist,parlist,recid);
00683
00684
00685
00686
00687
00688
00689 if (cpl_imagelist_save(ims, name_o, CPL_BPP_DEFAULT, plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
00690 cpl_msg_error(_id, "Cannot save the product %s",name_o);
00691 cpl_propertylist_delete(plist) ;
00692 cpl_free(ref_file);
00693 cpl_free(name_o);
00694 cpl_free(name_p);
00695 return -1 ;
00696 }
00697
00698 cpl_propertylist_delete(plist) ;
00699 cpl_msg_indent_less() ;
00700 cpl_free(name_o);
00701 cpl_free(name_p);
00702 cpl_free(ref_file);
00703 return 0 ;
00704 }
00705
00706 int
00707 sinfoni_clean_fits_key(cpl_propertylist* plist)
00708 {
00709
00710
00711
00712 cpl_propertylist_erase(plist, "CTYPE1") ;
00713 cpl_propertylist_erase(plist, "CRPIX1") ;
00714 cpl_propertylist_erase(plist, "CRVAL1") ;
00715 cpl_propertylist_erase(plist, "CDELT1") ;
00716 cpl_propertylist_erase(plist, "CUNIT1") ;
00717 cpl_propertylist_erase(plist, "CTYPE2") ;
00718 cpl_propertylist_erase(plist, "CRPIX2") ;
00719 cpl_propertylist_erase(plist, "CRVAL2") ;
00720 cpl_propertylist_erase(plist, "CDELT2") ;
00721 cpl_propertylist_erase(plist, "CUNIT2") ;
00722
00723 cpl_propertylist_erase(plist, "CTYPE3") ;
00724 cpl_propertylist_erase(plist, "CRPIX3") ;
00725 cpl_propertylist_erase(plist, "CRVAL3") ;
00726 cpl_propertylist_erase(plist, "CRVAL3") ;
00727 cpl_propertylist_erase(plist, "CDELT3") ;
00728 cpl_propertylist_erase(plist, "CUNIT3") ;
00729
00730 cpl_propertylist_erase(plist, "CD1_1") ;
00731 cpl_propertylist_erase(plist, "CD1_2") ;
00732 cpl_propertylist_erase(plist, "CD2_1") ;
00733 cpl_propertylist_erase(plist, "CD2_2") ;
00734
00735 return 0;
00736 }
00737
00738 void
00739 sinfoni_log_pro(char* name_o, const char* pro_catg, int frm_type, cpl_frameset** set,
00740 cpl_propertylist** plist,cpl_parameterlist* parlist, const char* recid)
00741 {
00742 char * pipe_id=NULL;
00743 cpl_frame* product_frame = NULL ;
00744
00745 pipe_id = cpl_calloc(FILE_NAME_SZ,sizeof(char));
00746 sprintf(pipe_id,"%s%s","sinfo/",PACKAGE_VERSION);
00747 product_frame = cpl_frame_new() ;
00748 cpl_frame_set_filename(product_frame, name_o) ;
00749 cpl_frame_set_tag(product_frame, pro_catg) ;
00750 cpl_frame_set_type(product_frame, frm_type);
00751 cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT);
00752 cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL);
00753
00754 if(cpl_dfs_setup_product_header(*plist,product_frame,*set,parlist,recid,
00755 pipe_id,KEY_VALUE_HPRO_DID) != CPL_ERROR_NONE) {
00756 cpl_msg_warning(recid,"Problem in the product DFS-compliance");
00757 cpl_msg_warning(recid,(char* ) cpl_error_get_message());
00758 cpl_error_reset();
00759 }
00760 cpl_frameset_insert(*set, product_frame);
00761 cpl_free(pipe_id);
00762 }
00763
00764 void
00765 sinfoni_check_name(char* in, char** ou, int type, char** paf) {
00766
00767 char* tmp=NULL;
00768 char name_b[512] ;
00769 if (strstr(in, "." ) != NULL ) {
00770 tmp = get_rootname(in);
00771 strcpy(name_b,tmp);
00772 } else {
00773 sprintf(name_b, in) ;
00774 }
00775 strcpy(*ou,name_b);
00776 if (type == CPL_FRAME_TYPE_TABLE) {
00777 strcat(*ou,".tfits");
00778 } else {
00779 strcat(*ou,".fits");
00780 }
00781 strcpy(*paf,name_b);
00782 strcat(*paf,".paf");
00783
00784 }
00785
00786
00787 void
00788 sinfoni_clean_header(cpl_propertylist** header)
00789 {
00790
00791 cpl_propertylist_erase_regexp(*header, "^ESO PRO .*");
00792
00793
00794
00795
00796
00797
00798 }
00799
00800
00801 void
00802 sinfoni_clean_cube_header(cpl_propertylist** header)
00803 {
00804
00805 cpl_propertylist_erase_regexp(*header, "^CRVAL*");
00806 cpl_propertylist_erase_regexp(*header, "^CRPIX*");
00807 cpl_propertylist_erase_regexp(*header, "^CTYPE*");
00808 cpl_propertylist_erase_regexp(*header, "^CUNIT*");
00809 cpl_propertylist_erase_regexp(*header, "^CD1_1");
00810 cpl_propertylist_erase_regexp(*header, "^CD1_2");
00811 cpl_propertylist_erase_regexp(*header, "^CD2_1");
00812 cpl_propertylist_erase_regexp(*header, "^CD2_2");
00813
00814 }