sinfoni_pro_save.c

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     /* Create the default PAF header */
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     /* Test entries */
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     /* Value: "TEMPORARY", "PREPROCESSED", "REDUCED" or "QCPARAM". */
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     /* sprintf(cval, "CPL-%s", get_cpl_version()); */
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     /* Get the reference file  */
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     /* Get FITS header from reference file */
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     /* Add DataFlow keywords and log the saved file in the input frameset */
00328     sinfoni_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_IMAGE, &set,&plist,parlist,recid);
00329     sinfoni_pfits_put_qc(plist, qclog) ;
00330     /* Save the file */
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     /* THE PAF FILE FOR QC PARAMETERS */
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     /* Get the reference file  */
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     /* Get FITS header from reference file */
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     /* Add DataFlow keywords and log the saved file in the input frameset */
00394     sinfoni_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_IMAGE, &set,&plist,parlist,recid);
00395 
00396 
00397     /* Save the file */
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     /* Get the reference file  */
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     /* Get FITS header from reference file */
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     /* Add DataFlow keywords and log the saved file in the input frameset */
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     /* Save the file */
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  /* THE PAF FILE FOR QC PARAMETERS */
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     /* Get the reference file  */
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     /* Get FITS header from reference file */
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     /* Add DataFlow keywords and log the saved file in the input frameset */
00534     sinfoni_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_TABLE, &set,&plist,parlist,recid);
00535 
00536     /* Save the file */
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     /* Get the reference file  */
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     /* Get FITS header from reference file */
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     /* Add DataFlow keywords and log the saved file in the input frameset */
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     /* Save the file */
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     /* THE PAF FILE FOR QC PARAMETERS */
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     /* Get the reference file  */
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     /* Get FITS header from reference file */
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     /* Add DataFlow keywords and log the saved file in the input frameset */
00682     sinfoni_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_IMAGE, &set,&plist,parlist,recid);
00683 
00684     /*
00685     sinfoni_clean_fits_key(plist);
00686     */
00687 
00688     /* Save the file */
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     cpl_propertylist_erase_regexp(*header, "^ESO DPR .*");
00794     cpl_propertylist_erase(*header, "ARCFILE");
00795     cpl_propertylist_erase(*header, "ORIGFILE");
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 }

Generated on Wed Oct 26 13:08:55 2005 for SINFONI Pipeline Reference Manual by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001