00001
00027 #include <string.h>
00028 #include <stdio.h>
00029 #include <fitsio.h>
00030 #include <malloc.h>
00031
00032 #include "mex.h"
00033 #include "matrix.h"
00034 #include "mfitsio.h"
00035
00046 void
00047 mexFunction (int nlhs, mxArray * plhs[], int nrhs, const mxArray * prhs[])
00048 {
00049 int buflen, status, i;
00050 char *filename;
00051 long *fpixels, *lpixels, *lnaxes, *inc;
00052 mfitsio_header *header;
00053 mfitsio_info *info;
00054 mxArray *headerm;
00055 const mxArray *startp, *endp;
00056 double *dataStart, *dataEnd;
00057
00058
00059 if (nrhs != 3)
00060 mexErrMsgTxt ("Three inputs required.");
00061 else if (nlhs > 1)
00062 mexErrMsgTxt ("Too many output arguments.");
00063 else if (!mxIsChar (prhs[0]))
00064 mexErrMsgTxt ("Input must be a string (filename).");
00065
00066 if (mxGetM (prhs[0]) != 1)
00067 mexErrMsgTxt ("Input must be a row vector string (filename).");
00068
00069 buflen = (mxGetM (prhs[0]) * mxGetN (prhs[0])) + 1;
00070
00071 filename = mxCalloc (buflen, sizeof (char));
00072 status = mxGetString (prhs[0], filename, buflen);
00073
00074 header = mfitsio_read_header (filename);
00075 startp = prhs[1];
00076 endp = prhs[2];
00077
00079 if (header != 0)
00080 {
00081
00083 headerm = mfitsio_adapt_fheader (header);
00084 info = mfitsio_read_info (filename);
00085
00088 mfitsio_check_coordinate(startp, endp, info->naxis, info->naxes);
00089 dataStart = mxGetData(startp);
00090 dataEnd = mxGetData(endp);
00091 fpixels = mfitsio_convert_dbl2long(dataStart, info->naxis);
00092 lpixels = mfitsio_convert_dbl2long(dataEnd, info->naxis);
00093 inc = mfitsio_create_ones_vector(info->naxis);
00094 lnaxes = mfitsio_convert_int2long(info->naxes, info->naxis);
00095 plhs[0] = mfitsio_read_image_impl (filename, info, fpixels, lpixels,
00096 lnaxes, inc);
00097 mfitsio_free_header (header);
00098 mfitsio_free_info (info);
00099 MFITSIO_FREE(fpixels);
00100 MFITSIO_FREE(lpixels);
00101 MFITSIO_FREE(inc);
00102 MFITSIO_FREE(lnaxes);
00103 }
00104 else
00105 {
00106 mexErrMsgTxt ("Unable to open FITS file.");
00107 }
00108
00109 return;
00110 }