#include #include #include #include #include #include "qfits.h" #define LIM 80 #define NMAX 256 #define D2R M_PI/180.0 #define R2D 180.0/M_PI struct image { char filename[64]; int naxis1,naxis2,naxis3,nframes; float *zavg,*zstd,*zmax,*znum,*ztrk; double ra0,de0; float x0,y0; float a[3],b[3],xrms,yrms; double mjd; float *dt,exptime; char nfd[32]; int cospar; }; struct image read_fits(char *filename); void write_composite_pgm(char *filename,struct image img); void write_pgm(char *filename,struct image img); int main(int argc,char *argv[]) { int i; struct image img; img=read_fits(argv[1]); write_composite_pgm("avg.pgm",img); write_pgm("f1.pgm",img); return 0; } // Read fits image struct image read_fits(char *filename) { int i,j,k,l,m; qfitsloader ql; char key[FITS_LINESZ+1]; char val[FITS_LINESZ+1]; struct image img; // Copy filename strcpy(img.filename,filename); // Image size img.naxis1=atoi(qfits_query_hdr(filename,"NAXIS1")); img.naxis2=atoi(qfits_query_hdr(filename,"NAXIS2")); img.naxis3=atoi(qfits_query_hdr(filename,"NAXIS3")); // MJD img.mjd=(double) atof(qfits_query_hdr(filename,"MJD-OBS")); strcpy(img.nfd,qfits_query_hdr(filename,"DATE-OBS")); // COSPAR ID img.cospar=atoi(qfits_query_hdr(filename,"COSPAR")); // Transformation img.mjd=atof(qfits_query_hdr(filename,"MJD-OBS")); img.ra0=atof(qfits_query_hdr(filename,"CRVAL1")); img.de0=atof(qfits_query_hdr(filename,"CRVAL2")); img.x0=atof(qfits_query_hdr(filename,"CRPIX1")); img.y0=atof(qfits_query_hdr(filename,"CRPIX2")); img.a[0]=0.0; img.a[1]=3600.0*atof(qfits_query_hdr(filename,"CD1_1")); img.a[2]=3600.0*atof(qfits_query_hdr(filename,"CD1_2")); img.b[0]=0.0; img.b[1]=3600.0*atof(qfits_query_hdr(filename,"CD2_1")); img.b[2]=3600.0*atof(qfits_query_hdr(filename,"CD2_2")); img.xrms=3600.0*atof(qfits_query_hdr(filename,"CRRES1")); img.yrms=3600.0*atof(qfits_query_hdr(filename,"CRRES2")); img.exptime=atof(qfits_query_hdr(filename,"EXPTIME")); img.nframes=atoi(qfits_query_hdr(filename,"NFRAMES")); // Timestamps img.dt=(float *) malloc(sizeof(float)*img.nframes); for (i=0;i=255.0) z=255.0; if (z<0.0) z=0.0; buffer[l++]=(unsigned char) z; } for (i=0;i=255.0) z=255.0; if (z<0.0) z=0.0; buffer[l++]=(unsigned char) z; } } for (j=0;j=255.0) z=255.0; if (z<0.0) z=0.0; buffer[l++]=(unsigned char) z; } for (i=0;i=255.0) z=255.0; if (z<0.0) z=0.0; buffer[l++]=(unsigned char) z; } } file=fopen(filename,"wb"); fprintf(file,"P5\n%d %d\n255\n",2*img.naxis1,2*img.naxis2); fwrite(buffer,4*n,sizeof(unsigned char),file); fclose(file); return; } // Write pgm file void write_pgm(char *filename,struct image img) { int i,j,k,n; FILE *file; float s1,s2,z,avg,std,zavgmin,zavgmax; n=img.naxis1*img.naxis2; for (i=0,s1=0.0,s2=0.0;i255.0) z=255.0; if (z<0.0) z=0.0; fprintf(file,"%c",(unsigned char) z); } } fclose(file); return; }