36 #include "vircam_paf.h"
37 #include "vircam_utils.h"
40 static char *vircam_paf_keyname(
char *name);
41 static void vircam_paf_write_char(
char *keyname,
char val,
char *comment,
43 static void vircam_paf_write_int(
char *keyname,
int val,
char *comment,
45 static void vircam_paf_write_long(
char *keyname,
long val,
char *comment,
47 static void vircam_paf_write_float(
char *keyname,
float val,
char *comment,
49 static void vircam_paf_write_double(
char *keyname,
double val,
char *comment,
51 static void vircam_paf_write_string(
char *keyname,
char *val,
char *comment,
82 extern int vircam_paf_print(
char *ftemp,
const char *paf_id,
83 const char *paf_desc, cpl_propertylist *incl) {
85 char filename[BUFSIZ],*comment,*name,*keyname;
86 const char *fctid=
"vircam_paf_print";
93 cpl_msg_warning(fctid,
"NULL propertylist. No PAF file written");
99 ichip = cpl_propertylist_get_int(incl,
"ESO DET CHIP NO");
102 cpl_msg_warning(fctid,
"No entry DET CHIP NO in property list");
109 (void)snprintf(filename,BUFSIZ,
"%s_%02d.paf",ftemp,ichip);
110 if ((paf = fopen(filename,
"w")) == NULL) {
111 cpl_msg_warning(fctid,
"Unable to open %s.",filename);
117 fprintf(paf,
"PAF.HDR.START ;# start of header\n");
118 fprintf(paf,
"PAF.TYPE \"pipeline product\" ;\n");
119 fprintf(paf,
"PAF.ID \"%s\"\n", paf_id);
120 fprintf(paf,
"PAF.NAME \"%s\"\n", filename);
121 fprintf(paf,
"PAF.DESC \"%s\"\n", paf_desc);
122 fprintf(paf,
"PAF.CHCK.CHECKSUM \"\"\n");
123 fprintf(paf,
"PAF.HDR.END ;# end of header\n");
129 for (i = 0; i < cpl_propertylist_get_size(incl); i++) {
130 p = cpl_propertylist_get(incl,i);
131 name = (
char *)cpl_property_get_name(p);
132 keyname = vircam_paf_keyname(name);
133 comment = (
char *)cpl_property_get_comment(p);
137 switch (cpl_property_get_type(p)) {
139 vircam_paf_write_char(keyname,cpl_property_get_char(p),
143 vircam_paf_write_int(keyname,cpl_property_get_int(p),
147 vircam_paf_write_long(keyname,cpl_property_get_long(p),
151 vircam_paf_write_float(keyname,cpl_property_get_float(p),
154 case CPL_TYPE_DOUBLE:
155 vircam_paf_write_double(keyname,cpl_property_get_double(p),
158 case CPL_TYPE_STRING:
159 vircam_paf_write_string(keyname,(
char *)cpl_property_get_string(p),
197 extern cpl_propertylist *vircam_paf_req_items(cpl_propertylist *src) {
198 cpl_propertylist *dest;
200 const char *req_items[] = {
"ESO DET CHIP NO",
"EXTNAME"};
201 const char *req_reg =
"^ESO QC";
202 const char *fctid =
"vircam_paf_req_items";
206 dest = cpl_propertylist_new();
210 for (i = 0; i < nreq; i++) {
211 if (cpl_propertylist_copy_property(dest,src,req_items[i]) != CPL_ERROR_NONE) {
212 cpl_msg_warning(fctid,
"Can't find property %s in source header",
221 cpl_propertylist_copy_property_regexp(dest,src,req_reg,0);
222 if (cpl_error_get_code() != CPL_ERROR_NONE) {
223 cpl_msg_warning(fctid,
"Can't find regexp %s in source header",
255 extern cpl_propertylist *vircam_paf_phu_items(cpl_propertylist *src) {
256 cpl_propertylist *dest;
258 const char *req_items[] = {
"ESO TPL ID",
"DATE-OBS",
"MJD-OBS",
259 "ESO DET DIT",
"ARCFILE"};
260 const char *fctid =
"vircam_paf_req_items";
264 dest = cpl_propertylist_new();
268 for (i = 0; i < nreq; i++) {
269 if (cpl_propertylist_copy_property(dest,src,req_items[i]) != CPL_ERROR_NONE) {
271 cpl_msg_warning(fctid,
"Can't find property %s in source header",
273 cpl_propertylist_update_string(dest,req_items[i],
"");
274 cpl_propertylist_set_comment(dest,req_items[i],
"Not available");
307 extern void vircam_paf_append(cpl_propertylist *dest, cpl_propertylist *src,
312 if (cpl_propertylist_has(src,prop)) {
313 cpl_propertylist_copy_property(dest,src,prop);
315 cpl_propertylist_update_string(dest,prop,
"");
316 cpl_propertylist_set_comment(dest,prop,
"Not available");
320 static void vircam_paf_write_char(
char *keyname,
char val,
char *comment,
326 fprintf(paf,KEYFMT
"\"%c\" ; # %s\n",keyname,val,comment);
328 fprintf(paf,KEYFMT
"\"%c\"\n",keyname,val);
331 static void vircam_paf_write_int(
char *keyname,
int val,
char *comment,
337 fprintf(paf,KEYFMT
"%d ; # %s\n",keyname,val,comment);
339 fprintf(paf,KEYFMT
"%d\n",keyname,val);
342 static void vircam_paf_write_long(
char *keyname,
long val,
char *comment,
348 fprintf(paf,KEYFMT
"%ld ; # %s\n",keyname,val,comment);
350 fprintf(paf,KEYFMT
"%ld\n",keyname,val);
353 static void vircam_paf_write_float(
char *keyname,
float val,
char *comment,
359 fprintf(paf,KEYFMT
"%.10g ; # %s\n",keyname,val,comment);
361 fprintf(paf,KEYFMT
"%.10g\n",keyname,val);
364 static void vircam_paf_write_double(
char *keyname,
double val,
char *comment,
370 fprintf(paf,KEYFMT
"%.10g ; # %s\n",keyname,val,comment);
372 fprintf(paf,KEYFMT
"%.10g\n",keyname,val);
375 static void vircam_paf_write_string(
char *keyname,
char *val,
char *comment,
381 fprintf(paf,KEYFMT
"\"%s\" ; # %s\n",keyname,val,comment);
383 fprintf(paf,KEYFMT
"\"%s\"\n",keyname,val);
387 static char *vircam_paf_keyname(
char *name) {
392 keyname = cpl_malloc(SZKEY+1);
393 t = strstr(name,
"ESO");
395 (void)strncpy(keyname,name,SZKEY);
397 strncpy(keyname,t+4,SZKEY);
398 keyname[SZKEY] =
'\0';
402 for (t = keyname; *t !=
'\0'; t++) {