[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
-
-
-
/*************************************************************
- [gnuastro-commits] master updated (a5aeb7d -> 3339b92), Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master 3e05560 003/125: Corrected bad use of type in MakeProfiles, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master 847d97e 007/125: Minor header inclusion corrections, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master 591461c 015/125: Corrected occurance of "remainder" with modulo, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master 1ea9ea2 009/125: Data structure mmap information updated, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master 531c263 008/125: Operators treated as macros, not string, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master ff9258a 006/125: Arithmetic with internal type conversion, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master 5336d5c 024/125: Small but important corrections, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master c2fcb3e 020/125: Absolute value operator in gal_data_arithmetic, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master fdb6183 019/125: Where operator implemented in gal_data_arithmetic, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master 493bc6f 001/125: Defined new gnuastro/data.h header,
Mohammad Akhlaghi <=
- [gnuastro-commits] master c6462d1 016/125: Type conversion operators in Arithmetic, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master c10c4be 002/125: Moved type code and alloc functions into data.h, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master a4c5b9d 012/125: Binary operator arithmetic works on uncompiled types, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master ad2810d 029/125: Work started on getting text table information, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master bc57ade 021/125: Minimum and maximum value operators implemented, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master 2dea9a7 011/125: All binary operator types set at configure time, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master ff0b76d 018/125: New Data types section in book, bitwise not added, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master c62b01e 031/125: Corrected incrementation issue with and and or operators, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master 0a32a82 027/125: Any number of searched columns from FITS are read, Mohammad Akhlaghi, 2017/04/23
- [gnuastro-commits] master d0aa78e 005/125: Arithmetic operation on data structures in library, Mohammad Akhlaghi, 2017/04/23