#ifndef _IP_H #define _IP_H /* include file to use the functions in libip */ /* data structures */ #define FITS_HROWS 36 #define FITS_HCOLS 80 typedef char FITSRow[FITS_HCOLS]; typedef unsigned short CamPix; /* C type of 16bit pixel */ #define NCAMPIX (1<<(int)(8*sizeof(CamPix))) /* number of unique CamPix */ #define MAXCAMPIX (NCAMPIX-1) /* largest value in a CamPix*/ typedef struct { /* following fields are cracked from the header for easy reference */ int bitpix; /* handy BITPIX */ int sw, sh; /* handy NAXIS1 and NAXIS2 */ FITSRow *var; /* malloced array of all unrecognized header lines */ int nvar; /* number of var[] */ char *image; /* malloced image array of sw*sh*(bitpix/8) bytes */ int nbytes; /* bytes read so far .. used for incremental loading */ int totbytes; /* total bytes to be read .. aka, size of image[] */ /* cache of WCS info from recent FImage */ int wcsset; /* set when following are ok */ double xref; /* x reference coordinate value (deg) */ double yref; /* y reference coordinate value (deg) */ double xrefpix; /* x reference pixel */ double yrefpix; /* y reference pixel */ double xinc; /* x coordinate increment (deg) */ double yinc; /* y coordinate increment (deg) */ double rot; /* rotation (deg) (from N through E) */ char type[5]; /* projection code, see worldpos() */ } FImage; /* "regsion": rectangular subset of an image */ typedef struct { CamPix *im; /* entire 2d array */ int iw, ih; /* dimensions of im */ int rx, ry; /* ul corner */ int rw, rh; /* size of region */ } ImRegion; #define ImRCenter(rp) (((rp)->ry+(rp)->rh/2)*(rp)->iw + (rp)->rx+(rp)->rw/2) /* stats for a region */ typedef struct { CamPix min, max; /* smallest and largest pixel */ CamPix median; /* pixel value in middle of population */ int maxatx, maxaty; /* location of largtest pixel, wrt image */ double mean, std; /* mean and std of all pixels in region */ double cmean, cstd; /* " of central half (25..75 percentile) of pixels */ } ImStats; /* characterization of a guassian curve */ typedef struct { double B; /* base */ double A; /* amplitude */ double s; /* sigma */ double m; /* median position */ } Gaussian; #define FWHMSIG 2.355 /* FWHM/sigma */ /* definition of a star. * model it as 2 1d commensurate gaussians (same A and B) in x and y. * err is 1 sigma value of deviations at each pixel from the ideal shape. */ typedef struct { double x, y; /* position when each m == 0 */ Gaussian vg; /* vertical best fit */ Gaussian hg; /* horizontal best fit */ double err; /* deviation @ STARSIGMA sigma */ } Star; #define STARSIGMA 3.0 /* sigmas of noise for star err */ /****************************************************************************/ /* explodegif.c */ extern int explodeGIF (unsigned char *raw, int nraw, int *wp, int *hp, unsigned char *pixap[], unsigned char ra[], unsigned char ga[], unsigned char ba[], char errmsg[]); /****************************************************************************/ /* fits.c */ extern int writeFITS (int fd, FImage *fip, char *errmsg, int restore); extern int writeFITSmem (FImage *fip, char **fts, char errmsg[], int restore); extern int readFITS (int fd, FImage *fip, char *errmsg); extern int readIncFITS (int fd, FImage *fip, char *errmsg); extern int readFITSHeader (int fd, FImage *fip, char *errmsg); extern int readFITSmem (char *fits, int nfits, FImage *fip, char errmsg[]); extern int writeSimpleFITS (int fd, char *pix, int w, int h, int restore); extern int getNAXIS (FImage *fip, int *n1p, int *n2p, char errmsg[]); extern void initFImage (FImage *fip); extern void resetFImage (FImage *fip); extern void cloneFImage (FImage *new, FImage *old, int pixtoo); extern void setSimpleFITSHeader (FImage *fip); extern void setLogicalFITS (FImage *fip, char *name, int v, char *comment); extern void setIntFITS (FImage *fip, char *name, int v, char *comment); extern void setRealFITS (FImage *fip, char *name,double v,int sigdig,char *cmt); extern void setCommentFITS (FImage *fip, char *name, char *comment); extern void setStringFITS (FImage *fip, char *name, char *string, char *cmt); extern int getLogicalFITS (FImage *fip, char *name, int *vp); extern int getIntFITS (FImage *fip, char *name, int *vp); extern int getRealFITS (FImage *fip, char *name, double *vp); extern int getCommentFITS (FImage *fip, char *name, char *buf); extern int getStringFITS (FImage *fip, char *name, char *string); extern void addFImageVar (FImage *fip, FITSRow row); extern int delFImageVar (FImage *fip, char *name); extern int cpyFImageVar (FImage *dstfip, FImage *srcfip, char *name); /****************************************************************************/ /* gaussfit.c */ extern int gaussfit (CamPix a[], int na, Gaussian *gp); extern int gauss2fit (ImRegion *ip, Gaussian *hgp, Gaussian *vgp); /****************************************************************************/ /* lstsqr.c */ extern int lstsqr (double (*chisqr)(double p[]), double params0[], double params1[], int np, double ftol); /****************************************************************************/ /* median.c */ extern double dmedian (double a[], int n); extern CamPix cmedian (CamPix a[], int n); /****************************************************************************/ /* sqr.c */ extern double sqr (double x); /****************************************************************************/ /* stars.c */ extern int quickStars (FImage *fip, ImStats *isp, int border, int burnt, double std, double **xpp, double **ypp); extern int getStar (ImRegion *rp, Star *sp); extern int cmpStars (Star *s1, Star *s0, double *magp, double *errp); /****************************************************************************/ /* stats.c */ extern void regionStats (ImRegion *rp, ImStats *sp); extern void ringStats (CamPix *ip, int imw, int r, int *minp, int *maxp, int *medp); extern void starCentroid (CamPix *ip, int imw, int r, int sky, double *dxp, double *dyp, int *massp); extern int clampRegion (ImRegion *rp); /****************************************************************************/ /* walk.c */ extern void brightWalk (ImRegion *rp, int scan[8], int *bx, int *by); /****************************************************************************/ /* wcs.c */ extern int RADec2xy(FImage *fip, double ra, double dec, double *xp, double *yp); extern int xy2RADec(FImage *fip, double x, double y, double *rap, double *decp); #endif /* _IP_H */