gnuastro-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnuastro-commits] master 493bc6f 001/125: Defined new gnuastro/data.h h


From: Mohammad Akhlaghi
Subject: [gnuastro-commits] master 493bc6f 001/125: Defined new gnuastro/data.h header
Date: Sun, 23 Apr 2017 22:36:24 -0400 (EDT)

branch: master
commit 493bc6f0c610fe2f7e97c89fda33214d2d4dcf58
Author: Mohammad Akhlaghi <address@hidden>
Commit: Mohammad Akhlaghi <address@hidden>

    Defined new gnuastro/data.h header
    
    The new `lib/gnuastro/data.h' header is now defined with a generic (and
    currently untested) C structure. In the next commits it will be slowly
    implemented in all the libraries and utilities. In this commit, the blank
    values for the different datatypes have been moved from the `fits.h' header
    to `data.h' and they are corrected within Gnuastro.
---
 bin/mkcatalog/mkcatalog.c      |   9 ++-
 bin/mkcatalog/ui.c             |   2 +-
 bin/mkcatalog/upperlimit.c     |   3 +-
 bin/noisechisel/binary.c       |   8 +-
 bin/noisechisel/detection.c    |  13 ++--
 bin/noisechisel/label.c        |   7 +-
 bin/noisechisel/label.h        |   2 +-
 bin/noisechisel/segmentation.c |   8 +-
 bin/noisechisel/thresh.c       |   2 +-
 lib/Makefile.am                |  14 ++--
 lib/fits.c                     | 164 ++++++++++++++++++++---------------------
 lib/gnuastro/data.h            | 123 +++++++++++++++++++++++++++++++
 lib/gnuastro/fits.h            |  22 +-----
 13 files changed, 242 insertions(+), 135 deletions(-)

diff --git a/bin/mkcatalog/mkcatalog.c b/bin/mkcatalog/mkcatalog.c
index 9d21ed6..4da48e0 100644
--- a/bin/mkcatalog/mkcatalog.c
+++ b/bin/mkcatalog/mkcatalog.c
@@ -32,6 +32,7 @@ along with Gnuastro. If not, see 
<http://www.gnu.org/licenses/>.
 
 #include <gnuastro/git.h>
 #include <gnuastro/wcs.h>
+#include <gnuastro/data.h>
 #include <gnuastro/fits.h>
 #include <gnuastro/txtarray.h>
 
@@ -53,12 +54,12 @@ along with Gnuastro. If not, see 
<http://www.gnu.org/licenses/>.
 
 /* Macro to see if the label is indexable (belongs to an object or
    not). See the explanation in bin/noisechisel/label.h. */
-#if GAL_FITS_LONG_BLANK<0
+#if GAL_DATA_BLANK_LONG<0
 #define ISINDEXABLEOBJLABEL (objects[i]>0)
 #define ISINDEXABLECLPLABEL (clumps[i]>0)
 #else
-#define ISINDEXABLEOBJLABEL (objects[i] && objects[i]!=GAL_FITS_LONG_BLANK)
-#define ISINDEXABLECLPLABEL (clumps[i] && clumps[i]!=GAL_FITS_LONG_BLANK)
+#define ISINDEXABLEOBJLABEL (objects[i] && objects[i]!=GAL_DATA_BLANK_LONG)
+#define ISINDEXABLECLPLABEL (clumps[i] && clumps[i]!=GAL_DATA_BLANK_LONG)
 #endif
 
 
@@ -303,7 +304,7 @@ clumppass(struct mkcatalogparams *p)
       /* We are on a detected region but not a clump (with a negative
          label). This region can be used to find properties like the
          river fluxs in the vicinity of clumps. */
-      else if (clumps[i]!=GAL_FITS_LONG_BLANK)
+      else if (clumps[i]!=GAL_DATA_BLANK_LONG)
 
         /* We want to check the river pixels in each detection that
            has a clump. Recall that each detection can host more than
diff --git a/bin/mkcatalog/ui.c b/bin/mkcatalog/ui.c
index 0c2fc5d..29d2f96 100644
--- a/bin/mkcatalog/ui.c
+++ b/bin/mkcatalog/ui.c
@@ -1140,7 +1140,7 @@ readkeywords(struct mkcatalogparams *p)
   if(keys[1].status)
     {
       gal_statistics_long_non_blank_max(p->objects, size, &numobjects,
-                                        GAL_FITS_LONG_BLANK);
+                                        GAL_DATA_BLANK_LONG);
       p->numobjects=numobjects;
     }
   else
diff --git a/bin/mkcatalog/upperlimit.c b/bin/mkcatalog/upperlimit.c
index 862ec49..d6d3703 100644
--- a/bin/mkcatalog/upperlimit.c
+++ b/bin/mkcatalog/upperlimit.c
@@ -30,6 +30,7 @@ along with Gnuastro. If not, see 
<http://www.gnu.org/licenses/>.
 #include <sys/time.h>
 
 #include <gsl/gsl_rng.h>
+#include <gnuastro/data.h>
 #include <gnuastro/fits.h>
 #include <gnuastro/threads.h>
 #include <gnuastro/txtarray.h>
@@ -134,7 +135,7 @@ fillseginfo(struct upperlimitparams *p, long *seg)
   do
     /* We don't want to look at pixels with value zero or blank pixels, so
        ignore them.  */
-    if( *l!=0 && *l!=GAL_FITS_LONG_BLANK )
+    if( *l!=0 && *l!=GAL_DATA_BLANK_LONG )
       {
         if(*l>maxlab)    maxlab=*l;
         if(*l<p->minlab) p->minlab=*l;
diff --git a/bin/noisechisel/binary.c b/bin/noisechisel/binary.c
index f9c1cfd..c56b12c 100644
--- a/bin/noisechisel/binary.c
+++ b/bin/noisechisel/binary.c
@@ -51,7 +51,7 @@ setbytblank(float *img, unsigned char *byt, size_t size)
   do
     {
       if(isnan(*img++))
-        *byt=GAL_FITS_BYTE_BLANK;
+        *byt=GAL_DATA_BLANK_UCHAR;
       ++byt;
     }
   while(img<end);
@@ -98,7 +98,7 @@ count_f_b_onregion(unsigned char *byt, size_t startind, 
size_t s0,
     {
       fb = ( b = byt + startind + is1*row++ ) + s1;
       do
-        *b ? (*b==GAL_FITS_BYTE_BLANK ? *anyblank=1: ++nf) : ++nb;
+        *b ? (*b==GAL_DATA_BLANK_UCHAR ? *anyblank=1: ++nf) : ++nb;
       while(++b<fb);
     }
   while(row<s0);
@@ -535,8 +535,8 @@ fh_makeinv(unsigned char *byt, size_t s0, size_t s1,
       tp=tinv+start+row*idy;
       bf = ( bp = byt + row++ * s1 ) + s1;
       if(anyblank)
-        do *tp++ = *bp==GAL_FITS_BYTE_BLANK
-             ? GAL_FITS_BYTE_BLANK : !*bp; while(++bp<bf);
+        do *tp++ = *bp==GAL_DATA_BLANK_UCHAR
+             ? GAL_DATA_BLANK_UCHAR : !*bp; while(++bp<bf);
       else
         do *tp++ = !*bp; while(++bp<bf);
     }
diff --git a/bin/noisechisel/detection.c b/bin/noisechisel/detection.c
index d3f57db..4ade95a 100644
--- a/bin/noisechisel/detection.c
+++ b/bin/noisechisel/detection.c
@@ -27,6 +27,7 @@ along with Gnuastro. If not, see 
<http://www.gnu.org/licenses/>.
 #include <error.h>
 #include <stdlib.h>
 
+#include <gnuastro/data.h>
 #include <gnuastro/fits.h>
 #include <gnuastro/mesh.h>
 #include <gnuastro/array.h>
@@ -342,7 +343,7 @@ applydetsn(struct noisechiselparams *p, float *sntable, 
size_t numpseudo)
   lf= (lab=clab) + p->smp.s0*p->smp.s1;
   do
     {
-      if(*lab!=GAL_FITS_LONG_BLANK)
+      if(*lab!=GAL_DATA_BLANK_LONG)
         *b = newlabs[*lab] > 0;
       ++b;
     }
@@ -397,8 +398,8 @@ bytpartfromlarge(struct noisechiselparams *p, unsigned char 
*out,
       bf = ( b = p->byt + start + r++ * is1 ) + s1;
       do
         {
-          *out++ = *b==b0f1 ? *d : (*b==GAL_FITS_BYTE_BLANK
-                                    ? GAL_FITS_BYTE_BLANK : 0);
+          *out++ = *b==b0f1 ? *d : (*b==GAL_DATA_BLANK_UCHAR
+                                    ? GAL_DATA_BLANK_UCHAR : 0);
           ++d;
         }
       while(++b<bf);
@@ -474,7 +475,7 @@ detectpseudos(void *inparams)
       if(p->anyblank)
         {
           bf=(b=thisbyt)+s0*s1;
-          do if(*b++==GAL_FITS_BYTE_BLANK) { anyblank=1; break; }
+          do if(*b++==GAL_DATA_BLANK_UCHAR) { anyblank=1; break; }
           while(b<bf);
         }
 
@@ -666,7 +667,7 @@ dbytolaboverlap(struct noisechiselparams *p)
   if(p->dilate)
     do
       {
-        if(*lab!=GAL_FITS_LONG_BLANK)
+        if(*lab!=GAL_DATA_BLANK_LONG)
           *byt=tokeep[*lab]>0;
         ++byt;
       }
@@ -674,7 +675,7 @@ dbytolaboverlap(struct noisechiselparams *p)
   else
     do
       {
-        if(*lab!=GAL_FITS_LONG_BLANK)
+        if(*lab!=GAL_DATA_BLANK_LONG)
           *byt = ( *lab = tokeep[*lab] ) > 0;
         ++byt;
       }
diff --git a/bin/noisechisel/label.c b/bin/noisechisel/label.c
index daff97a..05f2d3d 100644
--- a/bin/noisechisel/label.c
+++ b/bin/noisechisel/label.c
@@ -28,6 +28,7 @@ along with Gnuastro. If not, see 
<http://www.gnu.org/licenses/>.
 #include <string.h>
 #include <stdlib.h>
 
+#include <gnuastro/data.h>
 #include <gnuastro/fits.h>
 #include <gnuastro/linkedlist.h>
 
@@ -78,7 +79,7 @@ BF_concmp(unsigned char *byt, long *lab, size_t s0, size_t s1,
      array, then give them the blank labeled array. Note that since
      their value will not be 0, they will also not be labeled. */
   if(anyblank)
-    do *l++ = *b==GAL_FITS_BYTE_BLANK ? GAL_FITS_LONG_BLANK
+    do *l++ = *b==GAL_DATA_BLANK_UCHAR ? GAL_DATA_BLANK_LONG
          : 0; while(++b<bf);
   else
     memset(lab, 0, size*sizeof *lab);
@@ -334,13 +335,13 @@ removesmallarea_relabel(long *in, unsigned char *byt, 
size_t size,
   if(byt)
     {
       for(i=0;i<size;++i)
-        if(in[i]!=GAL_FITS_LONG_BLANK)
+        if(in[i]!=GAL_DATA_BLANK_LONG)
           byt[i] = (in[i]=newlabs[in[i]]) > 0;
     }
   else
     {
       for(i=0;i<size;++i)
-        if(in[i]!=GAL_FITS_LONG_BLANK)
+        if(in[i]!=GAL_DATA_BLANK_LONG)
           in[i]=newlabs[in[i]];
     }
 
diff --git a/bin/noisechisel/label.h b/bin/noisechisel/label.h
index d3bb12e..74dc2ec 100644
--- a/bin/noisechisel/label.h
+++ b/bin/noisechisel/label.h
@@ -41,7 +41,7 @@ along with Gnuastro. If not, see 
<http://www.gnu.org/licenses/>.
 #if GAL_FITS_LONG_BLANK<0
 #define ISINDEXABLELABEL (*lab>0)
 #else
-#define ISINDEXABLELABEL (*lab && *lab!=GAL_FITS_LONG_BLANK)
+#define ISINDEXABLELABEL (*lab && *lab!=GAL_DATA_BLANK_LONG)
 #endif
 
 
diff --git a/bin/noisechisel/segmentation.c b/bin/noisechisel/segmentation.c
index 8bd2d6a..902d839 100644
--- a/bin/noisechisel/segmentation.c
+++ b/bin/noisechisel/segmentation.c
@@ -736,7 +736,7 @@ clabwithnoseg(long *olab, long *clab, size_t size, int 
anyblank)
 
   if(anyblank)
     do
-      *clab++ = ( *olab==GAL_FITS_LONG_BLANK ? GAL_FITS_LONG_BLANK
+      *clab++ = ( *olab==GAL_DATA_BLANK_LONG ? GAL_DATA_BLANK_LONG
                   : ( *olab>0 ? SEGMENTINIT : 0 ) );
     while(++olab<end);
   else
@@ -794,7 +794,7 @@ segmentation(struct noisechiselparams *p)
   if(p->anyblank)
     {
       b=p->byt;lf=(l=p->clab)+s0*s1;
-      do *l = *b++==GAL_FITS_BYTE_BLANK ? GAL_FITS_LONG_BLANK
+      do *l = *b++==GAL_DATA_BLANK_UCHAR ? GAL_DATA_BLANK_LONG
            : 0; while(++l<lf);
     }
   else
@@ -819,7 +819,7 @@ segmentation(struct noisechiselparams *p)
   if(p->anyblank)
     {
       lf=(l=p->clab)+s0*s1;
-      do *l = *l==GAL_FITS_LONG_BLANK ? GAL_FITS_LONG_BLANK
+      do *l = *l==GAL_DATA_BLANK_LONG ? GAL_DATA_BLANK_LONG
            : 0; while(++l<lf);
     }
   else memset(p->clab, 0, s0*s1*sizeof *p->clab);
@@ -845,7 +845,7 @@ segmentation(struct noisechiselparams *p)
           if(p->anyblank)
             {
               lf=(l=p->clab)+s0*s1;
-              do *l = *l==GAL_FITS_LONG_BLANK ? GAL_FITS_LONG_BLANK
+              do *l = *l==GAL_DATA_BLANK_LONG ? GAL_DATA_BLANK_LONG
                    : 0; while(++l<lf);
             }
           else memset(p->clab, 0, s0*s1*sizeof *p->clab);
diff --git a/bin/noisechisel/thresh.c b/bin/noisechisel/thresh.c
index f7e6d12..71836df 100644
--- a/bin/noisechisel/thresh.c
+++ b/bin/noisechisel/thresh.c
@@ -296,7 +296,7 @@ applydetectionthresholdskysub(struct noisechiselparams *p)
                  image, they will be checked. */
               *b = ( (*f++=*in-sky) > dthresh*std
                      ? 1
-                     : isnan(*in) ? GAL_FITS_BYTE_BLANK : 0 );
+                     : isnan(*in) ? GAL_DATA_BLANK_UCHAR : 0 );
               ++in;
             }
           while(++b<bf);
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 24e52d8..9e2d6cc 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -39,12 +39,13 @@ libgnuastro_la_SOURCES = array.c box.c checkset.c 
configfiles.c fits.c  \
 # Installed headers, note that we are not blindly including all `.h' files
 # in the $(headersdir) directory. Some of the header files don't need to be
 # installed.
-pkginclude_HEADERS = gnuastro/config.h $(headersdir)/array.h              \
-  $(headersdir)/box.h $(headersdir)/fits.h $(headersdir)/git.h            \
-  $(headersdir)/linkedlist.h $(headersdir)/mesh.h $(headersdir)/polygon.h \
-  $(headersdir)/qsort.h $(headersdir)/spatialconvolve.h                   \
-  $(headersdir)/statistics.h $(headersdir)/threads.h $(headersdir)/wcs.h  \
-  $(headersdir)/txtarray.h
+headersdir=$(top_srcdir)/lib/gnuastro
+pkginclude_HEADERS = gnuastro/config.h $(headersdir)/array.h            \
+  $(headersdir)/box.h $(headersdir)/data.h $(headersdir)/fits.h         \
+  $(headersdir)/git.h $(headersdir)/linkedlist.h $(headersdir)/mesh.h   \
+  $(headersdir)/polygon.h $(headersdir)/qsort.h                         \
+  $(headersdir)/spatialconvolve.h $(headersdir)/statistics.h            \
+  $(headersdir)/threads.h $(headersdir)/wcs.h $(headersdir)/txtarray.h
 
 
 # Files to distribute in the tarball. These are internal headers and don't
@@ -52,7 +53,6 @@ pkginclude_HEADERS = gnuastro/config.h $(headersdir)/array.h  
            \
 # and if they are not explicitly mentioned somewhere in the Makefile, they
 # will not distributed, so we need to explicitly tell Automake to
 # distribute them here.
-headersdir=$(top_srcdir)/lib/gnuastro
 EXTRA_DIST = gnuastro.pc.in config.h.in checkset.h commonargs.h         \
   commonparams.h configfiles.h fixedstringmacros.h mode.h neighbors.h   \
   timing.h $(headersdir)/README
diff --git a/lib/fits.c b/lib/fits.c
index be47af8..2f28f6f 100644
--- a/lib/fits.c
+++ b/lib/fits.c
@@ -278,7 +278,7 @@ gal_fits_datatype_blank(int datatype)
       if(b==NULL)
         error(EXIT_FAILURE, errno, "%zu bytes for blank TBYTE",
               sizeof *b);
-      *b=GAL_FITS_BYTE_BLANK;
+      *b=GAL_DATA_BLANK_UCHAR;
       return b;
 
       /* CFITSIO says "int for keywords, char for table columns". Here we
@@ -289,7 +289,7 @@ gal_fits_datatype_blank(int datatype)
       if(c==NULL)
         error(EXIT_FAILURE, errno, "%zu bytes for blank TLOGICAL, or TSBYTE",
               sizeof *c);
-      *c=GAL_FITS_LOGICAL_BLANK;
+      *c=GAL_DATA_BLANK_LOGICAL;
       return c;
 
     case TSTRING:
@@ -297,7 +297,7 @@ gal_fits_datatype_blank(int datatype)
       if(str==NULL)
         error(EXIT_FAILURE, errno, "%zu bytes for blank TSTRING",
               sizeof *s);
-      *str=GAL_FITS_STRING_BLANK;
+      *str=GAL_DATA_BLANK_STRING;
       return str;
 
     case TSHORT:
@@ -305,7 +305,7 @@ gal_fits_datatype_blank(int datatype)
       if(s==NULL)
         error(EXIT_FAILURE, errno, "%zu bytes for blank TSHORT",
               sizeof *s);
-      *s=GAL_FITS_SHORT_BLANK;
+      *s=GAL_DATA_BLANK_SHORT;
       return s;
 
     case TLONG:
@@ -313,7 +313,7 @@ gal_fits_datatype_blank(int datatype)
       if(l==NULL)
         error(EXIT_FAILURE, errno, "%zu bytes for blank TLONG",
               sizeof *l);
-      *l=GAL_FITS_LONG_BLANK;
+      *l=GAL_DATA_BLANK_LONG;
       return l;
 
     case TLONGLONG:
@@ -321,7 +321,7 @@ gal_fits_datatype_blank(int datatype)
       if(L==NULL)
         error(EXIT_FAILURE, errno, "%zu bytes for blank TLONGLONG",
               sizeof *L);
-      *L=GAL_FITS_LLONG_BLANK;
+      *L=GAL_DATA_BLANK_LONGLONG;
       return L;
 
     case TFLOAT:
@@ -329,7 +329,7 @@ gal_fits_datatype_blank(int datatype)
       if(f==NULL)
         error(EXIT_FAILURE, errno, "%zu bytes for blank TFLOAT",
               sizeof *f);
-      *f=GAL_FITS_FLOAT_BLANK;
+      *f=GAL_DATA_BLANK_FLOAT;
       return f;
 
     case TDOUBLE:
@@ -337,7 +337,7 @@ gal_fits_datatype_blank(int datatype)
       if(d==NULL)
         error(EXIT_FAILURE, errno, "%zu bytes for blank TDOUBLE",
               sizeof *d);
-      *d=GAL_FITS_DOUBLE_BLANK;
+      *d=GAL_DATA_BLANK_DOUBLE;
       return d;
 
     case TCOMPLEX:
@@ -345,7 +345,7 @@ gal_fits_datatype_blank(int datatype)
       if(cx==NULL)
         error(EXIT_FAILURE, errno, "%zu bytes for blank TCOMPLEX",
               sizeof *cx);
-      GSL_SET_COMPLEX(cx,GAL_FITS_FLOAT_BLANK,GAL_FITS_FLOAT_BLANK);
+      GSL_SET_COMPLEX(cx,GAL_DATA_BLANK_FLOAT,GAL_DATA_BLANK_FLOAT);
       return cx;
 
     case TDBLCOMPLEX:
@@ -353,7 +353,7 @@ gal_fits_datatype_blank(int datatype)
       if(dcx==NULL)
         error(EXIT_FAILURE, errno, "%zu bytes for blank TDBLCOMPLEX",
               sizeof *dcx);
-      GSL_SET_COMPLEX(dcx,GAL_FITS_DOUBLE_BLANK,GAL_FITS_DOUBLE_BLANK);
+      GSL_SET_COMPLEX(dcx,GAL_DATA_BLANK_DOUBLE,GAL_DATA_BLANK_DOUBLE);
       return dcx;
 
     case TINT:
@@ -361,7 +361,7 @@ gal_fits_datatype_blank(int datatype)
       if(i==NULL)
         error(EXIT_FAILURE, errno, "%zu bytes for blank TINT",
               sizeof *i);
-      *i=GAL_FITS_INT_BLANK;
+      *i=GAL_DATA_BLANK_INT;
       return i;
 
     case TUINT:
@@ -369,7 +369,7 @@ gal_fits_datatype_blank(int datatype)
       if(ui==NULL)
         error(EXIT_FAILURE, errno, "%zu bytes for blank TUINT",
               sizeof *ui);
-      *ui=GAL_FITS_UINT_BLANK;
+      *ui=GAL_DATA_BLANK_UINT;
       return ui;
 
     case TUSHORT:
@@ -377,7 +377,7 @@ gal_fits_datatype_blank(int datatype)
       if(us==NULL)
         error(EXIT_FAILURE, errno, "%zu bytes for blank TUSHORT",
               sizeof *us);
-      *us=GAL_FITS_USHORT_BLANK;
+      *us=GAL_DATA_BLANK_USHORT;
       return us;
 
     case TULONG:
@@ -385,7 +385,7 @@ gal_fits_datatype_blank(int datatype)
       if(ul==NULL)
         error(EXIT_FAILURE, errno, "%zu bytes for blank TULONG",
               sizeof *ul);
-      *ul=GAL_FITS_ULONG_BLANK;
+      *ul=GAL_DATA_BLANK_ULONG;
       return ul;
 
 
@@ -623,37 +623,37 @@ gal_fits_blank_to_value(void *array, int datatype, size_t 
size, void *value)
 
     case TBYTE:
       bf=(b=array)+size;
-      do if(*b==GAL_FITS_BYTE_BLANK) *b++=bv; while(b<bf);
+      do if(*b==GAL_DATA_BLANK_UCHAR) *b++=bv; while(b<bf);
       break;
 
 
     case TLOGICAL: case TSBYTE:
       cf=(c=array)+size;
-      do if(*c==GAL_FITS_LOGICAL_BLANK) *c++=cv; while(c<cf);
+      do if(*c==GAL_DATA_BLANK_LOGICAL) *c++=cv; while(c<cf);
       break;
 
 
     case TSTRING:
       strf=(str=array)+size;
-      do if(*str==GAL_FITS_STRING_BLANK) *str++=strv; while(str<strf);
+      do if(*str==GAL_DATA_BLANK_STRING) *str++=strv; while(str<strf);
       break;
 
 
     case TSHORT:
       sf=(s=array)+size;
-      do if(*s==GAL_FITS_SHORT_BLANK) *s++=sv; while(s<sf);
+      do if(*s==GAL_DATA_BLANK_SHORT) *s++=sv; while(s<sf);
       break;
 
 
     case TLONG:
       lf=(l=array)+size;
-      do if(*l==GAL_FITS_LONG_BLANK) *l++=lv; while(l<lf);
+      do if(*l==GAL_DATA_BLANK_LONG) *l++=lv; while(l<lf);
       break;
 
 
     case TLONGLONG:
       Lf=(L=array)+size;
-      do if(*L==GAL_FITS_LLONG_BLANK) *L++=Lv; while(L<Lf);
+      do if(*L==GAL_DATA_BLANK_LONGLONG) *L++=Lv; while(L<Lf);
       break;
 
 
@@ -663,25 +663,25 @@ gal_fits_blank_to_value(void *array, int datatype, size_t 
size, void *value)
          both float and double types.*/
     case TFLOAT:
       ff=(f=array)+size;
-      if(isnan(GAL_FITS_FLOAT_BLANK))
+      if(isnan(GAL_DATA_BLANK_FLOAT))
         do if(isnan(*f)) *f++=fv; while(f<ff);
       else
-        do if(*f==GAL_FITS_FLOAT_BLANK) *f++=fv; while(f<ff);
+        do if(*f==GAL_DATA_BLANK_FLOAT) *f++=fv; while(f<ff);
       break;
 
 
     case TDOUBLE:
       df=(d=array)+size;
-      if(isnan(GAL_FITS_DOUBLE_BLANK))
+      if(isnan(GAL_DATA_BLANK_DOUBLE))
         do if(isnan(*d)) *d++=dv; while(d<df);
       else
-        do if(*d==GAL_FITS_FLOAT_BLANK) *d++=dv; while(d<df);
+        do if(*d==GAL_DATA_BLANK_FLOAT) *d++=dv; while(d<df);
       break;
 
 
     case TCOMPLEX:
       cxf=(cx=array)+size;
-      if(isnan(GAL_FITS_FLOAT_BLANK))
+      if(isnan(GAL_DATA_BLANK_FLOAT))
           do
             if(isnan(GSL_COMPLEX_P_REAL(cx))
                && isnan(GSL_COMPLEX_P_IMAG(cx)) )
@@ -690,8 +690,8 @@ gal_fits_blank_to_value(void *array, int datatype, size_t 
size, void *value)
           while(++cx<cxf);
       else
         do
-          if( GSL_COMPLEX_P_REAL(cx) == GAL_FITS_FLOAT_BLANK
-              && GSL_COMPLEX_P_IMAG(cx) == GAL_FITS_FLOAT_BLANK)
+          if( GSL_COMPLEX_P_REAL(cx) == GAL_DATA_BLANK_FLOAT
+              && GSL_COMPLEX_P_IMAG(cx) == GAL_DATA_BLANK_FLOAT)
             GSL_SET_COMPLEX(cx, GSL_COMPLEX_P_REAL(&cxv),
                             GSL_COMPLEX_P_IMAG(&cxv));
         while(++cx<cxf);
@@ -700,7 +700,7 @@ gal_fits_blank_to_value(void *array, int datatype, size_t 
size, void *value)
 
     case TDBLCOMPLEX:
       dcxf=(dcx=array)+size;
-      if(isnan(GAL_FITS_DOUBLE_BLANK))
+      if(isnan(GAL_DATA_BLANK_DOUBLE))
           do
             if(isnan(GSL_COMPLEX_P_REAL(dcx))
                && isnan(GSL_COMPLEX_P_IMAG(dcx)) )
@@ -709,8 +709,8 @@ gal_fits_blank_to_value(void *array, int datatype, size_t 
size, void *value)
           while(++dcx<dcxf);
       else
         do
-          if( GSL_COMPLEX_P_REAL(dcx) == GAL_FITS_FLOAT_BLANK
-              && GSL_COMPLEX_P_IMAG(dcx) == GAL_FITS_FLOAT_BLANK)
+          if( GSL_COMPLEX_P_REAL(dcx) == GAL_DATA_BLANK_FLOAT
+              && GSL_COMPLEX_P_IMAG(dcx) == GAL_DATA_BLANK_FLOAT)
             GSL_SET_COMPLEX(dcx, GSL_COMPLEX_P_REAL(&dcxv),
                             GSL_COMPLEX_P_IMAG(&dcxv));
         while(++dcx<dcxf);
@@ -719,25 +719,25 @@ gal_fits_blank_to_value(void *array, int datatype, size_t 
size, void *value)
 
     case TINT:
       inf=(in=array)+size;
-      do if(*in==GAL_FITS_INT_BLANK) *in++=inv; while(in<inf);
+      do if(*in==GAL_DATA_BLANK_INT) *in++=inv; while(in<inf);
       break;
 
 
     case TUINT:
       uif=(ui=array)+size;
-      do if(*ui==GAL_FITS_UINT_BLANK) *ui++=uiv; while(ui<uif);
+      do if(*ui==GAL_DATA_BLANK_UINT) *ui++=uiv; while(ui<uif);
       break;
 
 
     case TUSHORT:
       usf=(us=array)+size;
-      do if(*us==GAL_FITS_USHORT_BLANK) *us++=usv; while(us<usf);
+      do if(*us==GAL_DATA_BLANK_USHORT) *us++=usv; while(us<usf);
       break;
 
 
     case TULONG:
       ulf=(ul=array)+size;
-      do if(*ul==GAL_FITS_ULONG_BLANK) *ul++=ulv; while(ul<ulf);
+      do if(*ul==GAL_DATA_BLANK_ULONG) *ul++=ulv; while(ul<ulf);
       break;
 
     default:
@@ -776,34 +776,34 @@ gal_fits_change_type(void *in, int inbitpix, size_t size, 
int anyblank,
         case SHORT_IMG:
           bf=(b=*out)+size; do *b=*is++; while(++b<bf);
           if(anyblank)
-            {b=*out; do {b[i]=(iis[i]==GAL_FITS_SHORT_BLANK)
-                         ?GAL_FITS_BYTE_BLANK:b[i];}
+            {b=*out; do {b[i]=(iis[i]==GAL_DATA_BLANK_SHORT)
+                         ?GAL_DATA_BLANK_UCHAR:b[i];}
               while(++i!=size);}
           return;
         case LONG_IMG:
           bf=(b=*out)+size; do *b=*il++; while(++b<bf);
           if(anyblank)
-            {b=*out; do {b[i]=(iil[i]==GAL_FITS_LONG_BLANK)
-                         ?GAL_FITS_BYTE_BLANK:b[i];}
+            {b=*out; do {b[i]=(iil[i]==GAL_DATA_BLANK_LONG)
+                         ?GAL_DATA_BLANK_UCHAR:b[i];}
               while(++i!=size);}
           return;
         case LONGLONG_IMG:
           bf=(b=*out)+size; do *b=*iL++; while(++b<bf);
           if(anyblank)
-            {b=*out; do {b[i]=(iiL[i]==GAL_FITS_LLONG_BLANK)
-                         ?GAL_FITS_BYTE_BLANK:b[i];}
+            {b=*out; do {b[i]=(iiL[i]==GAL_DATA_BLANK_LONGLONG)
+                         ?GAL_DATA_BLANK_UCHAR:b[i];}
               while(++i!=size);}
           return;
         case FLOAT_IMG:
           bf=(b=*out)+size; do *b=roundf(*iif++); while(++b<bf);
           if(anyblank)
-            {b=*out; do {b[i]=isnan(iiif[i])?GAL_FITS_BYTE_BLANK:b[i];}
+            {b=*out; do {b[i]=isnan(iiif[i])?GAL_DATA_BLANK_UCHAR:b[i];}
               while(++i!=size);}
           return;
         case DOUBLE_IMG:
           bf=(b=*out)+size; do *b=round(*id++); while(++b<bf);
           if(anyblank)
-            {b=*out; do {b[i]=isnan(iid[i])?GAL_FITS_BYTE_BLANK:b[i];}
+            {b=*out; do {b[i]=isnan(iid[i])?GAL_DATA_BLANK_UCHAR:b[i];}
               while(++i!=size);}
           return;
         default:
@@ -819,8 +819,8 @@ gal_fits_change_type(void *in, int inbitpix, size_t size, 
int anyblank,
         case BYTE_IMG:
           sf=(s=*out)+size; do *s=*ib++; while(++s<sf);
           if(anyblank)
-            {s=*out; do {s[i]=(iib[i]==GAL_FITS_BYTE_BLANK)
-                         ?GAL_FITS_SHORT_BLANK:s[i];}
+            {s=*out; do {s[i]=(iib[i]==GAL_DATA_BLANK_UCHAR)
+                         ?GAL_DATA_BLANK_SHORT:s[i];}
               while(++i!=size);}
           return;
         case SHORT_IMG:
@@ -828,27 +828,27 @@ gal_fits_change_type(void *in, int inbitpix, size_t size, 
int anyblank,
         case LONG_IMG:
           sf=(s=*out)+size; do *s=*il++; while(++s<sf);
           if(anyblank)
-            {s=*out; do {s[i]=(iil[i]==GAL_FITS_LONG_BLANK)
-                         ?GAL_FITS_SHORT_BLANK:s[i];}
+            {s=*out; do {s[i]=(iil[i]==GAL_DATA_BLANK_LONG)
+                         ?GAL_DATA_BLANK_SHORT:s[i];}
               while(++i!=size);}
           return;
         case LONGLONG_IMG:
           sf=(s=*out)+size; do *s=*iL++; while(++s<sf);
           if(anyblank)
-            {s=*out; do {s[i]=(iiL[i]==GAL_FITS_LLONG_BLANK)
-                         ?GAL_FITS_SHORT_BLANK:s[i];}
+            {s=*out; do {s[i]=(iiL[i]==GAL_DATA_BLANK_LONGLONG)
+                         ?GAL_DATA_BLANK_SHORT:s[i];}
               while(++i!=size);}
           return;
         case FLOAT_IMG:
           sf=(s=*out)+size; do *s=roundf(*iif++); while(++s<sf);
           if(anyblank)
-            {s=*out; do {s[i]=isnan(iiif[i])?GAL_FITS_SHORT_BLANK:s[i];}
+            {s=*out; do {s[i]=isnan(iiif[i])?GAL_DATA_BLANK_SHORT:s[i];}
               while(++i!=size);}
           return;
         case DOUBLE_IMG:
           sf=(s=*out)+size; do *s=round(*id++); while(++s<sf);
           if(anyblank)
-            {s=*out; do {s[i]=isnan(iid[i])?GAL_FITS_SHORT_BLANK:s[i];}
+            {s=*out; do {s[i]=isnan(iid[i])?GAL_DATA_BLANK_SHORT:s[i];}
               while(++i!=size);}
           return;
         default:
@@ -864,15 +864,15 @@ gal_fits_change_type(void *in, int inbitpix, size_t size, 
int anyblank,
         case BYTE_IMG:
           lf=(l=*out)+size; do *l=*ib++; while(++l<lf);
           if(anyblank)
-            {l=*out; do {l[i]=(iib[i]==GAL_FITS_BYTE_BLANK)
-                         ?GAL_FITS_LONG_BLANK:l[i];}
+            {l=*out; do {l[i]=(iib[i]==GAL_DATA_BLANK_UCHAR)
+                         ?GAL_DATA_BLANK_LONG:l[i];}
               while(++i!=size);}
           return;
         case SHORT_IMG:
           lf=(l=*out)+size; do *l=*is++; while(++l<lf);
           if(anyblank)
-            {l=*out; do {l[i]=(iis[i]==GAL_FITS_SHORT_BLANK)
-                         ?GAL_FITS_LONG_BLANK:l[i];}
+            {l=*out; do {l[i]=(iis[i]==GAL_DATA_BLANK_SHORT)
+                         ?GAL_DATA_BLANK_LONG:l[i];}
               while(++i!=size);}
           return;
         case LONG_IMG:
@@ -880,20 +880,20 @@ gal_fits_change_type(void *in, int inbitpix, size_t size, 
int anyblank,
         case LONGLONG_IMG:
           lf=(l=*out)+size; do *l=*iL++; while(++l<lf);
           if(anyblank)
-            {l=*out; do {l[i]=(iiL[i]==GAL_FITS_LLONG_BLANK)
-                         ?GAL_FITS_LONG_BLANK:l[i];}
+            {l=*out; do {l[i]=(iiL[i]==GAL_DATA_BLANK_LONGLONG)
+                         ?GAL_DATA_BLANK_LONG:l[i];}
               while(++i!=size);}
           return;
         case FLOAT_IMG:
           lf=(l=*out)+size; do *l=roundf(*iif++); while(++l<lf);
           if(anyblank)
-            {l=*out; do {l[i]=isnan(iiif[i])?GAL_FITS_LONG_BLANK:l[i];}
+            {l=*out; do {l[i]=isnan(iiif[i])?GAL_DATA_BLANK_LONG:l[i];}
               while(++i!=size);}
           return;
         case DOUBLE_IMG:
           lf=(l=*out)+size; do *l=round(*id++); while(++l<lf);
           if(anyblank)
-            {l=*out; do {l[i]=isnan(iid[i])?GAL_FITS_LONG_BLANK:l[i];}
+            {l=*out; do {l[i]=isnan(iid[i])?GAL_DATA_BLANK_LONG:l[i];}
               while(++i!=size);}
           return;
         default:
@@ -909,22 +909,22 @@ gal_fits_change_type(void *in, int inbitpix, size_t size, 
int anyblank,
         case BYTE_IMG:
           Lf=(L=*out)+size; do *L=*ib++; while(++L<Lf);
           if(anyblank)
-            {L=*out; do {L[i]=(iib[i]==GAL_FITS_BYTE_BLANK)
-                         ?GAL_FITS_LLONG_BLANK:L[i];}
+            {L=*out; do {L[i]=(iib[i]==GAL_DATA_BLANK_UCHAR)
+                         ?GAL_DATA_BLANK_LONGLONG:L[i];}
               while(++i!=size);}
           return;
         case SHORT_IMG:
           Lf=(L=*out)+size; do *L=*is++; while(++L<Lf);
           if(anyblank)
-            {L=*out; do {L[i]=(iis[i]==GAL_FITS_SHORT_BLANK)
-                         ?GAL_FITS_LLONG_BLANK:L[i];}
+            {L=*out; do {L[i]=(iis[i]==GAL_DATA_BLANK_SHORT)
+                         ?GAL_DATA_BLANK_LONGLONG:L[i];}
               while(++i!=size);}
           return;
         case LONG_IMG:
           Lf=(L=*out)+size; do *L=*il++; while(++L<Lf);
           if(anyblank)
-            {L=*out; do {L[i]=(iil[i]==GAL_FITS_LONG_BLANK)
-                         ?GAL_FITS_LLONG_BLANK:L[i];}
+            {L=*out; do {L[i]=(iil[i]==GAL_DATA_BLANK_LONG)
+                         ?GAL_DATA_BLANK_LONGLONG:L[i];}
               while(++i!=size);}
           return;
         case LONGLONG_IMG:
@@ -932,13 +932,13 @@ gal_fits_change_type(void *in, int inbitpix, size_t size, 
int anyblank,
         case FLOAT_IMG:
           Lf=(L=*out)+size; do *L=roundf(*iif++); while(++L<Lf);
           if(anyblank)
-            {L=*out; do {L[i]=isnan(iiif[i])?GAL_FITS_LLONG_BLANK:L[i];}
+            {L=*out; do {L[i]=isnan(iiif[i])?GAL_DATA_BLANK_LONGLONG:L[i];}
               while(++i!=size);}
           return;
         case DOUBLE_IMG:
           Lf=(L=*out)+size; do *L=round(*id++); while(++L<Lf);
           if(anyblank)
-            {L=*out; do {L[i]=isnan(iid[i])?GAL_FITS_LLONG_BLANK:L[i];}
+            {L=*out; do {L[i]=isnan(iid[i])?GAL_DATA_BLANK_LONGLONG:L[i];}
               while(++i!=size);}
           return;
         default:
@@ -954,29 +954,29 @@ gal_fits_change_type(void *in, int inbitpix, size_t size, 
int anyblank,
         case BYTE_IMG:
           ff=(f=*out)+size; do *f=*ib++; while(++f<ff);
           if(anyblank)
-            {f=*out; do {f[i]=iib[i]==GAL_FITS_BYTE_BLANK
-                         ?GAL_FITS_FLOAT_BLANK:f[i];}
+            {f=*out; do {f[i]=iib[i]==GAL_DATA_BLANK_UCHAR
+                         ?GAL_DATA_BLANK_FLOAT:f[i];}
               while(++i!=size);}
           return;
         case SHORT_IMG:
           ff=(f=*out)+size; do *f=*is++; while(++f<ff);
           if(anyblank)
-            {f=*out; do {f[i]=iis[i]==GAL_FITS_SHORT_BLANK
-                         ?GAL_FITS_FLOAT_BLANK:f[i];}
+            {f=*out; do {f[i]=iis[i]==GAL_DATA_BLANK_SHORT
+                         ?GAL_DATA_BLANK_FLOAT:f[i];}
               while(++i!=size);}
           return;
         case LONG_IMG:
           ff=(f=*out)+size; do *f=*il++; while(++f<ff);
           if(anyblank)
-            {f=*out; do {f[i]=iil[i]==GAL_FITS_LONG_BLANK
-                         ?GAL_FITS_FLOAT_BLANK:f[i];}
+            {f=*out; do {f[i]=iil[i]==GAL_DATA_BLANK_LONG
+                         ?GAL_DATA_BLANK_FLOAT:f[i];}
               while(++i!=size);}
           return;
         case LONGLONG_IMG:
           ff=(f=*out)+size; do *f=*iL++; while(++f<ff);
           if(anyblank)
-            {f=*out; do {f[i]=iiL[i]==GAL_FITS_LLONG_BLANK
-                         ?GAL_FITS_FLOAT_BLANK:f[i];}
+            {f=*out; do {f[i]=iiL[i]==GAL_DATA_BLANK_LONGLONG
+                         ?GAL_DATA_BLANK_FLOAT:f[i];}
               while(++i!=size);}
           return;
         case FLOAT_IMG:
@@ -996,29 +996,29 @@ gal_fits_change_type(void *in, int inbitpix, size_t size, 
int anyblank,
         case BYTE_IMG:
           df=(d=*out)+size; do *d=*ib++; while(++d<df);
           if(anyblank)
-            {d=*out; do {d[i]=iib[i]==GAL_FITS_BYTE_BLANK
-                         ?GAL_FITS_FLOAT_BLANK:d[i];}
+            {d=*out; do {d[i]=iib[i]==GAL_DATA_BLANK_UCHAR
+                         ?GAL_DATA_BLANK_FLOAT:d[i];}
               while(++i!=size);}
           return;
         case SHORT_IMG:
           df=(d=*out)+size; do *d=*is++; while(++d<df);
           if(anyblank)
-            {d=*out; do {d[i]=iis[i]==GAL_FITS_SHORT_BLANK
-                         ?GAL_FITS_FLOAT_BLANK:d[i];}
+            {d=*out; do {d[i]=iis[i]==GAL_DATA_BLANK_SHORT
+                         ?GAL_DATA_BLANK_FLOAT:d[i];}
               while(++i!=size);}
           return;
         case LONG_IMG:
           df=(d=*out)+size; do *d=*il++; while(++d<df);
           if(anyblank)
-            {d=*out; do {d[i]=iil[i]==GAL_FITS_LONG_BLANK
-                         ?GAL_FITS_FLOAT_BLANK:d[i];}
+            {d=*out; do {d[i]=iil[i]==GAL_DATA_BLANK_LONG
+                         ?GAL_DATA_BLANK_FLOAT:d[i];}
               while(++i!=size);}
           return;
         case LONGLONG_IMG:
           df=(d=*out)+size; do *d=*iL++; while(++d<df);
           if(anyblank)
-            {d=*out; do {d[i]=iiL[i]==GAL_FITS_LLONG_BLANK
-                         ?GAL_FITS_FLOAT_BLANK:d[i];}
+            {d=*out; do {d[i]=iiL[i]==GAL_DATA_BLANK_LONGLONG
+                         ?GAL_DATA_BLANK_FLOAT:d[i];}
               while(++i!=size);}
           return;
         case FLOAT_IMG:
diff --git a/lib/gnuastro/data.h b/lib/gnuastro/data.h
new file mode 100644
index 0000000..5b99460
--- /dev/null
+++ b/lib/gnuastro/data.h
@@ -0,0 +1,123 @@
+/*********************************************************************
+data -- Structure and functions to represent/work with data
+This is part of GNU Astronomy Utilities (Gnuastro) package.
+
+Original author:
+     Mohammad Akhlaghi <address@hidden>
+Contributing author(s):
+Copyright (C) 2015, Free Software Foundation, Inc.
+
+Gnuastro is free software: you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation, either version 3 of the License, or (at your
+option) any later version.
+
+Gnuastro is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Gnuastro. If not, see <http://www.gnu.org/licenses/>.
+**********************************************************************/
+#ifndef __GAL_DATA_H__
+#define __GAL_DATA_H__
+
+/* Include other headers if necessary here. Note that other header files
+   must be included before the C++ preparations below */
+#include <limits.h>
+#include <wcslib/wcs.h>
+
+
+/* C++ Preparations */
+#undef __BEGIN_C_DECLS
+#undef __END_C_DECLS
+#ifdef __cplusplus
+# define __BEGIN_C_DECLS extern "C" {
+# define __END_C_DECLS }
+#else
+# define __BEGIN_C_DECLS                /* empty */
+# define __END_C_DECLS                  /* empty */
+#endif
+/* End of C++ preparations */
+
+
+
+/* Actual header contants (the above were for the Pre-processor). */
+__BEGIN_C_DECLS  /* From C++ preparations */
+
+
+
+
+
+/* Macros: */
+
+/* The maximum dimensionality of datasets. */
+#define GAL_DATA_MAXDIM    30
+
+/* Blank values: Note that for the unsigned types or small types (like
+   char), the maximum value is considered as a blank value, since the
+   minimum value of an unsigned type is zero and zero is often meaningful
+   in contexts were unsigned values are used. */
+#define GAL_DATA_BLANK_UCHAR      UCHAR_MAX
+#define GAL_DATA_BLANK_CHAR       SCHAR_MAX
+#define GAL_DATA_BLANK_LOGICAL    SCHAR_MAX
+#define GAL_DATA_BLANK_STRING     NULL
+#define GAL_DATA_BLANK_UINT       UINT_MAX
+#define GAL_DATA_BLANK_INT        INT_MIN
+#define GAL_DATA_BLANK_USHORT     USHRT_MAX
+#define GAL_DATA_BLANK_SHORT      INT16_MIN
+#define GAL_DATA_BLANK_ULONG      ULONG_MAX
+#define GAL_DATA_BLANK_LONG       INT32_MIN
+#define GAL_DATA_BLANK_LONGLONG   INT64_MIN
+#define GAL_DATA_BLANK_FLOAT      NAN
+#define GAL_DATA_BLANK_DOUBLE     NAN
+
+
+
+
+
+/* Macros to identify the type of data. The macros in the comment
+   parenthesis is the equivalent macro in CFITSIO. */
+enum gal_data_alltypes
+{
+  GAL_DATA_BIT,        /* Bit              (TBIT).      */
+  GAL_DATA_UCHAR,      /* Unsigned char    (TBYTE).     */
+  GAL_DATA_CHAR,       /* char             (TSBYTE).    */
+  GAL_DATA_STRING,     /* string           (TSTRING).   */
+  GAL_DATA_UINT,       /* unsigned int     (TUINT).     */
+  GAL_DATA_INT,        /* int              (TINT).      */
+  GAL_DATA_USHORT,     /* unsigned short   (TUSHORT).   */
+  GAL_DATA_SHORT,      /* short            (TSHORT).    */
+  GAL_DATA_ULONG,      /* unsigned long    (TLONG).     */
+  GAL_DATA_LONG,       /* long             (TLONG).     */
+  GAL_DATA_LONGLONG,   /* long long        (TLONGLONG). */
+  GAL_DATA_FLOAT,      /* float            (TFLOAT).    */
+  GAL_DATA_DOUBLE,     /* double           (TDOUBLE).   */
+  GAL_DATA_COMPLEX,    /* Complex float    (TCOMPLEX).  */
+  GAL_DATA_DCOMPLEX,   /* Complex double   (TDCOMPLEX). */
+};
+
+
+
+
+
+/* Main data structure
+
+   If mmaped==0, it is assumed that the data is allocated (using malloc).
+ */
+typedef struct
+{
+  void    *array;      /* Array keeping data elements.             */
+  int       type;      /* Type of data (from `gal_data_alltypes'). */
+  size_t    ndim;      /* Number of dimensions in the array.       */
+  size_t size[GAL_DATA_MAXDIM]; /* Length along each dimension.    */
+  int    mmapped;      /* ==1: not in physical RAM, it is mmap'd.  */
+  char *mmapname;      /* File name of the mmap.                   */
+  int   anyblank;      /* ==1: has blank values.                   */
+  struct wcsprm *wcs;  /* WCS information for this dataset.        */
+} gal_data;
+
+__END_C_DECLS    /* From C++ preparations */
+
+#endif           /* __GAL_BOX_H__ */
diff --git a/lib/gnuastro/fits.h b/lib/gnuastro/fits.h
index e0c361e..74dc45c 100644
--- a/lib/gnuastro/fits.h
+++ b/lib/gnuastro/fits.h
@@ -35,7 +35,7 @@ along with Gnuastro. If not, see 
<http://www.gnu.org/licenses/>.
 #include <wcslib/wcsfix.h>
 #include <gsl/gsl_complex.h>
 
-
+#include <gnuastro/data.h>
 
 /* C++ Preparations */
 #undef __BEGIN_C_DECLS
@@ -56,26 +56,6 @@ __BEGIN_C_DECLS  /* From C++ preparations */
 
 
 
-/* Order is based on the CFITSIO manual. Note that for the unsigned types
-   or small types (like char), the maximum value is considered as a blank
-   value, since the minimum value of an unsigned type is zero and zero is
-   often meaningful in contexts were unsigned values are used. */
-#define GAL_FITS_STRING_BLANK     NULL
-#define GAL_FITS_BYTE_BLANK       UCHAR_MAX
-#define GAL_FITS_LOGICAL_BLANK    SCHAR_MAX
-#define GAL_FITS_SHORT_BLANK      INT16_MIN
-#define GAL_FITS_LONG_BLANK       INT32_MIN
-#define GAL_FITS_LLONG_BLANK      INT64_MIN
-#define GAL_FITS_FLOAT_BLANK      NAN
-#define GAL_FITS_DOUBLE_BLANK     NAN
-#define GAL_FITS_INT_BLANK        INT_MIN
-#define GAL_FITS_SBYTE_BLANK      SCHAR_MAX
-#define GAL_FITS_UINT_BLANK       UINT_MAX
-#define GAL_FITS_USHORT_BLANK     USHRT_MAX
-#define GAL_FITS_ULONG_BLANK      ULONG_MAX
-
-
-
 
 
 /*************************************************************



reply via email to

[Prev in Thread] Current Thread [Next in Thread]