36 #include "sinfo_pfits.h"
37 #include "sinfo_key_names.h"
38 #include "sinfo_utils_wrappers.h"
39 #include "sinfo_msg.h"
43 #define ASCIILINESZ 1024
44 #define PAF_MAGIC_SZ 13
45 #define PAF_MAGIC "PAF.HDR.START"
50 char * sinfo_paf_query(
54 static int sinfo_is_paf_file(
char * filename) ;
56 static char * sinfo_strcrop(
char * s);
81 static char * sinfo_strcrop(
char * s)
83 static char l[ASCIILINESZ+1];
86 if (s==NULL)
return NULL ;
87 memset(l, 0, ASCIILINESZ+1);
91 if (!isspace((
int)*(last-1)))
114 char * sinfo_paf_query(
118 static char value[ASCIILINESZ];
120 char line[ASCIILINESZ+1];
121 char val[ASCIILINESZ+1];
122 char head[ASCIILINESZ+1];
127 if (filename==NULL || key==NULL)
return NULL ;
130 if (sinfo_is_paf_file(filename)!=1) {
136 paf = fopen(filename,
"r");
143 while (fgets(line, ASCIILINESZ, paf)!=NULL) {
144 sscanf(line,
"%[^ ]", head);
145 if (!strcmp(head, key)) {
147 sscanf(line,
"%*[^ ] %[^;]", value);
158 strcpy(val, sinfo_strcrop(value));
161 if (val[0]==
'\"' && val[len-1]==
'\"') {
162 strncpy(value, val+1, len-2);
163 value[len-2]=(char)0;
183 static int sinfo_is_paf_file(
char * filename)
187 char line[ASCIILINESZ] ;
189 if (filename==NULL)
return -1 ;
195 if ((fp = fopen(filename,
"r"))==NULL) {
201 while (fgets(line, ASCIILINESZ, fp) != NULL) {
202 if (line[0] !=
'#') {
203 if (!strncmp(line, PAF_MAGIC, PAF_MAGIC_SZ)) is_paf = 1 ;
220 char * sinfo_pfits_get_mode(
const cpl_propertylist * plist)
223 return (
char*) cpl_propertylist_get_string(plist,
"ESO DET MODE NAME");
234 double sinfo_pfits_get_exp_time(
const cpl_propertylist* plist)
237 return cpl_propertylist_get_double(plist,
"EXPTIME");
251 double sinfo_pfits_get_ditndit(
const char* name)
255 cpl_propertylist* plist=NULL;
256 plist=cpl_propertylist_load(name,0);
258 dit = cpl_propertylist_get_double(plist,
"ESO DET DIT");
259 ndit = cpl_propertylist_get_int(plist,
"ESO DET NDIT");
260 sinfo_free_propertylist(&plist);
273 double sinfo_pfits_get_exptime(
const char * filename)
276 cpl_propertylist* plist=NULL;
277 plist=cpl_propertylist_load(filename,0);
278 exptime = cpl_propertylist_get_double(plist,
"EXPTIME");
279 sinfo_free_propertylist(&plist);
294 int sinfo_pfits_get_rom(
const cpl_propertylist * plist)
297 return cpl_propertylist_get_int(plist,
"ESO DET NCORRS");
308 int sinfo_pfits_get_expno(
const cpl_propertylist * plist)
311 return cpl_propertylist_get_int(plist,
"ESO TPL EXPNO");
323 double sinfo_pfits_get_airmass_start(
const cpl_propertylist * plist)
326 return cpl_propertylist_get_double(plist,
"ESO TEL AIRM START");
337 double sinfo_pfits_get_airmass_end(
const cpl_propertylist * plist)
339 return cpl_propertylist_get_double(plist,
"ESO TEL AIRM END");
350 double sinfo_pfits_get_alpha(
const cpl_propertylist * plist)
352 return cpl_propertylist_get_double(plist,
"ESO TEL TARG OFFSETALPHA");
362 double sinfo_pfits_get_targ_alpha(
const cpl_propertylist * plist)
364 return cpl_propertylist_get_double(plist,
"ESO INS TARG ALPHA");
375 double sinfo_pfits_get_targ_delta(
const cpl_propertylist * plist)
377 return cpl_propertylist_get_double(plist,
"ESO INS TARG DELTA");
387 const char * sinfo_pfits_get_arcfile(
const cpl_propertylist * plist)
389 return (
const char*) cpl_propertylist_get_string(plist,KEY_NAME_ARCFILE);
399 const char * sinfo_pfits_get_rec1raw1name(
const cpl_propertylist * plist)
401 return (
const char*) cpl_propertylist_get_string(plist,
402 KEY_NAME_PRO_REC1_RAW1_NAME);
412 const char * sinfo_pfits_get_ins_setup(
const cpl_propertylist * plist)
414 if(cpl_propertylist_get_string(plist,
"ESO INS SETUP ID")) {
415 return (
const char*) cpl_propertylist_get_string(plist,
"ESO INS SETUP ID");
432 double sinfo_pfits_get_wlen(
const cpl_propertylist * plist)
435 return cpl_propertylist_get_double(plist,
"ESO INS GRAT1 WLEN");
445 int sinfo_pfits_get_chop_ncycles(
const cpl_propertylist * plist)
448 return cpl_propertylist_get_int(plist,
"ESO DET CHOP NCYCLES");
459 double sinfo_pfits_get_pixscale(
const cpl_propertylist * plist)
461 const char* val=NULL;
462 val=cpl_propertylist_get_string(plist,
"ESO INS OPTI1 NAME");
473 double sinfo_pfits_get_posangle(
const cpl_propertylist * plist)
475 return cpl_propertylist_get_double(plist,
"ESO ADA POSANG");
485 double sinfo_pfits_get_DEC(
const cpl_propertylist * plist)
487 return cpl_propertylist_get_double(plist,
"DEC");
498 double sinfo_pfits_get_cumoffsetx(
const cpl_propertylist * plist)
500 return cpl_propertylist_get_double(plist,
"ESO SEQ CUMOFFSETX");
510 double sinfo_pfits_get_cumoffsety(
const cpl_propertylist * plist)
512 return cpl_propertylist_get_double(plist,
"ESO SEQ CUMOFFSETY");
522 const char * sinfo_pfits_get_date_obs(
const cpl_propertylist * plist)
525 return (
const char*) cpl_propertylist_get_string(plist,
"DATE-OBS");
536 double sinfo_pfits_get_delta(
const cpl_propertylist * plist)
539 return cpl_propertylist_get_double(plist,
"ESO TEL TARG OFFSETDELTA");
550 double sinfo_pfits_get_dec(
const cpl_propertylist * plist)
552 return cpl_propertylist_get_double(plist,
"DEC");
563 double sinfo_pfits_get_dit(
const cpl_propertylist * plist)
565 return cpl_propertylist_get_double(plist,
"ESO DET DIT");
574 float sinfo_pfits_get_pixelscale(
const char * name)
576 cpl_propertylist* plist=NULL;
578 const char* scale=NULL;
579 plist=cpl_propertylist_load(name,0);
580 scale= cpl_propertylist_get_string(plist,
"ESO INS OPTI1 NAME");
581 pixscale=atof(scale);
582 sinfo_free_propertylist(&plist);
595 const char * sinfo_pfits_get_ncorrs_name(
const cpl_propertylist * plist)
597 return cpl_propertylist_get_string(plist,
"ESO DET NCORRS NAME");
609 const char * sinfo_pfits_get_band(
const cpl_propertylist * plist)
611 return cpl_propertylist_get_string(plist,
"ESO INS FILT1 NAME");
621 const char * sinfo_pfits_get_dpr_catg(
const cpl_propertylist * plist)
623 return cpl_propertylist_get_string(plist,
"ESO DPR CATG");
633 const char * sinfo_pfits_get_dpr_tech(
const cpl_propertylist * plist)
635 return cpl_propertylist_get_string(plist,
"ESO DPR TECH");
645 const char * sinfo_pfits_get_dpr_type(
const cpl_propertylist * plist)
647 return cpl_propertylist_get_string(plist,
"ESO DPR TYPE");
658 const char * sinfo_pfits_get_filter_im(
const cpl_propertylist * plist)
660 return cpl_propertylist_get_string(plist,
"ESO INS FILT1 NAME");
670 const char * sinfo_pfits_get_filter_spec(
const cpl_propertylist * plist)
672 return cpl_propertylist_get_string(plist,
"ESO INS FILT2 NAME");
682 double sinfo_pfits_get_focus(
const cpl_propertylist * plist)
684 return cpl_propertylist_get_double(plist,
"ESO TEL FOCU LEN");
695 const char * sinfo_pfits_get_frame_type(
const cpl_propertylist * plist)
697 return cpl_propertylist_get_string(plist,
"ESO DET FRAM TYPE");
707 const char * sinfo_pfits_get_instrument(
const cpl_propertylist * plist)
709 return cpl_propertylist_get_string(plist,
"INSTRUME");
719 double sinfo_pfits_get_mjdobs(
const cpl_propertylist * plist)
721 return cpl_propertylist_get_double(plist,
"MJD-OBS");
732 double sinfo_pfits_get_monoc_pos(
const cpl_propertylist * plist)
734 return cpl_propertylist_get_double(plist,
"INS MONOC1 POS");
744 int sinfo_pfits_get_ndit(
const cpl_propertylist * plist)
746 return cpl_propertylist_get_int(plist,
"ESO DET NDIT");
756 int sinfo_pfits_get_naxis1(
const cpl_propertylist * plist)
758 return cpl_propertylist_get_int(plist,
"NAXIS1");
769 int sinfo_pfits_get_naxis2(
const cpl_propertylist * plist)
771 return cpl_propertylist_get_int(plist,
"NAXIS2");
782 int sinfo_pfits_get_naxis3(
const cpl_propertylist * plist)
784 return cpl_propertylist_get_int(plist,
"NAXIS3");
797 double sinfo_pfits_get_crpix1(
const cpl_propertylist * plist)
799 return cpl_propertylist_get_double(plist,
"CRPIX1");
811 double sinfo_pfits_get_crpix2(
const cpl_propertylist * plist)
813 return cpl_propertylist_get_double(plist,
"CRPIX2");
825 double sinfo_pfits_get_crpix3(
const cpl_propertylist * plist)
827 return cpl_propertylist_get_double(plist,
"CRPIX3");
838 double sinfo_pfits_get_cdelt1(
const cpl_propertylist * plist)
840 return cpl_propertylist_get_double(plist,
"CDELT1");
852 double sinfo_pfits_get_cdelt2(
const cpl_propertylist * plist)
854 return cpl_propertylist_get_double(plist,
"CDELT2");
866 double sinfo_pfits_get_cdelt3(
const cpl_propertylist * plist)
868 return cpl_propertylist_get_double(plist,
"CDELT3");
880 double sinfo_pfits_get_crval1(
const cpl_propertylist * plist)
882 return cpl_propertylist_get_double(plist,
"CRVAL1");
892 double sinfo_pfits_get_crval2(
const cpl_propertylist * plist)
894 return cpl_propertylist_get_double(plist,
"CRVAL2");
904 double sinfo_pfits_get_crval3(
const cpl_propertylist * plist)
906 return cpl_propertylist_get_double(plist,
"CRVAL3");
916 int sinfo_pfits_get_numbexp(
const cpl_propertylist * plist)
918 return cpl_propertylist_get_int(plist,
"ESO TPL NEXP");
928 const char * sinfo_pfits_get_obs_id(
const cpl_propertylist * plist)
930 return cpl_propertylist_get_string(plist,
"ESO OBS ID");
940 int sinfo_pfits_get_nodpos(
const cpl_propertylist * plist)
942 return cpl_propertylist_get_int(plist,
"ESO SEQ NODPOS");
954 double sinfo_pfits_get_ra(
const cpl_propertylist * plist)
956 return cpl_propertylist_get_double(plist,
"RA");
966 const char * sinfo_pfits_get_starname(
const cpl_propertylist * plist)
968 return cpl_propertylist_get_string(plist,
"ESO OBS TARG NAME");
978 double sinfo_pfits_get_resol(
const cpl_propertylist * plist)
980 return cpl_propertylist_get_double(plist,
"ESO INS RESOL");
990 const char * sinfo_pfits_get_templateid(
const cpl_propertylist * plist)
992 return (
const char*) cpl_propertylist_get_string(plist,
"ESO TPL ID");
1002 static cpl_error_code
1003 sinfo_plist_set_extra_common_keys(cpl_propertylist* plist)
1006 cpl_propertylist_append_string(plist,
"HDUCLASS",
"ESO") ;
1007 cpl_propertylist_set_comment(plist,
"HDUCLASS",
"hdu classification") ;
1009 cpl_propertylist_append_string(plist,
"HDUDOC",
"DICD") ;
1010 cpl_propertylist_set_comment(plist,
"HDUDOC",
"hdu reference document") ;
1012 cpl_propertylist_append_string(plist,
"HDUVERS",
"DICD V6.0") ;
1013 cpl_propertylist_set_comment(plist,
"HDUVERS",
"hdu reference document version") ;
1015 return cpl_error_get_code();
1031 sinfo_plist_set_extra_keys(cpl_propertylist* plist,
1032 const char* hduclas1,
1033 const char* hduclas2,
1034 const char* hduclas3,
1035 const char* scidata,
1036 const char* errdata,
1037 const char* qualdata,
1041 cpl_ensure_code(type<3,CPL_ERROR_ILLEGAL_INPUT);
1042 cpl_ensure_code(type>=0,CPL_ERROR_ILLEGAL_INPUT);
1044 sinfo_plist_set_extra_common_keys(plist);
1046 cpl_propertylist_append_string(plist,
"HDUCLAS1",hduclas1) ;
1047 cpl_propertylist_set_comment(plist,
"HDUCLAS1",
"hdu format classification") ;
1049 cpl_propertylist_append_string(plist,
"HDUCLAS2",hduclas2) ;
1050 cpl_propertylist_set_comment(plist,
"HDUCLAS2",
"hdu type classification") ;
1053 cpl_propertylist_append_string(plist,
"HDUCLAS3",hduclas3) ;
1054 cpl_propertylist_set_comment(plist,
"HDUCLAS3",
"hdu info classification") ;
1055 cpl_propertylist_append_string(plist,
"SCIDATA",scidata) ;
1056 cpl_propertylist_set_comment(plist,
"SCIDATA",
"name of data extension") ;
1075 return cpl_error_get_code();