36#include <casu_utils.h>
38#include "vircam_paf.h"
41static char *vircam_paf_keyname(
char *name);
42static void vircam_paf_write_char(
char *keyname,
char val,
char *comment,
44static void vircam_paf_write_int(
char *keyname,
int val,
char *comment,
46static void vircam_paf_write_long(
char *keyname,
long val,
char *comment,
48static void vircam_paf_write_float(
char *keyname,
float val,
char *comment,
50static void vircam_paf_write_double(
char *keyname,
double val,
char *comment,
52static void vircam_paf_write_string(
char *keyname,
char *val,
char *comment,
83extern int vircam_paf_print(
char *ftemp,
const char *paf_id,
84 const char *paf_desc, cpl_propertylist *incl) {
86 char filename[BUFSIZ],*comment,*name,*keyname;
87 const char *fctid=
"vircam_paf_print";
94 cpl_msg_warning(fctid,
"NULL propertylist. No PAF file written");
100 ichip = cpl_propertylist_get_int(incl,
"ESO DET CHIP NO");
103 cpl_msg_warning(fctid,
"No entry DET CHIP NO in property list");
110 (void)snprintf(filename,BUFSIZ,
"%s_%02d.paf",ftemp,ichip);
111 if ((paf = fopen(filename,
"w")) == NULL) {
112 cpl_msg_warning(fctid,
"Unable to open %s.",filename);
118 fprintf(paf,
"PAF.HDR.START ;# start of header\n");
119 fprintf(paf,
"PAF.TYPE \"pipeline product\" ;\n");
120 fprintf(paf,
"PAF.ID \"%s\"\n", paf_id);
121 fprintf(paf,
"PAF.NAME \"%s\"\n", filename);
122 fprintf(paf,
"PAF.DESC \"%s\"\n", paf_desc);
123 fprintf(paf,
"PAF.CHCK.CHECKSUM \"\"\n");
124 fprintf(paf,
"PAF.HDR.END ;# end of header\n");
130 for (i = 0; i < cpl_propertylist_get_size(incl); i++) {
131 p = cpl_propertylist_get(incl,i);
132 name = (
char *)cpl_property_get_name(p);
133 keyname = vircam_paf_keyname(name);
134 comment = (
char *)cpl_property_get_comment(p);
138 switch (cpl_property_get_type(p)) {
140 vircam_paf_write_char(keyname,cpl_property_get_char(p),
144 vircam_paf_write_int(keyname,cpl_property_get_int(p),
148 vircam_paf_write_long(keyname,cpl_property_get_long(p),
152 vircam_paf_write_float(keyname,cpl_property_get_float(p),
155 case CPL_TYPE_DOUBLE:
156 vircam_paf_write_double(keyname,cpl_property_get_double(p),
159 case CPL_TYPE_STRING:
160 vircam_paf_write_string(keyname,(
char *)cpl_property_get_string(p),
198extern cpl_propertylist *vircam_paf_req_items(cpl_propertylist *src) {
199 cpl_propertylist *dest;
201 const char *req_items[] = {
"ESO DET CHIP NO",
"EXTNAME"};
202 const char *req_reg =
"^ESO QC";
203 const char *fctid =
"vircam_paf_req_items";
207 dest = cpl_propertylist_new();
211 for (i = 0; i < nreq; i++) {
212 if (cpl_propertylist_copy_property(dest,src,req_items[i]) != CPL_ERROR_NONE) {
213 cpl_msg_warning(fctid,
"Can't find property %s in source header",
222 cpl_propertylist_copy_property_regexp(dest,src,req_reg,0);
223 if (cpl_error_get_code() != CPL_ERROR_NONE) {
224 cpl_msg_warning(fctid,
"Can't find regexp %s in source header",
256extern cpl_propertylist *vircam_paf_phu_items(cpl_propertylist *src) {
257 cpl_propertylist *dest;
259 const char *req_items[] = {
"ESO TPL ID",
"DATE-OBS",
"MJD-OBS",
260 "ESO DET DIT",
"ARCFILE"};
261 const char *fctid =
"vircam_paf_req_items";
265 dest = cpl_propertylist_new();
269 for (i = 0; i < nreq; i++) {
270 if (cpl_propertylist_copy_property(dest,src,req_items[i]) != CPL_ERROR_NONE) {
272 cpl_msg_warning(fctid,
"Can't find property %s in source header",
274 cpl_propertylist_update_string(dest,req_items[i],
"");
275 cpl_propertylist_set_comment(dest,req_items[i],
"Not available");
308extern void vircam_paf_append(cpl_propertylist *dest, cpl_propertylist *src,
313 if (cpl_propertylist_has(src,prop)) {
314 cpl_propertylist_copy_property(dest,src,prop);
316 cpl_propertylist_update_string(dest,prop,
"");
317 cpl_propertylist_set_comment(dest,prop,
"Not available");
321static void vircam_paf_write_char(
char *keyname,
char val,
char *comment,
327 fprintf(paf,KEYFMT
"\"%c\" ; # %s\n",keyname,val,comment);
329 fprintf(paf,KEYFMT
"\"%c\"\n",keyname,val);
332static void vircam_paf_write_int(
char *keyname,
int val,
char *comment,
338 fprintf(paf,KEYFMT
"%d ; # %s\n",keyname,val,comment);
340 fprintf(paf,KEYFMT
"%d\n",keyname,val);
343static void vircam_paf_write_long(
char *keyname,
long val,
char *comment,
349 fprintf(paf,KEYFMT
"%ld ; # %s\n",keyname,val,comment);
351 fprintf(paf,KEYFMT
"%ld\n",keyname,val);
354static void vircam_paf_write_float(
char *keyname,
float val,
char *comment,
360 fprintf(paf,KEYFMT
"%.10g ; # %s\n",keyname,val,comment);
362 fprintf(paf,KEYFMT
"%.10g\n",keyname,val);
365static void vircam_paf_write_double(
char *keyname,
double val,
char *comment,
371 fprintf(paf,KEYFMT
"%.10g ; # %s\n",keyname,val,comment);
373 fprintf(paf,KEYFMT
"%.10g\n",keyname,val);
376static void vircam_paf_write_string(
char *keyname,
char *val,
char *comment,
382 fprintf(paf,KEYFMT
"\"%s\" ; # %s\n",keyname,val,comment);
384 fprintf(paf,KEYFMT
"\"%s\"\n",keyname,val);
388static char *vircam_paf_keyname(
char *name) {
393 keyname = cpl_malloc(SZKEY+1);
394 t = strstr(name,
"ESO");
396 (void)strncpy(keyname,name,SZKEY);
398 strncpy(keyname,t+4,SZKEY);
399 keyname[SZKEY] =
'\0';
403 for (t = keyname; *t !=
'\0'; t++) {