int test_qfitsheader_browse(char * filename) { qfits_header * qh ; char key[80], val[80], com[80] ; int i ; int err ; say("-----> Header browsing test"); /* Read header from source */ say("Reading header from file"); qh = qfits_header_read(filename); if (qh==NULL) { fail("cannot read test file"); return 1 ; } err=0 ; for (i=0 ; i<qh->n ; i++) { if (qfits_header_getitem(qh, i, key, val, com, NULL)!=0) { fail("cannot read header item"); err++ ; } } qfits_header_destroy(qh); return err ; }
// Add FITS keywords void add_fits_keywords(struct transformation t,char *filename) { int i,j,k,l,m; int naxis1,naxis2,naxis3; qfits_header *qh; qfitsdumper qd; qfitsloader ql; char key[FITS_LINESZ+1]; char val[FITS_LINESZ+1]; char com[FITS_LINESZ+1]; char lin[FITS_LINESZ+1]; FILE *file; float *fbuf; naxis1=atoi(qfits_query_hdr(filename,"NAXIS1")); naxis2=atoi(qfits_query_hdr(filename,"NAXIS2")); naxis3=atoi(qfits_query_hdr(filename,"NAXIS3")); fbuf=malloc(sizeof(float)*naxis1*naxis2*naxis3); // Read header qh=qfits_header_read(filename); ql.xtnum=0; ql.ptype=PTYPE_FLOAT; ql.filename=filename; for (k=0,l=0;k<naxis3;k++) { ql.pnum=k; // Initialize load if (qfitsloader_init(&ql) != 0) printf("Error initializing data loading\n"); // Test load if (qfits_loadpix(&ql) != 0) printf("Error loading actual data\n"); for (i=0,m=0;i<naxis1;i++) { for (j=0;j<naxis2;j++) { fbuf[l]=ql.fbuf[m]; l++; m++; } } } qfits_header_add_after(qh,"MJD-OBS","CUNIT2","'deg'"," ",NULL); qfits_header_add_after(qh,"MJD-OBS","CUNIT1","'deg'"," ",NULL); qfits_header_add_after(qh,"MJD-OBS","CTYPE2","'DEC--TAN'"," ",NULL); qfits_header_add_after(qh,"MJD-OBS","CTYPE1","'RA---TAN'"," ",NULL); sprintf(val,"%e",t.b[2]/3600.0); qfits_header_add_after(qh,"MJD-OBS","CD2_2",val," ",NULL); sprintf(val,"%e",t.b[1]/3600.0); qfits_header_add_after(qh,"MJD-OBS","CD2_1",val," ",NULL); sprintf(val,"%e",t.a[2]/3600.0); qfits_header_add_after(qh,"MJD-OBS","CD1_2",val," ",NULL); sprintf(val,"%e",t.a[1]/3600.0); qfits_header_add_after(qh,"MJD-OBS","CD1_1",val," ",NULL); sprintf(val,"%f",t.de0); qfits_header_add_after(qh,"MJD-OBS","CRVAL2",val," ",NULL); sprintf(val,"%f",t.ra0); qfits_header_add_after(qh,"MJD-OBS","CRVAL1",val," ",NULL); sprintf(val,"%f",t.y0); qfits_header_add_after(qh,"MJD-OBS","CRPIX2",val," ",NULL); sprintf(val,"%f",t.x0); qfits_header_add_after(qh,"MJD-OBS","CRPIX1",val," ",NULL); file=fopen(filename,"w"); qfits_header_dump(qh,file); fclose(file); qfits_header_destroy(qh); qd.filename=filename; qd.npix=naxis1*naxis2*naxis3; qd.ptype=PTYPE_FLOAT; qd.fbuf=fbuf; qd.out_ptype=-32; qfits_pixdump(&qd); free(fbuf); return; }
int test_qfitsheader_read(char * filename) { qfits_header * qh ; char * val ; int err ; int keytype ; err=0 ; say("-----> Header reading test"); /* Read header from source */ say("Reading header from file"); qh = qfits_header_read(filename); if (qh==NULL) { fail("cannot read test file"); return 1 ; } say("Querying mandatory keys"); err += check_key(qh, "SIMPLE", "T"); err += check_key(qh, "NAXIS", "2"); err += check_key(qh, "NAXIS1", "11"); err += check_key(qh, "NAXIS2", "10"); err += check_key(qh, "BITPIX", "-32"); say("Querying base keys"); err += check_key(qh, "KEY01", "value01"); err += check_key(qh, "KEY02", "2"); err += check_key(qh, "KEY03", "3.0"); err += check_key(qh, "KEY04", "4.0 4.2"); err += check_key(qh, "KEY05", "T"); say("Checking key types"); val = qfits_header_getstr(qh, "KEY01"); keytype = qfits_get_type(val); if (keytype!=QFITS_STRING) { printf("val=[%s] type is %d\n", val, keytype); fail("wrong identified type for KEY01 (string)"); err++; } val = qfits_header_getstr(qh, "KEY02"); keytype = qfits_get_type(val); if (keytype!=QFITS_INT) { fail("wrong identified type for KEY02 (int)"); err++; } val = qfits_header_getstr(qh, "KEY03"); keytype = qfits_get_type(val); if (keytype!=QFITS_FLOAT) { fail("wrong identified type for KEY03 (float)"); err++; } val = qfits_header_getstr(qh, "KEY04"); keytype = qfits_get_type(val); if (keytype!=QFITS_COMPLEX) { fail("wrong identified type for KEY04 (complex)"); err++; } val = qfits_header_getstr(qh, "KEY05"); keytype = qfits_get_type(val); if (keytype!=QFITS_BOOLEAN) { fail("wrong identified type for KEY05 (boolean)"); err++; } say("Querying hierarch keys"); err += check_key(qh, "HIERARCH ESO PRO A", "0.0"); err += check_key(qh, "PRO.B", "0.0"); err += check_key(qh, "pro.c", "0.0"); err += check_key(qh, "ins.a", "0.0"); err += check_key(qh, "ins.b", "0.0"); err += check_key(qh, "ins.c", "0.0"); err += check_key(qh, "gen.a", "0.0"); err += check_key(qh, "gen.b", "0.0"); err += check_key(qh, "gen.c", "0.0"); err += check_key(qh, "obs.a", "0.0"); err += check_key(qh, "obs.b", "0.0"); err += check_key(qh, "obs.c", "0.0"); err += check_key(qh, "tpl.a", "0.0"); err += check_key(qh, "tpl.b", "0.0"); err += check_key(qh, "tpl.c", "0.0"); err += check_key(qh, "tel.a", "0.0"); err += check_key(qh, "tel.b", "0.0"); err += check_key(qh, "tel.c", "0.0"); err += check_key(qh, "log.a", "0.0"); err += check_key(qh, "log.b", "0.0"); err += check_key(qh, "log.c", "0.0"); err += check_key(qh, "null.a", "0.0"); err += check_key(qh, "null.b", "0.0"); err += check_key(qh, "null.c", "0.0"); say("Removing keys"); qfits_header_del(qh, "PRO.A"); qfits_header_del(qh, "pro.b"); qfits_header_del(qh, "HIERARCH ESO PRO C"); if (qfits_header_getstr(qh, "HIERARCH ESO PRO A")!=NULL) err ++ ; if (qfits_header_getstr(qh, "PRO.B")!=NULL) err ++ ; if (qfits_header_getstr(qh, "pro.c")!=NULL) err ++ ; say("Modifying keys"); qfits_header_destroy(qh); return err ; }