00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifdef HAVE_CONFIG_H
00031 #include <config.h>
00032 #endif
00033
00034 #include <string.h>
00035 #include <cpl.h>
00036 #include "vircam_paf.h"
00037 #include "vircam_utils.h"
00038
00039
00040 static char *vircam_paf_keyname(char *name);
00041 static void vircam_paf_write_char(char *keyname, char val, char *comment,
00042 FILE *paf);
00043 static void vircam_paf_write_int(char *keyname, int val, char *comment,
00044 FILE *paf);
00045 static void vircam_paf_write_long(char *keyname, long val, char *comment,
00046 FILE *paf);
00047 static void vircam_paf_write_float(char *keyname, float val, char *comment,
00048 FILE *paf);
00049 static void vircam_paf_write_double(char *keyname, double val, char *comment,
00050 FILE *paf);
00051 static void vircam_paf_write_string(char *keyname, char *val, char *comment,
00052 FILE *paf);
00053
00054
00055
00080
00081
00082 extern int vircam_paf_print(char *ftemp, const char *paf_id,
00083 const char *paf_desc, cpl_propertylist *incl) {
00084 FILE *paf;
00085 char filename[BUFSIZ],*comment,*name,*keyname;
00086 const char *fctid="vircam_paf_print";
00087 int i,ichip;
00088 cpl_property *p;
00089
00090
00091
00092 if (incl == NULL) {
00093 cpl_msg_warning(fctid,"NULL propertylist. No PAF file written");
00094 return(VIR_FATAL);
00095 }
00096
00097
00098
00099 ichip = cpl_propertylist_get_int(incl,"ESO DET CHIP NO");
00100 if (ichip == 0) {
00101 cpl_error_reset();
00102 cpl_msg_warning(fctid,"No entry DET CHIP NO in property list");
00103 return(VIR_FATAL);
00104 }
00105
00106
00107
00108
00109 (void)snprintf(filename,BUFSIZ,"%s_%02d.paf",ftemp,ichip);
00110 if ((paf = fopen(filename,"w")) == NULL) {
00111 cpl_msg_warning(fctid,"Unable to open %s.",filename);
00112 return(VIR_FATAL);
00113 }
00114
00115
00116
00117 fprintf(paf,"PAF.HDR.START ;# start of header\n");
00118 fprintf(paf,"PAF.TYPE \"pipeline product\" ;\n");
00119 fprintf(paf,"PAF.ID \"%s\"\n", paf_id);
00120 fprintf(paf,"PAF.NAME \"%s\"\n", filename);
00121 fprintf(paf,"PAF.DESC \"%s\"\n", paf_desc);
00122 fprintf(paf,"PAF.CHCK.CHECKSUM \"\"\n");
00123 fprintf(paf,"PAF.HDR.END ;# end of header\n");
00124 fprintf(paf,"\n");
00125
00126
00127
00128
00129 for (i = 0; i < cpl_propertylist_get_size(incl); i++) {
00130 p = cpl_propertylist_get(incl,i);
00131 name = (char *)cpl_property_get_name(p);
00132 keyname = vircam_paf_keyname(name);
00133 comment = (char *)cpl_property_get_comment(p);
00134
00135
00136
00137 switch (cpl_property_get_type(p)) {
00138 case CPL_TYPE_CHAR:
00139 vircam_paf_write_char(keyname,cpl_property_get_char(p),
00140 comment,paf);
00141 break;
00142 case CPL_TYPE_INT:
00143 vircam_paf_write_int(keyname,cpl_property_get_int(p),
00144 comment,paf);
00145 break;
00146 case CPL_TYPE_LONG:
00147 vircam_paf_write_long(keyname,cpl_property_get_long(p),
00148 comment,paf);
00149 break;
00150 case CPL_TYPE_FLOAT:
00151 vircam_paf_write_float(keyname,cpl_property_get_float(p),
00152 comment,paf);
00153 break;
00154 case CPL_TYPE_DOUBLE:
00155 vircam_paf_write_double(keyname,cpl_property_get_double(p),
00156 comment,paf);
00157 break;
00158 case CPL_TYPE_STRING:
00159 vircam_paf_write_string(keyname,(char *)cpl_property_get_string(p),
00160 comment,paf);
00161 break;
00162 default:
00163 break;
00164 }
00165 cpl_free(keyname);
00166 }
00167
00168
00169
00170 fclose(paf);
00171 return(VIR_OK);
00172 }
00173
00174
00195
00196
00197 extern cpl_propertylist *vircam_paf_req_items(cpl_propertylist *src) {
00198 cpl_propertylist *dest;
00199 int nreq=5,i;
00200 const char *req_items[] = {"ESO DET CHIP NO","EXTNAME","DATE-OBS",
00201 "MJD-OBS","ESO DET DIT"};
00202 const char *req_reg = "^ESO QC";
00203 const char *fctid = "vircam_paf_req_items";
00204
00205
00206
00207 dest = cpl_propertylist_new();
00208
00209
00210
00211 for (i = 0; i < nreq; i++) {
00212 if (cpl_propertylist_copy_property(dest,src,req_items[i]) != CPL_ERROR_NONE) {
00213 cpl_msg_warning(fctid,"Can't find property %s in source header",
00214 req_items[i]);
00215 cpl_propertylist_delete(dest);
00216 return(NULL);
00217 }
00218 }
00219
00220
00221
00222 cpl_propertylist_copy_property_regexp(dest,src,req_reg,0);
00223 if (cpl_error_get_code() != CPL_ERROR_NONE) {
00224 cpl_msg_warning(fctid,"Can't find regexp %s in source header",
00225 req_reg);
00226 cpl_propertylist_delete(dest);
00227 return(NULL);
00228 }
00229
00230
00231
00232 return(dest);
00233 }
00234
00235
00254
00255
00256 extern cpl_propertylist *vircam_paf_phu_items(cpl_propertylist *src) {
00257 cpl_propertylist *dest;
00258 int nreq=2,i;
00259 const char *req_items[] = {"ARCFILE","ESO TPL ID"};
00260 const char *fctid = "vircam_paf_req_items";
00261
00262
00263
00264 dest = cpl_propertylist_new();
00265
00266
00267
00268 for (i = 0; i < nreq; i++) {
00269 if (cpl_propertylist_copy_property(dest,src,req_items[i]) != CPL_ERROR_NONE) {
00270 cpl_error_reset();
00271 cpl_msg_warning(fctid,"Can't find property %s in source header",
00272 req_items[i]);
00273 cpl_propertylist_update_string(dest,req_items[i],"");
00274 cpl_propertylist_set_comment(dest,req_items[i],"Not available");
00275 }
00276 }
00277
00278
00279
00280 return(dest);
00281 }
00282
00283
00305
00306
00307 extern void vircam_paf_append(cpl_propertylist *dest, cpl_propertylist *src,
00308 char *prop) {
00309
00310
00311
00312 if (cpl_propertylist_has(src,prop)) {
00313 cpl_propertylist_copy_property(dest,src,prop);
00314 } else {
00315 cpl_propertylist_update_string(dest,prop,"");
00316 cpl_propertylist_set_comment(dest,prop,"Not available");
00317 }
00318 }
00319
00320 static void vircam_paf_write_char(char *keyname, char val, char *comment,
00321 FILE *paf) {
00322
00323
00324
00325 if (comment != NULL)
00326 fprintf(paf,KEYFMT "\"%c\" ; # %s\n",keyname,val,comment);
00327 else
00328 fprintf(paf,KEYFMT "\"%c\"\n",keyname,val);
00329 }
00330
00331 static void vircam_paf_write_int(char *keyname, int val, char *comment,
00332 FILE *paf) {
00333
00334
00335
00336 if (comment != NULL)
00337 fprintf(paf,KEYFMT "%d ; # %s\n",keyname,val,comment);
00338 else
00339 fprintf(paf,KEYFMT "%d\n",keyname,val);
00340 }
00341
00342 static void vircam_paf_write_long(char *keyname, long val, char *comment,
00343 FILE *paf) {
00344
00345
00346
00347 if (comment != NULL)
00348 fprintf(paf,KEYFMT "%ld ; # %s\n",keyname,val,comment);
00349 else
00350 fprintf(paf,KEYFMT "%ld\n",keyname,val);
00351 }
00352
00353 static void vircam_paf_write_float(char *keyname, float val, char *comment,
00354 FILE *paf) {
00355
00356
00357
00358 if (comment != NULL)
00359 fprintf(paf,KEYFMT "%.10g ; # %s\n",keyname,val,comment);
00360 else
00361 fprintf(paf,KEYFMT "%.10g\n",keyname,val);
00362 }
00363
00364 static void vircam_paf_write_double(char *keyname, double val, char *comment,
00365 FILE *paf) {
00366
00367
00368
00369 if (comment != NULL)
00370 fprintf(paf,KEYFMT "%.10g ; # %s\n",keyname,val,comment);
00371 else
00372 fprintf(paf,KEYFMT "%.10g\n",keyname,val);
00373 }
00374
00375 static void vircam_paf_write_string(char *keyname, char *val, char *comment,
00376 FILE *paf) {
00377
00378
00379
00380 if (comment != NULL)
00381 fprintf(paf,KEYFMT "\"%s\" ; # %s\n",keyname,val,comment);
00382 else
00383 fprintf(paf,KEYFMT "\"%s\"\n",keyname,val);
00384 }
00385
00386
00387 static char *vircam_paf_keyname(char *name) {
00388 char *keyname,*t;
00389
00390
00391
00392 keyname = cpl_malloc(SZKEY+1);
00393 t = strstr(name,"ESO");
00394 if (t == NULL)
00395 (void)strncpy(keyname,name,SZKEY);
00396 else
00397 strncpy(keyname,t+4,SZKEY);
00398 keyname[SZKEY] = '\0';
00399
00400
00401
00402 for (t = keyname; *t != '\0'; t++) {
00403 if (*t == ' ')
00404 *t = '.';
00405 }
00406 return(keyname);
00407 }
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435