This is gnuastro.info, produced by makeinfo version 7.0.3 from
gnuastro.texi.

This book documents version 0.21 of the GNU Astronomy Utilities
(Gnuastro).  Gnuastro provides various programs and libraries for
astronomical data manipulation and analysis.

   Copyright © 2015-2023 Free Software Foundation, Inc.

     Permission is granted to copy, distribute and/or modify this
     document under the terms of the GNU Free Documentation License,
     Version 1.3 or any later version published by the Free Software
     Foundation; with no Invariant Sections, no Front-Cover Texts, and
     no Back-Cover Texts.  A copy of the license is included in the
     section entitled “GNU Free Documentation License”.
INFO-DIR-SECTION Astronomy
START-INFO-DIR-ENTRY
* Gnuastro: (gnuastro).       GNU Astronomy Utilities.
* libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc.

* help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help.

* bug-gnuastro: (gnuastro)Report a bug. How to report bugs

* Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels.
* astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic.

* BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro’s library.
* astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram.

* ConvertType: (gnuastro)ConvertType. Convert different file types.
* astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType.

* Convolve: (gnuastro)Convolve. Convolve an input file with kernel.
* astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve.

* CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params.
* astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator.

* Crop: (gnuastro)Crop. Crop region(s) from image(s).
* astcrop: (gnuastro)Invoking astcrop. Options to Crop.

* Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords.
* astfits: (gnuastro)Invoking astfits. Options to Fits.

* MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image.
* astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog.

* MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles.
* astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles.

* Match: (gnuastro)Match. Match two separate catalogs.
* astmatch: (gnuastro)Invoking astmatch. Options to Match.

* NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise.
* astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel.

* Segment: (gnuastro)Segment. Segment detections based on signal structure.
* astsegment: (gnuastro)Invoking astsegment. Options to Segment.

* Query: (gnuastro)Query. Access remote databases for downloading data.
* astquery: (gnuastro)Invoking astquery. Options to Query.

* Statistics: (gnuastro)Statistics. Get image Statistics.
* aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics.

* Table: (gnuastro)Table. Read and write FITS binary or ASCII tables.
* asttable: (gnuastro)Invoking asttable. Options to Table.

* Warp: (gnuastro)Warp. Warp a dataset to a new grid.
* astwarp: (gnuastro)Invoking astwarp. Options to Warp.

* astscript: (gnuastro)Installed scripts. Gnuastro’s installed scripts.
* astscript-ds9-region: (gnuastro)Invoking astscript-ds9-region. Options to this script
* astscript-fits-view: (gnuastro)Invoking astscript-fits-view. Options to this script
* astscript-pointing-simulate: (gnuastro)Invoking astscript-pointing-simulate. Options to this script
* astscript-psf-scale-factor: (gnuastro)Invoking astscript-psf-scale-factor. Options to this script
* astscript-psf-select-stars: (gnuastro)Invoking astscript-psf-select-stars. Options to this script
* astscript-psf-stamp: (gnuastro)Invoking astscript-psf-stamp. Options to this script
* astscript-psf-subtract: (gnuastro)Invoking astscript-psf-subtract. Options to this script
* astscript-psf-unite: (gnuastro)Invoking astscript-psf-unite. Options to this script
* astscript-radial-profile: (gnuastro)Invoking astscript-radial-profile. Options to this script
* astscript-sort-by-night: (gnuastro)Invoking astscript-sort-by-night. Options to this script
* astscript-zeropoint: (gnuastro)Invoking astscript-zeropoint. Options to this script
END-INFO-DIR-ENTRY


File: gnuastro.info,  Node: Warp library,  Next: Color functions,  Prev: Interpolation,  Up: Gnuastro library

12.3.29 Warp library (‘warp.h’)
-------------------------------

Warping an image to a new pixel grid is commonly necessary as part of
astronomical data reduction, for an introduction, see *note Warp::.  For
details of how we resample the old pixel grid to the new pixel grid, see
*note Resampling::.  Gnuastro’s Warp program uses the following
functions for its default mode (when no linear warps are requested).
Through the following functions, you can directly access those features
in your own custom programs.  The linear warping operations of the Warp
program aren’t yet brought into the library.  If you need them please
get in touch with us at ‘bug-gnuastro@gnu.org’.  For usage examples of
this library, please see *note Library demo - Warp to another image:: or
*note Library demo - Warp to new grid::.

   You are free to provide any valid WCS keywords to the functions
defined in this library using the ‘gal_warp_wcsalign_t’ data type.  This
might be used to align the input image to the standard WCS grid,
potentially changing the pixel scale, removing any valid WCS non-linear
distortion available, and projecting to any valid WCS projection type.
Further details of the warp library functions and parameters are shown
below:

 -- Macro: GAL_WARP_OUTPUT_NAME_WARPED
 -- Macro: GAL_WARP_OUTPUT_NAME_MAXFRAC
     Names of the output datasets (in the ‘name’ component of the output
     ‘gal_data_t’s).  By default the output is only a single dataset,
     but when the ‘checkmaxfrac’ component of the input is non-zero, it
     will contain two datasets.

 -- Type (C struct): gal_warp_wcsalign_t
     The main data container for inputs, output and internal variables
     to simplify the WCS-aligning functions.  Due to the large number of
     input variables, this structure makes it easy to call the main
     functions.  Similar to ‘gal_data_t’, the ‘gal_warp_wcsalign_t’ is a
     structure ‘typedef’’d as a new type, see *note Library data
     container::.  Please note that this structure has elements that are
     _allocated_ dynamically and must be freed after usage.
     ‘gal_warp_wcsalign_free’ only frees the internal variables, so you
     are responsible for freeing your own inputs (‘cdelt’, ‘input’,
     etc.)  and the output.  The internal variables are cached here to
     cut cpu-intensive computations.  To prevent from using
     uninitialized variables, we recommend using the helper function
     ‘gal_warp_wcsalign_template’ to get a clean structure before
     setting your own variables.  The structure and each of its elements
     are defined below:

          typedef struct
          {
            /* Arguments given (and later freed) by the caller. If 'twcs' is
               given, then the "WCS To build" elements will be ignored. */
            gal_data_t       *input;
            size_t       numthreads;
            double      coveredfrac;
            size_t     edgesampling;
            gal_data_t  *widthinpix;
            uint8_t    checkmaxfrac;
            struct wcsprm     *twcs;       /* WCS Predefined. */
            gal_data_t       *ctype;       /* WCS To build.   */
            gal_data_t       *cdelt;       /* WCS To build.   */
            gal_data_t      *center;       /* WCS To build.   */

            /* Output (must be freed by caller) */
            gal_data_t      *output;

            /* Internal variables (allocated and freed internally)  */
            size_t               v0;
            size_t             nhor;
            size_t             ncrn;
            size_t             gcrn;
            int               isccw;
            gal_data_t    *vertices;
          } gal_warp_wcsalign_t;

     ‘gal_data_t *input’
          The input dataset.  This dataset must contain both the image
          array of type ‘GAL_TYPE_FLOAT64’, and ‘input->wcs’ should not
          be ‘NULL’ for the WCS-aligning operations to work, see *note
          Library demo - Warp to new grid::.

     ‘size_t numthreads’
          Number of threads to use during the WCS aligning operations.
          If the given value is ‘0’, the library will calculate the
          number of available threads at run-time.  The ‘warp’ library
          functions are _thread-safe_ so you can freely enjoy the merits
          of parallel processing.

     ‘double coveredfrac’
          Acceptable fraction of output pixel that is covered by input
          pixels.  The value should be between 0 and 1 (inclusive).  If
          the area of an output pixel is covered by less than this
          fraction, its value will be ‘NaN’.  For more, see the
          description of ‘--coveredfrac’ in *note Invoking astwarp::.

     ‘size_t edgesampling’
          Set the number of extra vertices along each edge of the output
          pixel’s polygon to account for potential curvature due to
          projection or distortion.  A value of ‘0’ is usually enough
          for this (so the pixel is only defined by a four vertice
          polygon.  Greater values increase memory usage and program
          execution time.  For more, please see the description of
          ‘--edgesampling’ in *note Align pixels with WCS considering
          distortions::.

     ‘gal_data_t *widthinpix’
          Output image size (width and height) in number of pixels.  If
          a ‘NULL’ pointer is passed, the WCS-aligning operations will
          estimate the output image size internally such that it
          contains the full input.  This dataset should have a type of
          ‘GAL_TYPE_SIZE_T’ and contain exactly two _odd_ values.  This
          ensures that the center of the central pixel lies at the
          requested central coordinate (note that an image with an even
          number of pixels doesn’t have a “central” pixel!

     ‘struct wcsprm *twcs’
          The target grid WCS which must follow the standard WCSLIB
          structure.  You can read it from a file using ‘gal_wcs_read’
          or create an entirely new one with ‘gal_wcs_create’ and later
          free it with ‘gal_wcs_free’, see *note World Coordinate
          System::.  If this element is given, the ‘ctype’, ‘cdelt’ and
          ‘center’ elements (which are used to construct a WCS
          internally) are ignored.

          Please note that the ‘wcsprm’ structure doesn’t contain the
          image size.  To set the final image size, you should use
          ‘widthinpix’.

     ‘gal_data_t *ctype’
          The output’s projection type.  The dataset has to have the
          type ‘GAL_TYPE_STRING’, containing exactly two strings.  Both
          strings will be directly passed to WCSLIB and should conform
          to the FITS standard’s ‘CTYPEi’ keywords, see the description
          of ‘--ctype’ in *note Align pixels with WCS considering
          distortions::.  For example, ‘"RA---TAN"’ and ‘"DEC--TAN"’, or
          ‘"RA---HPX"’ and ‘"DEC--HPX"’.

     ‘gal_data_t *cdelt’
          Output pixel scale (size of pixel in the WCS units: value to
          ‘CUNITi’ keywords in FITS, usually degrees).  The dataset
          should have a type of ‘GAL_TYPE_FLOAT64’ and contain exactly
          two values.  Hint: to convert arcsec to degrees, just divide
          by 3600.

     ‘gal_data_t *center’
          WCS coordinate of the center of the central pixel of the
          output.  The units depend on the WCS, for example, if the
          ‘CUNITi’ keywords are ‘deg’, it is in degrees.  This dataset
          should have a type of ‘GAL_TYPE_FLOAT64’ and contain exactly
          two values.

     ‘uint8_t checkmaxfrac’
          When this is non-zero, the output will be a two-element *note
          List of gal_data_t::.  The second element shows the Moiré
          pattern (https://en.wikipedia.org/wiki/Moir%C3%A9_pattern) of
          the warp.  For more, see *note Moire pattern in stacking and
          its correction::.

 -- Function:
          gal_warp_wcsalign_t
          gal_warp_wcsalign_template (void)
     A high-level helper function that returns a clean
     ‘gal_warp_wcsalign_t’ struct with all values initialized This
     function returns a copy of a statically allocated structure.  So
     you don’t need to free the returned structure.

     The Warp library decides on the program flow based on this struct.
     Uninitialized pointers can point to random space in RAM which can
     create segmentation faults, or even worse, produce unnoticed
     side-effects.  It is therefore good practice to manually set unused
     pointers to ‘NULL’ and give blank values to numbers Since there are
     many variables and pointers in ‘gal_warp_wcsalign_t’, it is easy to
     forget _initializing_ them.  With that said, we recommend using
     this function to minimize human error.

 -- Function:
          void
          gal_warp_wcsalign (gal_warp_wcsalign_t *wa)
     A high-level function to align the input dataset’s pixels to its
     WCS coordinates and write the result in ‘wa->output’.  This
     function assumes that the input variables have already been set in
     the ‘wa’ structure.  The input variables are clearly shown in the
     definition of ‘gal_warp_wcsalign_t’.  It will call the lower level
     functions below to do the job and will free the internal variables
     afterwards.

   The following low-level functions are called from the high-level
‘gal_warp_wcsalign’ function.  They are provided here in scenarios where
fine grain control over the thread workflow is necessary, see *note
Multithreaded programming::.

 -- Function:
          void
          gal_warp_wcsalign_init (gal_warp_wcsalign_t *wa)
     Low-level function to initialize all the elements inside the ‘wa’
     structure assuming that the input variables have been set.  The
     input variables are clearly shown in the definition of
     ‘gal_warp_wcsalign_t’.  This includes sanity checking the input
     arguments, as well as allocating the output image’s empty pixels
     (that can be filled with ‘gal_warp_wcsalign_onpix’, possibly on
     threads).

 -- Function:
          void
          gal_warp_wcsalign_onpix (gal_warp_wcsalign_t *nl, size_t ind)
     Low-level function that fills pixel ‘ind’ (counting from 0) in the
     already initialized output image.

 -- Function:
          void *
          gal_warp_wcsalign_onthread (void *inparam)
     Low-level worker function that can be passed to the high-level
     ‘gal_threads_spin_off’ or the lower-level ‘pthread_create’ with
     some modifications, see *note Multithreaded programming::.

 -- Function:
          void
          gal_warp_wcsalign_free (gal_warp_wcsalign_t *wa)
     Low-level function to free the internal variables inside ‘wa’ only.
     The caller must free the input pointers themselves, this function
     will not free them (they may be necessary in other parts of the
     caller’s higher-level architecture).

 -- Function:
          void
          gal_warp_pixelarea (gal_warp_wcsalign_t *wa)
     Calculate each input pixel’s area based on its WCS and save it to a
     copy of the input image with only one difference: the pixel values
     now show pixel area.  For examples on its usage, see *note Pixel
     information images::.


File: gnuastro.info,  Node: Color functions,  Next: Git wrappers,  Prev: Warp library,  Up: Gnuastro library

12.3.30 Color functions (‘color.h’)
-----------------------------------

The available pre-defined colors in Gnuastro are shown and discussed in
*note Vector graphics colors::.  This part of Gnuastro is currently in
charge of mapping the color names to the color IDs and to return the
red-green-blue fractions of each color.  On a terminal that supports
24-bit (true color), you can see the full list of color names and a demo
of each color with this command:

     $ astconvertt --listcolors

For each color we have a separate macro that starts with ‘GAL_COLOR_’,
and ends with the color name in all-caps.

 -- Macro: GAL_COLOR_INVALID
 -- Macro: GAL_COLOR_MEDIUMVIOLETRED
 -- Macro: GAL_COLOR_DEEPPINK
 -- Macro: GAL_COLOR_*
     The integer identifiers for each of the named colors in Gnuastro.
     Except for the first one (‘GAL_COLOR_INVALID’), we currently have
     140 colors from the extended web colors
     (https://en.wikipedia.org/wiki/Web_colors#Extended_colors).  The
     full list of colors and a demo can be visually inspected on the
     command-line with the ‘astconvertt --listcolors’ command and is
     also shown in *note Vector graphics colors::.  The macros have the
     same names, just in full-caps.

The functions below can be used to interact with the pre-defined colors:

 -- Function:
          uint8_t
          gal_color_name_to_id (char *name)
     Given the name of a color, return the identifier.  The name
     matching is not case-sensitive.

 -- Function:
          char *
          gal_color_id_to_name (uint8_t color)
     Given the ID of a color, return its name.

 -- Function:
          void
          gal_color_in_rgb (uint8_t color, float *f)
     Given the identifier of a color, write the color’s red-green-blue
     fractions in the space that ‘f’ points to.  It is up to the caller
     to have the space for three 32-bit floating point numbers to be
     already allocated before calling this function.


File: gnuastro.info,  Node: Git wrappers,  Next: Python interface,  Prev: Color functions,  Up: Gnuastro library

12.3.31 Git wrappers (‘git.h’)
------------------------------

Git is one of the most common tools for version control and it can often
be useful during development, for example, see ‘COMMIT’ keyword in *note
Output FITS files::.  At installation time, Gnuastro will also check for
the existence of libgit2, and store the value in the
‘GAL_CONFIG_HAVE_LIBGIT2’, see *note Configuration information:: and
*note Optional dependencies::.  ‘gnuastro/git.h’ includes
‘gnuastro/config.h’ internally, so you will not have to include both for
this macro.

 -- Function:
          char *
          gal_git_describe ( )
     When libgit2 is present and the program is called within a
     directory that is version controlled, this function will return a
     string containing the commit description (similar to Gnuastro’s
     unofficial version number, see *note Version numbering::).  If
     there are uncommitted changes in the running directory, it will add
     a ‘‘-dirty’’ prefix to the description.  When there is no tagged
     point in the previous commit, this function will return a uniquely
     abbreviated commit object as fallback.  This function is used for
     generating the value of the ‘COMMIT’ keyword in *note Output FITS
     files::.  The output string is similar to the output of the
     following command:

          $ git describe --dirty --always

     Space for the output string is allocated within this function, so
     after using the value you have to ‘free’ the output string.  If
     libgit2 is not installed or the program calling this function is
     not within a version controlled directory, then the output will be
     the ‘NULL’ pointer.


File: gnuastro.info,  Node: Python interface,  Next: Unit conversion library,  Prev: Git wrappers,  Up: Gnuastro library

12.3.32 Python interface (‘python.h’)
-------------------------------------

Python (https://en.wikipedia.org/wiki/Python_(programming_language)) is
a high-level interpreted programming language that is used by some for
data analysis.  Python itself is written in C, which is the same
language that Gnuastro is written in.  Hence Gnuastro’s library can be
directly used in Python wrappers.  The functions in this section provide
some low-level features to simplify the creation of Python modules that
may want to use Gnuastro’s advanced and powerful features directly.  To
see why Gnuastro was written in C, please see *note Why C::.

*Python interface is not built by default:* to have the features
described in this section, Gnuastro’s library needs to be built with the
‘--with-python’ configuration option.  For more, on this configuration
option, see *note Gnuastro configure options::.  To see if the Gnuastro
library that you are linking with has these features, you can check the
value of ‘GAL_CONFIG_HAVE_PYTHON’ macro, see *note Configuration
information::.

   The Gnuastro Python Package is built using CPython.  This entails
using Python wrappers around currently existing Gnuastro library
functions to build Python Extension Modules
(https://docs.python.org/3/extending/extending.html#).  It also makes
use of the NumPy C-API
(https://numpy.org/doc/stable/reference/c-api/index.html) for dealing
with data arrays.  Writing an interface between these and Gnuastro can
be simplified using the functions below.  Since many of these functions
depend on the Gnuastro Library itself, it is more convenient to package
them with the Library to facilitate the work of Python package.  These
functions will be expanding as Gnuastro’s own Python module (pyGnuastro)
grows.

   The Python interface of Gnuastro’s library is built and installed by
default if a Python 3.0.0 or greater with NumPy is found in ‘$PATH’.
Users may disable this interface with the ‘--without-python’ option to
‘./configure’ when they installed Gnuastro, see *note Gnuastro configure
options::.  If you have problems in a Python virtual env, see *note
Optional dependencies::.

   Because Python is an optional dependency of Gnuastro, the following
functions may not be available on some systems.  To check if the
installed Gnuastro library was compiled with the following functions,
you can use the ‘GAL_CONFIG_HAVE_PYTHON’ macro which is defined in
‘gnuastro/config.h’, see *note Configuration information::.

 -- Function:
          int
          gal_python_type_to_numpy (uint8_t type)
     Returns the NumPy datatype corresponding to a certain Gnuastro
     ‘type’, see *note Library data types::.

 -- Function:
          uint8_t
          gal_python_type_from_numpy (int type)
     Returns Gnuastro’s numerical datatype that corresponds to the input
     NumPy ‘type’.  For Gnuastro’s recognized data types, see *note
     Library data types::.


File: gnuastro.info,  Node: Unit conversion library,  Next: Spectral lines library,  Prev: Python interface,  Up: Gnuastro library

12.3.33 Unit conversion library (‘units.h’)
-------------------------------------------

Datasets can contain values in various formats or units.  The functions
in this section are defined to facilitate the easy conversion between
them and are declared in ‘units.h’.  If there are certain conversions
that are useful for your work, please get in touch.

 -- Function:
          int
          gal_units_extract_decimal (char *convert, const char
          *delimiter, double *args, size_t n)
     Parse the input ‘convert’ string with a certain delimiter (for
     example, ‘01:23:45’, where the delimiter is ‘":"’) as multiple
     numbers (for example, 1,23,45) and write them as an array in the
     space that ‘args’ is pointing to.  The expected number of values in
     the string is specified by the ‘n’ argument (3 in the example
     above).

     If the function succeeds, it will return 1, otherwise it will
     return 0 and the values may not be fully written into ‘args’.  If
     the number of values parsed in the string is different from ‘n’,
     this function will fail.

 -- Function:
          double
          gal_units_ra_to_degree (char *convert)
     Convert the input Right Ascension (RA) string (in the format of
     hours, minutes and seconds either as ‘_h_m_s’ or ‘_:_:_’) to
     degrees (a single floating point number).

 -- Function:
          double
          gal_units_dec_to_degree (char *convert)
     Convert the input Declination (Dec) string (in the format of
     degrees, arc-minutes and arc-seconds either as ‘_d_m_s’ or ‘_:_:_’)
     to degrees (a single floating point number).

 -- Function:
          char *
          gal_units_degree_to_ra (double decimal, int usecolon)
     Convert the input Right Ascension (RA) degree (a single floating
     point number) to old/standard notation (in the format of hours,
     minutes and seconds of ‘_h_m_s’).  If ‘usecolon!=0’, then the
     delimiters between the components will be colons: ‘_:_:_’.

 -- Function:
          char *
          gal_units_degree_to_dec (double decimal, int usecolon)
     Convert the input Declination (Dec) degree (a single floating point
     number) to old/standard notation (in the format of degrees,
     arc-minutes and arc-seconds of ‘_d_m_s’).  If ‘usecolon!=0’, then
     the delimiters between the components will be colons: ‘_:_:_’.

 -- Function:
          double
          gal_units_counts_to_mag (double counts, double zeropoint)
     Convert counts to magnitudes through the given zero point.  For
     more on the equation, see *note Brightness flux magnitude::.

 -- Function:
          double
          gal_units_mag_to_counts (double mag, double zeropoint)
     Convert magnitudes to counts through the given zero point.  For
     more on the equation, see *note Brightness flux magnitude::.

 -- Function:
          double
          gal_units_mag_to_sb (double mag, double area_arcsec2)
     Calculate the surface brightness of a given magnitude, over a
     certain area in units of arcsec$^2$.  For more on the equation, see
     *note Brightness flux magnitude::.

 -- Function:
          double
          gal_units_sb_to_mag (double sb, double area_arcsec2)
     Calculate the magnitude of a given surface brightness, over a
     certain area in units of arcsec$^2$.  For more on the equation, see
     *note Brightness flux magnitude::.

 -- Function:
          double
          gal_units_counts_to_sb (double counts, double zeropoint_ab,
          double area_arcsec2)
     Calculate the surface brightness of a given count level, over a
     certain area in units of arcsec$^2$, assuming a certain AB zero
     point.  For more on the equation, see *note Brightness flux
     magnitude::.

 -- Function:
          double
          gal_units_sb_to_counts (double sb, double zeropoint_ab, double
          area_arcsec2)
     Calculate the counts corresponding to a given surface brightness,
     over a certain area in units of arcsec$^2$.  For more on the
     equation, see *note Brightness flux magnitude::.

 -- Function:
          double
          gal_units_counts_to_jy (double counts, double zeropoint_ab)
     Convert counts to Janskys through an AB magnitude-based zero point.
     For more on the equation, see *note Brightness flux magnitude::.

 -- Function:
          double
          gal_units_au_to_pc (double au)
     Convert the input value (assumed to be in Astronomical Units) to
     Parsecs.  For the conversion equation, see the description of
     ‘au-to-pc’ operator in *note Arithmetic operators::.

 -- Function:
          double
          gal_units_counts_to_nanomaggy (double counts, double
          zeropoint_ab)
     Convert counts to Nanomaggy (with fixed zero point of 22.5) through
     an AB magnitude-based zero point.

 -- Function:
          double
          gal_units_nanomaggy_to_counts (double counts, double
          zeropoint_ab)
     Convert Nanomaggy (with fixed zero point of 22.5) to counts through
     an AB magnitude-based zero point.

 -- Function:
          double
          gal_units_pc_to_au (double pc)
     Convert the input value (assumed to be in Parsecs) to Astronomical
     Units (AUs).  For the conversion equation, see the description of
     ‘au-to-pc’ operator in *note Arithmetic operators::.

 -- Function:
          double
          gal_units_ly_to_pc (double ly)
     Convert the input value (assumed to be in Light-years) to Parsecs.
     For the conversion equation, see the description of ‘ly-to-pc’
     operator in *note Arithmetic operators::.

 -- Function:
          double
          gal_units_pc_to_ly (double pc)
     Convert the input value (assumed to be in Parsecs) to Light-years.
     For the conversion equation, see the description of ‘ly-to-pc’
     operator in *note Arithmetic operators::.

 -- Function:
          double
          gal_units_ly_to_au (double ly)
     Convert the input value (assumed to be in Light-years) to
     Astronomical Units.  For the conversion equation, see the
     description of ‘ly-to-pc’ operator in *note Arithmetic operators::.

 -- Function:
          double
          gal_units_au_to_ly (double au)
     Convert the input value (assumed to be in Astronomical Units) to
     Light-years.  For the conversion equation, see the description of
     ‘ly-to-pc’ operator in *note Arithmetic operators::.


File: gnuastro.info,  Node: Spectral lines library,  Next: Cosmology library,  Prev: Unit conversion library,  Up: Gnuastro library

12.3.34 Spectral lines library (‘speclines.h’)
----------------------------------------------

Gnuastro’s library has the following macros and functions for dealing
with spectral lines.  All these functions are declared in
‘gnuastro/spectra.h’.

 -- Macro: GAL_SPECLINES_INVALID
 -- Macro: GAL_SPECLINES_Ne_VIII_770
 -- Macro: GAL_SPECLINES_Ne_VIII_780
 -- Macro: GAL_SPECLINES_Ly_epsilon
 -- Macro: GAL_SPECLINES_Ly_delta
 -- Macro: GAL_SPECLINES_Ly_gamma
 -- Macro: GAL_SPECLINES_C_III_977
 -- Macro: GAL_SPECLINES_N_III_989
 -- Macro: GAL_SPECLINES_N_III_991_51
 -- Macro: GAL_SPECLINES_N_III_991_57
 -- Macro: GAL_SPECLINES_Ly_beta
 -- Macro: GAL_SPECLINES_O_VI_1031
 -- Macro: GAL_SPECLINES_O_VI_1037
 -- Macro: GAL_SPECLINES_Ar_I_1066
 -- Macro: GAL_SPECLINES_Ly_alpha
 -- Macro: GAL_SPECLINES_N_V_1238
 -- Macro: GAL_SPECLINES_N_V_1242
 -- Macro: GAL_SPECLINES_Si_II_1260
 -- Macro: GAL_SPECLINES_Si_II_1264
 -- Macro: GAL_SPECLINES_O_I_1302
 -- Macro: GAL_SPECLINES_C_II_1334
 -- Macro: GAL_SPECLINES_C_II_1335
 -- Macro: GAL_SPECLINES_Si_IV_1393
 -- Macro: GAL_SPECLINES_O_IV_1397
 -- Macro: GAL_SPECLINES_O_IV_1399
 -- Macro: GAL_SPECLINES_Si_IV_1402
 -- Macro: GAL_SPECLINES_N_IV_1486
 -- Macro: GAL_SPECLINES_C_IV_1548
 -- Macro: GAL_SPECLINES_C_IV_1550
 -- Macro: GAL_SPECLINES_He_II_1640
 -- Macro: GAL_SPECLINES_O_III_1660
 -- Macro: GAL_SPECLINES_O_III_1666
 -- Macro: GAL_SPECLINES_N_III_1746
 -- Macro: GAL_SPECLINES_N_III_1748
 -- Macro: GAL_SPECLINES_Al_III_1854
 -- Macro: GAL_SPECLINES_Al_III_1862
 -- Macro: GAL_SPECLINES_Si_III
 -- Macro: GAL_SPECLINES_C_III_1908
 -- Macro: GAL_SPECLINES_N_II_2142
 -- Macro: GAL_SPECLINES_O_III_2320
 -- Macro: GAL_SPECLINES_C_II_2323
 -- Macro: GAL_SPECLINES_C_II_2324
 -- Macro: GAL_SPECLINES_Fe_XI_2648
 -- Macro: GAL_SPECLINES_He_II_2733
 -- Macro: GAL_SPECLINES_Mg_V_2782
 -- Macro: GAL_SPECLINES_Mg_II_2795
 -- Macro: GAL_SPECLINES_Mg_II_2802
 -- Macro: GAL_SPECLINES_Fe_IV_2829
 -- Macro: GAL_SPECLINES_Fe_IV_2835
 -- Macro: GAL_SPECLINES_Ar_IV_2853
 -- Macro: GAL_SPECLINES_Ar_IV_2868
 -- Macro: GAL_SPECLINES_Mg_V_2928
 -- Macro: GAL_SPECLINES_He_I_2945
 -- Macro: GAL_SPECLINES_O_III_3132
 -- Macro: GAL_SPECLINES_He_I_3187
 -- Macro: GAL_SPECLINES_He_II_3203
 -- Macro: GAL_SPECLINES_O_III_3312
 -- Macro: GAL_SPECLINES_Ne_V_3345
 -- Macro: GAL_SPECLINES_Ne_V_3425
 -- Macro: GAL_SPECLINES_O_III_3444
 -- Macro: GAL_SPECLINES_N_I_3466_4
 -- Macro: GAL_SPECLINES_N_I_3466_5
 -- Macro: GAL_SPECLINES_He_I_3487
 -- Macro: GAL_SPECLINES_Fe_VII_3586
 -- Macro: GAL_SPECLINES_Fe_VI_3662
 -- Macro: GAL_SPECLINES_H_19
 -- Macro: GAL_SPECLINES_H_18
 -- Macro: GAL_SPECLINES_H_17
 -- Macro: GAL_SPECLINES_H_16
 -- Macro: GAL_SPECLINES_H_15
 -- Macro: GAL_SPECLINES_H_14
 -- Macro: GAL_SPECLINES_O_II_3726
 -- Macro: GAL_SPECLINES_O_II_3728
 -- Macro: GAL_SPECLINES_H_13
 -- Macro: GAL_SPECLINES_H_12
 -- Macro: GAL_SPECLINES_Fe_VII_3758
 -- Macro: GAL_SPECLINES_H_11
 -- Macro: GAL_SPECLINES_H_10
 -- Macro: GAL_SPECLINES_H_9
 -- Macro: GAL_SPECLINES_Fe_V_3839
 -- Macro: GAL_SPECLINES_Ne_III_3868
 -- Macro: GAL_SPECLINES_He_I_3888
 -- Macro: GAL_SPECLINES_H_8
 -- Macro: GAL_SPECLINES_Fe_V_3891
 -- Macro: GAL_SPECLINES_Fe_V_3911
 -- Macro: GAL_SPECLINES_Ne_III_3967
 -- Macro: GAL_SPECLINES_H_epsilon
 -- Macro: GAL_SPECLINES_He_I_4026
 -- Macro: GAL_SPECLINES_S_II_4068
 -- Macro: GAL_SPECLINES_Fe_V_4071
 -- Macro: GAL_SPECLINES_S_II_4076
 -- Macro: GAL_SPECLINES_H_delta
 -- Macro: GAL_SPECLINES_He_I_4143
 -- Macro: GAL_SPECLINES_Fe_II_4178
 -- Macro: GAL_SPECLINES_Fe_V_4180
 -- Macro: GAL_SPECLINES_Fe_II_4233
 -- Macro: GAL_SPECLINES_Fe_V_4227
 -- Macro: GAL_SPECLINES_Fe_II_4287
 -- Macro: GAL_SPECLINES_Fe_II_4304
 -- Macro: GAL_SPECLINES_O_II_4317
 -- Macro: GAL_SPECLINES_H_gamma
 -- Macro: GAL_SPECLINES_O_III_4363
 -- Macro: GAL_SPECLINES_Ar_XIV
 -- Macro: GAL_SPECLINES_O_II_4414
 -- Macro: GAL_SPECLINES_Fe_II_4416
 -- Macro: GAL_SPECLINES_Fe_II_4452
 -- Macro: GAL_SPECLINES_He_I_4471
 -- Macro: GAL_SPECLINES_Fe_II_4489
 -- Macro: GAL_SPECLINES_Fe_II_4491
 -- Macro: GAL_SPECLINES_N_III_4510
 -- Macro: GAL_SPECLINES_Fe_II_4522
 -- Macro: GAL_SPECLINES_Fe_II_4555
 -- Macro: GAL_SPECLINES_Fe_II_4582
 -- Macro: GAL_SPECLINES_Fe_II_4583
 -- Macro: GAL_SPECLINES_Fe_II_4629
 -- Macro: GAL_SPECLINES_N_III_4634
 -- Macro: GAL_SPECLINES_N_III_4640
 -- Macro: GAL_SPECLINES_N_III_4641
 -- Macro: GAL_SPECLINES_C_III_4647
 -- Macro: GAL_SPECLINES_C_III_4650
 -- Macro: GAL_SPECLINES_C_III_5651
 -- Macro: GAL_SPECLINES_Fe_III_4658
 -- Macro: GAL_SPECLINES_He_II_4685
 -- Macro: GAL_SPECLINES_Ar_IV_4711
 -- Macro: GAL_SPECLINES_Ar_IV_4740
 -- Macro: GAL_SPECLINES_H_beta
 -- Macro: GAL_SPECLINES_Fe_VII_4893
 -- Macro: GAL_SPECLINES_Fe_IV_4903
 -- Macro: GAL_SPECLINES_Fe_II_4923
 -- Macro: GAL_SPECLINES_O_III_4958
 -- Macro: GAL_SPECLINES_O_III_5006
 -- Macro: GAL_SPECLINES_Fe_II_5018
 -- Macro: GAL_SPECLINES_Fe_III_5084
 -- Macro: GAL_SPECLINES_Fe_VI_5145
 -- Macro: GAL_SPECLINES_Fe_VII_5158
 -- Macro: GAL_SPECLINES_Fe_II_5169
 -- Macro: GAL_SPECLINES_Fe_VI_5176
 -- Macro: GAL_SPECLINES_Fe_II_5197
 -- Macro: GAL_SPECLINES_N_I_5200
 -- Macro: GAL_SPECLINES_Fe_II_5234
 -- Macro: GAL_SPECLINES_Fe_IV_5236
 -- Macro: GAL_SPECLINES_Fe_III_5270
 -- Macro: GAL_SPECLINES_Fe_II_5276
 -- Macro: GAL_SPECLINES_Fe_VII_5276
 -- Macro: GAL_SPECLINES_Fe_XIV
 -- Macro: GAL_SPECLINES_Ca_V
 -- Macro: GAL_SPECLINES_Fe_II_5316_6
 -- Macro: GAL_SPECLINES_Fe_II_5316_7
 -- Macro: GAL_SPECLINES_Fe_VI_5335
 -- Macro: GAL_SPECLINES_Fe_VI_5424
 -- Macro: GAL_SPECLINES_Cl_III_5517
 -- Macro: GAL_SPECLINES_Cl_III_5537
 -- Macro: GAL_SPECLINES_Fe_VI_5637
 -- Macro: GAL_SPECLINES_Fe_VI_5677
 -- Macro: GAL_SPECLINES_C_III_5697
 -- Macro: GAL_SPECLINES_Fe_VII_5720
 -- Macro: GAL_SPECLINES_N_II_5754
 -- Macro: GAL_SPECLINES_C_IV_5801
 -- Macro: GAL_SPECLINES_C_IV_5811
 -- Macro: GAL_SPECLINES_He_I_5875
 -- Macro: GAL_SPECLINES_O_I_6046
 -- Macro: GAL_SPECLINES_Fe_VII_6087
 -- Macro: GAL_SPECLINES_O_I_6300
 -- Macro: GAL_SPECLINES_S_III_6312
 -- Macro: GAL_SPECLINES_Si_II_6347
 -- Macro: GAL_SPECLINES_O_I_6363
 -- Macro: GAL_SPECLINES_Fe_II_6369
 -- Macro: GAL_SPECLINES_Fe_X
 -- Macro: GAL_SPECLINES_Fe_II_6516
 -- Macro: GAL_SPECLINES_N_II_6548
 -- Macro: GAL_SPECLINES_H_alpha
 -- Macro: GAL_SPECLINES_N_II_6583
 -- Macro: GAL_SPECLINES_S_II_6716
 -- Macro: GAL_SPECLINES_S_II_6730
 -- Macro: GAL_SPECLINES_O_I_7002
 -- Macro: GAL_SPECLINES_Ar_V
 -- Macro: GAL_SPECLINES_He_I_7065
 -- Macro: GAL_SPECLINES_Ar_III_7135
 -- Macro: GAL_SPECLINES_Fe_II_7155
 -- Macro: GAL_SPECLINES_Ar_IV_7170
 -- Macro: GAL_SPECLINES_Fe_II_7172
 -- Macro: GAL_SPECLINES_C_II_7236
 -- Macro: GAL_SPECLINES_Ar_IV_7237
 -- Macro: GAL_SPECLINES_O_I_7254
 -- Macro: GAL_SPECLINES_Ar_IV_7262
 -- Macro: GAL_SPECLINES_He_I_7281
 -- Macro: GAL_SPECLINES_O_II_7319
 -- Macro: GAL_SPECLINES_O_II_7330
 -- Macro: GAL_SPECLINES_Ni_II_7377
 -- Macro: GAL_SPECLINES_Ni_II_7411
 -- Macro: GAL_SPECLINES_Fe_II_7452
 -- Macro: GAL_SPECLINES_N_I_7468
 -- Macro: GAL_SPECLINES_S_XII
 -- Macro: GAL_SPECLINES_Ar_III_7751
 -- Macro: GAL_SPECLINES_He_I_7816
 -- Macro: GAL_SPECLINES_Ar_I_7868
 -- Macro: GAL_SPECLINES_Ni_III
 -- Macro: GAL_SPECLINES_Fe_XI_7891
 -- Macro: GAL_SPECLINES_He_II_8236
 -- Macro: GAL_SPECLINES_Pa_20
 -- Macro: GAL_SPECLINES_Pa_19
 -- Macro: GAL_SPECLINES_Pa_18
 -- Macro: GAL_SPECLINES_O_I_8446
 -- Macro: GAL_SPECLINES_Pa_17
 -- Macro: GAL_SPECLINES_Ca_II_8498
 -- Macro: GAL_SPECLINES_Pa_16
 -- Macro: GAL_SPECLINES_Ca_II_8542
 -- Macro: GAL_SPECLINES_Pa_15
 -- Macro: GAL_SPECLINES_Cl_II
 -- Macro: GAL_SPECLINES_Pa_14
 -- Macro: GAL_SPECLINES_Fe_II_8616
 -- Macro: GAL_SPECLINES_Ca_II_8662
 -- Macro: GAL_SPECLINES_Pa_13
 -- Macro: GAL_SPECLINES_N_I_8680
 -- Macro: GAL_SPECLINES_N_I_8703
 -- Macro: GAL_SPECLINES_N_I_8711
 -- Macro: GAL_SPECLINES_Pa_12
 -- Macro: GAL_SPECLINES_Pa_11
 -- Macro: GAL_SPECLINES_Fe_II_8891
 -- Macro: GAL_SPECLINES_Pa_10
 -- Macro: GAL_SPECLINES_S_III_9068
 -- Macro: GAL_SPECLINES_Pa_9
 -- Macro: GAL_SPECLINES_S_III_9531
 -- Macro: GAL_SPECLINES_Pa_epsilon
 -- Macro: GAL_SPECLINES_C_I_9824
 -- Macro: GAL_SPECLINES_C_I_9850
 -- Macro: GAL_SPECLINES_S_VIII
 -- Macro: GAL_SPECLINES_He_I_10027
 -- Macro: GAL_SPECLINES_He_I_10031
 -- Macro: GAL_SPECLINES_Pa_delta
 -- Macro: GAL_SPECLINES_S_II_10286
 -- Macro: GAL_SPECLINES_S_II_10320
 -- Macro: GAL_SPECLINES_S_II_10336
 -- Macro: GAL_SPECLINES_Fe_XIII
 -- Macro: GAL_SPECLINES_He_I_10830
 -- Macro: GAL_SPECLINES_Pa_gamma
 -- Macro: GAL_SPECLINES_NUMBER
     Internal values/identifiers for recognized spectral lines as is
     clear from their names.  They are based on the UV an optical table
     of galaxy emission lines of Drew Chojnowski(1).

     Note the first and last macros, they can be used when parsing the
     lines automatically: both do not correspond to any line, but their
     integer values correspond to the two integers just before and after
     the first and last line identifier: ‘GAL_SPECLINES_INVALID’ has a
     value of zero, and allows you to have a fixed integer which never
     corresponds to a line.  ‘GAL_SPECLINES_INVALID_MAX’ is the total
     number of pre-defined lines, plus one.  So you can parse all the
     known lines with a ‘for’ loop like this:
          for(i=1;i<GAL_SPECLINES_INVALID_MAX;++i)

 -- Macro: GAL_SPECLINES_ANGSTROM_*
     Wavelength (in Angstroms) of the named lines.  The ‘*’ can take any
     of the line names of the ‘GAL_SPECLINES_*’ Macros above.

 -- Macro: GAL_SPECLINES_NAME_*
     Names (as literal stings without any space) that can be used to
     refer to the lines in your program and converted to and from line
     identifiers using the functions below.  The ‘*’ can take any of the
     line names of the ‘GAL_SPECLINES_*’ Macros above.

 -- Function:
          char *
          gal_speclines_line_name (int linecode)
     Return the literal string of the given spectral line identifier
     Macro (for example ‘GAL_SPECLINES_HALPHA’ or
     ‘GAL_SPECLINES_LYLIMIT’).

 -- Function:
          int
          gal_speclines_line_code (char *name)
     Return the spectral line identifier of the given standard name (for
     example ‘GAL_SPECLINES_NAME_HALPHA’ or
     ‘GAL_SPECLINES_NAME_LYLIMIT’).

 -- Function:
          double
          gal_speclines_line_angstrom (int linecode)
     Return the wavelength (in Angstroms) of the given line.

 -- Function:
          double
          gal_speclines_line_redshift (double obsline, double restline)
     Return the redshift where the observed wavelength (‘obsline’) was
     emitted from (if its restframe wavelength was ‘restline’).

 -- Function:
          double
          gal_speclines_line_redshift_code (double obsline, int
          linecode)
     Return the redshift where the observed wavelength (‘obsline’) was
     emitted from a pre-defined spectral line in the macros above.  For
     example, you want the redshift where the H-alpha line falls at a
     wavelength of 8000 Angstroms, you can call this function like this:

          gal_speclines_line_redshift_code(8000, GAL_SPECLINES_H_alpha);

   ---------- Footnotes ----------

   (1) <http://astronomy.nmsu.edu/drewski/tableofemissionlines.html>


File: gnuastro.info,  Node: Cosmology library,  Next: SAO DS9 library,  Prev: Spectral lines library,  Up: Gnuastro library

12.3.35 Cosmology library (‘cosmology.h’)
-----------------------------------------

This library does the main cosmological calculations that are commonly
necessary in extra-galactic astronomical studies.  The main variable in
this context is the redshift ($z$).  The cosmological input parameters
in the functions below are ‘H0’, ‘o_lambda_0’, ‘o_matter_0’,
‘o_radiation_0’ which respectively represent the current (at redshift 0)
expansion rate (Hubble constant in units of km/sec/Mpc), cosmological
constant ($\Lambda$), matter and radiation densities.

   All these functions are declared in ‘gnuastro/cosmology.h’.  For a
more extended introduction/discussion of the cosmological parameters,
please see *note CosmicCalculator::.

 -- Function:
          double
          gal_cosmology_age (double z, double H0, double o_lambda_0,
          double o_matter_0, double o_radiation_0)
     Returns the age of the universe at redshift ‘z’ in units of Giga
     years.

 -- Function:
          double
          gal_cosmology_proper_distance (double z, double H0, double
          o_lambda_0, double o_matter_0, double o_radiation_0)
     Returns the proper distance to an object at redshift ‘z’ in units
     of Mega parsecs.

 -- Function:
          double
          gal_cosmology_comoving_volume (double z, double H0, double
          o_lambda_0, double o_matter_0, double o_radiation_0)
     Returns the comoving volume over 4pi stradian to ‘z’ in units of
     Mega parsecs cube.

 -- Function:
          double
          gal_cosmology_critical_density (double z, double H0, double
          o_lambda_0, double o_matter_0, double o_radiation_0)
     Returns the critical density at redshift ‘z’ in units of $g/cm^3$.

 -- Function:
          double
          gal_cosmology_angular_distance (double z, double H0, double
          o_lambda_0, double o_matter_0, double o_radiation_0)
     Return the angular diameter distance to an object at redshift ‘z’
     in units of Mega parsecs.

 -- Function:
          double
          gal_cosmology_luminosity_distance (double z, double H0, double
          o_lambda_0, double o_matter_0, double o_radiation_0)
     Return the luminosity diameter distance to an object at redshift
     ‘z’ in units of Mega parsecs.

 -- Function:
          double
          gal_cosmology_distance_modulus (double z, double H0, double
          o_lambda_0, double o_matter_0, double o_radiation_0)
     Return the distance modulus at redshift ‘z’ (with no units).

 -- Function:
          double
          gal_cosmology_to_absolute_mag (double z, double H0, double
          o_lambda_0, double o_matter_0, double o_radiation_0)
     Return the conversion from apparent to absolute magnitude for an
     object at redshift ‘z’.  This value has to be added to the apparent
     magnitude to give the absolute magnitude of an object at redshift
     ‘z’.

 -- Function:
          double
          gal_cosmology_velocity_from_z (double z)
     Return the velocity (in km/s) corresponding to the given redshift
     (‘z’).

 -- Function:
          double
          gal_cosmology_z_from_velocity (double v)
     Return the redshift corresponding to the given velocity (‘v’ in
     km/s).


File: gnuastro.info,  Node: SAO DS9 library,  Prev: Cosmology library,  Up: Gnuastro library

12.3.36 SAO DS9 library (‘ds9.h’)
---------------------------------

This library operates on the output files of SAO DS9(1).  SAO DS9 is one
of the most commonly used FITS image and cube viewers today with an easy
to use graphic user interface (GUI), see *note SAO DS9::.  But besides
merely opening FITS data, it can also produce certain kinds of files
that can be useful in common analysis.  For example, on DS9’s GUI, it is
very easy to define a (possibly complex) polygon as a “region”.  You can
then save that “region” into a file and using the functions below, feed
the polygon into Gnuastro’s programs (or your custom programs).

 -- Macro: GAL_DS9_COORD_MODE_IMG
 -- Macro: GAL_DS9_COORD_MODE_WCS
 -- Macro: GAL_DS9_COORD_MODE_INVALID
     Macros to identify the coordinate mode of the DS9 file.  Their
     names are sufficiently descriptive.  The last one (‘INVALID’) is
     for sanity checks (for example, to know if the mode is already
     selected).

 -- Function:
          gal_data_t *
          gal_ds9_reg_read_polygon (char *filename)
     Returns an allocated generic data container (‘gal_data_t’, with an
     array of ‘GAL_TYPE_FLOAT64’) containing the vertices of a polygon
     within the SAO DS9 region file given by ‘*filename’.  Since SAO DS9
     region files are 2 dimensional, if there are $N$ vertices in the
     SAO DS9 region file, the returned dataset will have $2\times N$
     elements (first two elements belonging to first vertice, etc.).

     The mode to interpret the vertice coordinates is also read from the
     SAO DS9 region file and written into the ‘status’ attribute of the
     output ‘gal_data_t’.  The coordinate mode can be one of the
     ‘GAL_DS9_COORD_MODE_*’ macros, mentioned above.

     It is assumed that the file begins with ‘# Region file format: DS9’
     and it has two more lines (at least): a line containing the mode of
     the coordinates (the line should only contain either ‘fk5’ or
     ‘image’), a line with the polygon vertices following this format:
     ‘polygon(V1X,V1Y,V2X,V2Y,...)’ where ‘V1X’ and ‘V1Y’ are the
     horizontal and vertical coordinates of the first vertice, and so
     on.

     For example, here is a minimal acceptable SAO DS9 region file:

          # Region file format: DS9
          fk5
          polygon(53.187414,-27.779152,53.159507,-27.759633,...)

   ---------- Footnotes ----------

   (1) <https://sites.google.com/cfa.harvard.edu/saoimageds9>


File: gnuastro.info,  Node: Library demo programs,  Prev: Gnuastro library,  Up: Library

12.4 Library demo programs
==========================

In this final section of *note Library::, we give some example Gnuastro
programs to demonstrate various features in the library.  All these
programs have been tested and once Gnuastro is installed you can compile
and run them with Gnuastro’s *note BuildProgram:: program that will take
care of linking issues.  If you do not have any FITS file to experiment
on, you can use those that are generated by Gnuastro after ‘make check’
in the ‘tests/’ directory, see *note Quick start::.

* Menu:

* Library demo - reading a image::  Read a FITS image into memory.
* Library demo - inspecting neighbors::  Inspect the neighbors of a pixel.
* Library demo - multi-threaded operation::  Doing an operation on threads.
* Library demo - reading and writing table columns::  Simple Column I/O.
* Library demo - Warp to another image::  Output pixel grid and WCS from another image.
* Library demo - Warp to new grid::  Define a new pixel grid and WCS to resample the input.


File: gnuastro.info,  Node: Library demo - reading a image,  Next: Library demo - inspecting neighbors,  Prev: Library demo programs,  Up: Library demo programs

12.4.1 Library demo - reading a FITS image
------------------------------------------

The following simple program demonstrates how to read a FITS image into
memory and use the ‘void *array’ pointer in of *note Generic data
container::.  For easy linking/compilation of this program along with a
first run see *note BuildProgram:: (in short: Compile, link and run
‘myprogram.c’ with this command: ‘‘astbuildprog myprogram.c’).  Before
running, also change the ‘filename’ and ‘hdu’ variable values to specify
an existing FITS file and/or extension/HDU.

   This is just intended to demonstrate how to use the ‘array’ pointer
of ‘gal_data_t’.  Hence it does not do important sanity checks, for
example in real datasets you may also have blank pixels.  In such cases,
this program will return a NaN value (see *note Blank pixels::).  So for
general statistical information of a dataset, it is much better to use
Gnuastro’s *note Statistics:: program which can deal with blank pixels
and many other issues in a generic dataset.

   To encourage good coding practices, this script contains a copyright
notice with a place holder for your name and your email (as you
customize it for your own purpose).  Always keep a one-line description
and copyright notice like this in all your scripts, such “metadata” is
very important to accompany every source file you write.  Of course,
when you write the source file from scratch and just learn how to use a
single function from this manual, only your name/year should appear.
The existing name of the original author of this example program is only
for cases where you copy-paste this whole file.

     /* Reading a FITS image into memory.
      *
      * The following simple program demonstrates how to read a FITS image
      * into memory  and use the 'void *array' pointer. This is just intended
      * to demonstrate how to use the array pointer of 'gal_data_t'.
      *
      * Copyright (C) 2023      Your Name <your@email.address>
      * Copyright (C) 2020-2023 Mohammad Akhlaghi <mohammad@akhlaghi.org>
      *
      * This program 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.
      *
      * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
      */

     #include <stdio.h>
     #include <stdlib.h>

     #include <gnuastro/fits.h> /* includes gnuastro's data.h and type.h */
     #include <gnuastro/statistics.h>

     int
     main(void)
     {
       size_t i;
       float *farray;
       double sum=0.0f;
       gal_data_t *image;
       char *filename="img.fits", *hdu="1";


       /* Read `img.fits' (HDU: 1) as a float32 array. */
       image=gal_fits_img_read_to_type(filename, hdu, GAL_TYPE_FLOAT32,
                                       -1, 1);


       /* Use the allocated space as a single precision floating
        * point array (recall that `image->array' has `void *'
        * type, so it is not directly usable). */
       farray=image->array;


       /* Calculate the sum of all the values. */
       for(i=0; i<image->size; ++i)
         sum += farray[i];


       /* Report the sum. */
       printf("Sum of values in %s (hdu %s) is: %f\n",
              filename, hdu, sum);


       /* Clean up and return. */
       gal_data_free(image);
       return EXIT_SUCCESS;
     }


File: gnuastro.info,  Node: Library demo - inspecting neighbors,  Next: Library demo - multi-threaded operation,  Prev: Library demo - reading a image,  Up: Library demo programs

12.4.2 Library demo - inspecting neighbors
------------------------------------------

The following simple program shows how you can inspect the neighbors of
a pixel using the ‘GAL_DIMENSION_NEIGHBOR_OP’ function-like macro that
was introduced in *note Dimensions::.  For easy linking/compilation of
this program along with a first run see *note BuildProgram::.  Before
running, also change the file name and HDU (first and second arguments
to ‘gal_fits_img_read_to_type’) to specify an existing FITS file and/or
extension/HDU.

   To encourage good coding practices, this script contains a copyright
notice with a place holder for your name and your email (as you
customize it for your own purpose).  Always keep a one-line description
and copyright notice like this in all your scripts, such “metadata” is
very important to accompany every source file you write.  Of course,
when you write the source file from scratch and just learn how to use a
single function from this manual, only your name/year should appear.
The existing name of the original author of this example program is only
for cases where you copy-paste this whole file.

     /* Reading a FITS image into memory.
      *
      * The following simple program shows how you can inspect the neighbors
      * of a pixel using the GAL_DIMENSION_NEIGHBOR_OP function-like macro.
      *
      * Copyright (C) 2023      Your Name <your@email.address>
      * Copyright (C) 2020-2023 Mohammad Akhlaghi <mohammad@akhlaghi.org>
      *
      * This program 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.
      *
      * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
      */

     #include <stdio.h>
     #include <stdlib.h>

     #include <gnuastro/fits.h>
     #include <gnuastro/dimension.h>

     int
     main(void)
     {
       double sum;
       float *array;
       size_t i, num, *dinc;
       gal_data_t *input=gal_fits_img_read_to_type("input.fits", "1",
                                                   GAL_TYPE_FLOAT32, -1, 1);

       /* To avoid the `void *' pointer and have `dinc'. */
       array=input->array;
       dinc=gal_dimension_increment(input->ndim, input->dsize);

       /* Go over all the pixels. */
       for(i=0;i<input->size;++i)
         {
           num=0;
           sum=0.0f;
           GAL_DIMENSION_NEIGHBOR_OP( i, input->ndim, input->dsize,
                                      input->ndim, dinc,
                                      {++num; sum+=array[nind];} );
           printf("%zu: num: %zu, sum: %f\n", i, num, sum);
         }

       /* Clean up and return. */
       gal_data_free(input);
       free(dinc);
       return EXIT_SUCCESS;
     }


File: gnuastro.info,  Node: Library demo - multi-threaded operation,  Next: Library demo - reading and writing table columns,  Prev: Library demo - inspecting neighbors,  Up: Library demo programs

12.4.3 Library demo - multi-threaded operation
----------------------------------------------

The following simple program shows how to use Gnuastro to simplify
spinning off threads and distributing different jobs between the
threads.  The relevant thread-related functions are defined in *note
Gnuastro's thread related functions::.  For easy linking/compilation of
this program, along with a first run, see Gnuastro’s *note
BuildProgram::.  Before running, also change the ‘filename’ and ‘hdu’
variable values to specify an existing FITS file and/or extension/HDU.

   This is a very simple program to open a FITS image, distribute its
pixels between different threads and print the value of each pixel and
the thread it was assigned to.  The actual operation is very simple (and
would not usually be done with threads in a real-life program).  It is
intentionally chosen to put more focus on the important steps in
spinning off threads and how the worker function (which is called by
each thread) can identify the job-IDs it should work on.

   For example, instead of an array of pixels, you can define an array
of tiles or any other context-specific structures as separate targets.
The important thing is that each action should have its own unique ID
(counting from zero, as is done in an array in C). You can then follow
the process below and use each thread to work on all the targets that
are assigned to it.  Recall that spinning off threads is itself an
expensive process and we do not want to spin-off one thread for each
target (see the description of ‘gal_threads_dist_in_threads’ in *note
Gnuastro's thread related functions::.

   There are many (more complicated, real-world) examples of using
‘gal_threads_spin_off’ in Gnuastro’s actual source code, you can see
them by searching for the ‘gal_threads_spin_off’ function from the top
source (after unpacking the tarball) directory (for example, with this
command):

     $ grep -r gal_threads_spin_off ./

   To encourage good coding practices, this script contains a copyright
notice with a place holder for your name and your email (as you
customize it for your own purpose).  Always keep a one-line description
and copyright notice like this in all your scripts, such “metadata” is
very important to accompany every source file you write.  Of course,
when you write the source file from scratch and just learn how to use a
single function from this manual, only your name/year should appear.
The existing name of the original author of this example program is only
for cases where you copy-paste this whole file.

   The code of this demonstration program is shown below.  This program
was also built and run when you ran ‘make check’ during the building of
Gnuastro (‘tests/lib/multithread.c’), so it is already tested for your
system and you can safely use it as a guide.

     /* Demo of Gnuastro's high-level multi-threaded interface.
      *
      * This is a very simple program to open a FITS image, distribute its
      * pixels between different threads and print the value of each pixel
      * and the thread it was assigned to.
      *
      * Copyright (C) 2023      Your Name <your@email.address>
      * Copyright (C) 2020-2023 Mohammad Akhlaghi <mohammad@akhlaghi.org>
      *
      * This program 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.
      *
      * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
      */

     #include <stdio.h>
     #include <stdlib.h>

     #include <gnuastro/fits.h>
     #include <gnuastro/threads.h>



     /* This structure can keep all information you want to pass onto the
      * worker function on each thread. */
     struct params
     {
       gal_data_t *image;            /* Dataset to print values of. */
     };



     /* This is the main worker function which will be called by the
      * different threads. `gal_threads_params' is defined in
      * `gnuastro/threads.h' and contains the pointer to the parameter we
      * want. Note that the input argument and returned value of this
      * function always must have `void *' type. */
     void *
     worker_on_thread(void *in_prm)
     {
       /* Low-level definitions to be done first. */
       struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm;
       struct params *p=(struct params *)tprm->params;


       /* Subsequent definitions. */
       float *array=p->image->array;
       size_t i, index, *dsize=p->image->dsize;


       /* Go over all the actions (pixels in this case) that were assigned
        * to this thread. */
       for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i)
         {
           /* For easy reading. */
           index = tprm->indexs[i];


           /* Print the information. */
           printf("(%zu, %zu) on thread %zu: %g\n", index%dsize[1]+1,
                  index/dsize[1]+1, tprm->id, array[index]);
         }


       /* Wait for all the other threads to finish, then return. */
       if(tprm->b) pthread_barrier_wait(tprm->b);
       return NULL;
     }




     /* High-level function (called by the operating system). */
     int
     main(void)
     {
       struct params p;
       char *filename="input.fits", *hdu="1";
       size_t numthreads=gal_threads_number();

       /* We are using * `-1' for `minmapsize' to ensure that the image is
        * read into * memory and `1' for `quietmmap' (which can also be
        * zero), see the "Memory management" section in the book. */
       int quietmmap=1;
       size_t minmapsize=-1;


       /* Read the image into memory as a float32 data type. */
       p.image=gal_fits_img_read_to_type(filename, hdu, GAL_TYPE_FLOAT32,
                                         minmapsize, quietmmap);


       /* Print some basic information before the actual contents: */
       printf("Pixel values of %s (HDU: %s) on %zu threads.\n", filename,
              hdu, numthreads);
       printf("Used to check the compiled library's capability in opening "
              "a FITS file, and also spinning off threads.\n");


       /* A small sanity check: this is only intended for 2D arrays (to
        * print the coordinates of each pixel). */
       if(p.image->ndim!=2)
         {
           fprintf(stderr, "only 2D images are supported.");
           exit(EXIT_FAILURE);
         }


       /* Spin-off the threads and do the processing on each thread. */
       gal_threads_spin_off(worker_on_thread, &p, p.image->size, numthreads,
                            minmapsize, quietmmap);


       /* Clean up and return. */
       gal_data_free(p.image);
       return EXIT_SUCCESS;
     }


File: gnuastro.info,  Node: Library demo - reading and writing table columns,  Next: Library demo - Warp to another image,  Prev: Library demo - multi-threaded operation,  Up: Library demo programs

12.4.4 Library demo - reading and writing table columns
-------------------------------------------------------

Tables are some of the most common inputs to, and outputs of programs.
This section contains a small program for reading and writing tables
using the constructs described in *note Table input output::.  For easy
linking/compilation of this program, along with a first run, see
Gnuastro’s *note BuildProgram::.  Before running, also set the following
file and column names in the first two lines of ‘main’.  The input and
output names may be ‘.txt’ and ‘.fits’ tables, ‘gal_table_read’ and
‘gal_table_write’ will be able to write to both formats.  For plain text
tables see *note Gnuastro text table format::.  If you do not have any
table in text file format to use as your input, you can use the table
that is generated in *note Sufi simulates a detection:: section.

   This example program reads three columns from a table.  The first two
columns are selected by their name (‘NAME1’ and ‘NAME2’) and the third
is selected by its number: column 10 (counting from 1).  Gnuastro’s
column selection is discussed in *note Selecting table columns::.  The
first and second columns can be any type, but this program will convert
them to ‘int32_t’ and ‘float’ for its internal usage respectively.
However, the third column must be double for this program.  So if it is
not, the program will abort with an error.  Having the columns in
memory, it will print them out along with their sum (just a simple
application, you can do what ever you want at this stage).  Reading the
table finishes here.

   The rest of the program is a demonstration of writing a table.  While
parsing the rows, this program will change the first column (to be
counters) and multiply the second by 10 (so the output will be
different).  Then it will define the order of the output columns by
setting the ‘next’ element (to create a *note List of gal_data_t::).
Before writing, this function will also set names for the columns (units
and comments can be defined in a similar manner).  Writing the columns
to a file is then done through a simple call to ‘gal_table_write’.

   The operations that are shown in this example program are not
necessary all the time.  For example, in many cases, you know the
numerical data type of the column before writing your program (see *note
Numeric data types::), so type checking and copying to a specific type
will not be necessary.

   To encourage good coding practices, this script contains a copyright
notice with a place holder for your name and your email (as you
customize it for your own purpose).  Always keep a one-line description
and copyright notice like this in all your scripts, such “metadata” is
very important to accompany every source file you write.  Of course,
when you write the source file from scratch and just learn how to use a
single function from this manual, only your name/year should appear.
The existing name of the original author of this example program is only
for cases where you copy-paste this whole file.

     /* Reading and writing table columns.
      *
      * This example program reads three columns from a table. Having the
      * columns in memory, it will print them out along with their sum. The
      * rest of the program is a demonstration of writing a table.
      *
      * Copyright (C) 2023      Your Name <your@@email.address>
      * Copyright (C) 2020-2023 Mohammad Akhlaghi <mohammad@@akhlaghi.org>
      *
      * This program 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.
      *
      * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
      */
     
     #include <stdio.h>
     #include <stdlib.h>
     
     #include <gnuastro/table.h>
     
     int
     main(void)
     {
       /* File names and column names (which may also be numbers). */
       char *c1_name="NAME1", *c2_name="NAME2", *c3_name="10";
       char *inname="input.fits", *hdu="1", *outname="out.fits";
     
       /* Internal parameters. */
       float *array2=NULL;
       double *array3=NULL;
       int32_t *array1=NULL;
       size_t i, counter=0;
       gal_data_t *c1=NULL;
       gal_data_t *c2=NULL;
       gal_data_t tmp, *col, *columns;
       gal_list_str_t *column_ids=NULL;
     
       /* Define the columns to read. */
       gal_list_str_add(&column_ids, c1_name, 0);
       gal_list_str_add(&column_ids, c2_name, 0);
       gal_list_str_add(&column_ids, c3_name, 0);
     
       /* The columns were added in reverse, so correct it. */
       gal_list_str_reverse(&column_ids);
     
       /* Read the desired columns. */
       columns = gal_table_read(inname, hdu, NULL, column_ids,
                                GAL_TABLE_SEARCH_NAME, 0, 1, -1, 1, NULL);
     
       /* Go over the columns, we will assume that you do not know their type
        * a-priori, so we will check  */
       counter=1;
       for(col=columns; col!=NULL; col=col->next)
         switch(counter++)
           {
           case 1:              /* First column: we want it as int32_t. */
             c1=gal_data_copy_to_new_type(col, GAL_TYPE_INT32);
             array1 = c1->array;
             break;
     
           case 2:              /* Second column: we want it as float.  */
             c2=gal_data_copy_to_new_type(col, GAL_TYPE_FLOAT32);
             array2 = c2->array;
             break;
     
           case 3:              /* Third column: it MUST be double.     */
             if(col->type!=GAL_TYPE_FLOAT64)
               {
                 fprintf(stderr, "Column %s must be float64 type, it is "
                         "%s", c3_name, gal_type_name(col->type, 1));
                 exit(EXIT_FAILURE);
               }
             array3 = col->array;
             break;
     
           default:
             exit(EXIT_FAILURE);
           }
     
       /* As an example application we will just print them out. In the
        * meantime (just for a simple demonstration), change the first
        * array value to the counter and multiply the second by 10. */
       for(i=0;i<c1->size;++i)
         {
           printf("%zu: %d + %f + %f = %f\n", i+1, array1[i], array2[i],
                  array3[i], array1[i]+array2[i]+array3[i]);
           array1[i]  = i+1;
           array2[i] *= 10;
         }
     
       /* Link the first two columns as a list. */
       c1->next = c2;
       c2->next = NULL;
     
       /* Set names for the columns and write them out. */
       c1->name = "COUNTER";
       c2->name = "VALUE";
       gal_table_write(c1, NULL, NULL, GAL_TABLE_FORMAT_BFITS, outname,
                       "MY-COLUMNS", 0);
     
       /* The names were not allocated, so to avoid cleaning-up problems,
        * we will set them to NULL. */
       c1->name = c2->name = NULL;
     
       /* Clean up and return.  */
       gal_data_free(c1);
       gal_data_free(c2);
       gal_list_data_free(columns);
       gal_list_str_free(column_ids, 0); /* strings were not allocated. */
       return EXIT_SUCCESS;
     }


File: gnuastro.info,  Node: Library demo - Warp to another image,  Next: Library demo - Warp to new grid,  Prev: Library demo - reading and writing table columns,  Up: Library demo programs

12.4.5 Library demo - Warp to another image
-------------------------------------------

Gnuastro’s warp library (that you can access by including
‘gnuastro/warp.h’) allows you to resample an image from a grid to
another entirely using the WCSLIB (while accounting for distortions if
necessary; see *note Warp library::).  The Warp library uses a
pixel-mixing or area-based resampling approach which is fully described
in *note Resampling::.  The most generic uses cases for this library are
already available in the *note Invoking astwarp:: program.  For a
related demo (where the output grid and WCS are constructed from
scratch), see *note Library demo - Warp to new grid::.

   In the example below, we are warping the ‘input.fits’ file to the
same pixel grid and WCS as ‘reference.fits’ image (assuming it is in hdu
‘0’).  You can download the FITS files in the *note Color channels in
same pixel grid:: section and use them as ‘input.fits’ and
‘reference.fits’ files.  Feel free to change these names to your own
test file names.  This can be useful when you have a complex grid and
WCS containing various keywords such as non-linear distortion
coefficients, etc.  For example datasets, see the description of the
‘--gridfile’ option in *note Align pixels with WCS considering
distortions::.

   To compile the demonstration program below, copy and paste the
contents in a plain-text file (let’s assume you named it
‘align-to-img.c’) and use *note BuildProgram:: with this command:
‘‘astbuildprog align-to-img.c’’.  Please note that the demo program does
not perform many sanity checks to avoid making it too complex and to
highlight this particular feature in the library.  For a robust method
write programs with all the necessary sanity checks, see Gnuastro’s Warp
source code, see *note Program source::.

   To encourage good coding practices, this script contains a copyright
notice with a place holder for your name and your email (as you
customize it for your own purpose).  Always keep a one-line description
and copyright notice like this in all your scripts, such “metadata” is
very important to accompany every source file you write.  Of course,
when you write the source file from scratch and just learn how to use a
single function from this manual, only your name/year should appear.
The existing name of the original author of this example program is only
for cases where you copy-paste this whole file.

     /* Warp to another image.
      *
      * In the example below, we are warping the input.fits file to the same
      * pixel grid and WCS as reference.fits image.
      *
      * Copyright (C) 2023      Your Name <your@@email.address>
      * Copyright (C) 2022-2023 Pedram Ashofteh-Ardakani <pedramardakani@pm.me>
      *
      * This program 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.
      *
      * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
      */
     
     #include <stdio.h>
     #include <stdlib.h>
     
     #include <gnuastro/wcs.h>       /* contains gnuastro's fits.h */
     #include <gnuastro/warp.h>      /* contains gnuastro's data.h */
     #include <gnuastro/array.h>     /* contains gnuastro's type.h */
     
     int
     main(void)
     {
       /* Input file's name and HDU. */
       char *filename="input.fits", *hdu="1";
     
       /* Reference file's name and HDU. */
       char *gridfile="reference.fits", *gridhdu="0";
     
       /* Output file name. */
       char *outname="align-to-img.fits";
     
       /* Low-level variables needed to read the reference file's size. */
       int nwcs;
       size_t ndim, *dsize;
     
       /* Initialize the 'wa' struct with empty values and NULL pointers. */
       gal_warp_wcsalign_t wa=gal_warp_wcsalign_template();
     
       /* Read the input image and its WCS. */
       wa.input=gal_array_read_one_ch_to_type(filename, hdu, NULL,
                                              GAL_TYPE_FLOAT64, -1,  0);
       wa.input->wcs=gal_wcs_read(filename, hdu, 0, 0, 0, &wa.input->nwcs);
     
       /* Prepare the warp input structure, use all threads available. */
       wa.coveredfrac=1; wa.edgesampling=0; wa.numthreads=0;
     
       /* Set the target grid to be the same as wcsref.fits file on hdu 0. */
       wa.twcs=gal_wcs_read(gridfile, gridhdu, 0, 0, 0, &nwcs);
       if(wa.twcs==NULL)
         {
           fprintf(stderr, "%s (hdu %s): no WCS! Can't continue\n",
     	      gridfile, gridhdu);
           exit(EXIT_FAILURE);
         }
     
       /* Read the output image size (from the reference image). Note that
        * 'dsize' will be freed while freeing 'widthinpix'). */
       dsize=gal_fits_img_info_dim(gridfile, gridhdu, &ndim);
     
       /* Convert the 'dsize' to a 'gal_data_t' so the library can use it. */
       wa.widthinpix=gal_data_alloc(dsize, GAL_TYPE_SIZE_T, 1, &ndim,
     			       NULL, 1, -1, 0, NULL, NULL, NULL);
     
       /* Do the warp, then convert the output to a 32-bit float (the default
        * float64 is too much for observational data and just wastes
        * storage!). But if you are warping mock data before adding noise
        * (where you do have float64 level precision), remove the type
        * conversion line. */
       gal_warp_wcsalign(&wa);
       wa.output=gal_data_copy_to_new_type_free(wa.output, GAL_TYPE_FLOAT32);
     
       /* WARNING: make sure there is no file with same name as 'out.fits'
        * or the result will be appended to its final HDU. */
       gal_fits_img_write(wa.output, outname, NULL, "warp-demo");
     
       /* Clean up. */
       gal_data_free(wa.input);
       gal_data_free(wa.output);
       gal_data_free(wa.widthinpix);
     
       /* Give control back to the operating system. */
       return EXIT_SUCCESS;
     }


File: gnuastro.info,  Node: Library demo - Warp to new grid,  Prev: Library demo - Warp to another image,  Up: Library demo programs

12.4.6 Library demo - Warp to new grid
--------------------------------------

Gnuastro’s warp library (that you can access by including
‘gnuastro/warp.h’) allows you to resample an image from a grid to
another entirely using the WCSLIB (while accounting for distortions if
necessary; see *note Warp library::).  The Warp library uses a
pixel-mixing or area-based resampling approach which is fully described
in *note Resampling::.  The most generic uses cases for this library are
already available in the *note Invoking astwarp:: program.  For a
related demo (where the output grid and WCS are imported from another
file), see *note Library demo - Warp to another image::.

   In the example below, we’ll assume you have the SDSS image downloaded
in *note Downloading and validating input data::.  After downloading the
image as described there, you will have ‘r.fits’ in your current
directory.  We will therefore use ‘r.fits’ as the input to the rest
program here.  The image is not aligned to the celestial coordinates, so
we will align the pixel and WCS coordinates, but set the center of the
pixel grid to be at (RA,Dec) of (202.4173735,47.3374525).  We also give
it a ‘TAN’ projection with a pixel scale of 0.27 arcsecs, a defined
center pixel.  However, we’ll let the Warp library measure the proper
output image size that will contain the aligned image.

   To compile the demonstration program below, copy and paste the
contents in a plain-text file (let’s assume you named it
‘align-to-new.c’) and use *note BuildProgram:: with this command:
‘‘astbuildprog align-to-new.c’’.  Please note that the demo program does
not perform many sanity checks to avoid making it too complex and to
highlight this particular feature in the library.  For a robust method
write programs with all the necessary sanity checks, see Gnuastro’s Warp
source code, see *note Program source::.

   To encourage good coding practices, this script contains a copyright
notice with a place holder for your name and your email (as you
customize it for your own purpose).  Always keep a one-line description
and copyright notice like this in all your scripts, such “metadata” is
very important to accompany every source file you write.  Of course,
when you write the source file from scratch and just learn how to use a
single function from this manual, only your name/year should appear.
The existing name of the original author of this example program is only
for cases where you copy-paste this whole file.

     /* Warp an image to a new grid.
      *
      * In the example below, We will use 'r.fits' as the input. The image is
      * not aligned to the celestial coordinates, so we will align the pixel
      * and WCS coordinates. We also give it a TAN projection. However, we’ll
      * let the Warp library measure the proper output image size that will
      * contain the aligned image.
      *
      * Copyright (C) 2023      Your Name <your@@email.address>
      * Copyright (C) 2022-2023 Pedram Ashofteh-Ardakani <pedramardakani@pm.me>
      *
      * This program 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.
      *
      * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
      */
     
     #include <stdio.h>
     #include <stdlib.h>
     
     #include <gnuastro/wcs.h>       /* Contains gnuastro's fits.h */
     #include <gnuastro/warp.h>      /* Contains gnuastro's data.h */
     #include <gnuastro/array.h>     /* Contains gnuastro's type.h */
     
     int
     main(void)
     {
       /* Input file's name and HDU. */
       char *filename="r.fits", *hdu="0";
     
       /* Output file name. */
       char *outname="align-to-new.fits";
     
       /* RA/Dec of the center of the central pixel of output. Please
        * change the center based on your input. */
       double center[]={202.4173735, 47.3374525};
     
       /* Coordinate and Projection algorithms of output. */
       char *ctype[2]={"RA---TAN", "DEC--TAN"};
     
       /* Output pixel scale (in units of degrees/pixel). */
       double cdelt[]={0.27/3600, 0.27/3600};
     
       /* For intermediate steps. */
       size_t two=2;
     
       /* Initialize the 'wa' struct with empty values and NULL pointers. */
       gal_warp_wcsalign_t wa=gal_warp_wcsalign_template();
     
       /* Set the width (and height!) of the output in pixels (as a 1D and
        * 2 element 'gal_data_t'). When it is NULL, the library will
        * calculate the appropriate width to fully fit the input image
        * after alignment. */
       wa.widthinpix=NULL;
     
       /* Set the number of threads to use. If the value is '0', the
        * library will estimate the maximum available threads at
        * run-time on the host operating system. */
       wa.numthreads=0;
     
     
       /* Read the input image and its WCS. */
       wa.input=gal_array_read_one_ch_to_type(filename, hdu, NULL,
     					 GAL_TYPE_FLOAT64, -1, 0);
       wa.input->wcs=gal_wcs_read(filename, hdu, 0, 0, 0, &wa.input->nwcs);
     
     
       /* Prepare the warp input structure. */
       wa.coveredfrac=1; wa.edgesampling=0;
       wa.ctype=gal_data_alloc(ctype, GAL_TYPE_STRING, 1, &two, NULL, 1,
                               -1, 0, NULL, NULL, NULL);
       wa.cdelt=gal_data_alloc(cdelt, GAL_TYPE_FLOAT64, 1, &two, NULL, 1,
                               -1, 0, NULL, NULL, NULL);
       wa.center=gal_data_alloc(center, GAL_TYPE_FLOAT64, 1, &two, NULL, 1,
                                -1, 0, NULL, NULL, NULL);
     
     
       /* Do the warp, then convert it to a 32-bit float. */
       gal_warp_wcsalign(&wa);
       wa.output=gal_data_copy_to_new_type_free(wa.output, GAL_TYPE_FLOAT32);
     
     
       /* WARNING: make sure there is no file with same name as 'out.fits'
        * or the result will be appended to its final HDU. */
       gal_fits_img_write(wa.output, outname, NULL, "warp-demo");
     
     
       /* Remove the pointers to arrays that we didn't allocate (and thus,
        * should not be freed by 'gal_data_free' below). */
       wa.cdelt->array=wa.center->array=wa.ctype->array=NULL;
     
     
       /* Clean up. */
       gal_data_free(wa.cdelt);   gal_data_free(wa.ctype);
       gal_data_free(wa.input);   gal_data_free(wa.output);
       gal_data_free(wa.center);  gal_data_free(wa.widthinpix);
     
       /* Give control back to the operating system. */
       return EXIT_SUCCESS;
     }


File: gnuastro.info,  Node: Developing,  Next: Other useful software,  Prev: Library,  Up: Top

13 Developing
*************

The basic idea of GNU Astronomy Utilities is for an interested
astronomer to be able to easily understand the code of any of the
programs or libraries, be able to modify the code if s/he feels there is
an improvement and finally, to be able to add new programs or libraries
for their own benefit, and the larger community if they are willing to
share it.  In short, we hope that at least from the software point of
view, the “obscurantist faith in the expert’s special skill and in his
personal knowledge and authority” can be broken, see *note Science and
its tools::.  With this aim in mind, Gnuastro was designed to have a
very basic, simple, and easy to understand architecture for any
interested inquirer.

   This chapter starts with very general design choices, in particular
*note Why C:: and *note Program design philosophy::.  It will then get a
little more technical about the Gnuastro code and file/directory
structure in *note Coding conventions:: and *note Program source::.
*note The TEMPLATE program:: discusses a minimal (and working) template
to help in creating new programs or easier learning of a program’s
internal structure.  Some other general issues about documentation,
building and debugging are then discussed.  This chapter concludes with
how you can learn about the development and get involved in *note
Gnuastro project webpage::, *note Developing mailing lists:: and *note
Contributing to Gnuastro::.

* Menu:

* Why C::                       Why Gnuastro is designed in C.
* Program design philosophy::   General ideas behind the package structure.
* Coding conventions::          Gnuastro coding conventions.
* Program source::              Conventions for the code.
* Documentation::               Documentation is an integral part of Gnuastro.
* Building and debugging::      Build and possibly debug during development.
* Test scripts::                Understanding the test scripts.
* Bash programmable completion::  Auto-completions for better user experience.
* Developer's checklist::       Checklist to finalize your changes.
* Gnuastro project webpage::    Central hub for Gnuastro activities.
* Developing mailing lists::    Stay up to date with Gnuastro’s development.
* Contributing to Gnuastro::    Share your changes with all users.


File: gnuastro.info,  Node: Why C,  Next: Program design philosophy,  Prev: Developing,  Up: Developing

13.1 Why C programming language?
================================

Currently the programming languages that are commonly used in scientific
applications are C++(1), Java(2); Python(3), and Julia(4) (which is a
newcomer but swiftly gaining ground).  One of the main reasons behind
choosing these is their high-level abstractions.  However, GNU Astronomy
Utilities is fully written in the C programming language(5).  The
reasons can be summarized with simplicity, portability and
efficiency/speed.  All four are very important in a scientific software
and we will discuss them below.

   Simplicity can best be demonstrated in a comparison of the main books
of C++ and C. The “C programming language”(6) book, written by the
authors of C, is only 286 pages and covers a very good fraction of the
language, it has also remained unchanged from 1988.  C is the main
programming language of nearly all operating systems and there is no
plan of any significant update.  On the other hand, the most recent “C++
programming language”(7) book, also written by its author, has 1366
pages and its fourth edition came out in 2013!  As discussed in *note
Science and its tools::, it is very important for other scientists to be
able to readily read the code of a program at their will with minimum
requirements.

   In C++ or Java, inheritance in the object oriented programming
paradigm and their internal functions make the code very easy to write
for a programmer who is deeply invested in those objects and understands
all their relations well.  But it simultaneously makes reading the
program for a first time reader (a curious scientist who wants to know
only how a small step was done) extremely hard.  Before understanding
the methods, the scientist has to invest a lot of time and energy in
understanding those objects and their relations.  But in C, everything
is done with basic language types for example ‘int’s or ‘float’s and
their pointers to define arrays.  So when an outside reader is only
interested in one part of the program, that part is all they have to
understand.

   Recently it is also becoming common to write scientific software in
Python, or a combination of it with C or C++.  Python is a high level
scripting language which does not need compilation.  It is very useful
when you want to do something on the go and do not want to be halted by
the troubles of compiling, linking, memory checking, etc.  When the
datasets are small and the job is temporary, this ability of Python is
great and is highly encouraged.  A very good example might be plotting,
in which Python is undoubtedly one of the best.

   But as the data sets increase in size and the processing becomes more
complicated, the speed of Python scripts significantly decrease.  So
when the program does not change too often and is widely used in a large
community, mostly on large data sets (like astronomical images), using
Python will waste a lot of valuable research-hours.  It is possible to
wrap C or C++ functions with Python to fix the speed issue.  But this
creates further complexity, because the interested scientist has to
master two programming languages and their connection (which is not
trivial).

   Like C++, Python is object oriented, so as explained above, it needs
a high level of experience with that particular program to reasonably
understand its inner workings.  To make things worse, since it is mainly
for on-the-go programming(8), it can undergo significant changes.  One
recent example is how Python 2.x and Python 3.x are not compatible.
Lots of research teams that invested heavily in Python 2.x cannot
benefit from Python 3.x or future versions any more.  Some converters
are available, but since they are automatic, lots of complications might
arise in the conversion(9).  If a research project begins using Python
3.x today, there is no telling how compatible their investments will be
when Python 4.x or 5.x will come out.

   Java is also fully object-oriented, but uses a different paradigm:
its compilation generates a hardware-independent _bytecode_, and a _Java
Virtual Machine_ (JVM) is required for the actual execution of this
bytecode on a computer.  Java also evolved with time, and tried to
remain backward compatible, but inevitably this evolution required
discontinuities and replacements of a few Java components which were
first declared as becoming _deprecated_, and removed from later
versions.

   This stems from the core principles of high-level languages like
Python or Java: that they evolve significantly on the scale of roughly 5
to 10 years.  They are therefore useful when you want to solve a
short-term problem and you are ready to pay the high cost of keeping
your software up to date with all the changes in the language.  This is
fine for private companies, but usually too expensive for scientific
projects that have limited funding for a fixed period.  As a result, the
reproducibility of the result (ability to regenerate the result in the
future, which is a core principal of any scientific result) and
reusability of all the investments that went into the science software
will be lost to future generations!  Rebuilding all the dependencies of
a software in an obsolete language is not easy, or even not possible.
Future-proof code (as long as current operating systems will be used) is
therefore written in C.

   The portability of C is best demonstrated by the fact that C++, Java
and Python are part of the C-family of programming languages which also
include Julia, Perl, and many other languages.  C libraries can be
immediately included in C++, and it is easy to write wrappers for them
in all C-family programming languages.  This will allow other scientists
to benefit from C libraries using any C-family language that they
prefer.  As a result, Gnuastro’s library is already usable in C and C++,
and wrappers will be(10) added for higher-level languages like Python,
Julia and Java.

   The final reason was speed.  This is another very important aspect of
C which is not independent of simplicity (first reason discussed above).
The abstractions provided by the higher-level languages (which also
makes learning them harder for a newcomer) come at the cost of speed.
Since C is a low-level language(11) (closer to the hardware), it has a
direct access to the CPU(12), is generally considered as being faster in
its execution, and is much less complex for both the human reader _and_
the computer.  The benefits of simplicity for a human were discussed
above.  Simplicity for the computer translates into more efficient
(faster) programs.  This creates a much closer relation between the
scientist/programmer (or their program) and the actual data and
processing.  The GNU coding standards(13) also encourage the use of C
over all other languages when generality of usage and “high speed” is
desired.

   ---------- Footnotes ----------

   (1) <https://isocpp.org/>

   (2) <https://en.wikipedia.org/wiki/Java_(programming_language)>

   (3) <https://www.python.org/>

   (4) <https://julialang.org/>

   (5) <https://en.wikipedia.org/wiki/C_(programming_language)>

   (6) Brian Kernighan, Dennis Ritchie.  _The C programming language_.
Prentice Hall, Inc., Second edition, 1988.  It is also commonly known as
K&R and is based on the ANSI C and ISO C90 standards.

   (7) Bjarne Stroustrup.  _The C++ programming language_.
Addison-Wesley Professional; 4 edition, 2013.

   (8) Note that Python is good for fast programming, not fast programs.

   (9) For example see Jenness (2017) (https://arxiv.org/abs/1712.00461)
which describes how LSST is managing the transition.

   (10) <http://savannah.gnu.org/task/?13786>

   (11) Low-level languages are those that directly operate the hardware
like assembly languages.  So C is actually a high-level language, but it
can be considered one of the lowest-level languages among all high-level
languages.

   (12) for instance the _long double_ numbers with at least 64-bit
mantissa are not accessible in Python or Java.

   (13) <http://www.gnu.org/prep/standards/>


File: gnuastro.info,  Node: Program design philosophy,  Next: Coding conventions,  Prev: Why C,  Up: Developing

13.2 Program design philosophy
==============================

The core processing functions of each program (and all libraries) are
written mostly with the basic ISO C90 standard.  We do make lots of use
of the GNU additions to the C language in the GNU C library(1), but
these functions are mainly used in the user interface functions (reading
your inputs and preparing them prior to or after the analysis).  The
actual algorithms, which most scientists would be more interested in,
are much more closer to ISO C90.  For this reason, program source files
that deal with user interface issues and those doing the actual
processing are clearly separated, see *note Program source::.  If
anything particular to the GNU C library is used in the processing
functions, it is explained in the comments in between the code.

   All the Gnuastro programs provide very low level and modular
operations (modeled on GNU Coreutils).  Almost all the basic
command-line programs like ‘ls’, ‘cp’ or ‘rm’ on GNU/Linux operating
systems are part of GNU Coreutils.  This enables you to use shell
scripting languages (for example, GNU Bash) to operate on a large number
of files or do very complex things through the creative combinations of
these tools that the authors had never dreamed of.  We have put a few
simple examples in *note Tutorials::.

   For example, all the analysis output can be saved as ASCII tables
which can be fed into your favorite plotting program to inspect
visually.  Python’s Matplotlib is very useful for fast plotting of the
tables to immediately check your results.  If you want to include the
plots in a document, you can use the PGFplots package within LaTeX, no
attempt is made to include such operations in Gnuastro.  In short, Bash
can act as a glue to connect the inputs and outputs of all these various
Gnuastro programs (and other programs) in any fashion.  Of course,
Gnuastro’s programs are just front-ends to the main workhorse (*note
Gnuastro library::), allowing a user to create their own programs (for
example, with *note BuildProgram::).  So once the functions within
programs become mature enough, they will be moved within the libraries
for even more general applications.

   The advantage of this architecture is that the programs become small
and transparent: the starting and finishing point of every program is
clearly demarcated.  For nearly all operations on a modern computer
(fast file input-output) with a modest level of complexity, the
read/write speed is insignificant compared to the actual processing a
program does.  Therefore the complexity which arises from sharing memory
in a large application is simply not worth the speed gain.  Gnuastro’s
design is heavily influenced from Eric Raymond’s “The Art of Unix
Programming”(2) which beautifully describes the design philosophy and
practice which lead to the success of Unix-based operating systems(3).

   ---------- Footnotes ----------

   (1) Gnuastro uses many GNU additions to the C library.  However,
thanks to the GNU Portability library (Gnulib) which is included in the
Gnuastro tarball, users of non-GNU/Linux operating systems can also
benefit from all these features when using Gnuastro.

   (2) Eric S. Raymond, 2004, _The Art of Unix Programming_,
Addison-Wesley Professional Computing Series.

   (3) KISS principle: Keep It Simple, Stupid!


File: gnuastro.info,  Node: Coding conventions,  Next: Program source,  Prev: Program design philosophy,  Up: Developing

13.3 Coding conventions
=======================

In Gnuastro, we try our best to follow the GNU coding standards.  Added
to those, Gnuastro defines the following conventions.  It is very
important for readability that the whole package follows the same
convention.

   • The code must be easy to read by eye.  So when the order of several
     lines within a function does not matter (for example, when defining
     variables at the start of a function).  You should put the lines in
     the order of increasing length and group the variables with similar
     types such that this half-pyramid of declarations becomes most
     visible.  If the reader is interested, a simple search will show
     them the variable they are interested in.  However, this visual aid
     greatly helps in general inspections of the code and help the
     reader get a grip of the function’s processing.

   • A function that cannot be fully displayed (vertically) in your
     monitor is probably too long and may be more useful if it is broken
     up into multiple functions.  40 lines is usually a good reference.
     When the start and end of a function are clearly visible in one
     glance, the function is much more easier to understand.  This is
     most important for low-level functions (which usually define a lot
     of variables).  Low-level functions do most of the processing, they
     will also be the most interesting part of a program for an
     inquiring astronomer.  This convention is less important for higher
     level functions that do not define too many variables and whose
     only purpose is to run the lower-level functions in a specific
     order and with checks.

     In general you can be very liberal in breaking up the functions
     into smaller parts, the GNU Compiler Collection (GCC) will
     automatically compile the functions as inline functions when the
     optimizations are turned on.  So you do not have to worry about
     decreasing the speed.  By default Gnuastro will compile with the
     ‘-O3’ optimization flag.

   • All Gnuastro hand-written text files (C source code, Texinfo
     documentation source, and version control commit messages) should
     normally be no more than *75* characters per line.  Monitors today
     are certainly much wider, but with this limit, reading the
     functions becomes much more easier.  Also for the developers, it
     allows multiple files (or multiple views of one file) to be
     displayed beside each other on wide monitors.

     Emacs’s buffers are excellent for this capability, setting a buffer
     width of 80 with ‘<C-u 80 C-x 3>’ will allow you to view and work
     on several files or different parts of one file using the wide
     monitors common today.  Emacs buffers can also be used as a shell
     prompt and compile the program (with <M-x compile>), and 80
     characters is the default width in most terminal emulators.  If you
     use Emacs, Gnuastro sets the 75 character ‘fill-column’ variable
     automatically for you, see cartouche below.

     For long comments you can use press <Alt-q> in Emacs to separate
     them into separate lines automatically.  For long literal strings,
     you can use the fact that in C, two strings immediately after each
     other are concatenated, for example, ‘"The first part, " "and the
     second part."’.  Note the space character in the end of the first
     part.  Since they are now separated, you can easily break a long
     literal string into several lines and adhere to the maximum 75
     character line length policy.

   • The headers required by each source file (ending with ‘.c’) should
     be defined inside of it.  All the headers a complete program needs
     should _not_ be stacked in another header to include in all source
     files (for example ‘main.h’).  Although most ‘professional’
     programmers choose this single header method, Gnuastro is primarily
     written for professional/inquisitive astronomers (who are generally
     amateur programmers).  The list of header files included provides
     valuable general information and helps the reader.  ‘main.h’ may
     only include the header file(s) that define types that the main
     program structure needs, see ‘main.h’ in *note Program source::.
     Those particular header files that are included in ‘main.h’ can of
     course be ignored (not included) in separate source files.

   • The headers should be classified (by an empty line) into separate
     groups:

       1. ‘#include <config.h>’: This must be the first code line (not
          commented or blank) in each source file _within Gnuastro_.  It
          sets macros that the GNU Portability Library (Gnulib) will use
          for a unified environment (GNU C Library), even when the user
          is building on a system that does not use the GNU C library.

       2. The C library header files, for example, ‘stdio.h’,
          ‘stdlib.h’, or ‘math.h’.
       3. Installed library header files, including Gnuastro’s installed
          headers (for example ‘cfitsio.h’ or ‘gsl/gsl_rng.h’, or
          ‘gnuastro/fits.h’).
       4. Gnuastro’s internal headers (that are not installed), for
          example ‘gnuastro-internal/options.h’.
       5. For programs, the ‘main.h’ file (which is needed by the next
          group of headers).
       6. That particular program’s header files, for example,
          ‘mkprof.h’, or ‘noisechisel.h’.

     As much as order does not matter when you include the header of
     each group, sort them by length, as described above.

   • All function names, variables, etc., should be in lower case.
     Macros and constant global ‘enum’s should be in upper case.

   • For the naming of exported header files, functions, variables,
     macros, and library functions, we adopt similar conventions to
     those used by the GNU Scientific Library (GSL)(1). In particular,
     in order to avoid clashes with the names of functions and variables
     coming from other libraries the name-space ‘‘gal_’’ is prefixed to
     them.  GAL stands for _G_NU _A_stronomy _L_ibrary.

   • All installed header files should be in the ‘lib/gnuastro’
     directory (under the top Gnuastro source directory).  After
     installation, they will be put in the ‘$prefix/include/gnuastro’
     directory (see *note Installation directory:: for ‘$prefix’).
     Therefore with this convention Gnuastro’s headers can be included
     in internal (to Gnuastro) and external (a library user) source
     files with the same line
          # include <gnuastro/headername.h>
     Note that the GSL convention for header file names is
     ‘gsl_specialname.h’, so your include directive for a GSL header
     must be something like ‘#include <gsl/gsl_specialname.h>’.
     Gnuastro does not follow this GSL guideline because of the repeated
     ‘gsl’ in the include directive.  It can be confusing and cause bugs
     for beginners.  All Gnuastro (and GSL) headers must be located
     within a unique directory and will not be mixed with other headers.
     Therefore the ‘‘gsl_’’ prefix to the header file names is
     redundant(2).

   • All installed functions and variables should also include the
     base-name of the file in which they are defined as prefix, using
     underscores to separate words(3).  The same applies to exported
     macros, but in upper case.  For example, in Gnuastro’s top source
     directory, the prototype of function ‘gal_box_border_from_center’
     is in ‘lib/gnuastro/box.h’, and the macro ‘GAL_POLYGON_MAX_CORNERS’
     is defined in ‘lib/gnuastro/polygon.h’.

     This is necessary to give any user (who is not familiar with the
     library structure) the ability to follow the code.  This convention
     does make the function names longer (a little harder to write), but
     the extra documentation it provides plays an important role in
     Gnuastro and is worth the cost.

   • There should be no trailing white space in a line.  To do this
     automatically every time you save a file in Emacs, add the
     following line to your ‘~/.emacs’ file.
          (add-hook 'before-save-hook 'delete-trailing-whitespace)

   • There should be no tabs in the indentation(4).

   • Individual, contextually similar, functions in a source file are
     separated by 5 blank lines to be easily seen to be related in a
     group when parsing the source code by eye.  In Emacs you can use
     <CTRL-u 5 CTRL-o>.

   • One group of contextually similar functions in a source file is
     separated from another with 20 blank lines.  In Emacs you can use
     <CTRL-u 20 CTRL-o>.  Each group of functions has short descriptive
     title of the functions in that group.  This title is surrounded by
     asterisks (<*>) to make it clearly distinguishable.  Such
     contextual grouping and clear title are very important for easily
     understanding the code.

   • Always read the comments before the patch of code under it.
     Similarly, try to add as many comments as you can regarding every
     patch of code.  Effectively, we want someone to get a good feeling
     of the steps, without having to read the C code and only by reading
     the comments.  This follows similar principles as Literate
     programming (https://en.wikipedia.org/wiki/Literate_programming).

   The last two conventions are not common and might benefit from a
short discussion here.  With a good experience in advanced text editor
operations, the last two are redundant for a professional developer.
However, recall that Gnuastro aspires to be friendly to unfamiliar, and
inexperienced (in programming) eyes.  In other words, as discussed in
*note Science and its tools::, we want the code to appear welcoming to
someone who is completely new to coding (and text editors) and only has
a scientific curiosity.

   Newcomers to coding and development, who are curious enough to
venture into the code, will probably not be using (or have any knowledge
of) advanced text editors.  They will see the raw code in the web page
or on a simple text editor (like Gedit) as plain text.  Trying to learn
and understand a file with dense functions that are all spaced with one
or two blank lines can be very taunting for a newcomer.  But when they
scroll through the file and see clear titles and meaningful spaces for
similar functions, we are helping them find and focus on the part they
are most interested in sooner and easier.

*GNU Emacs, the recommended text editor:* GNU Emacs is an extensible and
easily customizable text editor which many programmers rely on for
developing due to its countless features.  Among them, it allows
specification of certain settings that are applied to a single file or
to all files in a directory and its sub-directories.  In order to
harmonize code coming from different contributors, Gnuastro comes with a
‘.dir-locals.el’ file which automatically configures Emacs to satisfy
most of the coding conventions above when you are using it within
Gnuastro’s directories.  Thus, Emacs users can readily start hacking
into Gnuastro.  If you are new to developing, we strongly recommend this
editor.  Emacs was the first project released by GNU and is still one of
its flagship projects.  Some resources can be found at:

Official manual
     At <https://www.gnu.org/software/emacs/manual/emacs.html>.  This is
     a great and very complete manual which is being improved for over
     30 years and is the best starting point to learn it.  It just
     requires a little patience and practice, but rest assured that you
     will be rewarded.  If you install Emacs, you also have access to
     this manual on the command-line with the following command (see
     *note Info::).

          $ info emacs

A guided tour of emacs
     At <https://www.gnu.org/software/emacs/tour/>.  A short visual tour
     of Emacs, officially maintained by the Emacs developers.

Unofficial mini-manual
     At <https://tuhdo.github.io/emacs-tutor.html>.  A shorter manual
     which contains nice animated images of using Emacs.

   ---------- Footnotes ----------

   (1) <https://www.gnu.org/software/gsl/design/gsl-design.html#SEC15>

   (2) For GSL, this prefix has an internal technical application: GSL’s
architecture mixes installed and not-installed headers in the same
directory.  This prefix is used to identify their installation status.
Therefore this filename prefix in GSL a technical internal issue (for
developers, not users).

   (3) The convention to use underscores to separate words, called
“snake case” (or “snake_case”).  This is also recommended by the GNU
coding standards.

   (4) If you use Emacs, Gnuastro’s ‘.dir-locals.el’ file will
automatically never use tabs for indentation.  To make this a default in
all your Emacs sessions, you can add the following line to your
‘~/.emacs’ file: ‘(setq-default indent-tabs-mode nil)’


File: gnuastro.info,  Node: Program source,  Next: Documentation,  Prev: Coding conventions,  Up: Developing

13.4 Program source
===================

Besides the fact that all the programs share some functions that were
explained in *note Library::, everything else about each program is
completely independent.  Recall that Gnuastro is written for an active
astronomer/scientist (not a passive one who just uses a software).  It
must thus be easily navigable.  Hence there are fixed source files (that
contain fixed operations) that must be present in all programs, these
are discussed fully in *note Mandatory source code files::.  To easily
understand the explanations in this section you can use *note The
TEMPLATE program:: which contains the bare minimum code for one working
program.  This template can also be used to easily add new utilities:
just copy and paste the directory and change ‘TEMPLATE’ with your
program’s name.

* Menu:

* Mandatory source code files::  Description of files common to all programs.
* The TEMPLATE program::        Template for easy creation of a new program.


File: gnuastro.info,  Node: Mandatory source code files,  Next: The TEMPLATE program,  Prev: Program source,  Up: Program source

13.4.1 Mandatory source code files
----------------------------------

Some programs might need lots of source files and if there is no fixed
convention, navigating them can become very hard for a new inquirer into
the code.  The following source files exist in every program’s source
directory (which is located in ‘bin/progname’).  For small programs,
these files are enough.  Larger programs will need more files and
developers are encouraged to define any number of new files.  It is just
important that the following list of files exist and do what is
described here.  When creating other source files, please choose
filenames that are a complete single word: do not abbreviate
(abbreviations are cryptic).  For a minimal program containing all these
files, see *note The TEMPLATE program::.

‘main.c’
     Each executable has a ‘main’ function, which is located in
     ‘main.c’.  Therefore this file is the starting point when reading
     any program’s source code.  No actual processing functions must be
     defined in this file, the function(s) in this file are only meant
     to connect the most high level steps of each program.  Generally,
     ‘main’ will first call the top user interface function to read user
     input and make all the preparations.  Then it will pass control to
     the top processing function for that program.  The functions to do
     both these jobs must be defined in other source files.

‘main.h’
     All the major parameters which will be used in the program must be
     stored in a structure which is defined in ‘main.h’.  The name of
     this structure is usually ‘prognameparams’, for example,
     ‘cropparams’ or ‘noisechiselparams’.  So ‘#include "main.h"’ will
     be a staple in all the source codes of the program.  It is also
     regularly the first (and only) argument most of the program’s
     functions which greatly helps in readability.

     Keeping all the major parameters of a program in this structure has
     the major benefit that most functions will only need one argument:
     a pointer to this structure.  This will significantly facilitate
     the job of the programmer, the inquirer and the computer.  All the
     programs in Gnuastro are designed to be low-level, small and
     independent parts, so this structure should not get too large.

     The main root structure of all programs contains at least one
     instance of the ‘gal_options_common_params’ structure.  This
     structure will keep the values to all common options in Gnuastro’s
     programs (see *note Common options::).  This top root structure is
     conveniently called ‘p’ (short for parameters) by all the functions
     in the programs and the common options parameters within it are
     called ‘cp’.  With this convention any reader can immediately
     understand where to look for the definition of one parameter.  For
     example, you know that ‘p->cp->output’ is in the common parameters
     while ‘p->threshold’ is in the program’s parameters.

     With this basic root structure, source code of functions can
     potentially become full of structure de-reference operators (‘->’)
     which can make the code very unreadable.  In order to avoid this,
     whenever a structure element is used more than a couple of times in
     a function, a variable of the same type and with the same name (so
     it can be searched) as the desired structure element should be
     defined with the value of the root structure inside of it in
     definition time.  Here is an example.

          char *hdu=p->cp.hdu;
          float threshold=p->threshold;

‘args.h’
     The options particular to each program are defined in this file.
     Each option is defined by a block of parameters in
     ‘program_options’.  These blocks are all you should modify in this
     file, leave the bottom group of definitions untouched.  These are
     fed directly into the GNU C library’s Argp facilities and it is
     recommended to have a look at that for better understand what is
     going on, although this is not required here.

     Each element of the block defining an option is described under
     ‘argp_option’ in ‘bootstrapped/lib/argp.h’ (from Gnuastro’s top
     source file).  Note that the last few elements of this structure
     are Gnuastro additions (not documented in the standard Argp
     manual).  The values to these last elements are defined in
     ‘lib/gnuastro/type.h’ and ‘lib/gnuastro-internal/options.h’ (from
     Gnuastro’s top source directory).

‘ui.h’
     Besides declaring the exported functions of ‘ui.c’, this header
     also keeps the “key”s to every program-specific option.  The first
     class of keys for the options that have a short-option version
     (single letter, see *note Options::).  The character that is
     defined here is the option’s short option name.  The list of
     available alphabet characters can be seen in the comments.  Recall
     that some common options also take some characters, for those, see
     ‘lib/gnuastro-internal/options.h’.

     The second group of options are those that do not have a short
     option alternative.  Only the first in this group needs a value
     (‘1000’), the rest will be given a value by C’s ‘enum’ definition,
     so the actual value is irrelevant and must never be used, always
     use the name.

‘ui.c’
     Everything related to reading the user input arguments and options,
     checking the configuration files and checking the consistency of
     the input parameters before the actual processing is run should be
     done in this file.  Since most functions are the same, with only
     the internal checks and structure parameters differing.  We
     recommend going through the ‘ui.c’ of *note The TEMPLATE program::,
     or several other programs for a better understanding.

     The most high-level function in ‘ui.c’ is named
     ‘ui_read_check_inputs_setup’.  It accepts the raw command-line
     inputs and a pointer to the root structure for that program (see
     the explanation for ‘main.h’).  This is the function that ‘main’
     calls.  The basic idea of the functions in this file is that the
     processing functions should need a minimum number of such checks.
     With this convention an inquirer who only wants to understand only
     one part (mostly the processing part and not user input details and
     sanity checks) of the code can easily do so in the later files.  It
     also makes all the errors related to input appear before the
     processing begins which is more convenient for the user.

‘progname.c, progname.h’
     The high-level processing functions in each program are in a file
     named ‘progname.c’, for example, ‘crop.c’ or ‘noisechisel.c’.  The
     function within these files which ‘main’ calls is also named after
     the program, for example

          void
          crop(struct cropparams *p)

     or

          void
          noisechisel(struct noisechiselparams *p)

     In this manner, if an inquirer is interested the processing steps,
     they can immediately come and check this file for the first
     processing step without having to go through ‘main.c’ and ‘ui.c’
     first.  In most situations, any failure in any step of the programs
     will result in an informative error message and an immediate abort
     in the program.  So there is usually no need for return values.
     Under more complicated situations where a return value might be
     necessary, ‘void’ will be replaced with an ‘int’ in the examples
     above.  This value must be directly returned by ‘main’, so it has
     to be an ‘int’.

‘authors-cite.h’
     This header file keeps the global variable for the program authors
     and its BibTeX record for citation.  They are used in the outputs
     of the common options ‘--version’ and ‘--cite’, see *note Operating
     mode options::.

‘progname-complete.bash’
     This shell script is used for implementing auto-completion features
     when running Gnuastro’s programs within GNU Bash.  For more on the
     concept of shell auto-completion and how it is managed in Gnuastro,
     see *note Bash programmable completion::.

     These files assume a set of common shell functions that have the
     prefix ‘_gnuastro_autocomplete_’ in their name and are defined in
     ‘bin/complete.bash.in’ (of the source directory, and under version
     control) and ‘bin/complete.bash.built’ (built during the building
     of Gnuastro in the build directory).  During Gnuastro’s build, all
     these Bash completion files are merged into one file that is
     installed and the user can ‘source’ them into their Bash startup
     file, for example, see *note Quick start::.


File: gnuastro.info,  Node: The TEMPLATE program,  Prev: Mandatory source code files,  Up: Program source

13.4.2 The TEMPLATE program
---------------------------

The extra creativity offered by libraries comes at a cost: you have to
actually write your ‘main’ function and get your hands dirty in managing
user inputs: are all the necessary parameters given a value?  is the
input in the correct format?  do the options and the inputs correspond?
and many other similar checks.  So when an operation has well-defined
inputs and outputs and is commonly needed, it is much more worthwhile to
simply do use all the great features that Gnuastro has already defined
for such operations.

   To make it easier to learn/apply the internal program infra-structure
discussed in *note Mandatory source code files::, in the *note Version
controlled source::, Gnuastro ships with a template program.  This
template program is not available in the Gnuastro tarball so it does not
confuse people using the tarball.  The ‘bin/TEMPLATE’ directory in
Gnuastro’s Git repository contains the bare-minimum files necessary to
define a new program and all the basic/necessary files/functions are
pre-defined there.

   Below you can see a list of initial steps to take for customizing
this template.  We just assume that after cloning Gnuastro’s history,
you have already bootstrapped Gnuastro, if not, please see *note
Bootstrapping::.

  1. Select a name for your new program (for example, ‘myprog’).

  2. Copy the ‘TEMPLATE’ directory to a directory with your program’s
     name:
          $ cp -R bin/TEMPLATE bin/myprog

  3. As with all source files in Gnuastro, all the files in template
     also have a copyright notice at their top.  Open all the files and
     correct these notices: 1) The first line contains a single-line
     description of the program.  2) In the second line only the name or
     your program needs to be fixed and 3) Add your name and email as a
     “Contributing author”.  As your program grows, you will need to add
     new files, do not forget to add this notice in those new files too,
     just put your name and email under “Original author” and correct
     the copyright years.

  4. Open ‘configure.ac’ in the top Gnuastro source.  This file manages
     the operations that are done when a user runs ‘./configure’.  Going
     down the file, you will notice repetitive parts for each program.
     You will notice that the program names follow an alphabetic
     ordering in each part.  There is also a commented line/patch for
     the ‘TEMPLATE’ program in each part.  You can copy one line/patch
     (from the program above or below your desired name for example) and
     paste it in the proper place for your new program.  Then correct
     the names of the copied program to your new program name.  There
     are multiple places where this has to be done, so be patient and go
     down to the bottom of the file.  Ultimately add
     ‘bin/myprog/Makefile’ to ‘AC_CONFIG_FILES’, only here the ordering
     depends on the length of the name (it is not alphabetical).

  5. Open ‘Makefile.am’ in the top Gnuastro source.  Similar to the
     previous step, add your new program similar to all the other
     programs.  Here there are only two places: 1) at the top where we
     define the conditionals (three lines per program), and 2)
     immediately under it as part of the value for ‘SUBDIRS’.

  6. Open ‘doc/Makefile.am’ and similar to ‘Makefile.am’ (above), add
     the proper entries for the man-page of your program to be created
     (here, the variable that keeps all the man-pages to be created is
     ‘dist_man_MANS’).  Then scroll down and add a rule to build the
     man-page similar to the other existing rules (in alphabetical
     order).  Do Not forget to add a short one-line description here, it
     will be displayed on top of the man-page.

  7. Change ‘TEMPLATE.c’ and ‘TEMPLATE.h’ to ‘myprog.c’ and ‘myprog.h’
     in the file names:

          $ cd bin/myprog
          $ mv TEMPLATE.c myprog.c
          $ mv TEMPLATE.h myprog.h

  8. Correct all occurrences of ‘TEMPLATE’ in the input files to
     ‘myprog’ (in short or long format).  You can get a list of all
     occurrences with the following command.  If you use Emacs, it will
     be able to parse the Grep output and open the proper file and line
     automatically.  So this step can be very easy.

          $ grep --color -nHi -e template *

  9. Run the following commands to re-build the configuration and build
     system, and then to configure and build Gnuastro (which now
     includes your exciting new program).
          $ autoreconf -f
          $ ./configure
          $ make

  10. You are done!  You can now start customizing your new program to
     do your special processing.  When it is complete, just do not
     forget to add checks also, so it can be tested at least once on a
     user’s system with ‘make check’, see *note Test scripts::.
     Finally, if you would like to share it with all Gnuastro users,
     inform us so we merge it into Gnuastro’s main history.


File: gnuastro.info,  Node: Documentation,  Next: Building and debugging,  Prev: Program source,  Up: Developing

13.5 Documentation
==================

Documentation (this book) is an integral part of Gnuastro (see *note
Science and its tools::).  Documentation is not considered a separate
project and must be written by its developers.  Users can make
edits/corrections, but the initial writing must be by the developer.
So, no change is considered valid for implementation unless the
respective parts of the book have also been updated.  The following
procedure can be a good suggestion to take when you have a new idea and
are about to start implementing it.

   The steps below are not a requirement, the important thing is that
when you send your work to be included in Gnuastro, the book and the
code have to both be fully up-to-date and compatible, with the purpose
of the update very clearly explained.  You can follow any strategy you
like, the following strategy was what we have found to be most useful
until now.

  1. Edit the book and fully explain your desired change, such that your
     idea is completely embedded in the general context of the book with
     no sense of discontinuity for a first time reader.  This will allow
     you to plan the idea much more accurately and in the general
     context of Gnuastro (a particular program or library).  Later on,
     when you are coding, this general context will significantly help
     you as a road-map.

     A very important part of this process is the program/library
     introduction.  These first few paragraphs explain the purposes of
     the program or library and are fundamental to Gnuastro.  Before
     actually starting to code, explain your idea’s purpose thoroughly
     in the start of the respective/new section you wish to work on.
     While actually writing its purpose for a new reader, you will
     probably get some valuable and interesting ideas that you had not
     thought of before.  This has occurred several times during the
     creation of Gnuastro.

     If an introduction already exists, embed or blend your idea’s
     purpose with the existing introduction.  We emphasize that doing
     this is equally useful for you (as the programmer) as it is useful
     for the user (reader).  Recall that the purpose of a program is
     very important, see *note Program design philosophy::.

     As you have already noticed for every program/library, it is very
     important that the basics of the science and technique be explained
     in separate subsections prior to the ‘Invoking Programname’
     subsection.  If you are writing a new program or your addition to
     an existing program involves a new concept, also include such
     subsections and explain the concepts so a person completely
     unfamiliar with the concepts can get a general initial
     understanding.  You do not have to go deep into the details, just
     enough to get an interested person (with absolutely no background)
     started with some good pointers/links to where they can continue
     studying if they are more interested.  If you feel you cannot do
     that, then you have probably not understood the concept yourself.
     If you feel you do not have the time, then think about yourself as
     the reader in one year: you will forget almost all the details, so
     now that you have done all the theoretical preparations, add a few
     more hours and document it.  Therefore in one year, when you find a
     bug or want to add a new feature, you do not have to prepare as
     much.  Have in mind that your only limitation in length is the
     fatigue of the reader after reading a long text, nothing else.  So
     as long as you keep it relevant/interesting for the reader, there
     is no page number limit/cost.

     It might also help if you start discussing the usage of your idea
     in the ‘Invoking ProgramName’ subsection (explaining the options
     and arguments you have in mind) at this stage too.  Actually
     starting to write it here will really help you later when you are
     coding.

  2. After you have finished adding your initial intended plan to the
     book, then start coding your change or new program within the
     Gnuastro source files.  While you are coding, you will notice that
     somethings should be different from what you wrote in the book
     (your initial plan).  So correct them as you are actually coding,
     but do not worry too much about missing a few things (see the next
     step).

  3. After your work has been fully implemented, read the section
     documentation from the start and see if you did not miss any change
     in the coding and to see if the context is fairly continuous for a
     first time reader (who has not seen the book or had known Gnuastro
     before you made your change).

  4. If the change is notable, also update the ‘NEWS’ file.


File: gnuastro.info,  Node: Building and debugging,  Next: Test scripts,  Prev: Documentation,  Up: Developing

13.6 Building and debugging
===========================

To build the various programs and libraries in Gnuastro, the GNU build
system is used which defines the steps in *note Quick start::.  It
consists of GNU Autoconf, GNU Automake and GNU Libtool which are
collectively known as GNU Autotools.  They provide a very portable
system to check the hosts environment and compile Gnuastro based on
that.  They also make installing everything in their standard places
very easy for the programmer.  Most of the small caps files that you see
in the top source directory of the tarball are created by these three
tools (see *note Version controlled source::).  To facilitate the
building and testing of your work during development, Gnuastro comes
with two useful scripts:

‘developer-build’
     This is more fully described in *note Configure and build in RAM::.
     During development, you will usually run this command only once (at
     the start of your work).

‘tests/during-dev.sh’
     This script is designed to be run each time you make a change and
     want to test your work (with some possible input and output).  The
     script itself is heavily commented and thoroughly describes the
     best way to use it, so we will not repeat it here.  For a usage
     example, see *note Forking tutorial::.

     As a short summary: you specify the build directory, an output
     directory (for the built program to be run in, and also contains
     the inputs), the program’s short name and the arguments and options
     that it should be run with.  This script will then build Gnuastro,
     go to the output directory and run the built executable from there.
     One option for the output directory might be your desktop, so you
     can easily see the output files and delete them when you are
     finished.  The main purpose of these scripts is to keep your source
     directory clean and facilitate your development.

   By default all the programs are compiled with optimization flags for
increased speed.  A side effect of optimization is that valuable
debugging information is lost.  All the libraries are also linked as
shared libraries by default.  Shared libraries further complicate the
debugging process and significantly slow down the compilation (the
‘make’ command).  So during development it is recommended to configure
Gnuastro as follows:

     $ ./configure --enable-debug

In ‘developer-build’ you can ask for this behavior through the ‘--debug’
option, see *note Separate build and source directories::.

   In order to understand the building process, you can go through the
Autoconf, Automake and Libtool manuals, like all GNU manuals they
provide both a great tutorial and technical documentation.  The “A small
Hello World” section in Automake’s manual (in chapter 2) can be a good
starting guide after you have read the separate introductions.


File: gnuastro.info,  Node: Test scripts,  Next: Bash programmable completion,  Prev: Building and debugging,  Up: Developing

13.7 Test scripts
=================

As explained in *note Tests::, for every program some simple tests are
written to check the various independent features of the program.  All
the tests are placed in the ‘tests/’ directory.  The ‘tests/prepconf.sh’
script is the first ‘test’ that will be run.  It will copy all the
configuration files from the various directories to a ‘tests/.gnuastro’
directory (which it will make) so the various tests can set the default
values.  This script will also make sure the programs do not go
searching for user and system wide configuration files to avoid the
mixing of values with different Gnuastro version on the system.

   For each program, the tests are placed inside directories with the
program name.  Each test is written as a shell script.  The last line of
this script is the test which runs the program with certain parameters.
The return value of this script determines the fate of the test, see the
“Support for test suites” chapter of the Automake manual for a very nice
and complete explanation.  In every script, two variables are defined at
first: ‘prog’ and ‘execname’.  The first specifies the program name and
the second the location of the executable.

   The most important thing to have in mind about all the test scripts
is that they are run from inside the ‘tests/’ directory in the “build
tree”.  Which can be different from the directory they are stored in
(known as the “source tree”)(1).  This distinction is made by GNU
Autoconf and Automake (which configure, build and install Gnuastro) so
that you can install the program even if you do not have write access to
the directory keeping the source files.  See the “Parallel build trees
(a.k.a VPATH builds)” in the Automake manual for a nice explanation.

   Because of this, any necessary inputs that are distributed in the
tarball(2), for example, the catalogs necessary for checks in
MakeProfiles and Crop, must be identified with the ‘$topsrc’ prefix
instead of ‘../’ (for the top source directory that is unpacked).  This
‘$topsrc’ variable points to the source tree where the script can find
the source data (it is defined in ‘tests/Makefile.am’).  The executables
and other test products were built in the build tree (where they are
being run), so they do not need to be prefixed with that variable.  This
is also true for images or files that were produced by other tests.

   ---------- Footnotes ----------

   (1) The ‘developer-build’ script also uses this feature to keep the
source and build directories separate (see *note Separate build and
source directories::).

   (2) In many cases, the inputs of a test are outputs of previous
tests, this does not apply to this class of inputs.  Because all outputs
of previous tests are in the “build tree”.


File: gnuastro.info,  Node: Bash programmable completion,  Next: Developer's checklist,  Prev: Test scripts,  Up: Developing

13.8 Bash programmable completion
=================================

*Under development:* While work on TAB completion is ongoing, it is not
yet fully ready, please see the notice at the start of *note Shell TAB
completion::.

   Gnuastro provides Programmable completion facilities in Bash.  This
greatly helps users reach their desired result with minimal keystrokes,
and helps them spend less time on figuring out the option names and
values their acceptable values.  Gnuastro’s completion script not only
completes the half-written commands, but also prints suggestions based
on previous arguments.

   Imagine a scenario where we need to download three columns containing
the right ascension, declination, and parallax from the GAIA DR3
dataset.  We have to make sure how these columns are abbreviated or
spelled.  So we can call the command below, and store the column names
in a file such as ‘gaia-dr3-columns.txt’.

     $ astquery gaia --information > gaia-dr3-columns.txt

Then we need to memorize or copy the column names of interest, and
specify an output fits file name such as ‘gaia.fits’:

     $ astquery gaia --dataset=dr3 --output=gaia.fits \
                     --column=ra,dec,parallax

However, this is much easier using the auto-completion feature:

     $ astquery gaia --dataset=dr3 --output=gaia.fits --column=<[TAB]>

After pressing <[TAB]>, a full list of gaia dr3 dataset column names
will be displayed.  Typing the first key of the desired column and
pressing <[TAB]> again will limit the displayed list to only the
matching ones until the desired column is found.

* Menu:

* Bash TAB completion tutorial::  Fast tutorial to get you started on concepts.
* Implementing TAB completion in Gnuastro::  How Gnuastro uses Bash auto-completion features.


File: gnuastro.info,  Node: Bash TAB completion tutorial,  Next: Implementing TAB completion in Gnuastro,  Prev: Bash programmable completion,  Up: Bash programmable completion

13.8.1 Bash TAB completion tutorial
-----------------------------------

When a user presses the <[TAB]> key while typing commands, Bash will
inspect the input to find a relevant “completion specification”, or
‘compspec’.  If available, the ‘compspec’ will generate a list of
possible suggestions to complete the current word.  A custom ‘compsec’
can be generated for any command using bash completion builtins(1) and
the bash variables that start with the ‘COMP’ keyword(2).

   First, let’s see a quick example of how you can make a completion
script in just one line of code.  With the command below, we are asking
Bash to give us three suggestions for ‘echo’: ‘foo’, ‘bar’ and ‘bAr’.
Please run it in your terminal for the next steps.

     $ complete -W "foo bar bAr" echo

   The possible completion suggestions are fed into ‘complete’ using the
‘-W’ option followed by a list of space delimited words.  Let’s see it
in action:

     $ echo <[TAB][TAB]>
     bar  bAr  foo

   Nicely done!  Just note that the strings are sorted alphabetically,
not in the original order.  Also, an arbitrary number of space
characters are printed between them (based on the number of suggestions
and terminal size, etc.).  Now, if you type ‘f’ and press <[TAB]>, bash
will automatically figure out that you wanted ‘foo’ and it be completed
right away:

     $ myprogram f<[TAB]>
     $ myprogram foo

However, nothing will happen if you type ‘b’ and press <[TAB]> only
once.  This is because of the ambiguity: there is not enough information
to figure out which suggestion you want: ‘bar’ or ‘bAr’?  So, if you
press <[TAB]> twice, it will print out all the options that start with
‘b’:

     $ echo b<[TAB][TAB]>
     bar  bAr
     $ echo ba<[TAB]>
     $ echo bar

   Not bad for a simple program.  But what if you need more control?  By
passing the ‘-F’ option to ‘complete’ instead of ‘-W’, it will run a
function for generating the suggestions, instead of using a static
string.  For example, let’s assume that the expected value after ‘foo’
is the number of files in the current directory.  Since the logic is
getting more complex, let’s write and save the commands below into a
shell script with an arbitrary name such as ‘completion-tutorial.sh’:

     $ cat completion-tutorial.sh
     _echo(){
         if [ "$3" == "foo" ]; then
           COMPREPLY=( $(ls | wc -l) )
         else
           COMPREPLY=( $(compgen -W "foo bar bAr" -- "$2") )
         fi
     }
     complete -F _echo echo

We will look at it in detail soon.  But for now, let’s ‘source’ the file
into your current terminal and check if it works as expected:

     $ source completion-tutorial.sh
     $ echo <[TAB][TAB]>
     foo bar bAr
     $ echo foo <[TAB]>
     $ touch empty.txt
     $ echo foo <[TAB]>

Success!  As you see, this allows for setting up highly customized
completion scripts.  Now let’s have a closer look at the
‘completion-tutorial.sh’ completion script from above.  First, the ‘-F’
option in front the ‘complete’ command indicates that we want shell to
execute the ‘_echo’ function whenever ‘echo’ is called.  As a
convention, the function name should be the same as the program name,
but prefixed with an underscore (‘_’).

   Within the ‘_echo’ function, we’re checking if ‘$3’ is equal to
‘foo’.  In Bash’s auto-complete, ‘$3’ means the word before current
cursor position.  In fact, these are the arguments that the ‘_echo’
function is receiving:

‘$1’
     The name of the command, here it is ‘echo’.

‘$2’
     The current word being completed (empty unless we are in the middle
     of typing a word).

‘$3’
     The word before the word being completed.

   To tell the completion script what to reply with, we use the
‘COMPREPLY’ array.  This array holds all the suggestions that ‘complete’
will show for the user in the end.  In the example above, we simply give
it the string output of ‘ls | wc -l’.

   Finally, we have the ‘compgen’ command.  According to bash
programmable completion builtins manual, the command ‘compgen [OPTION]
[WORD]’ generates possible completion matches for ‘[WORD]’ according to
‘[OPTIONS]’.  Using the ‘-W’ option asks ‘compgen’ to generate a list of
words from an input string.  This is known as Word Splitting(3).
‘compgen’ will automatically use the ‘$IFS’ variable to split the string
into a list of words.  You can check the default delimiters by calling:

     $ printf %q "$IFS"

The default value of ‘$IFS’ might be ‘ \t\n’.  This means the SPACE,
TAB, and New-line characters.  Finally, notice the ‘-- "$2"’ in this
command:

     COMPREPLY=( $(compgen -W "foo bar bAr" -- "$2") )

Here, the ‘--’ instructs ‘compgen’ to only reply with a list of words
that match ‘$2’, i.e.  the current word being completed.  That is why
when you type the letter ‘b’, ‘complete’ will reply only with its
matches (‘bar’ and ‘bAr’), and will exclude ‘foo’.

   Let’s get a little more realistic, and develop a very basic
completion script for one of Gnuastro’s programs.  Since the ‘--help’
option will list all the options available in Gnuastro’s programs, we
are going to use its output and create a very basic TAB completion for
it.  Note that the actual TAB completion in Gnuastro is a little more
complex than this and fully described in *note Implementing TAB
completion in Gnuastro::.  But this is a good exercise to get started.

   We will use ‘asttable’ as the demo, and the goal is to suggest all
options that this program has to offer.  You can print all of them (with
a lot of extra information) with this command:

     $ asttable --help

   Let’s write an ‘awk’ script that prints all of the long options.
When printing the option names we can safely ignore the short options
because if a user knows about the short options, s/he already knows
exactly what they want!  Also, due to their single-character length,
they will be too cryptic without their descriptions.

   One way to catch the long options is through ‘awk’ as shown below.
We only keep the lines that 1) starting with an empty space, 2) their
first no-white character is ‘-’ and that have the format of ‘--’
followed by any number of numbers or characters.  Within those lines, if
the first word ends in a comma (‘,’), the first word is the short
option, so we want the second word (which is the long option).
Otherwise, the first word is the long option.  But for options that take
a value, this will also include the format of the value (for example,
‘--column=STR’).  So with a ‘sed’ command, we remove everything that is
after the equal sign, but keep the equal sign itself (to highlight to
the user that this option should have a value).

     $ asttable --help \
                | awk '/^  / && $1 ~ /^-/ && /--+[a-zA-Z0-9]*/ { \
                         if($1 ~ /,$/) name=$2; \
                         else          name=$1; \
                         print name}' \
                | sed -e's|=.*|=|'

   If we wanted to show all the options to the user, we could simply
feed the values of the command above to ‘compgen’ and ‘COMPREPLY’
subsequently.  But, we need _smarter_ completions: we want to offer
suggestions based on the previous options that have already been typed
in.  Just Beware!  Sometimes the program might not be acting as you
expected.  In that case, using debug messages can clear things up.  You
can add a ‘echo’ command before the completion function ends, and check
all current variables.  This can save a lot of headaches, since things
can get complex.

   Take the option ‘--wcsfile=’ for example.  This option accepts a FITS
file.  Usually, the user is trying to feed a FITS file from the current
directory.  So it would be nice if we could help them and print only a
list of FITS files sitting in the current directory – or whatever
directory they have typed-in so far.

   But there’s a catch.  When splitting the user’s input line, Bash will
consider ‘=’ as a separate word.  To avoid getting caught in changing
the ‘IFS’ or ‘WORDBREAKS’ values, we will simply check for ‘=’ and act
accordingly.  That is, if the previous word is a ‘=’, we will ignore it
and take the word before that as the previous word.  Also, if the
current word is a ‘=’, ignore it completely.  Taking all of that into
consideration, the code below might serve well:

_asttable(){
    if [ "$2" = "=" ]; then word=""
    else                    word="$2"
    fi

    if [ "$3" = "=" ]; then prev="${COMP_WORDS[COMP_CWORD-2]}"
    else                    prev="${COMP_WORDS[COMP_CWORD-1]}"
    fi

    case "$prev" in
      --wcsfile)
        COMPREPLY=( $(compgen -f -X "!*.[fF][iI][tT][sS]" -- "$word") )
      ;;
    esac
}
complete -o nospace -F _asttable asttable

To test the code above, write it into ‘asttable-tutorial.sh’, and load
it into your running terminal with this command:

     $ source asttable-tutorial.sh

   If you then go to a directory that has at least one FITS file (with a
‘.fits’ suffix, among other files), you can checkout the function by
typing the following command.  You will see that only files ending in
‘.fits’ are shown, not any other file.

     asttable --wcsfile=[TAB][TAB]

   The code above first identifies the current and previous words.  It
then checks if the previous word is equal to ‘--wcsfile’ and if so,
fills ‘COMPREPLY’ array with the necessary suggestions.  We are using
‘case’ here (instead of ‘if’) because in a real scenario, we need to
check many more values and ‘case’ is far better suited for such cases
(cleaner and more efficient code).

   The ‘-f’ option in ‘compgen’ indicates we’re looking for a file.  The
‘-X’ option _filters out_ the filenames that match the next regular
expression pattern.  Therefore we should start the regular expression
with ‘!’ if we want the files matching the regular expression.  The ‘--
"$word"’ component collects only filenames that match the current word
being typed.  And last but not least, the ‘-o nospace’ option in the
‘complete’ command instructs the completion script to _not_ append a
white space after each suggestion.  That is important because the long
format of an option, its value is more clear when it sticks to the
option name with a ‘=’ sign.

   You have now written a very basic and working TAB completion script
that can easily be generalized to include more options (and be good for
a single/simple program).  However, Gnuastro has many programs that
share many similar things and the options are not independent.  Also,
complex situations do often come up: for example, some people use a
‘.fit’ suffix for FITS files and others do not even use a suffix at all!
So in practice, things need to get a little more complicated, but the
core concept is what you learnt in this section.  We just modularize the
process (breaking logically independent steps into separate functions to
use in different situations).  In *note Implementing TAB completion in
Gnuastro::, we will review the generalities of Gnuastro’s implementation
of Bash TAB completion.

   ---------- Footnotes ----------

   (1) 
<https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html>

   (2) 
<https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html>

   (3) 
<https://www.gnu.org/software/bash/manual/html_node/Word-Splitting.html>


File: gnuastro.info,  Node: Implementing TAB completion in Gnuastro,  Prev: Bash TAB completion tutorial,  Up: Bash programmable completion

13.8.2 Implementing TAB completion in Gnuastro
----------------------------------------------

The basics of Bash auto-completion was reviewed in *note Bash TAB
completion tutorial::.  Gnuastro is a very complex package of many
programs, that have many similar features, so implementing those
principles in an easy to maintain manner requires a modular solution.
As a result, Bash’s TAB completion is implemented as multiple files in
Gnuastro:

‘bin/completion.bash.built’ (in build directory, automatically created)
     This file contains the values of all Gnuastro options or arguments
     that take fixed strings as values (not file names).  For example,
     the names of Arithmetic’s operators (see *note Arithmetic
     operators::), or spectral line names (like ‘--obsline’ in *note
     CosmicCalculator input options::).

     This file is created automatically during the building of Gnuastro.
     The recipe to build it is available in Gnuastro’s top-level
     ‘Makefile.am’ (under the target ‘bin/completion.bash’).  It parses
     the respective Gnuastro source file that contains the necessary
     user-specified strings.  All the acceptable values values are then
     stored as shell variables (within a function).

‘bin/completion.bash.in’ (in source directory, under version control)
     All the low-level completion functions that are common to all
     programs are stored here.  It thus contains functions that will
     parse the command-line or files, or suggest the completion replies.

‘PROGNAME-complete.bash’ (in source directory, under version control)
     All Gnuastro programs contain a ‘PROGNAME-complete.bash’ script
     within their source (for more on the fixed files of each program,
     see *note Program source::).  This file contains the very
     high-level (program-specific) Bash programmable completion features
     that are almost always defined in Gnuastro-generic Bash completion
     file (‘bin/completion.bash.in’).

     The top-level function that is called by Bash should be called
     ‘_gnuastro_autocomplete_PROGNAME’ and its last line should be the
     ‘complete’ command of Bash which calls this function.  The contents
     of ‘_gnuastro_autocomplete_PROGNAME’ are almost identical for all
     the programs, it is just a very high-level function that either
     calls ‘_gnuastro_autocomplete_PROGNAME_arguments’ to manage
     suggestions for the program’s arguments or
     ‘_gnuastro_autocomplete_PROGNAME_option_value’ to manage
     suggestions for the program’s option values.

The scripts above follow the following conventions.  After reviewing the
list, please also look into the functions for examples of each point.
   • No global shell variables in any completion script: the contents of
     the files above are directly loaded into the user’s environment.
     So to keep the user’s environment clean and avoid annoyance to the
     users, everything should be defined as shell functions, and any
     variable within the functions should be set as ‘local’.

   • All the function names should start with
     ‘‘_gnuastro_autocomplete_’’, again to avoid populating the user’s
     function name-space with possibly conflicting names.

   • Outputs of functions should be written in the ‘local’ variables of
     the higher-level functions that called them.


File: gnuastro.info,  Node: Developer's checklist,  Next: Gnuastro project webpage,  Prev: Bash programmable completion,  Up: Developing

13.9 Developer’s checklist
==========================

This is a checklist of things to do after applying your
changes/additions in Gnuastro:

  1. If the change is non-trivial, write test(s) in the
     ‘tests/progname/’ directory to test the change(s)/addition(s) you
     have made.  Then add their file names to ‘tests/Makefile.am’.

  2. If your change involves a change in command-line behavior of a
     Gnuastro program or script (for example, adding a new option or
     argument), create or update the respective
     ‘bin/PROGNAME/completion.sh’ file described under the *note Bash
     programmable completion:: section.

  3. Run ‘$ make check’ to make sure everything is working correctly.

  4. Make sure the documentation (this book) is completely up to date
     with your changes, see *note Documentation::.

  5. Commit the change to your issue branch (see *note Production
     workflow:: and *note Forking tutorial::).  Afterwards, run
     Autoreconf to generate the appropriate version number:

          $ autoreconf -f

  6. Finally, to make sure everything will be built, installed and
     checked correctly run the following command (after re-configuring,
     and re-building).  To greatly speed up the process, use multiple
     threads (8 in the example below, change it appropriately)

          $ make distcheck -j8

     This command will create a distribution file (ending with
     ‘.tar.gz’) and try to compile it in the most general cases, then it
     will run the tests on what it has built in its own
     mini-environment.  If ‘$ make distcheck’ finishes successfully,
     then you are safe to send your changes to us to implement or for
     your own purposes.  See *note Production workflow:: and *note
     Forking tutorial::.


File: gnuastro.info,  Node: Gnuastro project webpage,  Next: Developing mailing lists,  Prev: Developer's checklist,  Up: Developing

13.10 Gnuastro project webpage
==============================

Gnuastro’s central management hub
(https://savannah.gnu.org/projects/gnuastro/)(1) is located on GNU
Savannah (https://savannah.gnu.org/)(2).  Savannah is the central
software development management system for many GNU projects.  Through
this central hub, you can view the list of activities that the
developers are engaged in, their activity on the version controlled
source, and other things.  Each defined activity in the development
cycle is known as an ‘issue’ (or ‘item’).  An issue can be a bug (see
*note Report a bug::), or a suggested feature (see *note Suggest new
feature::) or an enhancement or generally any _one_ job that is to be
done.  In Savannah, issues are classified into three categories or
‘tracker’s:

Support
     This tracker is a way that (possibly anonymous) users can get in
     touch with the Gnuastro developers.  It is a complement to the
     bug-gnuastro mailing list (see *note Report a bug::).  Anyone can
     post an issue to this tracker.  The developers will not submit an
     issue to this list.  They will only reassign the issues in this
     list to the other two trackers if they are valid(3).  Ideally (when
     the developers have time to put on Gnuastro, please do not forget
     that Gnuastro is a volunteer effort), there should be no open items
     in this tracker.

Bugs
     This tracker contains all the known bugs in Gnuastro (problems with
     the existing tools).

Tasks
     The items in this tracker contain the future plans (or new
     features/capabilities) that are to be added to Gnuastro.

All the trackers can be browsed by a (possibly anonymous) visitor, but
to edit and comment on the Bugs and Tasks trackers, you have to be a
registered on Savannah.  When posting an issue to a tracker, it is very
important to choose the ‘Category’ and ‘Item Group’ options accurately.
The first contains a list of all Gnuastro’s programs along with
‘Installation’, ‘New program’ and ‘Webpage’.  The “Item Group” contains
the nature of the issue, for example, if it is a ‘Crash’ in the software
(a bug), or a problem in the documentation (also a bug) or a feature
request or an enhancement.

   The set of horizontal links on the top of the page (Starting with
‘Main’ and ‘Homepage’ and finishing with ‘News’) are the easiest way to
access these trackers (and other major aspects of the project) from any
part of the project web page.  Hovering your mouse over them will open a
drop down menu that will link you to the different things you can do on
each tracker (for example, ‘Submit new’ or ‘Browse’).  When you browse
each tracker, you can use the “Display Criteria” link above the list to
limit the displayed issues to what you are interested in.  The
‘Category’ and ‘Group Item’ (explained above) are a good starting point.

   Any new issue that is submitted to any of the trackers, or any
comments that are posted for an issue, is directly forwarded to the
gnuastro-devel mailing list
(<https://lists.gnu.org/mailman/listinfo/gnuastro-devel>, see *note
Developing mailing lists:: for more).  This will allow anyone interested
to be up to date on the over-all development activity in Gnuastro and
will also provide an alternative (to Savannah) archiving for the
development discussions.  Therefore, it is not recommended to directly
post an email to this mailing list, but do all the activities (for
example add new issues, or comment on existing ones) on Savannah.

*Do I need to be a member in Savannah to contribute to Gnuastro?*  No.

   The full version controlled history of Gnuastro is available for
anonymous download or cloning.  See *note Production workflow:: for a
description of Gnuastro’s Integration-Manager Workflow.  In short, you
can either send in patches, or make your own fork.  If you choose the
latter, you can push your changes to your own fork and inform us.  We
will then pull your changes and merge them into the main project.
Please see *note Forking tutorial:: for a tutorial.

   ---------- Footnotes ----------

   (1) <https://savannah.gnu.org/projects/gnuastro/>

   (2) <https://savannah.gnu.org/>

   (3) Some of the issues registered here might be due to a mistake on
the user’s side, not an actual bug in the program.


File: gnuastro.info,  Node: Developing mailing lists,  Next: Contributing to Gnuastro,  Prev: Gnuastro project webpage,  Up: Developing

13.11 Developing mailing lists
==============================

To keep the developers and interested users up to date with the activity
and discussions within Gnuastro, there are two mailing lists which you
can subscribe to:

‘gnuastro-devel@gnu.org’
(at <https://lists.gnu.org/mailman/listinfo/gnuastro-devel>)

     All the posts made in the support, bugs and tasks discussions of
     *note Gnuastro project webpage:: are also sent to this mailing
     address and archived.  By subscribing to this list you can stay up
     to date with the discussions that are going on between the
     developers before, during and (possibly) after working on an issue.
     All discussions are either in the context of bugs or tasks which
     are done on Savannah and circulated to all interested people
     through this mailing list.  Therefore it is not recommended to post
     anything directly to this mailing list.  Any mail that is sent to
     it from Savannah to this list has a link under the title “Reply to
     this item at:”.  That link will take you directly to the issue
     discussion page, where you can read the discussion history or join
     it.

     While you are posting comments on the Savannah issues, be sure to
     update the meta-data.  For example, if the task/bug is not assigned
     to anyone and you would like to take it, change the “Assigned to”
     box, or if you want to report that it has been applied, change the
     status and so on.  All these changes will also be circulated with
     the email very clearly.

‘gnuastro-commits@gnu.org’
(at <https://lists.gnu.org/mailman/listinfo/gnuastro-commits>)

     This mailing list is defined to circulate all commits that are done
     in Gnuastro’s version controlled source, see *note Version
     controlled source::.  If you have any ideas, or suggestions on the
     commits, please use the bug and task trackers on Savannah to
     followup the discussion, do not post to this list.  All the commits
     that are made for an already defined issue or task will state the
     respective ID so you can find it easily.


File: gnuastro.info,  Node: Contributing to Gnuastro,  Prev: Developing mailing lists,  Up: Developing

13.12 Contributing to Gnuastro
==============================

You have this great idea or have found a good fix to a problem which you
would like to implement in Gnuastro.  You have also become familiar with
the general design of Gnuastro in the previous sections of this chapter
(see *note Developing::) and want to start working on and sharing your
new addition/change with the whole community as part of the official
release.  This is great and your contribution is most welcome.  This
section and the next (see *note Developer's checklist::) are written in
the hope of making it as easy as possible for you to share your great
idea with the community.

   In this section we discuss the final steps you have to take: legal
and technical.  From the legal perspective, the copyright of any work
you do on Gnuastro has to be assigned to the Free Software Foundation
(FSF) and the GNU operating system, or you have to sign a disclaimer.
We do this to ensure that Gnuastro can remain free in the future, see
*note Copyright assignment::.  From the technical point of view, in this
section we also discuss commit guidelines (*note Commit guidelines::)
and the general version control workflow of Gnuastro in *note Production
workflow::, along with a tutorial in *note Forking tutorial::.

   Recall that before starting the work on your idea, be sure to
checkout the bugs and tasks trackers in *note Gnuastro project webpage::
and announce your work there so you do not end up spending time on
something others have already worked on, and also to attract similarly
interested developers to help you.

* Menu:

* Copyright assignment::        Copyright has to be assigned to the FSF.
* Commit guidelines::           Guidelines for commit messages.
* Production workflow::         Submitting your commits (work) for inclusion.
* Forking tutorial::            Tutorial on workflow steps with Git.


File: gnuastro.info,  Node: Copyright assignment,  Next: Commit guidelines,  Prev: Contributing to Gnuastro,  Up: Contributing to Gnuastro

13.12.1 Copyright assignment
----------------------------

Gnuastro’s copyright is owned by the Free Software Foundation (FSF) to
ensure that Gnuastro always remains free.  The FSF has also provided a
Contributor FAQ (https://www.fsf.org/licensing/contributor-faq) to
further clarify the reasons, so we encourage you to read it.  Professor
Eben Moglen, of the Columbia University Law School has given a nice
summary of the reasons for this at
<https://www.gnu.org/licenses/why-assign>.  Below we are copying it
verbatim for self consistency (in case you are offline or reading in
print).

     Under US copyright law, which is the law under which most free
     software programs have historically been first published, there are
     very substantial procedural advantages to registration of
     copyright.  And despite the broad right of distribution conveyed by
     the GPL, enforcement of copyright is generally not possible for
     distributors: only the copyright holder or someone having
     assignment of the copyright can enforce the license.  If there are
     multiple authors of a copyrighted work, successful enforcement
     depends on having the cooperation of all authors.

     In order to make sure that all of our copyrights can meet the
     record keeping and other requirements of registration, and in order
     to be able to enforce the GPL most effectively, FSF requires that
     each author of code incorporated in FSF projects provide a
     copyright assignment, and, where appropriate, a disclaimer of any
     work-for-hire ownership claims by the programmer’s employer.  That
     way we can be sure that all the code in FSF projects is free code,
     whose freedom we can most effectively protect, and therefore on
     which other developers can completely rely.

   Please get in touch with the Gnuastro maintainer (currently Mohammad
Akhlaghi, mohammad -at- akhlaghi -dot- org) to follow the procedures.
It is possible to do this for each change (good for a single
contribution), and also more generally for all the changes/additions you
do in the future within Gnuastro.  So if you have already assigned the
copyright of your work on another GNU software to the FSF, it should be
done again for Gnuastro.  The FSF has staff working on these legal
issues and the maintainer will get you in touch with them to do the
paperwork.  The maintainer will just be informed in the end so your
contributions can be merged within the Gnuastro source code.

   Gnuastro will gratefully acknowledge (see *note Acknowledgments::)
all the people who have assigned their copyright to the FSF and have
thus helped to guarantee the freedom and reliability of Gnuastro.  The
Free Software Foundation will also acknowledge your copyright
contributions in the Free Software Supporter:
<https://www.fsf.org/free-software-supporter> which will circulate to a
very large community (225,910 people in July 2021).  See the archives
for some examples and subscribe to receive interesting updates.  The
very active code contributors (or developers) will also be recognized as
project members on the Gnuastro project web page (see *note Gnuastro
project webpage::) and can be given a ‘gnu.org’ email address.  So your
very valuable contribution and copyright assignment will not be
forgotten and is highly appreciated by a very large community.  If you
are reluctant to sign an assignment, a disclaimer is also acceptable.

*Do I need a disclaimer from my university or employer?*  It depends on
the contract with your university or employer.  From the FSF’s
‘/gd/gnuorg/conditions.text’: “If you are employed to do programming, or
have made an agreement with your employer that says it owns programs you
write, we need a signed piece of paper from your employer disclaiming
rights to” Gnuastro.  The FSF’s copyright clerk will kindly help you
decide, please consult the following email address: “assign -at- gnu
-dot- org”.


File: gnuastro.info,  Node: Commit guidelines,  Next: Production workflow,  Prev: Copyright assignment,  Up: Contributing to Gnuastro

13.12.2 Commit guidelines
-------------------------

To be able to cleanly integrate your work with the other developers,
*never commit on the ‘master’ branch* (see *note Production workflow::
for a complete discussion and *note Forking tutorial:: for a cookbook
example).  In short, leave ‘master’ only for changes you fetch, or pull
from the official repository (see *note Synchronizing::).

   In the Gnuastro commit messages, we strive to follow these standards.
Note that in the early phases of Gnuastro’s development, we are
experimenting and so if you notice earlier commits do not satisfy some
of the guidelines below, it is because they predate that guideline.

Commit title
     The commits have to start with one short descriptive title.  The
     title is separated from the body with one blank line.  Run ‘git
     log’ to see some of the most recent commit messages as an example.
     In general, the title should satisfy the following conditions:

        • It is best for the title to be short, about 60 (or even 50)
          characters.  Most emulated command-line terminals are about 80
          characters wide.  However, we should also allow for the commit
          hashes which are printed in ‘git log --oneline’, and also
          branch names or the graph structure outputs of ‘git log’ which
          are also commonly used.

        • The title should not finish with any full-stops or periods
          (‘<.>’).

Commit body
     The body of the commit message is separated from the title by one
     empty line.  Recall that anyone who has subscribed to
     ‘gnuastro-commits’ mailing list will get the commit in their email
     after it has been pushed to ‘master’.  People will also read them
     when they synchronize with the main Gnuastro repository (see *note
     Synchronizing::).  Finally, the commit messages will later be used
     to update the ‘NEWS’ file on each release.  Therefore the commit
     message body plays a very important role in the development of
     Gnuastro, so please adhere to the following guidelines.

        • The body should be very descriptive.  Start the commit message
          body by explaining what changes your commit makes from a
          user’s perspective (added, changed, or removed options, or
          arguments to programs or libraries, or modified algorithms, or
          new installation step, etc.).

        • Try to explain the committed contents as best as you can.
          Recall that the readers of your commit message do not
          necessarily have your current background.  After some time you
          will also forget the context, so this request is not just for
          others(1).  Therefore be very descriptive and explain as much
          as possible: what the bug/task was, justify the way you fixed
          it and discuss other possible solutions that you might not
          have included.  For the last item, it is best to discuss them
          thoroughly as comments in the appropriate section of the code,
          but only give a short summary in the commit message.  Note
          that all added and removed source code lines will also be
          circulated in the ‘gnuastro-commits’ mailing list.

        • Like all other Gnuastro’s text files, the lines in the commit
          body should not be longer than 75 characters, see *note Coding
          conventions::.  This is to ensure that on standard terminal
          emulators (with 80 character width), the ‘git log’ output can
          be cleanly displayed (note that the commit message is indented
          in the output of ‘git log’).  If you use Emacs, Gnuastro’s
          ‘.dir-locals.el’ file will ensure that your commits satisfy
          this condition (using <M-q>).

        • When the commit is related to a task or a bug, please include
          the respective ID (in the format of ‘bug/task #ID’, note the
          space) in the commit message (from *note Gnuastro project
          webpage::) for interested people to be able to followup the
          discussion that took place there.  If the commit fixes a bug
          or finishes a task, the recommended way is to add a line after
          the body with ‘‘This fixes bug #ID.’’, or ‘‘This finishes task
          #ID.’’.  Do Not assume that the reader has internet access to
          check the bug’s full description when reading the commit
          message, so give a short introduction too.

   Below you can see a good commit message example (do not forget to
read it, it has tips for you).  After reading this, please run ‘git log’
on the ‘master’ branch and read some of the recent commits for more
realistic examples.

     The first line should be the title of the commit

     An empty line is necessary after the title so Git does not confuse
     lines.  This top paragraph of the body of the commit usually describes
     the reason this commit was done.  Therefore it usually starts with
     "Until now ...".  It is very useful to explain the reason behind the
     change, things that are not immediately obvious when looking into the
     code.  You do not need to list the names of the files, or what lines
     have been changed, do not forget that the code changes are fully stored
     within Git :-).

     In the second paragraph (or any later paragraph!) of the body, we
     describe the solution and why (not "how"!) the particular solution was
     implemented.  So we usually start this part of the commit body with
     "With this commit ...".  Again, you do not need to go into the details
     that can be seen from the 'git diff' command (like the file names that
     have been changed or the code that has been implemented).  The important
     thing here is the things that are not immediately obvious from looking
     into the code.

     You can continue the explanation and it is encouraged to be very
     explicit about the "human factor" of the change as much as possible, not
     technical details.

   ---------- Footnotes ----------

   (1) <http://catb.org/esr/writings/unix-koans/prodigy.html>


File: gnuastro.info,  Node: Production workflow,  Next: Forking tutorial,  Prev: Commit guidelines,  Up: Contributing to Gnuastro

13.12.3 Production workflow
---------------------------

Fortunately ‘Pro Git’ has done a wonderful job in explaining the
different workflows in Chapter 5(1) and in particular the
“Integration-Manager Workflow” explained there.  The implementation of
this workflow is nicely explained in Section 5.2(2) under
“Forked-Public-Project”.  We have also prepared a short tutorial in
*note Forking tutorial::.  Anything on the master branch should always
be tested and ready to be built and used.  As described in ‘Pro Git’,
there are two methods for you to contribute to Gnuastro in the
Integration-Manager Workflow:

  1. You can send commit patches by email as fully explained in ‘Pro
     Git’.  This is good for your first few contributions.  Just note
     that raw patches (containing only the diff) do not have any
     meta-data (author name, date, etc.).  Therefore they will not allow
     us to fully acknowledge your contributions as an author in
     Gnuastro: in the ‘AUTHORS’ file and at the start of the PDF book.
     These author lists are created automatically from the version
     controlled source.

     To receive full acknowledgment when submitting a patch, is thus
     advised to use Git’s ‘format-patch’ tool.  See Pro Git’s Public
     project over email
     (https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#Public-Project-over-Email)
     section for a nice explanation.  If you would like to get more
     heavily involved in Gnuastro’s development, then you can try the
     next solution.

  2. You can have your own forked copy of Gnuastro on any hosting site
     you like (Codeberg, Gitlab, GitHub, BitBucket, etc.)  and inform us
     when your changes are ready so we merge them in Gnuastro.  This is
     more suited for people who commonly contribute to the code (see
     *note Forking tutorial::).

   In both cases, your commits (with your name and information) will be
preserved and your contributions will thus be fully recorded in the
history of Gnuastro and in the ‘AUTHORS’ file and this book (second page
in the PDF format) once they have been incorporated into the official
repository.  Needless to say that in such cases, be sure to follow the
bug or task trackers (or subscribe to the ‘gnuastro-devel’ mailing list)
and contact us before hand so you do not do something that someone else
is already working on.  In that case, you can get in touch with them and
help the job go on faster, see *note Gnuastro project webpage::.  This
workflow is currently mostly borrowed from the general recommendations
of Git(3) and GitHub.  But since Gnuastro is currently under heavy
development, these might change and evolve to better suit our needs.

   ---------- Footnotes ----------

   (1) 
<http://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows>

   (2) 
<http://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project>

   (3) 
<https://github.com/git/git/blob/master/Documentation/SubmittingPatches>


File: gnuastro.info,  Node: Forking tutorial,  Prev: Production workflow,  Up: Contributing to Gnuastro

13.12.4 Forking tutorial
------------------------

This is a tutorial on the second suggested method (commonly known as
forking) that you can submit your modifications in Gnuastro (see *note
Production workflow::).

   To start, please create an _empty_ repository on your hosting service
web page (we recommend Codeberg since it is fully free software(1)).  By
empty, we mean that you don’t let the web service fill your new
repository with a ‘README.md’ file (they usually have a check-box for
this).  Also, since Gnuastro is a public repository, it is much easier
if you define your project as a public repository (not a private one).

   If this is your first hosted repository on the web page, you also
have to upload your public SSH key(2) for the ‘git push’ command below
to work.  Here we will assume you use the name ‘janedoe’ to refer to
yourself everywhere and that you choose ‘gnuastro’ as the name of your
Gnuastro fork.  Any online hosting service will give you an address
(similar to the ‘‘git@codeberg.org:...’’ below) of the empty repository
you have created using their web page, use that address in the third
line below.

     $ git clone git://git.sv.gnu.org/gnuastro.git
     $ cd gnuastro
     $ git remote add janedoe git@codeberg.org:janedoe/gnuastro.git
     $ git push janedoe master

   The full Gnuastro history is now pushed onto your hosting service and
the ‘janedoe’ remote is now also following your ‘master’ branch.  If you
run ‘git remote show REMOTENAME’ for the ‘origin’ and ‘janedoe’ remotes,
you will see their difference: the first has pull access and the second
does not.  This nicely summarizes the main idea behind this workflow:
you push to your remote repository, we pull from it and merge it into
‘master’, then you finalize it by pulling from the main repository.

   To test (compile) your changes during your work, you will need to
bootstrap the version controlled source, see *note Bootstrapping:: for a
full description.  The cloning process above is only necessary for your
first time setup, you do not need to repeat it.  However, please repeat
the steps below for each independent issue you intend to work on.

   Let’s assume you have found a bug in ‘lib/statistics.c’’s median
calculating function.  Before actually doing anything, please announce
it (see *note Report a bug::) so everyone knows you are working on it,
or to confirm if others are not already working on it.  With the
commands below, you make a branch, checkout to it, correct the bug and
check if it is indeed fixed.  But before all of this, make sure that you
are on the ‘master’ branch and that your ‘master’ branch is up to date
with the main Gnuastro repository with the first two commands.

     $ git checkout master
     $ git pull
     $ git checkout -b bug-median-stats      # Choose a descriptive name
     $ emacs lib/statistics.c

   With the commands above, you have opened your favorite text editor
(if it is not Emacs, feel free to use any other!)  and are starting to
make changes.  Making changes will usually involve checking the
compilation and outputs of the parts you have changed.  Gnuastro already
has some facilities to help you in your checks during/after development.

‘developer-build’
     This script does a full build (from the configuration phase to
     producing the final distribution tarball).  During the process, if
     there is any error or crash, it will abort.  This allows you to
     find problems that you hadn’t predicted while modifying the files.
     This script is described more completely in *note Separate build
     and source directories::.  Here is an example of running this
     script from scratch (the ‘junk’ is just a place-holder for a URL):
          $ ./developer-build -p junk

     If you just want a fast build to start your developing, the
     recommended way is to run it in debugging mode like below:

          $ ./developer-build -d

     Without debugging mode, building Gnuastro can take several minutes
     due to the highly optimizable code structure of Gnuastro (which
     significantly improves the run-time of the programs, but is slower
     in the compilation phase).  During development, you rarely need
     high speed at _run-time_.  This is because once you find the bug,
     you can decrease the size of the dataset to be very small and not
     be affected by run-time optimizations.  However, during
     development, you do need a high speed at _build-time_ to see the
     changes fast and also need debugging flags (for example to run with
     Valgrind).  Debugging flags are lost in the default
     highly-optimized build.

‘tests/during-dev.sh’
     This script is most commonly used during the development of a new
     feature within the library or programs (it is also mentioned in
     *note Building and debugging::).  It assumes that you have built
     Gnuastro with the ‘./developer-build’ script (usually in debugging
     mode).  In other words, it assumes that all the built products are
     in the ‘build’ directory.

     It has internal variables to set the name of the program you are
     testing, the name of its arguments and options, as well as the
     location that the built program should be run in.  It is heavily
     commented, so we recommend reading those comments and will not go
     into more detail here.

‘make pdf’
     When making changes in the book, you can run this in the ‘build’
     directory to see your changes in the final PDF before committing.
     Furthermore, if you add or update an example code block of the
     book, you should copy-paste it into a text editor and check that it
     runs correctly (typos are very common and can be very annoying for
     first-time readers).  If there are no problems, you can add your
     modification and commit it.

   Once you have implemented your bug fix and made sure that it works,
through the checks above, you are ready to stage, commit and push your
changes with the commands below.  Since Gnuastro is a large project,
commit messages have to follow certain standards that you should follow,
they are described in *note Commit guidelines::.  Please read that
section carefully, and view previous commits (with ‘git log’) before
writing the commit message:

     $ git add lib/statistics.c
     $ git commit
     $ git push janedoe bug-median-stats

   Your new branch is now on your hosted repository.  Through the
respective tacker on Savannah (see *note Gnuastro project webpage::) you
can then let the other developers know that your ‘bug-median-stats’
branch is ready.  They will pull your work, test it themselves and if it
is ready to be merged into the main Gnuastro history, they will merge it
into the ‘master’ branch.  After that is done, you can simply checkout
your local ‘master’ branch and pull all the changes from the main
repository.  After the pull you can run ‘‘git log’’ as shown below, to
see how ‘bug-median-stats’ is merged with master.  To finalize, you can
push all the changes to your hosted repository and delete the branch:

     $ git checkout master
     $ git pull
     $ git log --oneline --graph --decorate --all
     $ git push janedoe master
     $ git branch -d bug-median-stats                # delete local branch
     $ git push janedoe --delete bug-median-stats    # delete remote branch

   Just as a reminder, always keep your work on each issue in a separate
local and remote branch so work can progress on them independently.
After you make your announcement, other people might contribute to the
branch before merging it in to ‘master’, so this is very important.  As
a final reminder: before starting each issue branch from ‘master’, be
sure to run ‘git pull’ in ‘master’ as shown above.  This will enable you
to start your branch (work) from the most recent commit and thus
simplify the final merging of your work.

   ---------- Footnotes ----------

   (1) See <https://www.gnu.org/software/repo-criteria-evaluation.html>
for an evaluation of the major existing repositories.  Gnuastro uses GNU
Savannah (which also has the highest ranking in the evaluation), but for
starters, Codeberg may be easier (it is fully free software).

   (2) for example, see this explanation provided by Codeberg:
<https://docs.codeberg.org/security/ssh-key>.


File: gnuastro.info,  Node: Other useful software,  Next: GNU Free Doc License,  Prev: Developing,  Up: Top

Appendix A Other useful software
********************************

In this appendix the installation of programs and libraries that are not
direct Gnuastro dependencies are discussed.  However they can be useful
for working with Gnuastro.

* Menu:

* SAO DS9::                     Viewing FITS images.
* TOPCAT::                      Plotting tables of data.
* PGPLOT::                      Plotting directly in C.


File: gnuastro.info,  Node: SAO DS9,  Next: TOPCAT,  Prev: Other useful software,  Up: Other useful software

A.1 SAO DS9
===========

SAO DS9 (http://ds9.si.edu) is not a requirement of Gnuastro, it is a
FITS image viewer.  It is therefore a useful tool to visually inspect
the images/cubes of your Gnuastro inputs or outputs (for tables, see
*note TOPCAT::).  In Gnuastro we have an installed script to run DS9 or
TOPCAT on any number of FITS files (depending on it being an image or
table), see *note Viewing FITS file contents with DS9 or TOPCAT:: (which
also includes a ‘.desktop’ file for GUI integration).  After installing
DS9, you can easily use that script to open any FITS file (table, image
or cube).

   Like the other packages, it might already be available in your
distribution’s repositories; but these may be outdated.  DS9 is also
already pre-compiled for many common operating systems in the download
section of its own web page:
  1. Find your operating system in <https://ds9.si.edu/download>.  Here
     are some tips when trying to find the proper directory:
        • Many GNU/Linux operating systems are compatible with Debian or
          Fedora, so if you don’t find your operating system’s name,
          probably the latest Debian or Fedora will also work for you.
        • macOS uses the low-level “Darwin” kernel.  Therefore, if you
          have a macOS, also consider those directories that start with
          ‘darwin’.
        • The CPU architectures (as suffixes) at the end of the
          directory names can be classified like this:
          ‘x86’
               Intel CPUs.
          ‘arm64’
               Apple’s M1 CPUs.
  2. With the operating system directories, you will find a compressed
     tarball that you need to download (choose the latest one).
  3. Unpack the tarball with a command like below:
          $ tar -xf ds9.XXXXXXX.X.X.X.tar.gz
  4. This should produce a simple ‘ds9’ file.  Before installing, it is
     good to actually test it like below:
          $ ./ds9
  5. If the command above opened DS9 with no error, you can safely
     install it with this command:
          $ rm ds9*.tar.gz
          $ sudo mv ds9* /usr/local/bin
  6. Go to your home directory and try running DS9 with the two commands
     below.  If it doesn’t find it, then you need to add
     ‘/usr/local/bin’ to your ‘PATH’, see *note Installation
     directory::.

          $ cd
          $ ds9

*Install without root permissions:* If you do not have root permissions,
you can simply replace ‘/usr/local/bin’ in the command above with
‘$HOME/.local/bin’.  If this directory is not in your ‘PATH’, you can
simply add it with the command below (in your startup file, e.g.,
‘~/.bashrc’).  For more on ‘PATH’ and the startup files, see *note
Installation directory::.

     export PATH="$HOME/.local/bin:$PATH"

Below you can see a list of known issues in some operating systems that
we have found so far.  You should be able to identify any potential
error when running DS9 from the command-line like above.

   • There might be a complaint about the Xss library, which you can
     find in your distribution package management system.
   • You might also get an ‘XPA’ related error.  In this case, you have
     to add the following line to your ‘~/.bashrc’ and ‘~/.profile’ file
     (you will have to log out and back in again for the latter):

          export XPA_METHOD=local

   • Your system may not have the SSL library in its standard library
     path, in this case, put this command in your startup file (for
     example, ‘~/.bashrc’):

          export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/ssl/lib"


File: gnuastro.info,  Node: TOPCAT,  Next: PGPLOT,  Prev: SAO DS9,  Up: Other useful software

A.2 TOPCAT
==========

TOPCAT (http://www.star.bris.ac.uk/~mbt/topcat) is not a requirement of
Gnuastro, it is a table viewer and plotter (in many input formats,
including FITS, VOTable, and others).  TOPCAT is therefore a useful tool
to visually inspect the tables of your Gnuastro inputs or outputs (for
images, see *note SAO DS9::).  In Gnuastro we have an installed script
to run DS9 or TOPCAT on any number of FITS files (depending on it being
an image or table), see *note Viewing FITS file contents with DS9 or
TOPCAT:: (which also includes a ‘.desktop’ file for GUI integration).
After installing DS9, you can easily use that script to open any FITS
file (table, image or cube).

   TOPCAT is a very large package with many capabilities to visualize
tables (as plots).  It also has an extensive documentation
(http://www.star.bris.ac.uk/~mbt/topcat/#docs) that you can read for
optimally using it.  TOPCAT is written in Java, so it just needs a
relatively recent (in the last decade) Java Virtual Machine (JVM) and
Java Runtime Environment (JRE). Your operating system already has a
relatively recent Java installation in its package manager, and there is
a large chance that it is already installed.  So before trying to
install Java, try running TOPCAT. If it complains about not finding a
suitable Java environment, then proceed to search your operating
system’s package manager.

   To install TOPCAT, you just need to run the following two commands.
The first ‘.jar’ file is the main TOPCAT Java ARchive (JAR). JAR is a
compressed package of Java files and definitions that should be run with
a special Java command.  But to avoid bothering users with details of
how to call Java, TOPCAT also provides a simple shell script (the second
downloaded file below) that is easier to call and will do all the
internal checks and call Java properly.

     $ wget http://www.star.bris.ac.uk/~mbt/topcat/topcat-full.jar
     $ wget http://www.star.bris.ac.uk/~mbt/topcat/topcat
     $ chmod +x topcat
     $ ./topcat           # Just for a check to see if everything works!
     $ sudo mv topcat-full.jar topcat /usr/local/bin/

Once the two TOPCAT files are copied in the system-wide directory, you
can easily open tables with a command like below from anywhere in your
operating system.

     $ topcat table.fits

*Install without root permissions:* If you do not have root permissions,
you can simply replace ‘/usr/local/bin’ in the command above with
‘$HOME/.local/bin’.  If this directory is not in your ‘PATH’, you can
simply add it with the command below (in your startup file, e.g.,
‘~/.bashrc’).  For more on ‘PATH’ and the startup files, see *note
Installation directory::.

     export PATH="$HOME/.local/bin:$PATH"


File: gnuastro.info,  Node: PGPLOT,  Prev: TOPCAT,  Up: Other useful software

A.3 PGPLOT
==========

PGPLOT is a package for making plots in C. It is not directly needed by
Gnuastro, but can be used by WCSLIB, see *note WCSLIB::.  As explained
in *note WCSLIB::, you can install WCSLIB without it too.  It is very
old (the most recent version was released early 2001!), but remains one
of the main packages for plotting directly in C. WCSLIB uses this
package to make plots if you want it to make plots.  If you are
interested you can also use it for your own purposes.

   If you want your plotting codes in between your C program, PGPLOT is
currently one of your best options.  The recommended alternative to this
method is to get the raw data for the plots in text files and input them
into any of the various more modern and capable plotting tools
separately, for example, the Matplotlib library in Python or PGFplots in
LaTeX.  This will also significantly help code readability.  Let’s get
back to PGPLOT for the sake of WCSLIB. Installing it is a little tricky
(mainly because it is so old!).

   You can download the most recent version from the FTP link in its web
page(1).  You can unpack it with the ‘tar xf’ command.  Let’s assume the
directory you have unpacked it to is ‘PGPLOT’, most probably it is:
‘/home/username/Downloads/pgplot/’.  Open the ‘drivers.list’ file:
     $ gedit drivers.list
Remove the ‘!’ for the following lines and save the file in the end:
     PSDRIV 1 /PS
     PSDRIV 2 /VPS
     PSDRIV 3 /CPS
     PSDRIV 4 /VCPS
     XWDRIV 1 /XWINDOW
     XWDRIV 2 /XSERVE
Do Not choose GIF or VGIF, there is a problem in their codes.

   Open the ‘PGPLOT/sys_linux/g77_gcc.conf’ file:
     $ gedit PGPLOT/sys_linux/g77_gcc.conf
change the line saying: ‘FCOMPL="g77"’ to ‘FCOMPL="gfortran"’, and save
it.  This is a very important step during the compilation of the code if
you are in GNU/Linux.  You now have to create a folder in ‘/usr/local’,
do not forget to replace ‘PGPLOT’ with your unpacked address:
     $ su
     # mkdir /usr/local/pgplot
     # cd /usr/local/pgplot
     # cp PGPLOT/drivers.list ./
   To make the Makefile, type the following command:
     # PGPLOT/makemake PGPLOT linux g77_gcc
It should finish by saying: ‘Determining object file dependencies’.  You
have done the hard part!  The rest is easy: run these three commands in
order:
     # make
     # make clean
     # make cpg

   Finally you have to place the position of this directory you just
made into the ‘LD_LIBRARY_PATH’ environment variable and define the
environment variable ‘PGPLOT_DIR’.  To do that, you have to edit your
‘.bashrc’ file:
     $ cd ~
     $ gedit .bashrc
Copy these lines into the text editor and save it:
     PGPLOT_DIR="/usr/local/pgplot/"; export PGPLOT_DIR
     LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgplot/
     export LD_LIBRARY_PATH
You need to log out and log back in again so these definitions take
effect.  After you logged back in, you want to see the result of all
this labor, right?  Tim Pearson has done that for you, create a
temporary folder in your home directory and copy all the demonstration
files in it:
     $ cd ~
     $ mkdir temp
     $ cd temp
     $ cp /usr/local/pgplot/pgdemo* ./
     $ ls
   You will see a lot of pgdemoXX files, where XX is a number.  In order
to execute them type the following command and drink your coffee while
looking at all the beautiful plots!  You are now ready to create your
own.
     $ ./pgdemoXX

   ---------- Footnotes ----------

   (1) <http://www.astro.caltech.edu/~tjp/pgplot/>


File: gnuastro.info,  Node: GNU Free Doc License,  Next: GNU General Public License,  Prev: Other useful software,  Up: Top

Appendix B GNU Free Doc. License
********************************

                     Version 1.3, 3 November 2008

     Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
     <https://fsf.org/>

     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.

  0. PREAMBLE

     The purpose of this License is to make a manual, textbook, or other
     functional and useful document “free” in the sense of freedom: to
     assure everyone the effective freedom to copy and redistribute it,
     with or without modifying it, either commercially or
     noncommercially.  Secondarily, this License preserves for the
     author and publisher a way to get credit for their work, while not
     being considered responsible for modifications made by others.

     This License is a kind of “copyleft”, which means that derivative
     works of the document must themselves be free in the same sense.
     It complements the GNU General Public License, which is a copyleft
     license designed for free software.

     We have designed this License in order to use it for manuals for
     free software, because free software needs free documentation: a
     free program should come with manuals providing the same freedoms
     that the software does.  But this License is not limited to
     software manuals; it can be used for any textual work, regardless
     of subject matter or whether it is published as a printed book.  We
     recommend this License principally for works whose purpose is
     instruction or reference.

  1. APPLICABILITY AND DEFINITIONS

     This License applies to any manual or other work, in any medium,
     that contains a notice placed by the copyright holder saying it can
     be distributed under the terms of this License.  Such a notice
     grants a world-wide, royalty-free license, unlimited in duration,
     to use that work under the conditions stated herein.  The
     “Document”, below, refers to any such manual or work.  Any member
     of the public is a licensee, and is addressed as “you”.  You accept
     the license if you copy, modify or distribute the work in a way
     requiring permission under copyright law.

     A “Modified Version” of the Document means any work containing the
     Document or a portion of it, either copied verbatim, or with
     modifications and/or translated into another language.

     A “Secondary Section” is a named appendix or a front-matter section
     of the Document that deals exclusively with the relationship of the
     publishers or authors of the Document to the Document’s overall
     subject (or to related matters) and contains nothing that could
     fall directly within that overall subject.  (Thus, if the Document
     is in part a textbook of mathematics, a Secondary Section may not
     explain any mathematics.)  The relationship could be a matter of
     historical connection with the subject or with related matters, or
     of legal, commercial, philosophical, ethical or political position
     regarding them.

     The “Invariant Sections” are certain Secondary Sections whose
     titles are designated, as being those of Invariant Sections, in the
     notice that says that the Document is released under this License.
     If a section does not fit the above definition of Secondary then it
     is not allowed to be designated as Invariant.  The Document may
     contain zero Invariant Sections.  If the Document does not identify
     any Invariant Sections then there are none.

     The “Cover Texts” are certain short passages of text that are
     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
     that says that the Document is released under this License.  A
     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
     be at most 25 words.

     A “Transparent” copy of the Document means a machine-readable copy,
     represented in a format whose specification is available to the
     general public, that is suitable for revising the document
     straightforwardly with generic text editors or (for images composed
     of pixels) generic paint programs or (for drawings) some widely
     available drawing editor, and that is suitable for input to text
     formatters or for automatic translation to a variety of formats
     suitable for input to text formatters.  A copy made in an otherwise
     Transparent file format whose markup, or absence of markup, has
     been arranged to thwart or discourage subsequent modification by
     readers is not Transparent.  An image format is not Transparent if
     used for any substantial amount of text.  A copy that is not
     “Transparent” is called “Opaque”.

     Examples of suitable formats for Transparent copies include plain
     ASCII without markup, Texinfo input format, LaTeX input format,
     SGML or XML using a publicly available DTD, and standard-conforming
     simple HTML, PostScript or PDF designed for human modification.
     Examples of transparent image formats include PNG, XCF and JPG.
     Opaque formats include proprietary formats that can be read and
     edited only by proprietary word processors, SGML or XML for which
     the DTD and/or processing tools are not generally available, and
     the machine-generated HTML, PostScript or PDF produced by some word
     processors for output purposes only.

     The “Title Page” means, for a printed book, the title page itself,
     plus such following pages as are needed to hold, legibly, the
     material this License requires to appear in the title page.  For
     works in formats which do not have any title page as such, “Title
     Page” means the text near the most prominent appearance of the
     work’s title, preceding the beginning of the body of the text.

     The “publisher” means any person or entity that distributes copies
     of the Document to the public.

     A section “Entitled XYZ” means a named subunit of the Document
     whose title either is precisely XYZ or contains XYZ in parentheses
     following text that translates XYZ in another language.  (Here XYZ
     stands for a specific section name mentioned below, such as
     “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.)
     To “Preserve the Title” of such a section when you modify the
     Document means that it remains a section “Entitled XYZ” according
     to this definition.

     The Document may include Warranty Disclaimers next to the notice
     which states that this License applies to the Document.  These
     Warranty Disclaimers are considered to be included by reference in
     this License, but only as regards disclaiming warranties: any other
     implication that these Warranty Disclaimers may have is void and
     has no effect on the meaning of this License.

  2. VERBATIM COPYING

     You may copy and distribute the Document in any medium, either
     commercially or noncommercially, provided that this License, the
     copyright notices, and the license notice saying this License
     applies to the Document are reproduced in all copies, and that you
     add no other conditions whatsoever to those of this License.  You
     may not use technical measures to obstruct or control the reading
     or further copying of the copies you make or distribute.  However,
     you may accept compensation in exchange for copies.  If you
     distribute a large enough number of copies you must also follow the
     conditions in section 3.

     You may also lend copies, under the same conditions stated above,
     and you may publicly display copies.

  3. COPYING IN QUANTITY

     If you publish printed copies (or copies in media that commonly
     have printed covers) of the Document, numbering more than 100, and
     the Document’s license notice requires Cover Texts, you must
     enclose the copies in covers that carry, clearly and legibly, all
     these Cover Texts: Front-Cover Texts on the front cover, and
     Back-Cover Texts on the back cover.  Both covers must also clearly
     and legibly identify you as the publisher of these copies.  The
     front cover must present the full title with all words of the title
     equally prominent and visible.  You may add other material on the
     covers in addition.  Copying with changes limited to the covers, as
     long as they preserve the title of the Document and satisfy these
     conditions, can be treated as verbatim copying in other respects.

     If the required texts for either cover are too voluminous to fit
     legibly, you should put the first ones listed (as many as fit
     reasonably) on the actual cover, and continue the rest onto
     adjacent pages.

     If you publish or distribute Opaque copies of the Document
     numbering more than 100, you must either include a machine-readable
     Transparent copy along with each Opaque copy, or state in or with
     each Opaque copy a computer-network location from which the general
     network-using public has access to download using public-standard
     network protocols a complete Transparent copy of the Document, free
     of added material.  If you use the latter option, you must take
     reasonably prudent steps, when you begin distribution of Opaque
     copies in quantity, to ensure that this Transparent copy will
     remain thus accessible at the stated location until at least one
     year after the last time you distribute an Opaque copy (directly or
     through your agents or retailers) of that edition to the public.

     It is requested, but not required, that you contact the authors of
     the Document well before redistributing any large number of copies,
     to give them a chance to provide you with an updated version of the
     Document.

  4. MODIFICATIONS

     You may copy and distribute a Modified Version of the Document
     under the conditions of sections 2 and 3 above, provided that you
     release the Modified Version under precisely this License, with the
     Modified Version filling the role of the Document, thus licensing
     distribution and modification of the Modified Version to whoever
     possesses a copy of it.  In addition, you must do these things in
     the Modified Version:

       A. Use in the Title Page (and on the covers, if any) a title
          distinct from that of the Document, and from those of previous
          versions (which should, if there were any, be listed in the
          History section of the Document).  You may use the same title
          as a previous version if the original publisher of that
          version gives permission.

       B. List on the Title Page, as authors, one or more persons or
          entities responsible for authorship of the modifications in
          the Modified Version, together with at least five of the
          principal authors of the Document (all of its principal
          authors, if it has fewer than five), unless they release you
          from this requirement.

       C. State on the Title page the name of the publisher of the
          Modified Version, as the publisher.

       D. Preserve all the copyright notices of the Document.

       E. Add an appropriate copyright notice for your modifications
          adjacent to the other copyright notices.

       F. Include, immediately after the copyright notices, a license
          notice giving the public permission to use the Modified
          Version under the terms of this License, in the form shown in
          the Addendum below.

       G. Preserve in that license notice the full lists of Invariant
          Sections and required Cover Texts given in the Document’s
          license notice.

       H. Include an unaltered copy of this License.

       I. Preserve the section Entitled “History”, Preserve its Title,
          and add to it an item stating at least the title, year, new
          authors, and publisher of the Modified Version as given on the
          Title Page.  If there is no section Entitled “History” in the
          Document, create one stating the title, year, authors, and
          publisher of the Document as given on its Title Page, then add
          an item describing the Modified Version as stated in the
          previous sentence.

       J. Preserve the network location, if any, given in the Document
          for public access to a Transparent copy of the Document, and
          likewise the network locations given in the Document for
          previous versions it was based on.  These may be placed in the
          “History” section.  You may omit a network location for a work
          that was published at least four years before the Document
          itself, or if the original publisher of the version it refers
          to gives permission.

       K. For any section Entitled “Acknowledgements” or “Dedications”,
          Preserve the Title of the section, and preserve in the section
          all the substance and tone of each of the contributor
          acknowledgements and/or dedications given therein.

       L. Preserve all the Invariant Sections of the Document, unaltered
          in their text and in their titles.  Section numbers or the
          equivalent are not considered part of the section titles.

       M. Delete any section Entitled “Endorsements”.  Such a section
          may not be included in the Modified Version.

       N. Do not retitle any existing section to be Entitled
          “Endorsements” or to conflict in title with any Invariant
          Section.

       O. Preserve any Warranty Disclaimers.

     If the Modified Version includes new front-matter sections or
     appendices that qualify as Secondary Sections and contain no
     material copied from the Document, you may at your option designate
     some or all of these sections as invariant.  To do this, add their
     titles to the list of Invariant Sections in the Modified Version’s
     license notice.  These titles must be distinct from any other
     section titles.

     You may add a section Entitled “Endorsements”, provided it contains
     nothing but endorsements of your Modified Version by various
     parties—for example, statements of peer review or that the text has
     been approved by an organization as the authoritative definition of
     a standard.

     You may add a passage of up to five words as a Front-Cover Text,
     and a passage of up to 25 words as a Back-Cover Text, to the end of
     the list of Cover Texts in the Modified Version.  Only one passage
     of Front-Cover Text and one of Back-Cover Text may be added by (or
     through arrangements made by) any one entity.  If the Document
     already includes a cover text for the same cover, previously added
     by you or by arrangement made by the same entity you are acting on
     behalf of, you may not add another; but you may replace the old
     one, on explicit permission from the previous publisher that added
     the old one.

     The author(s) and publisher(s) of the Document do not by this
     License give permission to use their names for publicity for or to
     assert or imply endorsement of any Modified Version.

  5. COMBINING DOCUMENTS

     You may combine the Document with other documents released under
     this License, under the terms defined in section 4 above for
     modified versions, provided that you include in the combination all
     of the Invariant Sections of all of the original documents,
     unmodified, and list them all as Invariant Sections of your
     combined work in its license notice, and that you preserve all
     their Warranty Disclaimers.

     The combined work need only contain one copy of this License, and
     multiple identical Invariant Sections may be replaced with a single
     copy.  If there are multiple Invariant Sections with the same name
     but different contents, make the title of each such section unique
     by adding at the end of it, in parentheses, the name of the
     original author or publisher of that section if known, or else a
     unique number.  Make the same adjustment to the section titles in
     the list of Invariant Sections in the license notice of the
     combined work.

     In the combination, you must combine any sections Entitled
     “History” in the various original documents, forming one section
     Entitled “History”; likewise combine any sections Entitled
     “Acknowledgements”, and any sections Entitled “Dedications”.  You
     must delete all sections Entitled “Endorsements.”

  6. COLLECTIONS OF DOCUMENTS

     You may make a collection consisting of the Document and other
     documents released under this License, and replace the individual
     copies of this License in the various documents with a single copy
     that is included in the collection, provided that you follow the
     rules of this License for verbatim copying of each of the documents
     in all other respects.

     You may extract a single document from such a collection, and
     distribute it individually under this License, provided you insert
     a copy of this License into the extracted document, and follow this
     License in all other respects regarding verbatim copying of that
     document.

  7. AGGREGATION WITH INDEPENDENT WORKS

     A compilation of the Document or its derivatives with other
     separate and independent documents or works, in or on a volume of a
     storage or distribution medium, is called an “aggregate” if the
     copyright resulting from the compilation is not used to limit the
     legal rights of the compilation’s users beyond what the individual
     works permit.  When the Document is included in an aggregate, this
     License does not apply to the other works in the aggregate which
     are not themselves derivative works of the Document.

     If the Cover Text requirement of section 3 is applicable to these
     copies of the Document, then if the Document is less than one half
     of the entire aggregate, the Document’s Cover Texts may be placed
     on covers that bracket the Document within the aggregate, or the
     electronic equivalent of covers if the Document is in electronic
     form.  Otherwise they must appear on printed covers that bracket
     the whole aggregate.

  8. TRANSLATION

     Translation is considered a kind of modification, so you may
     distribute translations of the Document under the terms of section
     4.  Replacing Invariant Sections with translations requires special
     permission from their copyright holders, but you may include
     translations of some or all Invariant Sections in addition to the
     original versions of these Invariant Sections.  You may include a
     translation of this License, and all the license notices in the
     Document, and any Warranty Disclaimers, provided that you also
     include the original English version of this License and the
     original versions of those notices and disclaimers.  In case of a
     disagreement between the translation and the original version of
     this License or a notice or disclaimer, the original version will
     prevail.

     If a section in the Document is Entitled “Acknowledgements”,
     “Dedications”, or “History”, the requirement (section 4) to
     Preserve its Title (section 1) will typically require changing the
     actual title.

  9. TERMINATION

     You may not copy, modify, sublicense, or distribute the Document
     except as expressly provided under this License.  Any attempt
     otherwise to copy, modify, sublicense, or distribute it is void,
     and will automatically terminate your rights under this License.

     However, if you cease all violation of this License, then your
     license from a particular copyright holder is reinstated (a)
     provisionally, unless and until the copyright holder explicitly and
     finally terminates your license, and (b) permanently, if the
     copyright holder fails to notify you of the violation by some
     reasonable means prior to 60 days after the cessation.

     Moreover, your license from a particular copyright holder is
     reinstated permanently if the copyright holder notifies you of the
     violation by some reasonable means, this is the first time you have
     received notice of violation of this License (for any work) from
     that copyright holder, and you cure the violation prior to 30 days
     after your receipt of the notice.

     Termination of your rights under this section does not terminate
     the licenses of parties who have received copies or rights from you
     under this License.  If your rights have been terminated and not
     permanently reinstated, receipt of a copy of some or all of the
     same material does not give you any rights to use it.

  10. FUTURE REVISIONS OF THIS LICENSE

     The Free Software Foundation may publish new, revised versions of
     the GNU Free Documentation License from time to time.  Such new
     versions will be similar in spirit to the present version, but may
     differ in detail to address new problems or concerns.  See
     <https://www.gnu.org/licenses/>.

     Each version of the License is given a distinguishing version
     number.  If the Document specifies that a particular numbered
     version of this License “or any later version” applies to it, you
     have the option of following the terms and conditions either of
     that specified version or of any later version that has been
     published (not as a draft) by the Free Software Foundation.  If the
     Document does not specify a version number of this License, you may
     choose any version ever published (not as a draft) by the Free
     Software Foundation.  If the Document specifies that a proxy can
     decide which future versions of this License can be used, that
     proxy’s public statement of acceptance of a version permanently
     authorizes you to choose that version for the Document.

  11. RELICENSING

     “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any
     World Wide Web server that publishes copyrightable works and also
     provides prominent facilities for anybody to edit those works.  A
     public wiki that anybody can edit is an example of such a server.
     A “Massive Multiauthor Collaboration” (or “MMC”) contained in the
     site means any set of copyrightable works thus published on the MMC
     site.

     “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0
     license published by Creative Commons Corporation, a not-for-profit
     corporation with a principal place of business in San Francisco,
     California, as well as future copyleft versions of that license
     published by that same organization.

     “Incorporate” means to publish or republish a Document, in whole or
     in part, as part of another Document.

     An MMC is “eligible for relicensing” if it is licensed under this
     License, and if all works that were first published under this
     License somewhere other than this MMC, and subsequently
     incorporated in whole or in part into the MMC, (1) had no cover
     texts or invariant sections, and (2) were thus incorporated prior
     to November 1, 2008.

     The operator of an MMC Site may republish an MMC contained in the
     site under CC-BY-SA on the same site at any time before August 1,
     2009, provided the MMC is eligible for relicensing.

ADDENDUM: How to use this License for your documents
====================================================

To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and license
notices just after the title page:

       Copyright (C)  YEAR  YOUR NAME.
       Permission is granted to copy, distribute and/or modify this document
       under the terms of the GNU Free Documentation License, Version 1.3
       or any later version published by the Free Software Foundation;
       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
       Texts.  A copy of the license is included in the section entitled ``GNU
       Free Documentation License''.

   If you have Invariant Sections, Front-Cover Texts and Back-Cover
Texts, replace the “with...Texts.” line with this:

         with the Invariant Sections being LIST THEIR TITLES, with
         the Front-Cover Texts being LIST, and with the Back-Cover Texts
         being LIST.

   If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.

   If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of free
software license, such as the GNU General Public License, to permit
their use in free software.


File: gnuastro.info,  Node: GNU General Public License,  Next: Index,  Prev: GNU Free Doc License,  Up: Top

Appendix C GNU Gen. Pub. License v3
***********************************

                        Version 3, 29 June 2007

     Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>

     Everyone is permitted to copy and distribute verbatim copies of this
     license document, but changing it is not allowed.

Preamble
========

The GNU General Public License is a free, copyleft license for software
and other kinds of works.

   The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program—to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

   When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

   To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

   For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

   Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

   For the developers’ and authors’ protection, the GPL clearly explains
that there is no warranty for this free software.  For both users’ and
authors’ sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

   Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users’ freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

   Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

   The precise terms and conditions for copying, distribution and
modification follow.

TERMS AND CONDITIONS
====================

  0. Definitions.

     “This License” refers to version 3 of the GNU General Public
     License.

     “Copyright” also means copyright-like laws that apply to other
     kinds of works, such as semiconductor masks.

     “The Program” refers to any copyrightable work licensed under this
     License.  Each licensee is addressed as “you”.  “Licensees” and
     “recipients” may be individuals or organizations.

     To “modify” a work means to copy from or adapt all or part of the
     work in a fashion requiring copyright permission, other than the
     making of an exact copy.  The resulting work is called a “modified
     version” of the earlier work or a work “based on” the earlier work.

     A “covered work” means either the unmodified Program or a work
     based on the Program.

     To “propagate” a work means to do anything with it that, without
     permission, would make you directly or secondarily liable for
     infringement under applicable copyright law, except executing it on
     a computer or modifying a private copy.  Propagation includes
     copying, distribution (with or without modification), making
     available to the public, and in some countries other activities as
     well.

     To “convey” a work means any kind of propagation that enables other
     parties to make or receive copies.  Mere interaction with a user
     through a computer network, with no transfer of a copy, is not
     conveying.

     An interactive user interface displays “Appropriate Legal Notices”
     to the extent that it includes a convenient and prominently visible
     feature that (1) displays an appropriate copyright notice, and (2)
     tells the user that there is no warranty for the work (except to
     the extent that warranties are provided), that licensees may convey
     the work under this License, and how to view a copy of this
     License.  If the interface presents a list of user commands or
     options, such as a menu, a prominent item in the list meets this
     criterion.

  1. Source Code.

     The “source code” for a work means the preferred form of the work
     for making modifications to it.  “Object code” means any non-source
     form of a work.

     A “Standard Interface” means an interface that either is an
     official standard defined by a recognized standards body, or, in
     the case of interfaces specified for a particular programming
     language, one that is widely used among developers working in that
     language.

     The “System Libraries” of an executable work include anything,
     other than the work as a whole, that (a) is included in the normal
     form of packaging a Major Component, but which is not part of that
     Major Component, and (b) serves only to enable use of the work with
     that Major Component, or to implement a Standard Interface for
     which an implementation is available to the public in source code
     form.  A “Major Component”, in this context, means a major
     essential component (kernel, window system, and so on) of the
     specific operating system (if any) on which the executable work
     runs, or a compiler used to produce the work, or an object code
     interpreter used to run it.

     The “Corresponding Source” for a work in object code form means all
     the source code needed to generate, install, and (for an executable
     work) run the object code and to modify the work, including scripts
     to control those activities.  However, it does not include the
     work’s System Libraries, or general-purpose tools or generally
     available free programs which are used unmodified in performing
     those activities but which are not part of the work.  For example,
     Corresponding Source includes interface definition files associated
     with source files for the work, and the source code for shared
     libraries and dynamically linked subprograms that the work is
     specifically designed to require, such as by intimate data
     communication or control flow between those subprograms and other
     parts of the work.

     The Corresponding Source need not include anything that users can
     regenerate automatically from other parts of the Corresponding
     Source.

     The Corresponding Source for a work in source code form is that
     same work.

  2. Basic Permissions.

     All rights granted under this License are granted for the term of
     copyright on the Program, and are irrevocable provided the stated
     conditions are met.  This License explicitly affirms your unlimited
     permission to run the unmodified Program.  The output from running
     a covered work is covered by this License only if the output, given
     its content, constitutes a covered work.  This License acknowledges
     your rights of fair use or other equivalent, as provided by
     copyright law.

     You may make, run and propagate covered works that you do not
     convey, without conditions so long as your license otherwise
     remains in force.  You may convey covered works to others for the
     sole purpose of having them make modifications exclusively for you,
     or provide you with facilities for running those works, provided
     that you comply with the terms of this License in conveying all
     material for which you do not control copyright.  Those thus making
     or running the covered works for you must do so exclusively on your
     behalf, under your direction and control, on terms that prohibit
     them from making any copies of your copyrighted material outside
     their relationship with you.

     Conveying under any other circumstances is permitted solely under
     the conditions stated below.  Sublicensing is not allowed; section
     10 makes it unnecessary.

  3. Protecting Users’ Legal Rights From Anti-Circumvention Law.

     No covered work shall be deemed part of an effective technological
     measure under any applicable law fulfilling obligations under
     article 11 of the WIPO copyright treaty adopted on 20 December
     1996, or similar laws prohibiting or restricting circumvention of
     such measures.

     When you convey a covered work, you waive any legal power to forbid
     circumvention of technological measures to the extent such
     circumvention is effected by exercising rights under this License
     with respect to the covered work, and you disclaim any intention to
     limit operation or modification of the work as a means of
     enforcing, against the work’s users, your or third parties’ legal
     rights to forbid circumvention of technological measures.

  4. Conveying Verbatim Copies.

     You may convey verbatim copies of the Program’s source code as you
     receive it, in any medium, provided that you conspicuously and
     appropriately publish on each copy an appropriate copyright notice;
     keep intact all notices stating that this License and any
     non-permissive terms added in accord with section 7 apply to the
     code; keep intact all notices of the absence of any warranty; and
     give all recipients a copy of this License along with the Program.

     You may charge any price or no price for each copy that you convey,
     and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

     You may convey a work based on the Program, or the modifications to
     produce it from the Program, in the form of source code under the
     terms of section 4, provided that you also meet all of these
     conditions:

       a. The work must carry prominent notices stating that you
          modified it, and giving a relevant date.

       b. The work must carry prominent notices stating that it is
          released under this License and any conditions added under
          section 7.  This requirement modifies the requirement in
          section 4 to “keep intact all notices”.

       c. You must license the entire work, as a whole, under this
          License to anyone who comes into possession of a copy.  This
          License will therefore apply, along with any applicable
          section 7 additional terms, to the whole of the work, and all
          its parts, regardless of how they are packaged.  This License
          gives no permission to license the work in any other way, but
          it does not invalidate such permission if you have separately
          received it.

       d. If the work has interactive user interfaces, each must display
          Appropriate Legal Notices; however, if the Program has
          interactive interfaces that do not display Appropriate Legal
          Notices, your work need not make them do so.

     A compilation of a covered work with other separate and independent
     works, which are not by their nature extensions of the covered
     work, and which are not combined with it such as to form a larger
     program, in or on a volume of a storage or distribution medium, is
     called an “aggregate” if the compilation and its resulting
     copyright are not used to limit the access or legal rights of the
     compilation’s users beyond what the individual works permit.
     Inclusion of a covered work in an aggregate does not cause this
     License to apply to the other parts of the aggregate.

  6. Conveying Non-Source Forms.

     You may convey a covered work in object code form under the terms
     of sections 4 and 5, provided that you also convey the
     machine-readable Corresponding Source under the terms of this
     License, in one of these ways:

       a. Convey the object code in, or embodied in, a physical product
          (including a physical distribution medium), accompanied by the
          Corresponding Source fixed on a durable physical medium
          customarily used for software interchange.

       b. Convey the object code in, or embodied in, a physical product
          (including a physical distribution medium), accompanied by a
          written offer, valid for at least three years and valid for as
          long as you offer spare parts or customer support for that
          product model, to give anyone who possesses the object code
          either (1) a copy of the Corresponding Source for all the
          software in the product that is covered by this License, on a
          durable physical medium customarily used for software
          interchange, for a price no more than your reasonable cost of
          physically performing this conveying of source, or (2) access
          to copy the Corresponding Source from a network server at no
          charge.

       c. Convey individual copies of the object code with a copy of the
          written offer to provide the Corresponding Source.  This
          alternative is allowed only occasionally and noncommercially,
          and only if you received the object code with such an offer,
          in accord with subsection 6b.

       d. Convey the object code by offering access from a designated
          place (gratis or for a charge), and offer equivalent access to
          the Corresponding Source in the same way through the same
          place at no further charge.  You need not require recipients
          to copy the Corresponding Source along with the object code.
          If the place to copy the object code is a network server, the
          Corresponding Source may be on a different server (operated by
          you or a third party) that supports equivalent copying
          facilities, provided you maintain clear directions next to the
          object code saying where to find the Corresponding Source.
          Regardless of what server hosts the Corresponding Source, you
          remain obligated to ensure that it is available for as long as
          needed to satisfy these requirements.

       e. Convey the object code using peer-to-peer transmission,
          provided you inform other peers where the object code and
          Corresponding Source of the work are being offered to the
          general public at no charge under subsection 6d.

     A separable portion of the object code, whose source code is
     excluded from the Corresponding Source as a System Library, need
     not be included in conveying the object code work.

     A “User Product” is either (1) a “consumer product”, which means
     any tangible personal property which is normally used for personal,
     family, or household purposes, or (2) anything designed or sold for
     incorporation into a dwelling.  In determining whether a product is
     a consumer product, doubtful cases shall be resolved in favor of
     coverage.  For a particular product received by a particular user,
     “normally used” refers to a typical or common use of that class of
     product, regardless of the status of the particular user or of the
     way in which the particular user actually uses, or expects or is
     expected to use, the product.  A product is a consumer product
     regardless of whether the product has substantial commercial,
     industrial or non-consumer uses, unless such uses represent the
     only significant mode of use of the product.

     “Installation Information” for a User Product means any methods,
     procedures, authorization keys, or other information required to
     install and execute modified versions of a covered work in that
     User Product from a modified version of its Corresponding Source.
     The information must suffice to ensure that the continued
     functioning of the modified object code is in no case prevented or
     interfered with solely because modification has been made.

     If you convey an object code work under this section in, or with,
     or specifically for use in, a User Product, and the conveying
     occurs as part of a transaction in which the right of possession
     and use of the User Product is transferred to the recipient in
     perpetuity or for a fixed term (regardless of how the transaction
     is characterized), the Corresponding Source conveyed under this
     section must be accompanied by the Installation Information.  But
     this requirement does not apply if neither you nor any third party
     retains the ability to install modified object code on the User
     Product (for example, the work has been installed in ROM).

     The requirement to provide Installation Information does not
     include a requirement to continue to provide support service,
     warranty, or updates for a work that has been modified or installed
     by the recipient, or for the User Product in which it has been
     modified or installed.  Access to a network may be denied when the
     modification itself materially and adversely affects the operation
     of the network or violates the rules and protocols for
     communication across the network.

     Corresponding Source conveyed, and Installation Information
     provided, in accord with this section must be in a format that is
     publicly documented (and with an implementation available to the
     public in source code form), and must require no special password
     or key for unpacking, reading or copying.

  7. Additional Terms.

     “Additional permissions” are terms that supplement the terms of
     this License by making exceptions from one or more of its
     conditions.  Additional permissions that are applicable to the
     entire Program shall be treated as though they were included in
     this License, to the extent that they are valid under applicable
     law.  If additional permissions apply only to part of the Program,
     that part may be used separately under those permissions, but the
     entire Program remains governed by this License without regard to
     the additional permissions.

     When you convey a copy of a covered work, you may at your option
     remove any additional permissions from that copy, or from any part
     of it.  (Additional permissions may be written to require their own
     removal in certain cases when you modify the work.)  You may place
     additional permissions on material, added by you to a covered work,
     for which you have or can give appropriate copyright permission.

     Notwithstanding any other provision of this License, for material
     you add to a covered work, you may (if authorized by the copyright
     holders of that material) supplement the terms of this License with
     terms:

       a. Disclaiming warranty or limiting liability differently from
          the terms of sections 15 and 16 of this License; or

       b. Requiring preservation of specified reasonable legal notices
          or author attributions in that material or in the Appropriate
          Legal Notices displayed by works containing it; or

       c. Prohibiting misrepresentation of the origin of that material,
          or requiring that modified versions of such material be marked
          in reasonable ways as different from the original version; or

       d. Limiting the use for publicity purposes of names of licensors
          or authors of the material; or

       e. Declining to grant rights under trademark law for use of some
          trade names, trademarks, or service marks; or

       f. Requiring indemnification of licensors and authors of that
          material by anyone who conveys the material (or modified
          versions of it) with contractual assumptions of liability to
          the recipient, for any liability that these contractual
          assumptions directly impose on those licensors and authors.

     All other non-permissive additional terms are considered “further
     restrictions” within the meaning of section 10.  If the Program as
     you received it, or any part of it, contains a notice stating that
     it is governed by this License along with a term that is a further
     restriction, you may remove that term.  If a license document
     contains a further restriction but permits relicensing or conveying
     under this License, you may add to a covered work material governed
     by the terms of that license document, provided that the further
     restriction does not survive such relicensing or conveying.

     If you add terms to a covered work in accord with this section, you
     must place, in the relevant source files, a statement of the
     additional terms that apply to those files, or a notice indicating
     where to find the applicable terms.

     Additional terms, permissive or non-permissive, may be stated in
     the form of a separately written license, or stated as exceptions;
     the above requirements apply either way.

  8. Termination.

     You may not propagate or modify a covered work except as expressly
     provided under this License.  Any attempt otherwise to propagate or
     modify it is void, and will automatically terminate your rights
     under this License (including any patent licenses granted under the
     third paragraph of section 11).

     However, if you cease all violation of this License, then your
     license from a particular copyright holder is reinstated (a)
     provisionally, unless and until the copyright holder explicitly and
     finally terminates your license, and (b) permanently, if the
     copyright holder fails to notify you of the violation by some
     reasonable means prior to 60 days after the cessation.

     Moreover, your license from a particular copyright holder is
     reinstated permanently if the copyright holder notifies you of the
     violation by some reasonable means, this is the first time you have
     received notice of violation of this License (for any work) from
     that copyright holder, and you cure the violation prior to 30 days
     after your receipt of the notice.

     Termination of your rights under this section does not terminate
     the licenses of parties who have received copies or rights from you
     under this License.  If your rights have been terminated and not
     permanently reinstated, you do not qualify to receive new licenses
     for the same material under section 10.

  9. Acceptance Not Required for Having Copies.

     You are not required to accept this License in order to receive or
     run a copy of the Program.  Ancillary propagation of a covered work
     occurring solely as a consequence of using peer-to-peer
     transmission to receive a copy likewise does not require
     acceptance.  However, nothing other than this License grants you
     permission to propagate or modify any covered work.  These actions
     infringe copyright if you do not accept this License.  Therefore,
     by modifying or propagating a covered work, you indicate your
     acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

     Each time you convey a covered work, the recipient automatically
     receives a license from the original licensors, to run, modify and
     propagate that work, subject to this License.  You are not
     responsible for enforcing compliance by third parties with this
     License.

     An “entity transaction” is a transaction transferring control of an
     organization, or substantially all assets of one, or subdividing an
     organization, or merging organizations.  If propagation of a
     covered work results from an entity transaction, each party to that
     transaction who receives a copy of the work also receives whatever
     licenses to the work the party’s predecessor in interest had or
     could give under the previous paragraph, plus a right to possession
     of the Corresponding Source of the work from the predecessor in
     interest, if the predecessor has it or can get it with reasonable
     efforts.

     You may not impose any further restrictions on the exercise of the
     rights granted or affirmed under this License.  For example, you
     may not impose a license fee, royalty, or other charge for exercise
     of rights granted under this License, and you may not initiate
     litigation (including a cross-claim or counterclaim in a lawsuit)
     alleging that any patent claim is infringed by making, using,
     selling, offering for sale, or importing the Program or any portion
     of it.

  11. Patents.

     A “contributor” is a copyright holder who authorizes use under this
     License of the Program or a work on which the Program is based.
     The work thus licensed is called the contributor’s “contributor
     version”.

     A contributor’s “essential patent claims” are all patent claims
     owned or controlled by the contributor, whether already acquired or
     hereafter acquired, that would be infringed by some manner,
     permitted by this License, of making, using, or selling its
     contributor version, but do not include claims that would be
     infringed only as a consequence of further modification of the
     contributor version.  For purposes of this definition, “control”
     includes the right to grant patent sublicenses in a manner
     consistent with the requirements of this License.

     Each contributor grants you a non-exclusive, worldwide,
     royalty-free patent license under the contributor’s essential
     patent claims, to make, use, sell, offer for sale, import and
     otherwise run, modify and propagate the contents of its contributor
     version.

     In the following three paragraphs, a “patent license” is any
     express agreement or commitment, however denominated, not to
     enforce a patent (such as an express permission to practice a
     patent or covenant not to sue for patent infringement).  To “grant”
     such a patent license to a party means to make such an agreement or
     commitment not to enforce a patent against the party.

     If you convey a covered work, knowingly relying on a patent
     license, and the Corresponding Source of the work is not available
     for anyone to copy, free of charge and under the terms of this
     License, through a publicly available network server or other
     readily accessible means, then you must either (1) cause the
     Corresponding Source to be so available, or (2) arrange to deprive
     yourself of the benefit of the patent license for this particular
     work, or (3) arrange, in a manner consistent with the requirements
     of this License, to extend the patent license to downstream
     recipients.  “Knowingly relying” means you have actual knowledge
     that, but for the patent license, your conveying the covered work
     in a country, or your recipient’s use of the covered work in a
     country, would infringe one or more identifiable patents in that
     country that you have reason to believe are valid.

     If, pursuant to or in connection with a single transaction or
     arrangement, you convey, or propagate by procuring conveyance of, a
     covered work, and grant a patent license to some of the parties
     receiving the covered work authorizing them to use, propagate,
     modify or convey a specific copy of the covered work, then the
     patent license you grant is automatically extended to all
     recipients of the covered work and works based on it.

     A patent license is “discriminatory” if it does not include within
     the scope of its coverage, prohibits the exercise of, or is
     conditioned on the non-exercise of one or more of the rights that
     are specifically granted under this License.  You may not convey a
     covered work if you are a party to an arrangement with a third
     party that is in the business of distributing software, under which
     you make payment to the third party based on the extent of your
     activity of conveying the work, and under which the third party
     grants, to any of the parties who would receive the covered work
     from you, a discriminatory patent license (a) in connection with
     copies of the covered work conveyed by you (or copies made from
     those copies), or (b) primarily for and in connection with specific
     products or compilations that contain the covered work, unless you
     entered into that arrangement, or that patent license was granted,
     prior to 28 March 2007.

     Nothing in this License shall be construed as excluding or limiting
     any implied license or other defenses to infringement that may
     otherwise be available to you under applicable patent law.

  12. No Surrender of Others’ Freedom.

     If conditions are imposed on you (whether by court order, agreement
     or otherwise) that contradict the conditions of this License, they
     do not excuse you from the conditions of this License.  If you
     cannot convey a covered work so as to satisfy simultaneously your
     obligations under this License and any other pertinent obligations,
     then as a consequence you may not convey it at all.  For example,
     if you agree to terms that obligate you to collect a royalty for
     further conveying from those to whom you convey the Program, the
     only way you could satisfy both those terms and this License would
     be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

     Notwithstanding any other provision of this License, you have
     permission to link or combine any covered work with a work licensed
     under version 3 of the GNU Affero General Public License into a
     single combined work, and to convey the resulting work.  The terms
     of this License will continue to apply to the part which is the
     covered work, but the special requirements of the GNU Affero
     General Public License, section 13, concerning interaction through
     a network will apply to the combination as such.

  14. Revised Versions of this License.

     The Free Software Foundation may publish revised and/or new
     versions of the GNU General Public License from time to time.  Such
     new versions will be similar in spirit to the present version, but
     may differ in detail to address new problems or concerns.

     Each version is given a distinguishing version number.  If the
     Program specifies that a certain numbered version of the GNU
     General Public License “or any later version” applies to it, you
     have the option of following the terms and conditions either of
     that numbered version or of any later version published by the Free
     Software Foundation.  If the Program does not specify a version
     number of the GNU General Public License, you may choose any
     version ever published by the Free Software Foundation.

     If the Program specifies that a proxy can decide which future
     versions of the GNU General Public License can be used, that
     proxy’s public statement of acceptance of a version permanently
     authorizes you to choose that version for the Program.

     Later license versions may give you additional or different
     permissions.  However, no additional obligations are imposed on any
     author or copyright holder as a result of your choosing to follow a
     later version.

  15. Disclaimer of Warranty.

     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
     APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS”
     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
     NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
     DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
     THE POSSIBILITY OF SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

     If the disclaimer of warranty and limitation of liability provided
     above cannot be given local legal effect according to their terms,
     reviewing courts shall apply local law that most closely
     approximates an absolute waiver of all civil liability in
     connection with the Program, unless a warranty or assumption of
     liability accompanies a copy of the Program in return for a fee.

END OF TERMS AND CONDITIONS
===========================

How to Apply These Terms to Your New Programs
=============================================

If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.

   To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least the
“copyright” line and a pointer to where the full notice is found.

     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
     Copyright (C) YEAR NAME OF AUTHOR

     This program 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.

     This program 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 this program.  If not, see <https://www.gnu.org/licenses/>.

   Also add information on how to contact you by electronic and paper
mail.

   If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
     This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
     This is free software, and you are welcome to redistribute it
     under certain conditions; type ‘show c’ for details.

   The hypothetical commands ‘show w’ and ‘show c’ should show the
appropriate parts of the General Public License.  Of course, your
program’s commands might be different; for a GUI interface, you would
use an “about box”.

   You should also get your employer (if you work as a programmer) or
school, if any, to sign a “copyright disclaimer” for the program, if
necessary.  For more information on this, and how to apply and follow
the GNU GPL, see <https://www.gnu.org/licenses/>.

   The GNU General Public License does not permit incorporating your
program into proprietary programs.  If your program is a subroutine
library, you may consider it more useful to permit linking proprietary
applications with the library.  If this is what you want to do, use the
GNU Lesser General Public License instead of this License.  But first,
please read <https://www.gnu.org/licenses/why-not-lgpl.html>.


File: gnuastro.info,  Node: Index,  Prev: GNU General Public License,  Up: Top

Index: Macros, structures and functions
***************************************

All Gnuastro library’s exported macros start with ‘GAL_’, and its
exported structures and functions start with ‘gal_’.  This abbreviation
stands for _G_NU _A_stronomy _L_ibrary.  The next element in the name is
the name of the header which declares or defines them, so to use the
‘gal_array_fset_const’ function, you have to ‘#include
<gnuastro/array.h>’.  See *note Gnuastro library:: for more.  The
‘pthread_barrier’ constructs are our implementation and are only
available on systems that do not have them, see *note Implementation of
pthread_barrier::.

[index]
* Menu:

* gal_arithmetic:                        Arithmetic on datasets.
                                                              (line 514)
* GAL_ARITHMETIC_FLAGS_BASIC:            Arithmetic on datasets.
                                                              (line  41)
* GAL_ARITHMETIC_FLAG_ENVSEED:           Arithmetic on datasets.
                                                              (line  39)
* GAL_ARITHMETIC_FLAG_FREE:              Arithmetic on datasets.
                                                              (line  37)
* GAL_ARITHMETIC_FLAG_INPLACE:           Arithmetic on datasets.
                                                              (line  36)
* GAL_ARITHMETIC_FLAG_NUMOK:             Arithmetic on datasets.
                                                              (line  38)
* GAL_ARITHMETIC_FLAG_QUIET:             Arithmetic on datasets.
                                                              (line  40)
* gal_arithmetic_load_col:               Arithmetic on datasets.
                                                              (line 610)
* gal_arithmetic_operator_string:        Arithmetic on datasets.
                                                              (line 602)
* GAL_ARITHMETIC_OPSTR_LOADCOL_FILE:     Arithmetic on datasets.
                                                              (line 442)
* GAL_ARITHMETIC_OPSTR_LOADCOL_FILE_LEN: Arithmetic on datasets.
                                                              (line 445)
* GAL_ARITHMETIC_OPSTR_LOADCOL_HDU:      Arithmetic on datasets.
                                                              (line 441)
* GAL_ARITHMETIC_OPSTR_LOADCOL_HDU_LEN:  Arithmetic on datasets.
                                                              (line 444)
* GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX:   Arithmetic on datasets.
                                                              (line 443)
* GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX_LEN: Arithmetic on datasets.
                                                              (line 446)
* GAL_ARITHMETIC_OP_ABS:                 Arithmetic on datasets.
                                                              (line 263)
* GAL_ARITHMETIC_OP_ACOS:                Arithmetic on datasets.
                                                              (line 173)
* GAL_ARITHMETIC_OP_ACOSH:               Arithmetic on datasets.
                                                              (line 183)
* GAL_ARITHMETIC_OP_AND:                 Arithmetic on datasets.
                                                              (line  96)
* GAL_ARITHMETIC_OP_ASIN:                Arithmetic on datasets.
                                                              (line 172)
* GAL_ARITHMETIC_OP_ASINH:               Arithmetic on datasets.
                                                              (line 182)
* GAL_ARITHMETIC_OP_ATAN:                Arithmetic on datasets.
                                                              (line 174)
* GAL_ARITHMETIC_OP_ATAN2:               Arithmetic on datasets.
                                                              (line 175)
* GAL_ARITHMETIC_OP_ATANH:               Arithmetic on datasets.
                                                              (line 184)
* GAL_ARITHMETIC_OP_AU:                  Arithmetic on datasets.
                                                              (line 401)
* GAL_ARITHMETIC_OP_AU_TO_LY:            Arithmetic on datasets.
                                                              (line 231)
* GAL_ARITHMETIC_OP_AU_TO_PC:            Arithmetic on datasets.
                                                              (line 226)
* GAL_ARITHMETIC_OP_AVOGADRO:            Arithmetic on datasets.
                                                              (line 404)
* GAL_ARITHMETIC_OP_BITAND:              Arithmetic on datasets.
                                                              (line 351)
* GAL_ARITHMETIC_OP_BITLSH:              Arithmetic on datasets.
                                                              (line 354)
* GAL_ARITHMETIC_OP_BITNOT:              Arithmetic on datasets.
                                                              (line 371)
* GAL_ARITHMETIC_OP_BITOR:               Arithmetic on datasets.
                                                              (line 352)
* GAL_ARITHMETIC_OP_BITRSH:              Arithmetic on datasets.
                                                              (line 355)
* GAL_ARITHMETIC_OP_BITXOR:              Arithmetic on datasets.
                                                              (line 353)
* GAL_ARITHMETIC_OP_BOX_AROUND_ELLIPSE:  Arithmetic on datasets.
                                                              (line 411)
* GAL_ARITHMETIC_OP_BOX_VERTICES_ON_SPHERE: Arithmetic on datasets.
                                                              (line 419)
* GAL_ARITHMETIC_OP_C:                   Arithmetic on datasets.
                                                              (line 398)
* GAL_ARITHMETIC_OP_COS:                 Arithmetic on datasets.
                                                              (line 170)
* GAL_ARITHMETIC_OP_COSH:                Arithmetic on datasets.
                                                              (line 180)
* GAL_ARITHMETIC_OP_COUNTER:             Arithmetic on datasets.
                                                              (line 454)
* GAL_ARITHMETIC_OP_COUNTERONLY:         Arithmetic on datasets.
                                                              (line 456)
* GAL_ARITHMETIC_OP_COUNTS_TO_JY:        Arithmetic on datasets.
                                                              (line 203)
* GAL_ARITHMETIC_OP_COUNTS_TO_MAG:       Arithmetic on datasets.
                                                              (line 199)
* GAL_ARITHMETIC_OP_COUNTS_TO_SB:        Arithmetic on datasets.
                                                              (line 219)
* GAL_ARITHMETIC_OP_DEC_TO_DEGREE:       Arithmetic on datasets.
                                                              (line 188)
* GAL_ARITHMETIC_OP_DEGREE_TO_DEC:       Arithmetic on datasets.
                                                              (line 190)
* GAL_ARITHMETIC_OP_DEGREE_TO_RA:        Arithmetic on datasets.
                                                              (line 189)
* GAL_ARITHMETIC_OP_DIVIDE:              Arithmetic on datasets.
                                                              (line  89)
* GAL_ARITHMETIC_OP_E:                   Arithmetic on datasets.
                                                              (line 397)
* GAL_ARITHMETIC_OP_ECB1950_TO_ECJ2000:  Arithmetic on datasets.
                                                              (line 491)
* GAL_ARITHMETIC_OP_ECB1950_TO_EQB1950:  Arithmetic on datasets.
                                                              (line 489)
* GAL_ARITHMETIC_OP_ECB1950_TO_EQJ2000:  Arithmetic on datasets.
                                                              (line 490)
* GAL_ARITHMETIC_OP_ECB1950_TO_GALACTIC: Arithmetic on datasets.
                                                              (line 492)
* GAL_ARITHMETIC_OP_ECB1950_TO_SUPERGALACTIC: Arithmetic on datasets.
                                                              (line 493)
* GAL_ARITHMETIC_OP_ECJ2000_TO_ECB1950:  Arithmetic on datasets.
                                                              (line 496)
* GAL_ARITHMETIC_OP_ECJ2000_TO_EQB1950:  Arithmetic on datasets.
                                                              (line 494)
* GAL_ARITHMETIC_OP_ECJ2000_TO_EQJ2000:  Arithmetic on datasets.
                                                              (line 495)
* GAL_ARITHMETIC_OP_ECJ2000_TO_GALACTIC: Arithmetic on datasets.
                                                              (line 497)
* GAL_ARITHMETIC_OP_ECJ2000_TO_SUPERGALACTIC: Arithmetic on datasets.
                                                              (line 498)
* GAL_ARITHMETIC_OP_EQ:                  Arithmetic on datasets.
                                                              (line  94)
* GAL_ARITHMETIC_OP_EQB1950_TO_ECB1950:  Arithmetic on datasets.
                                                              (line 480)
* GAL_ARITHMETIC_OP_EQB1950_TO_ECJ2000:  Arithmetic on datasets.
                                                              (line 481)
* GAL_ARITHMETIC_OP_EQB1950_TO_EQJ2000:  Arithmetic on datasets.
                                                              (line 479)
* GAL_ARITHMETIC_OP_EQB1950_TO_GALACTIC: Arithmetic on datasets.
                                                              (line 482)
* GAL_ARITHMETIC_OP_EQB1950_TO_SUPERGALACTIC: Arithmetic on datasets.
                                                              (line 483)
* GAL_ARITHMETIC_OP_EQJ2000_TO_ECB1950:  Arithmetic on datasets.
                                                              (line 485)
* GAL_ARITHMETIC_OP_EQJ2000_TO_ECJ2000:  Arithmetic on datasets.
                                                              (line 486)
* GAL_ARITHMETIC_OP_EQJ2000_TO_EQB1950:  Arithmetic on datasets.
                                                              (line 484)
* GAL_ARITHMETIC_OP_EQJ2000_TO_GALACTIC: Arithmetic on datasets.
                                                              (line 487)
* GAL_ARITHMETIC_OP_EQJ2000_TO_SUPERGALACTIC: Arithmetic on datasets.
                                                              (line 488)
* GAL_ARITHMETIC_OP_FINESTRUCTURE:       Arithmetic on datasets.
                                                              (line 405)
* GAL_ARITHMETIC_OP_G:                   Arithmetic on datasets.
                                                              (line 399)
* GAL_ARITHMETIC_OP_GALACTIC_TO_ECB1950: Arithmetic on datasets.
                                                              (line 501)
* GAL_ARITHMETIC_OP_GALACTIC_TO_ECJ2000: Arithmetic on datasets.
                                                              (line 502)
* GAL_ARITHMETIC_OP_GALACTIC_TO_EQB1950: Arithmetic on datasets.
                                                              (line 499)
* GAL_ARITHMETIC_OP_GALACTIC_TO_EQJ2000: Arithmetic on datasets.
                                                              (line 500)
* GAL_ARITHMETIC_OP_GALACTIC_TO_SUPERGALACTIC: Arithmetic on datasets.
                                                              (line 503)
* GAL_ARITHMETIC_OP_GE:                  Arithmetic on datasets.
                                                              (line  93)
* GAL_ARITHMETIC_OP_GT:                  Arithmetic on datasets.
                                                              (line  92)
* GAL_ARITHMETIC_OP_H:                   Arithmetic on datasets.
                                                              (line 400)
* GAL_ARITHMETIC_OP_INDEX:               Arithmetic on datasets.
                                                              (line 453)
* GAL_ARITHMETIC_OP_INDEXONLY:           Arithmetic on datasets.
                                                              (line 455)
* GAL_ARITHMETIC_OP_ISBLANK:             Arithmetic on datasets.
                                                              (line 118)
* GAL_ARITHMETIC_OP_JY_TO_COUNTS:        Arithmetic on datasets.
                                                              (line 204)
* GAL_ARITHMETIC_OP_JY_TO_MAG:           Arithmetic on datasets.
                                                              (line 206)
* GAL_ARITHMETIC_OP_LE:                  Arithmetic on datasets.
                                                              (line  91)
* GAL_ARITHMETIC_OP_LOG:                 Arithmetic on datasets.
                                                              (line 148)
* GAL_ARITHMETIC_OP_LOG10:               Arithmetic on datasets.
                                                              (line 149)
* GAL_ARITHMETIC_OP_LT:                  Arithmetic on datasets.
                                                              (line  90)
* GAL_ARITHMETIC_OP_LY:                  Arithmetic on datasets.
                                                              (line 402)
* GAL_ARITHMETIC_OP_LY_TO_AU:            Arithmetic on datasets.
                                                              (line 230)
* GAL_ARITHMETIC_OP_LY_TO_PC:            Arithmetic on datasets.
                                                              (line 228)
* GAL_ARITHMETIC_OP_MAG_TO_COUNTS:       Arithmetic on datasets.
                                                              (line 200)
* GAL_ARITHMETIC_OP_MAG_TO_JY:           Arithmetic on datasets.
                                                              (line 205)
* GAL_ARITHMETIC_OP_MAG_TO_NANOMAGGY:    Arithmetic on datasets.
                                                              (line 207)
* GAL_ARITHMETIC_OP_MAG_TO_SB:           Arithmetic on datasets.
                                                              (line 201)
* GAL_ARITHMETIC_OP_MAKENEW:             Arithmetic on datasets.
                                                              (line 430)
* GAL_ARITHMETIC_OP_MAKENEW <1>:         Arithmetic on datasets.
                                                              (line 438)
* GAL_ARITHMETIC_OP_MAX:                 Arithmetic on datasets.
                                                              (line 267)
* GAL_ARITHMETIC_OP_MAXVAL:              Arithmetic on datasets.
                                                              (line 236)
* GAL_ARITHMETIC_OP_MEAN:                Arithmetic on datasets.
                                                              (line 270)
* GAL_ARITHMETIC_OP_MEANVAL:             Arithmetic on datasets.
                                                              (line 239)
* GAL_ARITHMETIC_OP_MEDIAN:              Arithmetic on datasets.
                                                              (line 272)
* GAL_ARITHMETIC_OP_MEDIANVAL:           Arithmetic on datasets.
                                                              (line 241)
* GAL_ARITHMETIC_OP_MIN:                 Arithmetic on datasets.
                                                              (line 266)
* GAL_ARITHMETIC_OP_MINUS:               Arithmetic on datasets.
                                                              (line  87)
* GAL_ARITHMETIC_OP_MINVAL:              Arithmetic on datasets.
                                                              (line 235)
* GAL_ARITHMETIC_OP_MKNOISE_POISSON:     Arithmetic on datasets.
                                                              (line 310)
* GAL_ARITHMETIC_OP_MKNOISE_SIGMA:       Arithmetic on datasets.
                                                              (line 309)
* GAL_ARITHMETIC_OP_MKNOISE_UNIFORM:     Arithmetic on datasets.
                                                              (line 311)
* GAL_ARITHMETIC_OP_MODULO:              Arithmetic on datasets.
                                                              (line 356)
* GAL_ARITHMETIC_OP_MULTIPLY:            Arithmetic on datasets.
                                                              (line  88)
* GAL_ARITHMETIC_OP_NANOMAGGY_TO_MAG:    Arithmetic on datasets.
                                                              (line 208)
* GAL_ARITHMETIC_OP_NE:                  Arithmetic on datasets.
                                                              (line  95)
* GAL_ARITHMETIC_OP_NOBLANK:             Arithmetic on datasets.
                                                              (line 250)
* GAL_ARITHMETIC_OP_NOT:                 Arithmetic on datasets.
                                                              (line 110)
* GAL_ARITHMETIC_OP_NUMBER:              Arithmetic on datasets.
                                                              (line 268)
* GAL_ARITHMETIC_OP_NUMBERVAL:           Arithmetic on datasets.
                                                              (line 237)
* GAL_ARITHMETIC_OP_OR:                  Arithmetic on datasets.
                                                              (line  97)
* GAL_ARITHMETIC_OP_PC_TO_AU:            Arithmetic on datasets.
                                                              (line 227)
* GAL_ARITHMETIC_OP_PC_TO_LY:            Arithmetic on datasets.
                                                              (line 229)
* GAL_ARITHMETIC_OP_PI:                  Arithmetic on datasets.
                                                              (line 403)
* GAL_ARITHMETIC_OP_PLUS:                Arithmetic on datasets.
                                                              (line  86)
* GAL_ARITHMETIC_OP_POW:                 Arithmetic on datasets.
                                                              (line 345)
* GAL_ARITHMETIC_OP_QUANTILE:            Arithmetic on datasets.
                                                              (line 288)
* GAL_ARITHMETIC_OP_RANDOM_FROM_HIST:    Arithmetic on datasets.
                                                              (line 334)
* GAL_ARITHMETIC_OP_RANDOM_FROM_HIST_RAW: Arithmetic on datasets.
                                                              (line 335)
* GAL_ARITHMETIC_OP_RA_TO_DEGREE:        Arithmetic on datasets.
                                                              (line 187)
* GAL_ARITHMETIC_OP_SB_TO_COUNTS:        Arithmetic on datasets.
                                                              (line 220)
* GAL_ARITHMETIC_OP_SB_TO_MAG:           Arithmetic on datasets.
                                                              (line 202)
* GAL_ARITHMETIC_OP_SIGCLIP_MEAN:        Arithmetic on datasets.
                                                              (line 296)
* GAL_ARITHMETIC_OP_SIGCLIP_MEDIAN:      Arithmetic on datasets.
                                                              (line 297)
* GAL_ARITHMETIC_OP_SIGCLIP_NUMBER:      Arithmetic on datasets.
                                                              (line 298)
* GAL_ARITHMETIC_OP_SIGCLIP_STD:         Arithmetic on datasets.
                                                              (line 295)
* GAL_ARITHMETIC_OP_SIN:                 Arithmetic on datasets.
                                                              (line 169)
* GAL_ARITHMETIC_OP_SINH:                Arithmetic on datasets.
                                                              (line 179)
* GAL_ARITHMETIC_OP_SIZE:                Arithmetic on datasets.
                                                              (line 467)
* GAL_ARITHMETIC_OP_SQRT:                Arithmetic on datasets.
                                                              (line 147)
* GAL_ARITHMETIC_OP_STD:                 Arithmetic on datasets.
                                                              (line 271)
* GAL_ARITHMETIC_OP_STDVAL:              Arithmetic on datasets.
                                                              (line 240)
* GAL_ARITHMETIC_OP_STITCH:              Arithmetic on datasets.
                                                              (line 340)
* GAL_ARITHMETIC_OP_SUM:                 Arithmetic on datasets.
                                                              (line 269)
* GAL_ARITHMETIC_OP_SUMVAL:              Arithmetic on datasets.
                                                              (line 238)
* GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECB1950: Arithmetic on datasets.
                                                              (line 506)
* GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECJ2000: Arithmetic on datasets.
                                                              (line 507)
* GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQB1950: Arithmetic on datasets.
                                                              (line 504)
* GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQJ2000: Arithmetic on datasets.
                                                              (line 505)
* GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_GALACTIC: Arithmetic on datasets.
                                                              (line 508)
* GAL_ARITHMETIC_OP_SWAP:                Arithmetic on datasets.
                                                              (line 473)
* GAL_ARITHMETIC_OP_TAN:                 Arithmetic on datasets.
                                                              (line 171)
* GAL_ARITHMETIC_OP_TANH:                Arithmetic on datasets.
                                                              (line 181)
* GAL_ARITHMETIC_OP_TO_FLOAT32:          Arithmetic on datasets.
                                                              (line 385)
* GAL_ARITHMETIC_OP_TO_FLOAT64:          Arithmetic on datasets.
                                                              (line 386)
* GAL_ARITHMETIC_OP_TO_INT16:            Arithmetic on datasets.
                                                              (line 380)
* GAL_ARITHMETIC_OP_TO_INT32:            Arithmetic on datasets.
                                                              (line 382)
* GAL_ARITHMETIC_OP_TO_INT64:            Arithmetic on datasets.
                                                              (line 384)
* GAL_ARITHMETIC_OP_TO_INT8:             Arithmetic on datasets.
                                                              (line 378)
* GAL_ARITHMETIC_OP_TO_UINT16:           Arithmetic on datasets.
                                                              (line 379)
* GAL_ARITHMETIC_OP_TO_UINT32:           Arithmetic on datasets.
                                                              (line 381)
* GAL_ARITHMETIC_OP_TO_UINT64:           Arithmetic on datasets.
                                                              (line 383)
* GAL_ARITHMETIC_OP_TO_UINT8:            Arithmetic on datasets.
                                                              (line 377)
* GAL_ARITHMETIC_OP_UNIQUE:              Arithmetic on datasets.
                                                              (line 249)
* GAL_ARITHMETIC_OP_WHERE:               Arithmetic on datasets.
                                                              (line 131)
* gal_arithmetic_set_operator:           Arithmetic on datasets.
                                                              (line 587)
* gal_array_file_recognized:             Array input output.  (line  28)
* gal_array_name_recognized:             Array input output.  (line  15)
* gal_array_name_recognized_multiext:    Array input output.  (line  21)
* gal_array_read:                        Array input output.  (line  37)
* gal_array_read_one_ch:                 Array input output.  (line  84)
* gal_array_read_one_ch_to_type:         Array input output.  (line 103)
* gal_array_read_to_type:                Array input output.  (line  76)
* gal_binary_connected_adjacency_list:   Binary datasets.     (line 198)
* gal_binary_connected_adjacency_matrix: Binary datasets.     (line 161)
* gal_binary_connected_components:       Binary datasets.     (line 125)
* gal_binary_connected_indexs(gal_data_t: Binary datasets.    (line 150)
* gal_binary_dilate:                     Binary datasets.     (line  84)
* gal_binary_erode:                      Binary datasets.     (line  62)
* gal_binary_holes_fill:                 Binary datasets.     (line 254)
* gal_binary_holes_label:                Binary datasets.     (line 240)
* gal_binary_number_neighbors:           Binary datasets.     (line 114)
* gal_binary_open:                       Binary datasets.     (line  99)
* GAL_BINARY_TMP_VALUE:                  Binary datasets.     (line  50)
* gal_blank_alloc_write:                 Library blank values.
                                                              (line 103)
* gal_blank_as_string:                   Library blank values.
                                                              (line 127)
* gal_blank_flag:                        Library blank values.
                                                              (line 182)
* gal_blank_flag_apply:                  Library blank values.
                                                              (line 218)
* gal_blank_flag_not:                    Library blank values.
                                                              (line 189)
* gal_blank_flag_remove:                 Library blank values.
                                                              (line 225)
* GAL_BLANK_FLOAT32:                     Library blank values.
                                                              (line  81)
* GAL_BLANK_FLOAT64:                     Library blank values.
                                                              (line  85)
* gal_blank_initialize:                  Library blank values.
                                                              (line 110)
* gal_blank_initialize_array:            Library blank values.
                                                              (line 119)
* GAL_BLANK_INT:                         Library blank values.
                                                              (line  61)
* GAL_BLANK_INT16:                       Library blank values.
                                                              (line  46)
* GAL_BLANK_INT32:                       Library blank values.
                                                              (line  52)
* GAL_BLANK_INT64:                       Library blank values.
                                                              (line  58)
* GAL_BLANK_INT8:                        Library blank values.
                                                              (line  40)
* gal_blank_is:                          Library blank values.
                                                              (line 136)
* GAL_BLANK_LONG:                        Library blank values.
                                                              (line  69)
* gal_blank_not_minmax_coords:           Library blank values.
                                                              (line 196)
* gal_blank_number:                      Library blank values.
                                                              (line 173)
* gal_blank_present:                     Library blank values.
                                                              (line 148)
* gal_blank_remove:                      Library blank values.
                                                              (line 245)
* gal_blank_remove_realloc:              Library blank values.
                                                              (line 262)
* gal_blank_remove_rows:                 Library blank values.
                                                              (line 268)
* GAL_BLANK_SIZE_T:                      Library blank values.
                                                              (line  77)
* GAL_BLANK_STRING:                      Library blank values.
                                                              (line  89)
* gal_blank_trim:                        Library blank values.
                                                              (line 209)
* GAL_BLANK_UINT:                        Library blank values.
                                                              (line  65)
* GAL_BLANK_UINT16:                      Library blank values.
                                                              (line  43)
* GAL_BLANK_UINT32:                      Library blank values.
                                                              (line  49)
* GAL_BLANK_UINT64:                      Library blank values.
                                                              (line  55)
* GAL_BLANK_UINT8:                       Library blank values.
                                                              (line  37)
* GAL_BLANK_ULONG:                       Library blank values.
                                                              (line  73)
* gal_blank_write:                       Library blank values.
                                                              (line  95)
* gal_box_border_from_center:            Bounding box.        (line  76)
* gal_box_border_rotate_around_center:   Bounding box.        (line  85)
* gal_box_bound_ellipse:                 Bounding box.        (line  23)
* gal_box_bound_ellipse_extent:          Bounding box.        (line  11)
* gal_box_bound_ellipsoid:               Bounding box.        (line  52)
* gal_box_bound_ellipsoid_extent:        Bounding box.        (line  38)
* gal_box_overlap:                       Bounding box.        (line  94)
* GAL_COLOR_*:                           Color functions.     (line  21)
* GAL_COLOR_DEEPPINK:                    Color functions.     (line  20)
* gal_color_id_to_name:                  Color functions.     (line  39)
* GAL_COLOR_INVALID:                     Color functions.     (line  18)
* gal_color_in_rgb:                      Color functions.     (line  44)
* GAL_COLOR_MEDIUMVIOLETRED:             Color functions.     (line  19)
* gal_color_name_to_id:                  Color functions.     (line  33)
* GAL_CONFIG_HAVE_FITS_IS_REENTRANT:     Configuration information.
                                                              (line  33)
* GAL_CONFIG_HAVE_GNUMAKE_H:             Configuration information.
                                                              (line  95)
* GAL_CONFIG_HAVE_GSL_INTERP_STEFFEN:    Configuration information.
                                                              (line  25)
* GAL_CONFIG_HAVE_LIBGIT2:               Configuration information.
                                                              (line  78)
* GAL_CONFIG_HAVE_PTHREAD_BARRIER:       Configuration information.
                                                              (line  62)
* GAL_CONFIG_HAVE_PYTHON:                Configuration information.
                                                              (line  86)
* GAL_CONFIG_HAVE_WCSLIB_DIS_H:          Configuration information.
                                                              (line  48)
* GAL_CONFIG_HAVE_WCSLIB_MJDREF:         Configuration information.
                                                              (line  52)
* GAL_CONFIG_HAVE_WCSLIB_OBSFIX:         Configuration information.
                                                              (line  57)
* GAL_CONFIG_HAVE_WCSLIB_VERSION:        Configuration information.
                                                              (line  39)
* GAL_CONFIG_SIZEOF_LONG:                Configuration information.
                                                              (line  70)
* GAL_CONFIG_SIZEOF_SIZE_T:              Configuration information.
                                                              (line  71)
* GAL_CONFIG_VERSION:                    Configuration information.
                                                              (line  14)
* gal_convolve_spatial:                  Convolution functions.
                                                              (line  17)
* gal_convolve_spatial_correct_ch_edge:  Convolution functions.
                                                              (line  52)
* gal_cosmology_age:                     Cosmology library.   (line  18)
* gal_cosmology_angular_distance:        Cosmology library.   (line  45)
* gal_cosmology_comoving_volume:         Cosmology library.   (line  32)
* gal_cosmology_critical_density:        Cosmology library.   (line  39)
* gal_cosmology_distance_modulus:        Cosmology library.   (line  59)
* gal_cosmology_luminosity_distance:     Cosmology library.   (line  52)
* gal_cosmology_proper_distance:         Cosmology library.   (line  25)
* gal_cosmology_to_absolute_mag:         Cosmology library.   (line  65)
* gal_cosmology_velocity_from_z:         Cosmology library.   (line  74)
* gal_cosmology_z_from_velocity:         Cosmology library.   (line  80)
* gal_data_alloc:                        Dataset allocation.  (line  12)
* gal_data_alloc_empty:                  Dataset allocation.  (line  62)
* gal_data_array_calloc:                 Arrays of datasets.  (line  21)
* gal_data_array_free:                   Arrays of datasets.  (line  37)
* gal_data_array_ptr_calloc:             Arrays of datasets.  (line  46)
* gal_data_array_ptr_free:               Arrays of datasets.  (line  54)
* gal_data_copy:                         Copying datasets.    (line  21)
* gal_data_copy_string_to_number:        Copying datasets.    (line  72)
* gal_data_copy_to_allocated:            Copying datasets.    (line  52)
* gal_data_copy_to_new_type:             Copying datasets.    (line  29)
* gal_data_copy_to_new_type_free:        Copying datasets.    (line  39)
* gal_data_free:                         Dataset allocation.  (line  82)
* gal_data_free_contents:                Dataset allocation.  (line  72)
* gal_data_initialize:                   Dataset allocation.  (line  26)
* gal_dimension_add_coords:              Dimensions.          (line  58)
* gal_dimension_collapse_mean:           Dimensions.          (line 135)
* gal_dimension_collapse_median:         Dimensions.          (line 169)
* gal_dimension_collapse_minmax:         Dimensions.          (line 158)
* gal_dimension_collapse_number:         Dimensions.          (line 143)
* gal_dimension_collapse_sclip_mean:     Dimensions.          (line 195)
* gal_dimension_collapse_sclip_median:   Dimensions.          (line 209)
* gal_dimension_collapse_sclip_number:   Dimensions.          (line 223)
* gal_dimension_collapse_sclip_std:      Dimensions.          (line 181)
* gal_dimension_collapse_sum:            Dimensions.          (line 118)
* gal_dimension_coord_to_index:          Dimensions.          (line  67)
* gal_dimension_dist_elliptical:         Dimensions.          (line 101)
* gal_dimension_dist_manhattan:          Dimensions.          (line  87)
* gal_dimension_dist_radial:             Dimensions.          (line  95)
* GAL_DIMENSION_FLT_TO_INT:              Dimensions.          (line  51)
* gal_dimension_increment:               Dimensions.          (line  36)
* gal_dimension_index_to_coord:          Dimensions.          (line  76)
* gal_dimension_is_different:            Dimensions.          (line  28)
* GAL_DIMENSION_NEIGHBOR_OP:             Dimensions.          (line 251)
* gal_dimension_num_neighbors:           Dimensions.          (line  44)
* gal_dimension_remove_extra:            Dimensions.          (line 237)
* gal_dimension_total_size:              Dimensions.          (line  22)
* GAL_DS9_COORD_MODE_IMG:                SAO DS9 library.     (line  15)
* GAL_DS9_COORD_MODE_INVALID:            SAO DS9 library.     (line  17)
* GAL_DS9_COORD_MODE_WCS:                SAO DS9 library.     (line  16)
* gal_ds9_reg_read_polygon:              SAO DS9 library.     (line  23)
* GAL_EPS_MARK_COLNAME_COLOR:            EPS files.           (line  25)
* GAL_EPS_MARK_COLNAME_FONT:             EPS files.           (line  21)
* GAL_EPS_MARK_COLNAME_FONTSIZE:         EPS files.           (line  29)
* GAL_EPS_MARK_COLNAME_LINEWIDTH:        EPS files.           (line  30)
* GAL_EPS_MARK_COLNAME_ROTATE:           EPS files.           (line  28)
* GAL_EPS_MARK_COLNAME_SHAPE:            EPS files.           (line  24)
* GAL_EPS_MARK_COLNAME_SIZE1:            EPS files.           (line  26)
* GAL_EPS_MARK_COLNAME_SIZE2:            EPS files.           (line  27)
* GAL_EPS_MARK_COLNAME_TEXT:             EPS files.           (line  20)
* GAL_EPS_MARK_COLNAME_XPIX:             EPS files.           (line  22)
* GAL_EPS_MARK_COLNAME_YPIX:             EPS files.           (line  23)
* GAL_EPS_MARK_DEFAULT_COLOR:            EPS files.           (line  34)
* GAL_EPS_MARK_DEFAULT_FONT:             EPS files.           (line  40)
* GAL_EPS_MARK_DEFAULT_FONTSIZE:         EPS files.           (line  41)
* GAL_EPS_MARK_DEFAULT_LINEWIDTH:        EPS files.           (line  39)
* GAL_EPS_MARK_DEFAULT_ROTATE:           EPS files.           (line  38)
* GAL_EPS_MARK_DEFAULT_SHAPE:            EPS files.           (line  33)
* GAL_EPS_MARK_DEFAULT_SIZE1:            EPS files.           (line  35)
* GAL_EPS_MARK_DEFAULT_SIZE2:            EPS files.           (line  36)
* GAL_EPS_MARK_DEFAULT_SIZE2_ELLIPSE:    EPS files.           (line  37)
* gal_eps_name_is_eps:                   EPS files.           (line  46)
* gal_eps_shape_id_to_name:              EPS files.           (line  76)
* gal_eps_shape_name_to_id:              EPS files.           (line  70)
* gal_eps_suffix_is_eps:                 EPS files.           (line  53)
* gal_eps_to_pt:                         EPS files.           (line  59)
* gal_eps_write:                         EPS files.           (line  81)
* gal_fits_bitpix_to_type:               CFITSIO and Gnuastro types.
                                                              (line  25)
* gal_fits_datatype_to_type:             CFITSIO and Gnuastro types.
                                                              (line  49)
* gal_fits_file_recognized:              FITS macros errors filenames.
                                                              (line  37)
* gal_fits_hdu_datasum:                  FITS HDUs.           (line  24)
* gal_fits_hdu_datasum_ptr:              FITS HDUs.           (line  34)
* gal_fits_hdu_format:                   FITS HDUs.           (line  41)
* gal_fits_hdu_is_healpix:               FITS HDUs.           (line  49)
* gal_fits_hdu_num:                      FITS HDUs.           (line  19)
* gal_fits_hdu_open:                     FITS HDUs.           (line  56)
* gal_fits_hdu_open_format:              FITS HDUs.           (line  83)
* gal_fits_img_info:                     FITS arrays.         (line  11)
* gal_fits_img_info_dim:                 FITS arrays.         (line  22)
* gal_fits_img_read:                     FITS arrays.         (line  32)
* gal_fits_img_read_kernel:              FITS arrays.         (line  68)
* gal_fits_img_read_to_type:             FITS arrays.         (line  54)
* gal_fits_img_write:                    FITS arrays.         (line  93)
* gal_fits_img_write_corr_wcs_str:       FITS arrays.         (line 114)
* gal_fits_img_write_to_ptr:             FITS arrays.         (line  85)
* gal_fits_img_write_to_type:            FITS arrays.         (line 101)
* gal_fits_io_error:                     FITS macros errors filenames.
                                                              (line  14)
* gal_fits_key_clean_str_value:          FITS header keywords.
                                                              (line  78)
* gal_fits_key_date_to_seconds:          FITS header keywords.
                                                              (line 115)
* gal_fits_key_date_to_struct_tm:        FITS header keywords.
                                                              (line  90)
* gal_fits_key_exists_fptr:              FITS header keywords.
                                                              (line  47)
* gal_fits_key_img_blank:                FITS header keywords.
                                                              (line  53)
* gal_fits_key_list_add:                 FITS header keywords.
                                                              (line 234)
* gal_fits_key_list_add_end:             FITS header keywords.
                                                              (line 262)
* gal_fits_key_list_comment_add:         FITS header keywords.
                                                              (line 288)
* gal_fits_key_list_comment_add_end:     FITS header keywords.
                                                              (line 298)
* gal_fits_key_list_reverse:             FITS header keywords.
                                                              (line 305)
* gal_fits_key_list_title_add:           FITS header keywords.
                                                              (line 272)
* gal_fits_key_list_title_add_end:       FITS header keywords.
                                                              (line 281)
* gal_fits_key_read:                     FITS header keywords.
                                                              (line 226)
* gal_fits_key_read_from_ptr:            FITS header keywords.
                                                              (line 148)
* gal_fits_key_write:                    FITS header keywords.
                                                              (line 357)
* gal_fits_key_write_config:             FITS header keywords.
                                                              (line 423)
* gal_fits_key_write_filename:           FITS header keywords.
                                                              (line 321)
* gal_fits_key_write_in_ptr:             FITS header keywords.
                                                              (line 390)
* gal_fits_key_write_title_in_ptr:       FITS header keywords.
                                                              (line 310)
* gal_fits_key_write_version:            FITS header keywords.
                                                              (line 399)
* gal_fits_key_write_version_in_ptr:     FITS header keywords.
                                                              (line 408)
* gal_fits_key_write_wcsstr:             FITS header keywords.
                                                              (line 346)
* GAL_FITS_MAX_NDIM:                     FITS macros errors filenames.
                                                              (line  10)
* gal_fits_name_is_fits:                 FITS macros errors filenames.
                                                              (line  22)
* gal_fits_name_save_as_string:          FITS macros errors filenames.
                                                              (line  50)
* gal_fits_open_to_write:                FITS HDUs.           (line  11)
* gal_fits_suffix_is_fits:               FITS macros errors filenames.
                                                              (line  30)
* gal_fits_tab_format:                   FITS tables.         (line  22)
* gal_fits_tab_info:                     FITS tables.         (line  32)
* gal_fits_tab_read:                     FITS tables.         (line  54)
* gal_fits_tab_size:                     FITS tables.         (line  15)
* gal_fits_tab_write:                    FITS tables.         (line  88)
* gal_fits_type_to_bin_tform:            CFITSIO and Gnuastro types.
                                                              (line  37)
* gal_fits_type_to_bitpix:               CFITSIO and Gnuastro types.
                                                              (line  31)
* gal_fits_type_to_datatype:             CFITSIO and Gnuastro types.
                                                              (line  43)
* gal_fits_unique_keyvalues:             FITS header keywords.
                                                              (line 451)
* gal_fits_with_keyvalue:                FITS header keywords.
                                                              (line 442)
* gal_fit_1d_linear:                     Fitting functions.   (line  73)
* gal_fit_1d_linear_estimate:            Fitting functions.   (line 129)
* gal_fit_1d_linear_no_constant:         Fitting functions.   (line 103)
* gal_fit_1d_polynomial:                 Fitting functions.   (line 147)
* gal_fit_1d_polynomial_estimate:        Fitting functions.   (line 196)
* gal_fit_1d_polynomial_robust:          Fitting functions.   (line 181)
* GAL_FIT_INVALID:                       Fitting functions.   (line  13)
* GAL_FIT_LINEAR:                        Fitting functions.   (line  14)
* GAL_FIT_LINEAR_NO_CONSTANT:            Fitting functions.   (line  16)
* GAL_FIT_LINEAR_NO_CONSTANT_WEIGHTED:   Fitting functions.   (line  17)
* GAL_FIT_LINEAR_WEIGHTED:               Fitting functions.   (line  15)
* gal_fit_name_from_id:                  Fitting functions.   (line  52)
* gal_fit_name_robust_from_id:           Fitting functions.   (line  66)
* gal_fit_name_robust_to_id:             Fitting functions.   (line  59)
* gal_fit_name_to_id:                    Fitting functions.   (line  45)
* GAL_FIT_POLYNOMIAL:                    Fitting functions.   (line  18)
* GAL_FIT_POLYNOMIAL_NUMBER:             Fitting functions.   (line  20)
* GAL_FIT_POLYNOMIAL_WEIGHTED:           Fitting functions.   (line  19)
* GAL_FIT_ROBUST_BISQUARE:               Fitting functions.   (line  31)
* GAL_FIT_ROBUST_CAUCHY:                 Fitting functions.   (line  32)
* GAL_FIT_ROBUST_DEFAULT:                Fitting functions.   (line  30)
* GAL_FIT_ROBUST_FAIR:                   Fitting functions.   (line  33)
* GAL_FIT_ROBUST_HUBER:                  Fitting functions.   (line  34)
* GAL_FIT_ROBUST_INVALID:                Fitting functions.   (line  29)
* GAL_FIT_ROBUST_NUMBER:                 Fitting functions.   (line  37)
* GAL_FIT_ROBUST_OLS:                    Fitting functions.   (line  35)
* GAL_FIT_ROBUST_WELSCH:                 Fitting functions.   (line  36)
* gal_git_describe:                      Git wrappers.        (line  15)
* GAL_INTERPOLATE_1D_AKIMA:              Interpolation.       (line 117)
* GAL_INTERPOLATE_1D_AKIMA_PERIODIC:     Interpolation.       (line 121)
* gal_interpolate_1d_blank:              Interpolation.       (line 237)
* GAL_INTERPOLATE_1D_CSPLINE:            Interpolation.       (line 103)
* GAL_INTERPOLATE_1D_CSPLINE_PERIODIC:   Interpolation.       (line 109)
* GAL_INTERPOLATE_1D_INVALID:            Interpolation.       (line  92)
* GAL_INTERPOLATE_1D_LINEAR:             Interpolation.       (line  94)
* gal_interpolate_1d_make_gsl_spline:    Interpolation.       (line 134)
* GAL_INTERPOLATE_1D_POLYNOMIAL:         Interpolation.       (line  97)
* GAL_INTERPOLATE_1D_STEFFEN:            Interpolation.       (line 125)
* gal_interpolate_neighbors:             Interpolation.       (line  46)
* GAL_INTERPOLATE_NEIGHBORS_FUNC_INVALID: Interpolation.      (line  39)
* GAL_INTERPOLATE_NEIGHBORS_FUNC_MAX:    Interpolation.       (line  36)
* GAL_INTERPOLATE_NEIGHBORS_FUNC_MEAN:   Interpolation.       (line  37)
* GAL_INTERPOLATE_NEIGHBORS_FUNC_MEDIAN: Interpolation.       (line  38)
* GAL_INTERPOLATE_NEIGHBORS_FUNC_MIN:    Interpolation.       (line  35)
* GAL_INTERPOLATE_NEIGHBORS_METRIC_INVALID: Interpolation.    (line  27)
* GAL_INTERPOLATE_NEIGHBORS_METRIC_MANHATTAN: Interpolation.  (line  26)
* GAL_INTERPOLATE_NEIGHBORS_METRIC_RADIAL: Interpolation.     (line  25)
* gal_jpeg_name_is_jpeg:                 JPEG files.          (line  22)
* gal_jpeg_read:                         JPEG files.          (line  36)
* gal_jpeg_suffix_is_jpeg:               JPEG files.          (line  29)
* gal_jpeg_write:                        JPEG files.          (line  45)
* gal_kdtree_create:                     K-d tree.            (line  70)
* gal_kdtree_nearest_neighbour:          K-d tree.            (line 150)
* gal_label_clump_significance:          Labeled datasets.    (line 151)
* gal_label_grow_indexs:                 Labeled datasets.    (line 220)
* gal_label_indexs:                      Labeled datasets.    (line  55)
* GAL_LABEL_INIT:                        Labeled datasets.    (line  45)
* GAL_LABEL_RIVER:                       Labeled datasets.    (line  46)
* GAL_LABEL_TMPCHECK:                    Labeled datasets.    (line  47)
* gal_label_watershed:                   Labeled datasets.    (line  93)
* gal_list_data_add:                     List of gal_data_t.  (line  18)
* gal_list_data_add_alloc:               List of gal_data_t.  (line  34)
* gal_list_data_free:                    List of gal_data_t.  (line 107)
* gal_list_data_last:                    List of gal_data_t.  (line 102)
* gal_list_data_number:                  List of gal_data_t.  (line  97)
* gal_list_data_pop:                     List of gal_data_t.  (line  45)
* gal_list_data_remove:                  List of gal_data_t.  (line  50)
* gal_list_data_reverse:                 List of gal_data_t.  (line  82)
* gal_list_data_select_by_id:            List of gal_data_t.  (line  70)
* gal_list_data_select_by_name:          List of gal_data_t.  (line  59)
* gal_list_data_to_array_ptr:            List of gal_data_t.  (line  88)
* gal_list_dosizet_add:                  Doubly linked ordered list of size_t.
                                                              (line  40)
* gal_list_dosizet_free:                 Doubly linked ordered list of size_t.
                                                              (line  72)
* gal_list_dosizet_pop_smallest:         Doubly linked ordered list of size_t.
                                                              (line  48)
* gal_list_dosizet_print:                Doubly linked ordered list of size_t.
                                                              (line  58)
* gal_list_dosizet_to_sizet:             Doubly linked ordered list of size_t.
                                                              (line  65)
* gal_list_f32_add:                      List of float.       (line  22)
* gal_list_f32_free:                     List of float.       (line  86)
* gal_list_f32_last:                     List of float.       (line  46)
* gal_list_f32_number:                   List of float.       (line  41)
* gal_list_f32_pop:                      List of float.       (line  33)
* gal_list_f32_print:                    List of float.       (line  51)
* gal_list_f32_reverse:                  List of float.       (line  68)
* gal_list_f32_to_array:                 List of float.       (line  74)
* gal_list_f64_add:                      List of double.      (line  24)
* gal_list_f64_free:                     List of double.      (line  96)
* gal_list_f64_last:                     List of double.      (line  48)
* gal_list_f64_number:                   List of double.      (line  43)
* gal_list_f64_pop:                      List of double.      (line  35)
* gal_list_f64_print:                    List of double.      (line  53)
* gal_list_f64_reverse:                  List of double.      (line  70)
* gal_list_f64_to_array:                 List of double.      (line  76)
* gal_list_f64_to_data:                  List of double.      (line  88)
* gal_list_i32_add:                      List of int32_t.     (line  23)
* gal_list_i32_free:                     List of int32_t.     (line  88)
* gal_list_i32_last:                     List of int32_t.     (line  48)
* gal_list_i32_number:                   List of int32_t.     (line  43)
* gal_list_i32_pop:                      List of int32_t.     (line  35)
* gal_list_i32_print:                    List of int32_t.     (line  53)
* gal_list_i32_reverse:                  List of int32_t.     (line  70)
* gal_list_i32_to_array:                 List of int32_t.     (line  76)
* gal_list_osizet_add:                   Ordered list of size_t.
                                                              (line  28)
* gal_list_osizet_pop:                   Ordered list of size_t.
                                                              (line  39)
* gal_list_osizet_to_sizet_free:         Ordered list of size_t.
                                                              (line  49)
* gal_list_sizet_add:                    List of size_t.      (line  34)
* gal_list_sizet_free:                   List of size_t.      (line  98)
* gal_list_sizet_last:                   List of size_t.      (line  58)
* gal_list_sizet_number:                 List of size_t.      (line  53)
* gal_list_sizet_pop:                    List of size_t.      (line  45)
* gal_list_sizet_print:                  List of size_t.      (line  63)
* gal_list_sizet_reverse:                List of size_t.      (line  80)
* gal_list_sizet_to_array:               List of size_t.      (line  86)
* gal_list_str_add:                      List of strings.     (line  20)
* gal_list_str_cat:                      List of strings.     (line  88)
* gal_list_str_extract:                  List of strings.     (line  81)
* gal_list_str_free:                     List of strings.     (line  75)
* gal_list_str_last:                     List of strings.     (line  49)
* gal_list_str_number:                   List of strings.     (line  44)
* gal_list_str_pop:                      List of strings.     (line  36)
* gal_list_str_print:                    List of strings.     (line  54)
* gal_list_str_reverse:                  List of strings.     (line  69)
* gal_list_void_add:                     List of void.        (line  31)
* gal_list_void_free:                    List of void.        (line  65)
* gal_list_void_last:                    List of void.        (line  54)
* gal_list_void_number:                  List of void.        (line  49)
* gal_list_void_pop:                     List of void.        (line  42)
* gal_list_void_reverse:                 List of void.        (line  59)
* gal_match_kdtree:                      Matching.            (line 110)
* gal_match_sort_based:                  Matching.            (line  87)
* gal_pdf_name_is_pdf:                   PDF files.           (line  15)
* gal_pdf_suffix_is_pdf:                 PDF files.           (line  22)
* gal_pdf_write:                         PDF files.           (line  28)
* gal_permutation_apply:                 Permutations.        (line  43)
* gal_permutation_apply_inverse:         Permutations.        (line  49)
* gal_permutation_apply_onlydim0:        Tile grid.           (line 205)
* gal_permutation_check:                 Permutations.        (line  37)
* gal_permutation_transpose_2d:          Permutations.        (line  56)
* gal_pointer_allocate:                  Pointers.            (line  39)
* gal_pointer_allocate_ram_or_mmap:      Pointers.            (line  74)
* gal_pointer_increment:                 Pointers.            (line  16)
* gal_pointer_mmap_allocate:             Pointers.            (line  87)
* gal_pointer_mmap_free:                 Pointers.            (line 113)
* gal_pointer_num_between:               Pointers.            (line  31)
* gal_polygon_area_flat:                 Polygons.            (line  89)
* gal_polygon_area_sky:                  Polygons.            (line  97)
* gal_polygon_clip:                      Polygons.            (line 181)
* gal_polygon_is_convex:                 Polygons.            (line  82)
* gal_polygon_is_counterclockwise:       Polygons.            (line 158)
* gal_polygon_is_inside:                 Polygons.            (line 130)
* gal_polygon_is_inside_convex:          Polygons.            (line 143)
* GAL_POLYGON_MAX_CORNERS:               Polygons.            (line  29)
* gal_polygon_ppropin:                   Polygons.            (line 152)
* GAL_POLYGON_ROUND_ERR:                 Polygons.            (line  32)
* gal_polygon_to_counterclockwise:       Polygons.            (line 171)
* gal_polygon_vertices_sort:             Polygons.            (line 216)
* gal_polygon_vertices_sort_convex:      Polygons.            (line  37)
* gal_pool_max:                          Pooling functions.   (line  13)
* gal_pool_mean:                         Pooling functions.   (line  34)
* gal_pool_median:                       Pooling functions.   (line  41)
* gal_pool_min:                          Pooling functions.   (line  20)
* gal_pool_sum:                          Pooling functions.   (line  27)
* gal_python_type_from_numpy:            Python interface.    (line  55)
* gal_python_type_to_numpy:              Python interface.    (line  49)
* gal_qsort_index_multi_d:               Qsort functions.     (line 105)
* gal_qsort_index_multi_i:               Qsort functions.     (line 121)
* gal_qsort_index_single:                Qsort functions.     (line  27)
* gal_qsort_index_single_TYPE_d:         Qsort functions.     (line  69)
* gal_qsort_index_single_TYPE_i:         Qsort functions.     (line  98)
* gal_qsort_TYPE_d:                      Qsort functions.     (line  51)
* gal_qsort_TYPE_i:                      Qsort functions.     (line  60)
* GAL_SPECLINES_Al_III_1854:             Spectral lines library.
                                                              (line  44)
* GAL_SPECLINES_Al_III_1862:             Spectral lines library.
                                                              (line  45)
* GAL_SPECLINES_ANGSTROM_*:              Spectral lines library.
                                                              (line 261)
* GAL_SPECLINES_Ar_III_7135:             Spectral lines library.
                                                              (line 187)
* GAL_SPECLINES_Ar_III_7751:             Spectral lines library.
                                                              (line 203)
* GAL_SPECLINES_Ar_IV_2853:              Spectral lines library.
                                                              (line  59)
* GAL_SPECLINES_Ar_IV_2868:              Spectral lines library.
                                                              (line  60)
* GAL_SPECLINES_Ar_IV_4711:              Spectral lines library.
                                                              (line 133)
* GAL_SPECLINES_Ar_IV_4740:              Spectral lines library.
                                                              (line 134)
* GAL_SPECLINES_Ar_IV_7170:              Spectral lines library.
                                                              (line 189)
* GAL_SPECLINES_Ar_IV_7237:              Spectral lines library.
                                                              (line 192)
* GAL_SPECLINES_Ar_IV_7262:              Spectral lines library.
                                                              (line 194)
* GAL_SPECLINES_Ar_I_1066:               Spectral lines library.
                                                              (line  23)
* GAL_SPECLINES_Ar_I_7868:               Spectral lines library.
                                                              (line 205)
* GAL_SPECLINES_Ar_V:                    Spectral lines library.
                                                              (line 185)
* GAL_SPECLINES_Ar_XIV:                  Spectral lines library.
                                                              (line 112)
* GAL_SPECLINES_Ca_II_8498:              Spectral lines library.
                                                              (line 214)
* GAL_SPECLINES_Ca_II_8542:              Spectral lines library.
                                                              (line 216)
* GAL_SPECLINES_Ca_II_8662:              Spectral lines library.
                                                              (line 221)
* GAL_SPECLINES_Ca_V:                    Spectral lines library.
                                                              (line 155)
* GAL_SPECLINES_Cl_II:                   Spectral lines library.
                                                              (line 218)
* GAL_SPECLINES_Cl_III_5517:             Spectral lines library.
                                                              (line 160)
* GAL_SPECLINES_Cl_III_5537:             Spectral lines library.
                                                              (line 161)
* GAL_SPECLINES_C_III_1908:              Spectral lines library.
                                                              (line  47)
* GAL_SPECLINES_C_III_4647:              Spectral lines library.
                                                              (line 128)
* GAL_SPECLINES_C_III_4650:              Spectral lines library.
                                                              (line 129)
* GAL_SPECLINES_C_III_5651:              Spectral lines library.
                                                              (line 130)
* GAL_SPECLINES_C_III_5697:              Spectral lines library.
                                                              (line 164)
* GAL_SPECLINES_C_III_977:               Spectral lines library.
                                                              (line  16)
* GAL_SPECLINES_C_II_1334:               Spectral lines library.
                                                              (line  30)
* GAL_SPECLINES_C_II_1335:               Spectral lines library.
                                                              (line  31)
* GAL_SPECLINES_C_II_2323:               Spectral lines library.
                                                              (line  50)
* GAL_SPECLINES_C_II_2324:               Spectral lines library.
                                                              (line  51)
* GAL_SPECLINES_C_II_7236:               Spectral lines library.
                                                              (line 191)
* GAL_SPECLINES_C_IV_1548:               Spectral lines library.
                                                              (line  37)
* GAL_SPECLINES_C_IV_1550:               Spectral lines library.
                                                              (line  38)
* GAL_SPECLINES_C_IV_5801:               Spectral lines library.
                                                              (line 167)
* GAL_SPECLINES_C_IV_5811:               Spectral lines library.
                                                              (line 168)
* GAL_SPECLINES_C_I_9824:                Spectral lines library.
                                                              (line 234)
* GAL_SPECLINES_C_I_9850:                Spectral lines library.
                                                              (line 235)
* GAL_SPECLINES_Fe_III_4658:             Spectral lines library.
                                                              (line 131)
* GAL_SPECLINES_Fe_III_5084:             Spectral lines library.
                                                              (line 142)
* GAL_SPECLINES_Fe_III_5270:             Spectral lines library.
                                                              (line 151)
* GAL_SPECLINES_Fe_II_4178:              Spectral lines library.
                                                              (line 103)
* GAL_SPECLINES_Fe_II_4233:              Spectral lines library.
                                                              (line 105)
* GAL_SPECLINES_Fe_II_4287:              Spectral lines library.
                                                              (line 107)
* GAL_SPECLINES_Fe_II_4304:              Spectral lines library.
                                                              (line 108)
* GAL_SPECLINES_Fe_II_4416:              Spectral lines library.
                                                              (line 114)
* GAL_SPECLINES_Fe_II_4452:              Spectral lines library.
                                                              (line 115)
* GAL_SPECLINES_Fe_II_4489:              Spectral lines library.
                                                              (line 117)
* GAL_SPECLINES_Fe_II_4491:              Spectral lines library.
                                                              (line 118)
* GAL_SPECLINES_Fe_II_4522:              Spectral lines library.
                                                              (line 120)
* GAL_SPECLINES_Fe_II_4555:              Spectral lines library.
                                                              (line 121)
* GAL_SPECLINES_Fe_II_4582:              Spectral lines library.
                                                              (line 122)
* GAL_SPECLINES_Fe_II_4583:              Spectral lines library.
                                                              (line 123)
* GAL_SPECLINES_Fe_II_4629:              Spectral lines library.
                                                              (line 124)
* GAL_SPECLINES_Fe_II_4923:              Spectral lines library.
                                                              (line 138)
* GAL_SPECLINES_Fe_II_5018:              Spectral lines library.
                                                              (line 141)
* GAL_SPECLINES_Fe_II_5169:              Spectral lines library.
                                                              (line 145)
* GAL_SPECLINES_Fe_II_5197:              Spectral lines library.
                                                              (line 147)
* GAL_SPECLINES_Fe_II_5234:              Spectral lines library.
                                                              (line 149)
* GAL_SPECLINES_Fe_II_5276:              Spectral lines library.
                                                              (line 152)
* GAL_SPECLINES_Fe_II_5316_6:            Spectral lines library.
                                                              (line 156)
* GAL_SPECLINES_Fe_II_5316_7:            Spectral lines library.
                                                              (line 157)
* GAL_SPECLINES_Fe_II_6369:              Spectral lines library.
                                                              (line 176)
* GAL_SPECLINES_Fe_II_6516:              Spectral lines library.
                                                              (line 178)
* GAL_SPECLINES_Fe_II_7155:              Spectral lines library.
                                                              (line 188)
* GAL_SPECLINES_Fe_II_7172:              Spectral lines library.
                                                              (line 190)
* GAL_SPECLINES_Fe_II_7452:              Spectral lines library.
                                                              (line 200)
* GAL_SPECLINES_Fe_II_8616:              Spectral lines library.
                                                              (line 220)
* GAL_SPECLINES_Fe_II_8891:              Spectral lines library.
                                                              (line 228)
* GAL_SPECLINES_Fe_IV_2829:              Spectral lines library.
                                                              (line  57)
* GAL_SPECLINES_Fe_IV_2835:              Spectral lines library.
                                                              (line  58)
* GAL_SPECLINES_Fe_IV_4903:              Spectral lines library.
                                                              (line 137)
* GAL_SPECLINES_Fe_IV_5236:              Spectral lines library.
                                                              (line 150)
* GAL_SPECLINES_Fe_VII_3586:             Spectral lines library.
                                                              (line  73)
* GAL_SPECLINES_Fe_VII_3758:             Spectral lines library.
                                                              (line  85)
* GAL_SPECLINES_Fe_VII_4893:             Spectral lines library.
                                                              (line 136)
* GAL_SPECLINES_Fe_VII_5158:             Spectral lines library.
                                                              (line 144)
* GAL_SPECLINES_Fe_VII_5276:             Spectral lines library.
                                                              (line 153)
* GAL_SPECLINES_Fe_VII_5720:             Spectral lines library.
                                                              (line 165)
* GAL_SPECLINES_Fe_VII_6087:             Spectral lines library.
                                                              (line 171)
* GAL_SPECLINES_Fe_VI_3662:              Spectral lines library.
                                                              (line  74)
* GAL_SPECLINES_Fe_VI_5145:              Spectral lines library.
                                                              (line 143)
* GAL_SPECLINES_Fe_VI_5176:              Spectral lines library.
                                                              (line 146)
* GAL_SPECLINES_Fe_VI_5335:              Spectral lines library.
                                                              (line 158)
* GAL_SPECLINES_Fe_VI_5424:              Spectral lines library.
                                                              (line 159)
* GAL_SPECLINES_Fe_VI_5637:              Spectral lines library.
                                                              (line 162)
* GAL_SPECLINES_Fe_VI_5677:              Spectral lines library.
                                                              (line 163)
* GAL_SPECLINES_Fe_V_3839:               Spectral lines library.
                                                              (line  89)
* GAL_SPECLINES_Fe_V_3891:               Spectral lines library.
                                                              (line  93)
* GAL_SPECLINES_Fe_V_3911:               Spectral lines library.
                                                              (line  94)
* GAL_SPECLINES_Fe_V_4071:               Spectral lines library.
                                                              (line  99)
* GAL_SPECLINES_Fe_V_4180:               Spectral lines library.
                                                              (line 104)
* GAL_SPECLINES_Fe_V_4227:               Spectral lines library.
                                                              (line 106)
* GAL_SPECLINES_Fe_X:                    Spectral lines library.
                                                              (line 177)
* GAL_SPECLINES_Fe_XIII:                 Spectral lines library.
                                                              (line 243)
* GAL_SPECLINES_Fe_XIV:                  Spectral lines library.
                                                              (line 154)
* GAL_SPECLINES_Fe_XI_2648:              Spectral lines library.
                                                              (line  52)
* GAL_SPECLINES_Fe_XI_7891:              Spectral lines library.
                                                              (line 207)
* GAL_SPECLINES_He_II_1640:              Spectral lines library.
                                                              (line  39)
* GAL_SPECLINES_He_II_2733:              Spectral lines library.
                                                              (line  53)
* GAL_SPECLINES_He_II_3203:              Spectral lines library.
                                                              (line  65)
* GAL_SPECLINES_He_II_4685:              Spectral lines library.
                                                              (line 132)
* GAL_SPECLINES_He_II_8236:              Spectral lines library.
                                                              (line 208)
* GAL_SPECLINES_He_I_10027:              Spectral lines library.
                                                              (line 237)
* GAL_SPECLINES_He_I_10031:              Spectral lines library.
                                                              (line 238)
* GAL_SPECLINES_He_I_10830:              Spectral lines library.
                                                              (line 244)
* GAL_SPECLINES_He_I_2945:               Spectral lines library.
                                                              (line  62)
* GAL_SPECLINES_He_I_3187:               Spectral lines library.
                                                              (line  64)
* GAL_SPECLINES_He_I_3487:               Spectral lines library.
                                                              (line  72)
* GAL_SPECLINES_He_I_3888:               Spectral lines library.
                                                              (line  91)
* GAL_SPECLINES_He_I_4026:               Spectral lines library.
                                                              (line  97)
* GAL_SPECLINES_He_I_4143:               Spectral lines library.
                                                              (line 102)
* GAL_SPECLINES_He_I_4471:               Spectral lines library.
                                                              (line 116)
* GAL_SPECLINES_He_I_5875:               Spectral lines library.
                                                              (line 169)
* GAL_SPECLINES_He_I_7065:               Spectral lines library.
                                                              (line 186)
* GAL_SPECLINES_He_I_7281:               Spectral lines library.
                                                              (line 195)
* GAL_SPECLINES_He_I_7816:               Spectral lines library.
                                                              (line 204)
* GAL_SPECLINES_H_10:                    Spectral lines library.
                                                              (line  87)
* GAL_SPECLINES_H_11:                    Spectral lines library.
                                                              (line  86)
* GAL_SPECLINES_H_12:                    Spectral lines library.
                                                              (line  84)
* GAL_SPECLINES_H_13:                    Spectral lines library.
                                                              (line  83)
* GAL_SPECLINES_H_14:                    Spectral lines library.
                                                              (line  80)
* GAL_SPECLINES_H_15:                    Spectral lines library.
                                                              (line  79)
* GAL_SPECLINES_H_16:                    Spectral lines library.
                                                              (line  78)
* GAL_SPECLINES_H_17:                    Spectral lines library.
                                                              (line  77)
* GAL_SPECLINES_H_18:                    Spectral lines library.
                                                              (line  76)
* GAL_SPECLINES_H_19:                    Spectral lines library.
                                                              (line  75)
* GAL_SPECLINES_H_8:                     Spectral lines library.
                                                              (line  92)
* GAL_SPECLINES_H_9:                     Spectral lines library.
                                                              (line  88)
* GAL_SPECLINES_H_alpha:                 Spectral lines library.
                                                              (line 180)
* GAL_SPECLINES_H_beta:                  Spectral lines library.
                                                              (line 135)
* GAL_SPECLINES_H_delta:                 Spectral lines library.
                                                              (line 101)
* GAL_SPECLINES_H_epsilon:               Spectral lines library.
                                                              (line  96)
* GAL_SPECLINES_H_gamma:                 Spectral lines library.
                                                              (line 110)
* GAL_SPECLINES_INVALID:                 Spectral lines library.
                                                              (line  10)
* gal_speclines_line_angstrom:           Spectral lines library.
                                                              (line 285)
* gal_speclines_line_code:               Spectral lines library.
                                                              (line 278)
* gal_speclines_line_name:               Spectral lines library.
                                                              (line 271)
* gal_speclines_line_redshift:           Spectral lines library.
                                                              (line 290)
* gal_speclines_line_redshift_code:      Spectral lines library.
                                                              (line 296)
* GAL_SPECLINES_Ly_alpha:                Spectral lines library.
                                                              (line  24)
* GAL_SPECLINES_Ly_beta:                 Spectral lines library.
                                                              (line  20)
* GAL_SPECLINES_Ly_delta:                Spectral lines library.
                                                              (line  14)
* GAL_SPECLINES_Ly_epsilon:              Spectral lines library.
                                                              (line  13)
* GAL_SPECLINES_Ly_gamma:                Spectral lines library.
                                                              (line  15)
* GAL_SPECLINES_Mg_II_2795:              Spectral lines library.
                                                              (line  55)
* GAL_SPECLINES_Mg_II_2802:              Spectral lines library.
                                                              (line  56)
* GAL_SPECLINES_Mg_V_2782:               Spectral lines library.
                                                              (line  54)
* GAL_SPECLINES_Mg_V_2928:               Spectral lines library.
                                                              (line  61)
* GAL_SPECLINES_NAME_*:                  Spectral lines library.
                                                              (line 265)
* GAL_SPECLINES_Ne_III_3868:             Spectral lines library.
                                                              (line  90)
* GAL_SPECLINES_Ne_III_3967:             Spectral lines library.
                                                              (line  95)
* GAL_SPECLINES_Ne_VIII_770:             Spectral lines library.
                                                              (line  11)
* GAL_SPECLINES_Ne_VIII_780:             Spectral lines library.
                                                              (line  12)
* GAL_SPECLINES_Ne_V_3345:               Spectral lines library.
                                                              (line  67)
* GAL_SPECLINES_Ne_V_3425:               Spectral lines library.
                                                              (line  68)
* GAL_SPECLINES_Ni_III:                  Spectral lines library.
                                                              (line 206)
* GAL_SPECLINES_Ni_II_7377:              Spectral lines library.
                                                              (line 198)
* GAL_SPECLINES_Ni_II_7411:              Spectral lines library.
                                                              (line 199)
* GAL_SPECLINES_NUMBER:                  Spectral lines library.
                                                              (line 246)
* GAL_SPECLINES_N_III_1746:              Spectral lines library.
                                                              (line  42)
* GAL_SPECLINES_N_III_1748:              Spectral lines library.
                                                              (line  43)
* GAL_SPECLINES_N_III_4510:              Spectral lines library.
                                                              (line 119)
* GAL_SPECLINES_N_III_4634:              Spectral lines library.
                                                              (line 125)
* GAL_SPECLINES_N_III_4640:              Spectral lines library.
                                                              (line 126)
* GAL_SPECLINES_N_III_4641:              Spectral lines library.
                                                              (line 127)
* GAL_SPECLINES_N_III_989:               Spectral lines library.
                                                              (line  17)
* GAL_SPECLINES_N_III_991_51:            Spectral lines library.
                                                              (line  18)
* GAL_SPECLINES_N_III_991_57:            Spectral lines library.
                                                              (line  19)
* GAL_SPECLINES_N_II_2142:               Spectral lines library.
                                                              (line  48)
* GAL_SPECLINES_N_II_5754:               Spectral lines library.
                                                              (line 166)
* GAL_SPECLINES_N_II_6548:               Spectral lines library.
                                                              (line 179)
* GAL_SPECLINES_N_II_6583:               Spectral lines library.
                                                              (line 181)
* GAL_SPECLINES_N_IV_1486:               Spectral lines library.
                                                              (line  36)
* GAL_SPECLINES_N_I_3466_4:              Spectral lines library.
                                                              (line  70)
* GAL_SPECLINES_N_I_3466_5:              Spectral lines library.
                                                              (line  71)
* GAL_SPECLINES_N_I_5200:                Spectral lines library.
                                                              (line 148)
* GAL_SPECLINES_N_I_7468:                Spectral lines library.
                                                              (line 201)
* GAL_SPECLINES_N_I_8680:                Spectral lines library.
                                                              (line 223)
* GAL_SPECLINES_N_I_8703:                Spectral lines library.
                                                              (line 224)
* GAL_SPECLINES_N_I_8711:                Spectral lines library.
                                                              (line 225)
* GAL_SPECLINES_N_V_1238:                Spectral lines library.
                                                              (line  25)
* GAL_SPECLINES_N_V_1242:                Spectral lines library.
                                                              (line  26)
* GAL_SPECLINES_O_III_1660:              Spectral lines library.
                                                              (line  40)
* GAL_SPECLINES_O_III_1666:              Spectral lines library.
                                                              (line  41)
* GAL_SPECLINES_O_III_2320:              Spectral lines library.
                                                              (line  49)
* GAL_SPECLINES_O_III_3132:              Spectral lines library.
                                                              (line  63)
* GAL_SPECLINES_O_III_3312:              Spectral lines library.
                                                              (line  66)
* GAL_SPECLINES_O_III_3444:              Spectral lines library.
                                                              (line  69)
* GAL_SPECLINES_O_III_4363:              Spectral lines library.
                                                              (line 111)
* GAL_SPECLINES_O_III_4958:              Spectral lines library.
                                                              (line 139)
* GAL_SPECLINES_O_III_5006:              Spectral lines library.
                                                              (line 140)
* GAL_SPECLINES_O_II_3726:               Spectral lines library.
                                                              (line  81)
* GAL_SPECLINES_O_II_3728:               Spectral lines library.
                                                              (line  82)
* GAL_SPECLINES_O_II_4317:               Spectral lines library.
                                                              (line 109)
* GAL_SPECLINES_O_II_4414:               Spectral lines library.
                                                              (line 113)
* GAL_SPECLINES_O_II_7319:               Spectral lines library.
                                                              (line 196)
* GAL_SPECLINES_O_II_7330:               Spectral lines library.
                                                              (line 197)
* GAL_SPECLINES_O_IV_1397:               Spectral lines library.
                                                              (line  33)
* GAL_SPECLINES_O_IV_1399:               Spectral lines library.
                                                              (line  34)
* GAL_SPECLINES_O_I_1302:                Spectral lines library.
                                                              (line  29)
* GAL_SPECLINES_O_I_6046:                Spectral lines library.
                                                              (line 170)
* GAL_SPECLINES_O_I_6300:                Spectral lines library.
                                                              (line 172)
* GAL_SPECLINES_O_I_6363:                Spectral lines library.
                                                              (line 175)
* GAL_SPECLINES_O_I_7002:                Spectral lines library.
                                                              (line 184)
* GAL_SPECLINES_O_I_7254:                Spectral lines library.
                                                              (line 193)
* GAL_SPECLINES_O_I_8446:                Spectral lines library.
                                                              (line 212)
* GAL_SPECLINES_O_VI_1031:               Spectral lines library.
                                                              (line  21)
* GAL_SPECLINES_O_VI_1037:               Spectral lines library.
                                                              (line  22)
* GAL_SPECLINES_Pa_10:                   Spectral lines library.
                                                              (line 229)
* GAL_SPECLINES_Pa_11:                   Spectral lines library.
                                                              (line 227)
* GAL_SPECLINES_Pa_12:                   Spectral lines library.
                                                              (line 226)
* GAL_SPECLINES_Pa_13:                   Spectral lines library.
                                                              (line 222)
* GAL_SPECLINES_Pa_14:                   Spectral lines library.
                                                              (line 219)
* GAL_SPECLINES_Pa_15:                   Spectral lines library.
                                                              (line 217)
* GAL_SPECLINES_Pa_16:                   Spectral lines library.
                                                              (line 215)
* GAL_SPECLINES_Pa_17:                   Spectral lines library.
                                                              (line 213)
* GAL_SPECLINES_Pa_18:                   Spectral lines library.
                                                              (line 211)
* GAL_SPECLINES_Pa_19:                   Spectral lines library.
                                                              (line 210)
* GAL_SPECLINES_Pa_20:                   Spectral lines library.
                                                              (line 209)
* GAL_SPECLINES_Pa_9:                    Spectral lines library.
                                                              (line 231)
* GAL_SPECLINES_Pa_delta:                Spectral lines library.
                                                              (line 239)
* GAL_SPECLINES_Pa_epsilon:              Spectral lines library.
                                                              (line 233)
* GAL_SPECLINES_Pa_gamma:                Spectral lines library.
                                                              (line 245)
* GAL_SPECLINES_Si_III:                  Spectral lines library.
                                                              (line  46)
* GAL_SPECLINES_Si_II_1260:              Spectral lines library.
                                                              (line  27)
* GAL_SPECLINES_Si_II_1264:              Spectral lines library.
                                                              (line  28)
* GAL_SPECLINES_Si_II_6347:              Spectral lines library.
                                                              (line 174)
* GAL_SPECLINES_Si_IV_1393:              Spectral lines library.
                                                              (line  32)
* GAL_SPECLINES_Si_IV_1402:              Spectral lines library.
                                                              (line  35)
* GAL_SPECLINES_S_III_6312:              Spectral lines library.
                                                              (line 173)
* GAL_SPECLINES_S_III_9068:              Spectral lines library.
                                                              (line 230)
* GAL_SPECLINES_S_III_9531:              Spectral lines library.
                                                              (line 232)
* GAL_SPECLINES_S_II_10286:              Spectral lines library.
                                                              (line 240)
* GAL_SPECLINES_S_II_10320:              Spectral lines library.
                                                              (line 241)
* GAL_SPECLINES_S_II_10336:              Spectral lines library.
                                                              (line 242)
* GAL_SPECLINES_S_II_4068:               Spectral lines library.
                                                              (line  98)
* GAL_SPECLINES_S_II_4076:               Spectral lines library.
                                                              (line 100)
* GAL_SPECLINES_S_II_6716:               Spectral lines library.
                                                              (line 182)
* GAL_SPECLINES_S_II_6730:               Spectral lines library.
                                                              (line 183)
* GAL_SPECLINES_S_VIII:                  Spectral lines library.
                                                              (line 236)
* GAL_SPECLINES_S_XII:                   Spectral lines library.
                                                              (line 202)
* GAL_STATISTICS_BINS_INVALID:           Statistical operations.
                                                              (line  26)
* GAL_STATISTICS_BINS_IRREGULAR:         Statistical operations.
                                                              (line  28)
* GAL_STATISTICS_BINS_REGULAR:           Statistical operations.
                                                              (line  27)
* gal_statistics_cfp:                    Statistical operations.
                                                              (line 379)
* gal_statistics_has_negative:           Statistical operations.
                                                              (line 169)
* gal_statistics_histogram:              Statistical operations.
                                                              (line 330)
* gal_statistics_histogram2d:            Statistical operations.
                                                              (line 356)
* gal_statistics_is_sorted:              Statistical operations.
                                                              (line 217)
* gal_statistics_maximum:                Statistical operations.
                                                              (line  45)
* gal_statistics_mean:                   Statistical operations.
                                                              (line  58)
* gal_statistics_mean_std:               Statistical operations.
                                                              (line  70)
* gal_statistics_median:                 Statistical operations.
                                                              (line  99)
* gal_statistics_minimum:                Statistical operations.
                                                              (line  38)
* gal_statistics_mode:                   Statistical operations.
                                                              (line 177)
* GAL_STATISTICS_MODE_GOOD_SYM:          Statistical operations.
                                                              (line  20)
* gal_statistics_mode_mirror_plots:      Statistical operations.
                                                              (line 201)
* gal_statistics_no_blank_sorted:        Statistical operations.
                                                              (line 256)
* gal_statistics_number:                 Statistical operations.
                                                              (line  32)
* gal_statistics_outlier_bydistance:     Statistical operations.
                                                              (line 429)
* gal_statistics_outlier_flat_cfp:       Statistical operations.
                                                              (line 484)
* gal_statistics_quantile:               Statistical operations.
                                                              (line 120)
* gal_statistics_quantile_function:      Statistical operations.
                                                              (line 139)
* gal_statistics_quantile_function_index: Statistical operations.
                                                              (line 129)
* gal_statistics_quantile_index:         Statistical operations.
                                                              (line 114)
* gal_statistics_regular_bins:           Statistical operations.
                                                              (line 284)
* gal_statistics_sigma_clip:             Statistical operations.
                                                              (line 400)
* GAL_STATISTICS_SIG_CLIP_MAX_CONVERGE:  Statistical operations.
                                                              (line  15)
* gal_statistics_sort_decreasing:        Statistical operations.
                                                              (line 250)
* gal_statistics_sort_increasing:        Statistical operations.
                                                              (line 244)
* gal_statistics_std:                    Statistical operations.
                                                              (line  64)
* gal_statistics_std_from_sums:          Statistical operations.
                                                              (line  83)
* gal_statistics_sum:                    Statistical operations.
                                                              (line  52)
* gal_statistics_unique:                 Statistical operations.
                                                              (line 158)
* gal_table_cols_to_vector:              Table input output.  (line 298)
* gal_table_col_vector_extract:          Table input output.  (line 289)
* gal_table_comments_add_intro:          Table input output.  (line 226)
* GAL_TABLE_DEF_PRECISION_DBL:           Table input output.  (line  30)
* GAL_TABLE_DEF_PRECISION_FLT:           Table input output.  (line  29)
* GAL_TABLE_DEF_PRECISION_INT:           Table input output.  (line  28)
* GAL_TABLE_DEF_WIDTH_DBL:               Table input output.  (line  27)
* GAL_TABLE_DEF_WIDTH_FLT:               Table input output.  (line  26)
* GAL_TABLE_DEF_WIDTH_INT:               Table input output.  (line  24)
* GAL_TABLE_DEF_WIDTH_LINT:              Table input output.  (line  25)
* GAL_TABLE_DEF_WIDTH_STR:               Table input output.  (line  23)
* gal_table_displayflt_from_str:         Table input output.  (line  82)
* gal_table_displayflt_to_str:           Table input output.  (line  89)
* GAL_TABLE_DISPLAY_FMT_DECIMAL:         Table input output.  (line  39)
* GAL_TABLE_DISPLAY_FMT_EXP:             Table input output.  (line  44)
* GAL_TABLE_DISPLAY_FMT_FIXED:           Table input output.  (line  43)
* GAL_TABLE_DISPLAY_FMT_GENERAL:         Table input output.  (line  45)
* GAL_TABLE_DISPLAY_FMT_HEX:             Table input output.  (line  42)
* GAL_TABLE_DISPLAY_FMT_OCTAL:           Table input output.  (line  41)
* GAL_TABLE_DISPLAY_FMT_STRING:          Table input output.  (line  38)
* GAL_TABLE_DISPLAY_FMT_UDECIMAL:        Table input output.  (line  40)
* GAL_TABLE_FORMAT_AFITS:                Table input output.  (line  67)
* GAL_TABLE_FORMAT_BFITS:                Table input output.  (line  68)
* GAL_TABLE_FORMAT_INVALID:              Table input output.  (line  65)
* GAL_TABLE_FORMAT_TXT:                  Table input output.  (line  66)
* gal_table_info:                        Table input output.  (line  97)
* gal_table_list_of_indexs:              Table input output.  (line 215)
* gal_table_print_info:                  Table input output.  (line 151)
* gal_table_read:                        Table input output.  (line 161)
* GAL_TABLE_SEARCH_COMMENT:              Table input output.  (line  76)
* GAL_TABLE_SEARCH_INVALID:              Table input output.  (line  73)
* GAL_TABLE_SEARCH_NAME:                 Table input output.  (line  74)
* GAL_TABLE_SEARCH_UNIT:                 Table input output.  (line  75)
* gal_table_write:                       Table input output.  (line 243)
* gal_table_write_log:                   Table input output.  (line 278)
* gal_threads_attr_barrier_init:         Gnuastro's thread related functions.
                                                              (line  69)
* gal_threads_dist_in_threads:           Gnuastro's thread related functions.
                                                              (line  82)
* gal_threads_number:                    Gnuastro's thread related functions.
                                                              (line  40)
* gal_threads_spin_off:                  Gnuastro's thread related functions.
                                                              (line  49)
* gal_tiff_dir_string_read:              TIFF files.          (line  37)
* gal_tiff_name_is_tiff:                 TIFF files.          (line  24)
* gal_tiff_read:                         TIFF files.          (line  44)
* gal_tiff_suffix_is_tiff:               TIFF files.          (line  31)
* gal_tiff_write:                        TIFF files.          (line  53)
* gal_tile_block:                        Independent tiles.   (line  78)
* gal_tile_block_blank_flag:             Independent tiles.   (line 161)
* gal_tile_block_check_tiles:            Independent tiles.   (line 139)
* gal_tile_block_increment:              Independent tiles.   (line  88)
* gal_tile_block_relative_to_other:      Independent tiles.   (line 152)
* gal_tile_block_write_const_value:      Independent tiles.   (line 104)
* gal_tile_full:                         Tile grid.           (line  51)
* gal_tile_full_free_contents:           Tile grid.           (line 250)
* gal_tile_full_id_from_coord:           Tile grid.           (line 241)
* gal_tile_full_permutation:             Tile grid.           (line 152)
* gal_tile_full_sanity_check:            Tile grid.           (line 117)
* gal_tile_full_two_layers:              Tile grid.           (line 126)
* gal_tile_full_values_smooth:           Tile grid.           (line 230)
* gal_tile_full_values_write:            Tile grid.           (line 214)
* GAL_TILE_PARSE_OPERATE:                Independent tiles.   (line 169)
* gal_tile_series_from_minmax:           Independent tiles.   (line  57)
* gal_tile_start_coord:                  Independent tiles.   (line  14)
* gal_tile_start_end_coord:              Independent tiles.   (line  21)
* gal_tile_start_end_ind_inclusive:      Independent tiles.   (line  40)
* gal_txt_contains_string:               Text files.          (line  51)
* gal_txt_image_read:                    Text files.          (line 111)
* GAL_TXT_LINESTAT_BLANK:                Text files.          (line  25)
* GAL_TXT_LINESTAT_COMMENT:              Text files.          (line  26)
* GAL_TXT_LINESTAT_DATAROW:              Text files.          (line  27)
* GAL_TXT_LINESTAT_INVALID:              Text files.          (line  24)
* gal_txt_line_stat:                     Text files.          (line  34)
* gal_txt_stdin_read:                    Text files.          (line 129)
* gal_txt_table_info:                    Text files.          (line  60)
* gal_txt_table_read:                    Text files.          (line  86)
* gal_txt_trim_space:                    Text files.          (line  41)
* gal_txt_write:                         Text files.          (line 155)
* GAL_TYPE_BIT:                          Library data types.  (line  44)
* gal_type_bit_string:                   Library data types.  (line 204)
* GAL_TYPE_COMPLEX32:                    Library data types.  (line 109)
* GAL_TYPE_COMPLEX64:                    Library data types.  (line 114)
* GAL_TYPE_FLOAT32:                      Library data types.  (line 101)
* GAL_TYPE_FLOAT64:                      Library data types.  (line 105)
* gal_type_from_name:                    Library data types.  (line 149)
* gal_type_from_string:                  Library data types.  (line 244)
* GAL_TYPE_INT:                          Library data types.  (line  80)
* GAL_TYPE_INT16:                        Library data types.  (line  60)
* GAL_TYPE_INT32:                        Library data types.  (line  68)
* GAL_TYPE_INT64:                        Library data types.  (line  76)
* GAL_TYPE_INT8:                         Library data types.  (line  52)
* GAL_TYPE_INVALID:                      Library data types.  (line  40)
* gal_type_is_int:                       Library data types.  (line 188)
* gal_type_is_list:                      Library data types.  (line 193)
* GAL_TYPE_LONG:                         Library data types.  (line  93)
* gal_type_max:                          Library data types.  (line 173)
* gal_type_min:                          Library data types.  (line 158)
* gal_type_name:                         Library data types.  (line 137)
* gal_type_out:                          Library data types.  (line 198)
* gal_type_sizeof:                       Library data types.  (line 130)
* GAL_TYPE_SIZE_T:                       Library data types.  (line  97)
* GAL_TYPE_STRING:                       Library data types.  (line 119)
* gal_type_string_to_number:             Library data types.  (line 281)
* GAL_TYPE_STRLL:                        Library data types.  (line 122)
* gal_type_to_string:                    Library data types.  (line 226)
* GAL_TYPE_UINT:                         Library data types.  (line  84)
* GAL_TYPE_UINT16:                       Library data types.  (line  56)
* GAL_TYPE_UINT32:                       Library data types.  (line  64)
* GAL_TYPE_UINT64:                       Library data types.  (line  72)
* GAL_TYPE_UINT8:                        Library data types.  (line  48)
* GAL_TYPE_ULONG:                        Library data types.  (line  88)
* gal_units_au_to_ly:                    Unit conversion library.
                                                              (line 155)
* gal_units_au_to_pc:                    Unit conversion library.
                                                              (line 106)
* gal_units_counts_to_jy:                Unit conversion library.
                                                              (line 100)
* gal_units_counts_to_mag:               Unit conversion library.
                                                              (line  57)
* gal_units_counts_to_nanomaggy:         Unit conversion library.
                                                              (line 113)
* gal_units_counts_to_sb:                Unit conversion library.
                                                              (line  83)
* gal_units_dec_to_degree:               Unit conversion library.
                                                              (line  34)
* gal_units_degree_to_dec:               Unit conversion library.
                                                              (line  49)
* gal_units_degree_to_ra:                Unit conversion library.
                                                              (line  41)
* gal_units_extract_decimal:             Unit conversion library.
                                                              (line  11)
* gal_units_ly_to_au:                    Unit conversion library.
                                                              (line 148)
* gal_units_ly_to_pc:                    Unit conversion library.
                                                              (line 134)
* gal_units_mag_to_counts:               Unit conversion library.
                                                              (line  63)
* gal_units_mag_to_sb:                   Unit conversion library.
                                                              (line  69)
* gal_units_nanomaggy_to_counts:         Unit conversion library.
                                                              (line 120)
* gal_units_pc_to_au:                    Unit conversion library.
                                                              (line 127)
* gal_units_pc_to_ly:                    Unit conversion library.
                                                              (line 141)
* gal_units_ra_to_degree:                Unit conversion library.
                                                              (line  27)
* gal_units_sb_to_counts:                Unit conversion library.
                                                              (line  92)
* gal_units_sb_to_mag:                   Unit conversion library.
                                                              (line  76)
* GAL_WARP_OUTPUT_NAME_MAXFRAC:          Warp library.        (line  27)
* GAL_WARP_OUTPUT_NAME_WARPED:           Warp library.        (line  26)
* gal_warp_pixelarea:                    Warp library.        (line 225)
* gal_warp_wcsalign:                     Warp library.        (line 177)
* gal_warp_wcsalign_free:                Warp library.        (line 217)
* gal_warp_wcsalign_init:                Warp library.        (line 193)
* gal_warp_wcsalign_onpix:               Warp library.        (line 204)
* gal_warp_wcsalign_onthread:            Warp library.        (line 210)
* gal_warp_wcsalign_template:            Warp library.        (line 160)
* gal_wcs_angular_distance_deg:          World Coordinate System.
                                                              (line 493)
* gal_wcs_box_vertices_from_center:      World Coordinate System.
                                                              (line 511)
* gal_wcs_clean_small_errors:            World Coordinate System.
                                                              (line 363)
* gal_wcs_coordsys_convert:              World Coordinate System.
                                                              (line 413)
* gal_wcs_coordsys_convert_points:       World Coordinate System.
                                                              (line 425)
* GAL_WCS_COORDSYS_ECB1950:              World Coordinate System.
                                                              (line  45)
* GAL_WCS_COORDSYS_ECJ2000:              World Coordinate System.
                                                              (line  46)
* GAL_WCS_COORDSYS_EQB1950:              World Coordinate System.
                                                              (line  43)
* GAL_WCS_COORDSYS_EQJ2000:              World Coordinate System.
                                                              (line  44)
* GAL_WCS_COORDSYS_GALACTIC:             World Coordinate System.
                                                              (line  47)
* gal_wcs_coordsys_identify:             World Coordinate System.
                                                              (line 406)
* GAL_WCS_COORDSYS_INVALID:              World Coordinate System.
                                                              (line  49)
* gal_wcs_coordsys_name_to_id:           World Coordinate System.
                                                              (line 114)
* GAL_WCS_COORDSYS_SUPERGALACTIC:        World Coordinate System.
                                                              (line  48)
* gal_wcs_coordsys_sys1_ref_in_sys2:     World Coordinate System.
                                                              (line 439)
* gal_wcs_copy:                          World Coordinate System.
                                                              (line 317)
* gal_wcs_copy_new_crval:                World Coordinate System.
                                                              (line 322)
* gal_wcs_coverage:                      World Coordinate System.
                                                              (line 564)
* gal_wcs_create:                        World Coordinate System.
                                                              (line 154)
* gal_wcs_decompose_pc_cdelt:            World Coordinate System.
                                                              (line 377)
* gal_wcs_dimension_name:                World Coordinate System.
                                                              (line 272)
* gal_wcs_distortion_convert(struct:     World Coordinate System.
                                                              (line 457)
* GAL_WCS_DISTORTION_DSS:                World Coordinate System.
                                                              (line  33)
* gal_wcs_distortion_identify:           World Coordinate System.
                                                              (line 448)
* GAL_WCS_DISTORTION_INVALID:            World Coordinate System.
                                                              (line  35)
* gal_wcs_distortion_name_from_id:       World Coordinate System.
                                                              (line 105)
* gal_wcs_distortion_name_to_id:         World Coordinate System.
                                                              (line  96)
* gal_wcs_distortion_name_to_id <1>:     World Coordinate System.
                                                              (line 123)
* GAL_WCS_DISTORTION_SIP:                World Coordinate System.
                                                              (line  31)
* GAL_WCS_DISTORTION_TPD:                World Coordinate System.
                                                              (line  30)
* GAL_WCS_DISTORTION_TPV:                World Coordinate System.
                                                              (line  32)
* GAL_WCS_DISTORTION_WAT:                World Coordinate System.
                                                              (line  34)
* GAL_WCS_FLTERROR:                      World Coordinate System.
                                                              (line  93)
* gal_wcs_free:                          World Coordinate System.
                                                              (line 261)
* gal_wcs_img_to_world:                  World Coordinate System.
                                                              (line 607)
* GAL_WCS_LINEAR_MATRIX_CD:              World Coordinate System.
                                                              (line  56)
* GAL_WCS_LINEAR_MATRIX_INVALID:         World Coordinate System.
                                                              (line  57)
* GAL_WCS_LINEAR_MATRIX_PC:              World Coordinate System.
                                                              (line  55)
* gal_wcs_on_tile:                       World Coordinate System.
                                                              (line 338)
* gal_wcs_pixel_area_arcsec2:            World Coordinate System.
                                                              (line 556)
* gal_wcs_pixel_scale:                   World Coordinate System.
                                                              (line 548)
* GAL_WCS_PROJECTION_AIR:                World Coordinate System.
                                                              (line  70)
* GAL_WCS_PROJECTION_AIT:                World Coordinate System.
                                                              (line  78)
* GAL_WCS_PROJECTION_ARC:                World Coordinate System.
                                                              (line  67)
* GAL_WCS_PROJECTION_AZP:                World Coordinate System.
                                                              (line  62)
* GAL_WCS_PROJECTION_BON:                World Coordinate System.
                                                              (line  83)
* GAL_WCS_PROJECTION_CAR:                World Coordinate System.
                                                              (line  73)
* GAL_WCS_PROJECTION_CEA:                World Coordinate System.
                                                              (line  72)
* GAL_WCS_PROJECTION_COD:                World Coordinate System.
                                                              (line  81)
* GAL_WCS_PROJECTION_COE:                World Coordinate System.
                                                              (line  80)
* GAL_WCS_PROJECTION_COO:                World Coordinate System.
                                                              (line  82)
* GAL_WCS_PROJECTION_COP:                World Coordinate System.
                                                              (line  79)
* GAL_WCS_PROJECTION_CSC:                World Coordinate System.
                                                              (line  86)
* GAL_WCS_PROJECTION_CYP:                World Coordinate System.
                                                              (line  71)
* GAL_WCS_PROJECTION_HPX:                World Coordinate System.
                                                              (line  88)
* GAL_WCS_PROJECTION_MER:                World Coordinate System.
                                                              (line  74)
* GAL_WCS_PROJECTION_MOL:                World Coordinate System.
                                                              (line  77)
* gal_wcs_projection_name_from_id:       World Coordinate System.
                                                              (line 132)
* gal_wcs_projection_name_to_id:         World Coordinate System.
                                                              (line 143)
* GAL_WCS_PROJECTION_PAR:                World Coordinate System.
                                                              (line  76)
* GAL_WCS_PROJECTION_PCO:                World Coordinate System.
                                                              (line  84)
* GAL_WCS_PROJECTION_QSC:                World Coordinate System.
                                                              (line  87)
* GAL_WCS_PROJECTION_SFL:                World Coordinate System.
                                                              (line  75)
* GAL_WCS_PROJECTION_SIN:                World Coordinate System.
                                                              (line  66)
* GAL_WCS_PROJECTION_STG:                World Coordinate System.
                                                              (line  65)
* GAL_WCS_PROJECTION_SZP:                World Coordinate System.
                                                              (line  63)
* GAL_WCS_PROJECTION_TAN:                World Coordinate System.
                                                              (line  64)
* GAL_WCS_PROJECTION_TSC:                World Coordinate System.
                                                              (line  85)
* GAL_WCS_PROJECTION_XPH:                World Coordinate System.
                                                              (line  89)
* GAL_WCS_PROJECTION_ZEA:                World Coordinate System.
                                                              (line  69)
* GAL_WCS_PROJECTION_ZPN:                World Coordinate System.
                                                              (line  68)
* gal_wcs_read:                          World Coordinate System.
                                                              (line 246)
* gal_wcs_read_fitsptr:                  World Coordinate System.
                                                              (line 204)
* gal_wcs_remove_dimension:              World Coordinate System.
                                                              (line 333)
* gal_wcs_to_cd:                         World Coordinate System.
                                                              (line 396)
* gal_wcs_warp_matrix:                   World Coordinate System.
                                                              (line 353)
* gal_wcs_world_to_img:                  World Coordinate System.
                                                              (line 583)
* gal_wcs_write:                         World Coordinate System.
                                                              (line 294)
* gal_wcs_write_in_fitsptr:              World Coordinate System.
                                                              (line 306)
* gal_wcs_write_wcsstr:                  World Coordinate System.
                                                              (line 282)
* pthread_barrierattr_t:                 Implementation of pthread_barrier.
                                                              (line  22)
* pthread_barrier_destroy:               Implementation of pthread_barrier.
                                                              (line  43)
* pthread_barrier_init:                  Implementation of pthread_barrier.
                                                              (line  28)
* pthread_barrier_t:                     Implementation of pthread_barrier.
                                                              (line  25)
* pthread_barrier_wait:                  Implementation of pthread_barrier.
                                                              (line  36)

Index
*****

[index]
* Menu:

* $g$ (gravitational constant):          Constants.           (line  26)
* $h$ (Plank’s constant):                Constants.           (line  30)
* $HOME:                                 Current directory and User wide.
                                                              (line   6)
* $HOME/.local/etc/:                     Current directory and User wide.
                                                              (line   6)
* --:                                    Operating mode options.
                                                              (line  11)
* --checkconfig:                         Operating mode options.
                                                              (line 121)
* --cite:                                Operating mode options.
                                                              (line  55)
* --config-prefix=STR:                   Operating mode options.
                                                              (line 135)
* --config=STR:                          Operating mode options.
                                                              (line 103)
* --disable-guide-message:               Gnuastro configure options.
                                                              (line  84)
* --disable-progname:                    Gnuastro configure options.
                                                              (line  61)
* --dontdelete:                          Input output options.
                                                              (line  98)
* --enable-check-with-valgrind:          Gnuastro configure options.
                                                              (line  31)
* --enable-debug:                        Gnuastro configure options.
                                                              (line  12)
* --enable-gnulibcheck:                  Gnuastro configure options.
                                                              (line  71)
* --enable-gnulibcheck <1>:              Known issues.        (line  37)
* --enable-guide-message=no:             Gnuastro configure options.
                                                              (line  85)
* --enable-progname:                     Gnuastro configure options.
                                                              (line  48)
* --enable-progname=no:                  Gnuastro configure options.
                                                              (line  62)
* --enable-reentrant:                    CFITSIO.             (line  13)
* --hdu=STR/INT:                         Input output options.
                                                              (line  36)
* --help:                                Arguments and options.
                                                              (line  33)
* --help <1>:                            Operating mode options.
                                                              (line  27)
* --help <2>:                            --help.              (line   6)
* --help output customization:           --help.              (line  55)
* --ignorecase:                          Input output options.
                                                              (line  73)
* --keepinputdir:                        Input output options.
                                                              (line 105)
* --keepinputdir <1>:                    Automatic output.    (line  18)
* --lastconfig:                          Operating mode options.
                                                              (line 208)
* --log:                                 Operating mode options.
                                                              (line 280)
* --numthreads:                          Configuration files. (line  15)
* --numthreads <1>:                      Multi-threaded operations.
                                                              (line  16)
* --numthreads=INT:                      Operating mode options.
                                                              (line 293)
* --onlyversion=STR:                     Operating mode options.
                                                              (line 220)
* --output:                              Configuration files. (line  15)
* --output=STR:                          Input output options.
                                                              (line  85)
* --prefix:                              Installation directory.
                                                              (line   6)
* --printparams:                         Options.             (line  73)
* --printparams <1>:                     Operating mode options.
                                                              (line  81)
* --program-prefix:                      Executable names.    (line  50)
* --program-suffix:                      Executable names.    (line  50)
* --program-transform-name:              Executable names.    (line  50)
* --quiet:                               Operating mode options.
                                                              (line  46)
* --searchin=STR:                        Input output options.
                                                              (line  66)
* --setdirconf:                          Operating mode options.
                                                              (line 179)
* --setdirconf <1>:                      Current directory and User wide.
                                                              (line  16)
* --setusrconf:                          Operating mode options.
                                                              (line 203)
* --setusrconf <1>:                      Current directory and User wide.
                                                              (line  16)
* --stdintimeout:                        Input output options.
                                                              (line   9)
* --tableformat=STR:                     Input output options.
                                                              (line 118)
* --type=STR:                            Input output options.
                                                              (line  91)
* --usage:                               Arguments and options.
                                                              (line  33)
* --usage <1>:                           Operating mode options.
                                                              (line  21)
* --usage <2>:                           --usage.             (line   6)
* --version:                             Operating mode options.
                                                              (line  38)
* --wcslinearmatrix=STR:                 Input output options.
                                                              (line 127)
* --with-python:                         Gnuastro configure options.
                                                              (line 116)
* --without-libgit2:                     Gnuastro configure options.
                                                              (line  98)
* --without-libjpeg:                     Gnuastro configure options.
                                                              (line 104)
* --without-libtiff:                     Gnuastro configure options.
                                                              (line 110)
* --without-pgplot:                      WCSLIB.              (line  16)
* -?:                                    Operating mode options.
                                                              (line  26)
* -D:                                    Input output options.
                                                              (line  97)
* -h STR/INT:                            Input output options.
                                                              (line  35)
* -I:                                    Input output options.
                                                              (line  72)
* -K:                                    Input output options.
                                                              (line 104)
* -mecube (DS9):                         Viewing FITS file contents with DS9 or TOPCAT.
                                                              (line  40)
* -N INT:                                Operating mode options.
                                                              (line 292)
* -o STR:                                Input output options.
                                                              (line  84)
* -P:                                    Operating mode options.
                                                              (line  80)
* -q:                                    Operating mode options.
                                                              (line  45)
* -S:                                    Operating mode options.
                                                              (line 178)
* -s STR:                                Input output options.
                                                              (line  65)
* -T STR:                                Input output options.
                                                              (line  90)
* -t STR:                                Input output options.
                                                              (line 117)
* -U:                                    Operating mode options.
                                                              (line 202)
* -V:                                    Operating mode options.
                                                              (line  37)
* ./.gnuastro/:                          Current directory and User wide.
                                                              (line   6)
* ./configure:                           Configuring.         (line   6)
* ./configure <1>:                       Installation directory.
                                                              (line  72)
* ./configure options:                   Gnuastro configure options.
                                                              (line   6)
* .bashrc:                               --help.              (line  65)
* .bashrc <1>:                           Generating random numbers.
                                                              (line  64)
* 24-bit terminal:                       Vector graphics colors.
                                                              (line  14)
* 2D histogram:                          Column statistics color-magnitude diagram.
                                                              (line  32)
* 2D histogram <1>:                      2D Histograms.       (line   6)
* 2D histogram <2>:                      Statistical operations.
                                                              (line 360)
* 2MASS All-Sky Catalog:                 Available databases. (line 177)
* 32-bit:                                Configuration information.
                                                              (line  70)
* 3D data cube:                          Detecting lines and extracting spectra in 3D data.
                                                              (line   6)
* 3D data-cubes:                         Dimensionality changing operators.
                                                              (line 206)
* 3D data-cubes <1>:                     Measurements per slice spectra.
                                                              (line   6)
* 64-bit:                                Configuration information.
                                                              (line  70)
* A4 paper size:                         A4 print book.       (line   6)
* A4 print book:                         A4 print book.       (line   6)
* AAVSO Photometric All Sky Survey, DR9: Available databases. (line 177)
* AB magnitude:                          Unit conversion operators.
                                                              (line  92)
* AB magnitude <1>:                      Brightness flux magnitude.
                                                              (line  77)
* AB Magnitude:                          Unit conversion library.
                                                              (line 103)
* Abd al-rahman Sufi:                    Sufi simulates a detection.
                                                              (line   6)
* Abell 370 galaxy cluster:              Detecting lines and extracting spectra in 3D data.
                                                              (line  20)
* Abraham de Moivre:                     Circles and the complex plane.
                                                              (line  16)
* ACIS:                                  Detecting lines and extracting spectra in 3D data.
                                                              (line   6)
* ACS:                                   Warp.                (line  53)
* ACS camera:                            Surface brightness limit of image.
                                                              (line  38)
* Adding Ghostscript fonts:              Drawing with vector graphics.
                                                              (line 315)
* Additions to Gnuastro:                 Suggest new feature. (line   6)
* Adjacency matrix:                      Binary datasets.     (line 165)
* Adobe systems:                         Recognized file formats.
                                                              (line 102)
* ADQL (Astronomical Data Query Language): Query.             (line   6)
* ADU:                                   Instrumental noise.  (line  23)
* ADU <1>:                               Brightness flux magnitude.
                                                              (line   6)
* Advanced camera for surveys:           Warp.                (line  53)
* Advanced Camera for Surveys:           Linear warping basics.
                                                              (line  51)
* Advanced Packaging Tool (APT, Debian): Dependencies from package managers.
                                                              (line  51)
* Affine Transformation:                 Linear warping basics.
                                                              (line  85)
* Airy projection:                       Align pixels with WCS considering distortions.
                                                              (line 176)
* AKARI/FIS All-Sky Survey:              Available databases. (line 177)
* Akima spline interpolation:            Interpolation.       (line 118)
* al-Shirazi, Qutb al-Din:               Fourier series historical background.
                                                              (line  27)
* Albert. A. Michelson:                  Science and its tools.
                                                              (line 194)
* Algorithm: watershed:                  Labeled datasets.    (line  97)
* Alias (shell):                         Invoking astnoisechisel.
                                                              (line 108)
* Alias, shell:                          Invoking astmkprof.  (line  85)
* Align:                                 Align pixels with WCS considering distortions.
                                                              (line 121)
* Align <1>:                             Interpolation.       (line 255)
* Align pixel and WCS coordinates:       Align pixels with WCS considering distortions.
                                                              (line   6)
* Aligning an image:                     Align pixels with WCS considering distortions.
                                                              (line  58)
* All-sky Survey of GALEX DR5:           Available databases. (line 177)
* AllWISE Data Release:                  Available databases. (line 177)
* Almagest:                              Sufi simulates a detection.
                                                              (line  19)
* Amplifier:                             Tessellation.        (line  54)
* Angular coverage:                      Brightness flux magnitude.
                                                              (line 163)
* Annotation of images for paper:        Annotations for figure in paper.
                                                              (line   6)
* Announcements:                         Announcements.       (line   6)
* Anonymous bug submission:              Report a bug.        (line  84)
* Anscombe F. J.:                        Science and its tools.
                                                              (line  24)
* Anscombe’s quartet:                    Science and its tools.
                                                              (line  32)
* ANSI C:                                Why C.               (line  15)
* Aperture blurring:                     Sigma clipping.      (line  22)
* apt-get:                               Dependencies from package managers.
                                                              (line  51)
* Arch GNU/Linux:                        Dependencies from package managers.
                                                              (line 148)
* Area of pixel on sky:                  Pixel information images.
                                                              (line  30)
* Area resampling:                       Pixel information images.
                                                              (line  25)
* Area, ellipse:                         Morphology measurements nonparametric.
                                                              (line 121)
* Argp argument parser:                  --help.              (line  55)
* Argp argument parser <1>:              Mandatory source code files.
                                                              (line  69)
* ARGP_HELP_FMT:                         --help.              (line  55)
* args.h:                                Mandatory source code files.
                                                              (line  68)
* Arguments to programs:                 Arguments and options.
                                                              (line   6)
* Aristarchus of Samos:                  Fourier series historical background.
                                                              (line  56)
* Array:                                 Linked lists.        (line   6)
* ASCII plot:                            Invoking aststatistics.
                                                              (line  67)
* ASCII table, FITS:                     Recognized table formats.
                                                              (line  19)
* ASCII85 encoding:                      ConvertType input and output.
                                                              (line 113)
* ASCII85 encoding <1>:                  EPS files.           (line  98)
* astprogname:                           Naming convention.   (line  15)
* Astrometry:                            Zero point estimation.
                                                              (line   6)
* ASTRON:                                Available databases. (line  82)
* Astronomical data format:              Recognized file formats.
                                                              (line  15)
* Astronomical Data Query Language (ADQL): Query.             (line   6)
* Astronomical Magnitude system:         Brightness flux magnitude.
                                                              (line  40)
* Astronomical Unit (AU):                Constants.           (line  34)
* Astronomical Units (AU):               Unit conversion operators.
                                                              (line 138)
* Astronomical Units (AU) <1>:           Unit conversion library.
                                                              (line 109)
* Asynchronous thread allocation:        Invoking astcrop.    (line  74)
* Atmosphere:                            Convolve.            (line  25)
* Atmosphere blurring:                   Sigma clipping.      (line  22)
* Atmosphere emission lines:             Sky lines in optical IFUs.
                                                              (line  23)
* AU (Astronomical Unit):                Constants.           (line  34)
* authors-cite.h:                        Mandatory source code files.
                                                              (line 147)
* Auto-complete in the shell:            Executable names.    (line  14)
* Autocomplete (in the shell/Bash):      Shell TAB completion.
                                                              (line  17)
* Autocomplete (in the shell/Bash) <1>:  Mandatory source code files.
                                                              (line 154)
* Autocomplete (in the shell/Bash) <2>:  Bash programmable completion.
                                                              (line  10)
* Automatic configuration file writing:  Configuration file format.
                                                              (line  33)
* Automatic output file names:           Automatic output.    (line   6)
* Automatically created build files:     Bootstrapping.       (line   6)
* Available number of threads:           Multi-threaded operations.
                                                              (line  16)
* Average:                               Statistical operations.
                                                              (line  58)
* Average, weighted:                     Convolve.            (line   6)
* Avogradro’s number:                    Constants.           (line  42)
* AWK:                                   Extract clumps and objects.
                                                              (line  71)
* AWK <1>:                               Standard input.      (line  41)
* AWK <2>:                               Table.               (line  23)
* AWK <3>:                               Invoking asttable.   (line 148)
* AWK <4>:                               Invoking astarithmetic.
                                                              (line 271)
* AWK <5>:                               Invoking aststatistics.
                                                              (line 114)
* AWK <6>:                               Table input output.  (line 181)
* Axis ratio:                            Defining an ellipse and ellipsoid.
                                                              (line   6)
* Axis ratio <1>:                        Dimensions.          (line 105)
* Azimuthal range (radial profile):      Invoking astscript-radial-profile.
                                                              (line 256)
* Azophi:                                Sufi simulates a detection.
                                                              (line   6)
* Background flux:                       Photon counting noise.
                                                              (line  52)
* Background flux <1>:                   Sky value definition.
                                                              (line  18)
* Background pixels:                     Detection options.   (line  69)
* Backup:                                Configure and build in RAM.
                                                              (line  15)
* Bad pixels:                            Accounting for non-exposed pixels.
                                                              (line   6)
* Baffle:                                Accounting for non-exposed pixels.
                                                              (line   6)
* Balmer limit:                          Spectral lines library.
                                                              (line  10)
* Band-merged unWISE Catalog:            Available databases. (line 177)
* Base of natural logarithm ($e$):       Constants.           (line  13)
* Bash auto-complete:                    Shell TAB completion.
                                                              (line  17)
* Bash auto-complete <1>:                Mandatory source code files.
                                                              (line 154)
* Bash auto-complete <2>:                Bash programmable completion.
                                                              (line  10)
* Bash programmable completion:          Shell TAB completion.
                                                              (line  17)
* Bash programmable completion <1>:      Mandatory source code files.
                                                              (line 154)
* Bash programmable completion <2>:      Bash programmable completion.
                                                              (line  10)
* Best use of CPU threads:               A note on threads.   (line   6)
* Bi-linear interpolation:               Resampling.          (line  23)
* Bias current:                          Tessellation.        (line  54)
* Bias level in detectors:               Photon counting noise.
                                                              (line  77)
* Bicubic interpolation:                 Resampling.          (line  23)
* Bicubic interpolation <1>:             Quantifying signal in a tile.
                                                              (line 152)
* Bin width, histogram:                  Histogram and Cumulative Frequency Plot.
                                                              (line  21)
* Binary datasets:                       Binary datasets.     (line   6)
* Binary image:                          Recognized file formats.
                                                              (line  88)
* Binary image <1>:                      Detection options.   (line  69)
* Binary table, FITS:                    Recognized table formats.
                                                              (line  54)
* Bisquare function of Tukey:            Fitting options.     (line 121)
* Bit:                                   Numeric data types.  (line   6)
* bit-32:                                Configuration information.
                                                              (line  70)
* bit-64:                                Configuration information.
                                                              (line  70)
* Bitwise operators:                     Bitwise operators.   (line   6)
* Bitwise Or:                            Arithmetic on datasets.
                                                              (line  42)
* Biweight function of Tukey:            Fitting options.     (line 121)
* Black and white image:                 Recognized file formats.
                                                              (line  88)
* blank color channel:                   Recognized file formats.
                                                              (line 123)
* Blank data:                            Generic data container.
                                                              (line 157)
* Blank pixel:                           Blank pixels.        (line   6)
* Blank pixel <1>:                       Conditional operators.
                                                              (line  98)
* Blur image:                            Convolve.            (line  25)
* Blur image <1>:                        PSF.                 (line  19)
* Blurring:                              Sigma clipping.      (line  22)
* Bonne projection:                      Align pixels with WCS considering distortions.
                                                              (line 202)
* Book formats:                          Getting help.        (line   6)
* Bootstrapping:                         Bootstrapping.       (line   6)
* Border on an image:                    Drawing with vector graphics.
                                                              (line  34)
* Brahe, Tycho:                          Science and its tools.
                                                              (line 124)
* Breadth first search:                  Defining an ellipse and ellipsoid.
                                                              (line  68)
* Breadth first search <1>:              Binary datasets.     (line 129)
* brew:                                  Dependencies from package managers.
                                                              (line 116)
* Brightness:                            Brightness flux magnitude.
                                                              (line  14)
* Brightness <1>:                        Galaxies.            (line  11)
* Buffers (Emacs):                       Coding conventions.  (line  41)
* Bug:                                   Report a bug.        (line   6)
* Bug <1>:                               Gnuastro project webpage.
                                                              (line   6)
* Bug reporting:                         Report a bug.        (line  16)
* Bug tracker:                           Report a bug.        (line  99)
* bug-gnuastro@gnu.org:                  Report a bug.        (line  78)
* Build:                                 Quick start.         (line   6)
* Build individual profiles:             MakeProfiles output dataset.
                                                              (line 167)
* Build tree:                            Test scripts.        (line  25)
* Building from source:                  Dependencies from package managers.
                                                              (line   6)
* Butterfly projection:                  Align pixels with WCS considering distortions.
                                                              (line 214)
* Byte:                                  Numeric data types.  (line  16)
* Bzip2:                                 Downloading and validating input data.
                                                              (line  81)
* C compiler:                            Invoking astbuildprog.
                                                              (line  72)
* C preprocessor:                        Invoking astbuildprog.
                                                              (line  89)
* C programming language:                Why C.               (line   6)
* C++ programming language:              Why C.               (line   6)
* C, plotting:                           PGPLOT.              (line   6)
* C99:                                   Pointers.            (line  59)
* C: restrict:                           Generic data container.
                                                              (line  61)
* Cache, system:                         A note on threads.   (line  29)
* Calendar:                              Sort FITS files by night.
                                                              (line   6)
* Calibration:                           Zero point estimation.
                                                              (line   6)
* Camera:                                Resampling.          (line   6)
* CANDELS survey:                        Crop options.        (line  32)
* CANDELS survey <1>:                    Surface brightness limit of image.
                                                              (line  52)
* Carbon footprint:                      Separate shell variables for multiple outputs.
                                                              (line  30)
* Caspar Wessel:                         Circles and the complex plane.
                                                              (line  16)
* Catalog, Gaia:                         Available databases. (line  92)
* Catalog, Vizier:                       Available databases. (line 156)
* CatWISE 2020 catalog:                  Available databases. (line 177)
* Cauchy’s function (robust weight):     Fitting options.     (line 125)
* CC:                                    Invoking astbuildprog.
                                                              (line 204)
* CCD:                                   Tessellation.        (line  54)
* CCD <1>:                               Warp.                (line  53)
* CDELT:                                 Angular coverage on the sky.
                                                              (line   6)
* CDELT <1>:                             Moire pattern in stacking and its correction.
                                                              (line  97)
* CDELT <2>:                             Input output options.
                                                              (line 133)
* CDELTi:                                Align pixels with WCS considering distortions.
                                                              (line 105)
* CDS, VizieR:                           Available databases. (line 156)
* Celestial sphere:                      Pointings that account for sky curvature.
                                                              (line  55)
* Celestial sphere <1>:                  Brightness flux magnitude.
                                                              (line 163)
* CentOS:                                Dependencies from package managers.
                                                              (line  86)
* Central management:                    Gnuastro project webpage.
                                                              (line   6)
* CFITSIO:                               CFITSIO.             (line   6)
* CFITSIO <1>:                           Keyword inspection and manipulation.
                                                              (line 269)
* CFITSIO <2>:                           Configuration information.
                                                              (line  34)
* CFITSIO <3>:                           FITS files.          (line   6)
* CFITSIO version on outputs:            Output FITS files.   (line   6)
* Change converted pixel values:         Pixel visualization. (line  73)
* Channel:                               Tessellation.        (line  65)
* Channel <1>:                           Array input output.  (line  89)
* Channel (color):                       Color.               (line   6)
* Channel, color:                        Pixel colors.        (line   6)
* Charge-coupled device:                 Warp.                (line  53)
* Check:                                 Quick start.         (line   6)
* Check center of crop:                  Crop output.         (line 136)
* Checking detection algorithms:         MakeProfiles.        (line   6)
* Checking tests:                        Tests.               (line   6)
* Checksum:                              Downloading and validating input data.
                                                              (line  41)
* CHECKSUM: FITS keyword:                Keyword inspection and manipulation.
                                                              (line 269)
* Chi-squared:                           Fitting functions.   (line  93)
* CIII doublet:                          Spectral lines library.
                                                              (line  10)
* Circle (great):                        Box shape operators. (line 118)
* Circle (small):                        Box shape operators. (line 126)
* Citation information:                  Mandatory source code files.
                                                              (line 148)
* Claudius Ptolemy:                      Sufi simulates a detection.
                                                              (line  19)
* CLI: command-line user interface:      Command-line interface.
                                                              (line   6)
* CLI: repeating operations:             Command-line interface.
                                                              (line  53)
* Clump:                                 Labeled datasets.    (line 158)
* Clump magnitude limit:                 Quantifying measurement limits.
                                                              (line   6)
* CMYK:                                  Pixel colors.        (line   6)
* Coaddition:                            Moire pattern in stacking and its correction.
                                                              (line 128)
* Coaddition <1>:                        Stacking operators.  (line   6)
* Coaddition <2>:                        Align pixels with WCS considering distortions.
                                                              (line  31)
* Coadds:                                Random number generators.
                                                              (line 157)
* COBE spherical cube projection:        Align pixels with WCS considering distortions.
                                                              (line 208)
* Color:                                 Pixel colors.        (line   6)
* Color channel:                         Color.               (line   6)
* Color channel <1>:                     Pixel colors.        (line   6)
* Color channel <2>:                     Array input output.  (line  89)
* Color in macOS terminals:              Drawing with vector graphics.
                                                              (line 268)
* Color-magnitude diagram:               Column statistics color-magnitude diagram.
                                                              (line  27)
* Color-magnitude diagram <1>:           2D histogram as an image.
                                                              (line  18)
* Colormap:                              Pixel colors.        (line   6)
* Colormap, gray-scale:                  Colormaps for single-channel pixels.
                                                              (line  23)
* Colormap, HSV:                         Colormaps for single-channel pixels.
                                                              (line   6)
* Colormap: SLS:                         Pixel visualization. (line  46)
* Colormap: SLS-inverse:                 Pixel visualization. (line  54)
* Colormap: Viridis:                     Pixel visualization. (line  41)
* Colors:                                Color functions.     (line   6)
* Colors (web):                          Vector graphics colors.
                                                              (line   6)
* Colors, broad-band photometry:         General program usage tutorial.
                                                              (line   6)
* Colorspace, gray-scale:                Pixel visualization. (line  23)
* Colorspace, HSV:                       Pixel visualization. (line  28)
* Columns (Vector):                      Vector columns.      (line   6)
* Command-line arguments:                Arguments and options.
                                                              (line   6)
* Command-line help:                     Getting help.        (line  13)
* Command-line options:                  Arguments and options.
                                                              (line   6)
* Command-line scroll:                   --help.              (line  27)
* Command-line searching text:           --help.              (line  47)
* Command-line user interface:           Command-line interface.
                                                              (line   6)
* Command-line, long outputs:            --help.              (line  22)
* Command-line, viewing full book:       Info.                (line   6)
* Comments:                              Sufi simulates a detection.
                                                              (line 550)
* Commutative property:                  Merging multiple warpings.
                                                              (line   6)
* Comoving distance:                     Distance on a 2D curved space.
                                                              (line 171)
* Compare Moffat and Gaussian:           PSF.                 (line  70)
* Compare Poisson and Gaussian:          Photon counting noise.
                                                              (line  40)
* Compile:                               Quick start.         (line   6)
* Compiled PostScript:                   Recognized file formats.
                                                              (line 102)
* Compiler, C:                           Invoking astbuildprog.
                                                              (line  72)
* Compiling from source:                 Dependencies from package managers.
                                                              (line   6)
* Completeness:                          Extract clumps and objects.
                                                              (line  98)
* Completeness <1>:                      Completeness limit of each detection.
                                                              (line   6)
* Completion in the shell:               Shell TAB completion.
                                                              (line  17)
* Completion in the shell <1>:           Mandatory source code files.
                                                              (line 154)
* Completion in the shell <2>:           Bash programmable completion.
                                                              (line  10)
* Complex numbers:                       Invoking astconvolve.
                                                              (line 114)
* Compression:                           NoiseChisel output.  (line 145)
* Compression <1>:                       Segment output.      (line 107)
* Compression quality in JPEG:           ConvertType input and output.
                                                              (line 129)
* Concave polygons:                      Crop options.        (line 231)
* Concave polygons <1>:                  Polygons.            (line  11)
* Configuration file directories:        Configuration file precedence.
                                                              (line   6)
* Configuration file format:             Configuration file format.
                                                              (line  11)
* Configuration file precedence:         Configuration file precedence.
                                                              (line   6)
* Configuration file suffix:             Configuration file format.
                                                              (line   6)
* Configuration files:                   Options.             (line 101)
* Configuration files <1>:               Configuration files. (line   6)
* Configuration files, system wide:      System wide.         (line   6)
* Configuration files, writing:          Configuration file format.
                                                              (line  33)
* Configuration, not finding library:    Known issues.        (line  11)
* Configure options:                     Configuring.         (line  12)
* Configure options particular to Gnuastro: Gnuastro configure options.
                                                              (line   6)
* Configuring:                           Configuring.         (line   6)
* Conic equal area projection:           Align pixels with WCS considering distortions.
                                                              (line 196)
* Conic equidistant projection:          Align pixels with WCS considering distortions.
                                                              (line 198)
* Conic orthomorphic projection:         Align pixels with WCS considering distortions.
                                                              (line 200)
* Conic perspective projection:          Align pixels with WCS considering distortions.
                                                              (line 194)
* Connected component labeling:          Segment.             (line  17)
* Connected component labeling <1>:      Binary datasets.     (line 129)
* Connected components:                  Mathematical morphology operators.
                                                              (line  81)
* Connectivity:                          Binary datasets.     (line  13)
* Continuum subtraction:                 Continuum subtraction.
                                                              (line   6)
* Contour:                               Contour options.     (line  12)
* Convenient book formats:               Getting help.        (line   6)
* Convention for program source:         Program source.      (line   6)
* Converting data formats:               ConvertType.         (line   6)
* Converting image formats:              ConvertType.         (line   6)
* ConvertType (astconvertt):             ConvertType.         (line   6)
* Convex Hull:                           Polygons.            (line  69)
* Convex polygons:                       Crop options.        (line 231)
* Convex polygons <1>:                   Polygons.            (line  11)
* Convolution:                           Convolve.            (line   6)
* Convolution <1>:                       Convolution process. (line  24)
* Convolution <2>:                       Quantifying signal in a tile.
                                                              (line  70)
* Convolution <3>:                       PSF.                 (line  19)
* Convolution kernel:                    FITS arrays.         (line  68)
* Convolutional Neural Networks:         Pooling operators.   (line   6)
* Cookbook:                              Tutorials.           (line   6)
* Coordinate matching:                   Matching.            (line   6)
* Coordinate scales:                     Angular coverage on the sky.
                                                              (line   6)
* Coordinate system: Ecliptic:           Keyword inspection and manipulation.
                                                              (line 488)
* Coordinate system: Ecliptic <1>:       World Coordinate System.
                                                              (line  50)
* Coordinate system: Equatorial:         Keyword inspection and manipulation.
                                                              (line 488)
* Coordinate system: Equatorial <1>:     World Coordinate System.
                                                              (line  50)
* Coordinate system: Galactic:           Keyword inspection and manipulation.
                                                              (line 488)
* Coordinate system: Galactic <1>:       World Coordinate System.
                                                              (line  50)
* Coordinate system: Supergalactic:      Keyword inspection and manipulation.
                                                              (line 488)
* Coordinate system: Supergalactic <1>:  World Coordinate System.
                                                              (line  50)
* Coordinate transformation:             Linear warping basics.
                                                              (line   6)
* Coordinates, homogeneou:               Linear warping basics.
                                                              (line  63)
* Copyright:                             Your rights.         (line  12)
* Correlated noise:                      NoiseChisel optimization for detection.
                                                              (line  39)
* Correlated noise <1>:                  Measuring the dataset limits.
                                                              (line  70)
* Correlated noise <2>:                  Upper limit magnitude of each detection.
                                                              (line  51)
* Correlated noise <3>:                  Surface brightness limit of image.
                                                              (line  98)
* Correlation:                           Convolution process. (line  24)
* Cosmic ray removal:                    Sky value definition.
                                                              (line  24)
* Cosmic rays:                           Convolve.            (line  25)
* Cosmic rays <1>:                       Warp.                (line  36)
* Cosmic rays <2>:                       Sigma clipping.      (line  22)
* Cosmic rays <3>:                       Sky value definition.
                                                              (line  17)
* Cosmic rays <4>:                       Quantifying signal in a tile.
                                                              (line  81)
* COSMOS survey:                         Crop.                (line  13)
* Cotes, Roger:                          Circles and the complex plane.
                                                              (line  16)
* Counting error:                        Photon counting noise.
                                                              (line   6)
* Counting from zero.:                   Options.             (line 119)
* Counts:                                Instrumental noise.  (line  23)
* Counts <1>:                            Brightness flux magnitude.
                                                              (line   6)
* Covariance matrix:                     Fitting functions.   (line  93)
* Coverage of image over sky:            HDU information and manipulation.
                                                              (line 100)
* CPPFLAGS:                              Known issues.        (line  49)
* CPPFLAGS <1>:                          Headers.             (line 153)
* CPPFLAGS <2>:                          Invoking astbuildprog.
                                                              (line 204)
* CPU threads:                           Multi-threaded operations.
                                                              (line   6)
* CPU threads, number:                   Configuration files. (line  15)
* CPU threads, set number:               Operating mode options.
                                                              (line 292)
* CPU, using all threads:                Multi-threaded operations.
                                                              (line   6)
* CRLF line terminator:                  Text files.          (line  11)
* Crop (astcrop):                        Crop.                (line   6)
* Crop a given section of image:         Crop section syntax. (line   6)
* Crop part of image:                    Crop.                (line   6)
* Crop section format:                   Crop section syntax. (line  27)
* CRVALi:                                Align pixels with WCS considering distortions.
                                                              (line  58)
* CTYPEi:                                Align pixels with WCS considering distortions.
                                                              (line 121)
* Cube (3D) spectra:                     Detecting lines and extracting spectra in 3D data.
                                                              (line   6)
* Cubes (3D data):                       Dimensionality changing operators.
                                                              (line 206)
* Cubes (3D data) <1>:                   Measurements per slice spectra.
                                                              (line   6)
* Cubic spline interpolation:            Interpolation.       (line 104)
* Cumulative Frequency Plot:             Histogram and Cumulative Frequency Plot.
                                                              (line  31)
* cURL (downloading tool):               Optional dependencies.
                                                              (line  97)
* Customize --help output:               --help.              (line  55)
* Customize executable names:            Executable names.    (line  28)
* Customizing installation:              Configuring.         (line  12)
* Cylindrical equal area projection:     Align pixels with WCS considering distortions.
                                                              (line 180)
* Cylindrical perspective projection:    Align pixels with WCS considering distortions.
                                                              (line 178)
* Dark Energy Survey data release 1:     Available databases. (line 177)
* Dark level in detectors:               Photon counting noise.
                                                              (line  77)
* Dark night:                            Random number generators.
                                                              (line 168)
* Dash shell:                            Separate shell variables for multiple outputs.
                                                              (line  85)
* Data:                                  Quantifying signal in a tile.
                                                              (line  18)
* Data cubes:                            Dimensionality changing operators.
                                                              (line 206)
* Data format conversion:                ConvertType.         (line   6)
* Data structures:                       Headers.             (line  89)
* Data type:                             Generic data container.
                                                              (line  70)
* Data’s depth:                          Surface brightness limit of image.
                                                              (line  30)
* Database, Gaia:                        Available databases. (line  92)
* Database, VizieR:                      Available databases. (line 156)
* Dataset: binary:                       Binary datasets.     (line   6)
* DATASUM: FITS keyword:                 HDU information and manipulation.
                                                              (line 148)
* DATASUM: FITS keyword <1>:             Keyword inspection and manipulation.
                                                              (line 269)
* DATASUM: FITS keyword <2>:             FITS HDUs.           (line  28)
* DATASUM: FITS keyword <3>:             FITS HDUs.           (line  37)
* Date: FITS format:                     FITS header keywords.
                                                              (line  93)
* de Moivre, Abraham:                    Photon counting noise.
                                                              (line   6)
* de Moivre, Abraham <1>:                Circles and the complex plane.
                                                              (line  16)
* de Vaucouleur profile:                 Galaxies.            (line  11)
* Debian:                                Dependencies from package managers.
                                                              (line  51)
* Debug:                                 Separate build and source directories.
                                                              (line  36)
* Debug <1>:                             Operating mode options.
                                                              (line 131)
* Debug <2>:                             Invoking astbuildprog.
                                                              (line 145)
* Debugging:                             Gnuastro configure options.
                                                              (line  13)
* Debugging <1>:                         Building and debugging.
                                                              (line  40)
* Decimal digits:                        Printing floating point numbers.
                                                              (line  53)
* Decimal separator:                     Numeric locale.      (line   6)
* Declination:                           Pointings that account for sky curvature.
                                                              (line  55)
* Declination <1>:                       Column arithmetic.   (line 344)
* Declination <2>:                       Arithmetic on datasets.
                                                              (line 191)
* Declination <3>:                       Unit conversion library.
                                                              (line  37)
* Declination <4>:                       Unit conversion library.
                                                              (line  52)
* Default executable search directory:   Installation directory.
                                                              (line  72)
* Default library search directory:      Installation directory.
                                                              (line 164)
* Default option values:                 Options.             (line 101)
* Default option values <1>:             Configuration files. (line   6)
* Define section to crop:                Crop section syntax. (line  12)
* Dependencies, Gnuastro:                Mandatory dependencies.
                                                              (line   6)
* Depth of data:                         Zero point tutorial with reference image.
                                                              (line 294)
* Depth of data <1>:                     Quantifying measurement limits.
                                                              (line   6)
* Depth of data <2>:                     Pointing pattern simulation.
                                                              (line   6)
* Detached threads:                      Gnuastro's thread related functions.
                                                              (line  73)
* Detection:                             Convolve.            (line  25)
* Detection <1>:                         NoiseChisel.         (line   6)
* Detections false:                      Completeness limit of each detection.
                                                              (line  20)
* Detector:                              Resampling.          (line   6)
* developer-build:                       Building and debugging.
                                                              (line  18)
* developer-build <1>:                   Test scripts.        (line  25)
* Development packages:                  Known issues.        (line  11)
* Diagram, Color-magnitude:              2D histogram as an image.
                                                              (line  18)
* Diffraction limited:                   PSF.                 (line   6)
* Dilation:                              Mathematical morphology operators.
                                                              (line  51)
* Dilation <1>:                          Binary datasets.     (line  92)
* Dilation (image processing):           NoiseChisel optimization.
                                                              (line 206)
* Directory, install:                    Installation directory.
                                                              (line 149)
* Discrete Fourier transform:            Invoking astconvolve.
                                                              (line  92)
* Distance, elliptical/ellipsoidal:      Dimensions.          (line 105)
* Distance, Manhattan:                   Dimensions.          (line  91)
* Distortion:                            Pixel information images.
                                                              (line  30)
* Distortion, optical:                   Warp.                (line  47)
* Distortion, WCS:                       Keyword inspection and manipulation.
                                                              (line 545)
* Distortion, WCS <1>:                   World Coordinate System.
                                                              (line  36)
* Distortion, WCS <2>:                   World Coordinate System.
                                                              (line 448)
* Distribution mode:                     Sky value misconceptions.
                                                              (line  22)
* Distributions, GNU/Linux:              Dependencies from package managers.
                                                              (line   6)
* Dithering:                             Pointing pattern design.
                                                              (line   6)
* dnf:                                   Dependencies from package managers.
                                                              (line  86)
* Doppler effect:                        Continuum subtraction.
                                                              (line  71)
* Doublet: CIII:                         Spectral lines library.
                                                              (line  10)
* Doublet: MgII:                         Spectral lines library.
                                                              (line  10)
* Doublet: NII:                          Spectral lines library.
                                                              (line  10)
* Doublet: OII:                          Spectral lines library.
                                                              (line  10)
* Doublet: OIII:                         Spectral lines library.
                                                              (line  10)
* Doublet: SII:                          Spectral lines library.
                                                              (line  10)
* Douglas Rushkoff:                      Science and its tools.
                                                              (line  66)
* Drizzle:                               Resampling.          (line  58)
* DS9:                                   Reddest clumps cutouts and parallelization.
                                                              (line  32)
* DS9 <1>:                               Extract clumps and objects.
                                                              (line  22)
* DS9 <2>:                               Pixel visualization. (line  46)
* DS9 <3>:                               Segment output.      (line  21)
* DSS WCS distortion:                    World Coordinate System.
                                                              (line  36)
* Dynamic libraries:                     Installation directory.
                                                              (line 194)
* Dynamic linking:                       Linking.             (line  38)
* Dynamic linking <1>:                   Linking.             (line  64)
* e (base of natural logarithm):         Constants.           (line  13)
* Ecliptic coordinate system:            Keyword inspection and manipulation.
                                                              (line 488)
* Ecliptic coordinate system <1>:        Coordinate conversion operators.
                                                              (line   6)
* Ecliptic coordinate system <2>:        World Coordinate System.
                                                              (line  50)
* Edges, image:                          Resampling.          (line  38)
* Effective radius:                      Morphology measurements nonparametric.
                                                              (line 126)
* Effective radius <1>:                  Galaxies.            (line  11)
* Efficient use of CPU threads:          A note on threads.   (line   6)
* Ellipse:                               Defining an ellipse and ellipsoid.
                                                              (line   6)
* Ellipse <1>:                           Dimensions.          (line 105)
* Ellipse area:                          Morphology measurements nonparametric.
                                                              (line 121)
* Ellipsoid:                             Defining an ellipse and ellipsoid.
                                                              (line  35)
* Ellipsoid <1>:                         Dimensions.          (line 105)
* Ellipsoidal distance:                  Dimensions.          (line 105)
* Elliptical distance:                   Defining an ellipse and ellipsoid.
                                                              (line  28)
* Elliptical distance <1>:               Dimensions.          (line 105)
* Emacs buffers:                         Coding conventions.  (line  41)
* Encapsulated PostScript:               Recognized file formats.
                                                              (line  66)
* Environment:                           Installation directory.
                                                              (line  52)
* Environment variable, HOME:            Installation directory.
                                                              (line  65)
* Environment variables:                 Installation directory.
                                                              (line  38)
* Environment variables <1>:             Installation directory.
                                                              (line  52)
* Environment variables <2>:             Generating random numbers.
                                                              (line  26)
* Epoch time, Unix:                      FITS header keywords.
                                                              (line 119)
* Epoch, Unix time:                      Keyword inspection and manipulation.
                                                              (line 464)
* Epoch, Unix time <1>:                  Column arithmetic.   (line 349)
* Epoch, Unix time <2>:                  Sort FITS files by night.
                                                              (line  26)
* EPS:                                   Recognized file formats.
                                                              (line  66)
* EPS <1>:                               Pixel visualization. (line 139)
* EPS <2>:                               EPS files.           (line 105)
* EPS <3>:                               PDF files.           (line  52)
* Equatorial coordinate system:          Keyword inspection and manipulation.
                                                              (line 488)
* Equatorial coordinate system <1>:      Coordinate conversion operators.
                                                              (line   6)
* Equatorial coordinate system <2>:      World Coordinate System.
                                                              (line  50)
* Erosion:                               Mathematical morphology operators.
                                                              (line  21)
* Erosion <1>:                           NoiseChisel.         (line  34)
* Erosion <2>:                           Detection options.   (line 194)
* Erosion <3>:                           Binary datasets.     (line  77)
* Erosion (image processing):            NoiseChisel optimization.
                                                              (line 194)
* Error in surface brightness:           Surface brightness error of each detection.
                                                              (line   6)
* Error, floating point round-off:       Invoking astconvolve.
                                                              (line 128)
* etc:                                   Configuration files. (line   6)
* Euler angles:                          Defining an ellipse and ellipsoid.
                                                              (line  35)
* Euler angles <1>:                      Bounding box.        (line  69)
* Euler’s number ($e$):                  Constants.           (line  13)
* Euler, Leonhard:                       Circles and the complex plane.
                                                              (line  16)
* eval to evaluate string as command:    Separate shell variables for multiple outputs.
                                                              (line  52)
* Evaluate string as command (eval):     Separate shell variables for multiple outputs.
                                                              (line  52)
* Exact area resampling:                 Resampling.          (line  58)
* Executable names:                      Executable names.    (line   6)
* Exposure map:                          Pointing pattern simulation.
                                                              (line  53)
* Exposure time:                         Brightness flux magnitude.
                                                              (line 125)
* eXtreme Deep Field (XDF) survey:       General program usage tutorial.
                                                              (line  25)
* eXtreme Deep Field (XDF) survey <1>:   Surface brightness limit of image.
                                                              (line  52)
* Fair function (robust weight):         Fitting options.     (line 129)
* False color:                           Pixel colors.        (line  22)
* False detections:                      Completeness limit of each detection.
                                                              (line  20)
* Feature request:                       Gnuastro project webpage.
                                                              (line   6)
* Feature requests:                      Suggest new feature. (line   6)
* Fedora:                                Dependencies from package managers.
                                                              (line  86)
* File flags:                            Writing scripts to automate the steps.
                                                              (line 116)
* File I/O:                              Configure and build in RAM.
                                                              (line   6)
* File operations:                       Data containers.     (line   6)
* File system Hierarchy Standard:        Configuration files. (line   6)
* file systems, tmpfs:                   Configure and build in RAM.
                                                              (line  23)
* Filename suffix:                       Arguments.           (line  13)
* Filter:                                Color.               (line   6)
* Filter transmission curve:             Zero point of an image.
                                                              (line  20)
* Fine structure constant:               Constants.           (line  46)
* first-in-first-out:                    Linked lists.        (line  47)
* first-in-first-out <1>:                FITS header keywords.
                                                              (line  23)
* first-in-first-out <2>:                Interpolation.       (line 181)
* FITS:                                  Output FITS files.   (line   6)
* FITS <1>:                              FITS files.          (line   6)
* FITS filename suffixes:                Arguments.           (line  13)
* FITS image viewer:                     SAO DS9.             (line   6)
* FITS or FITS/TXT:                      Options.             (line  51)
* FITS standard:                         CFITSIO.             (line   6)
* FITS standard <1>:                     Linear warps to be called explicitly.
                                                              (line  43)
* FITS standard <2>:                     Generic data container.
                                                              (line  78)
* FITS Tables:                           Recognized table formats.
                                                              (line  19)
* Fitting:                               Data modeling.       (line   6)
* Fitting <1>:                           Fitting functions.   (line   6)
* Fitting (least squares):               Least squares fitting.
                                                              (line   6)
* Fitting (polynomial):                  Fitting functions.   (line 151)
* FK5:                                   Keyword inspection and manipulation.
                                                              (line 488)
* Flag (mask) images:                    Bitwise operators.   (line  26)
* Flags, file:                           Writing scripts to automate the steps.
                                                              (line 116)
* Flat field:                            Preparing input and generating exposure map.
                                                              (line 159)
* Flattening (CNNs):                     Dimensionality changing operators.
                                                              (line  55)
* Flip coordinates:                      Linear warping basics.
                                                              (line  30)
* Floating point error:                  Measuring elliptical parameters.
                                                              (line  47)
* Floating point numbers:                Printing floating point numbers.
                                                              (line   6)
* Floating point round-off error:        Invoking astconvolve.
                                                              (line 128)
* FLT:                                   Options.             (line  38)
* Flux:                                  Brightness flux magnitude.
                                                              (line  14)
* Flux to magnitude conversion:          Brightness flux magnitude.
                                                              (line  40)
* Fonts:                                 Drawing with vector graphics.
                                                              (line 303)
* Foreground pixels:                     Detection options.   (line  69)
* FORTRAN:                               Generic data container.
                                                              (line  78)
* Fourier spectrum:                      Invoking astconvolve.
                                                              (line 114)
* Free software:                         Your rights.         (line  12)
* Free Software Foundation:              Contributing to Gnuastro.
                                                              (line  16)
* Free Software Foundation <1>:          Copyright assignment.
                                                              (line   6)
* FSF:                                   Contributing to Gnuastro.
                                                              (line  16)
* Full Width at Half Maximum:            PSF.                 (line  31)
* Function gradient over pixel area:     Sampling from a function.
                                                              (line  16)
* Function groups:                       Coding conventions.  (line 153)
* Functions for user interface:          Mandatory source code files.
                                                              (line 102)
* FWHM:                                  NoiseChisel optimization for detection.
                                                              (line 104)
* FWHM <1>:                              Morphology measurements nonparametric.
                                                              (line  49)
* FWHM <2>:                              PSF.                 (line  31)
* Gaia catalog:                          Available databases. (line  92)
* GAIA Data Release (2 or 3):            Available databases. (line 177)
* Gain:                                  Instrumental noise.  (line  23)
* Gain <1>:                              Brightness flux magnitude.
                                                              (line   6)
* Galactic coordinate system:            Keyword inspection and manipulation.
                                                              (line 488)
* Galactic coordinate system <1>:        Coordinate conversion operators.
                                                              (line   6)
* Galactic coordinate system <2>:        World Coordinate System.
                                                              (line  50)
* Galaxy kinematics:                     Continuum subtraction.
                                                              (line  71)
* Galaxy profiles:                       Galaxies.            (line   6)
* Galileo, Galilei:                      Science and its tools.
                                                              (line 124)
* Gaussian:                              Invoking astnoisechisel.
                                                              (line  28)
* Gaussian <1>:                          Invoking astsegment. (line  31)
* Gaussian <2>:                          Invoking astmkcatalog.
                                                              (line  33)
* Gaussian distribution:                 Quantifying signal in a tile.
                                                              (line  18)
* Gaussian distribution <1>:             PSF.                 (line  41)
* Gaussian FWHM:                         PSF.                 (line  54)
* Gaussian noise:                        Least squares fitting.
                                                              (line  36)
* GCC:                                   Invoking astbuildprog.
                                                              (line 204)
* GCC: GNU Compiler Collection:          New to GNU/Linux?.   (line  40)
* GCC: GNU Compiler Collection <1>:      Summary and example on libraries.
                                                              (line  30)
* GCC: GNU Compiler Collection <2>:      Invoking astbuildprog.
                                                              (line  72)
* GCC: GNU Compiler Collection <3>:      Invoking astbuildprog.
                                                              (line 128)
* GCC: GNU Compiler Collection <4>:      Coding conventions.  (line  34)
* Gedit:                                 Sufi simulates a detection.
                                                              (line 562)
* General file operations:               Data containers.     (line   6)
* Generalized de Vaucouleur profile:     Galaxies.            (line   6)
* Ghostscript fonts:                     Drawing with vector graphics.
                                                              (line 303)
* Git:                                   Optional dependencies.
                                                              (line  68)
* Git <1>:                               Version controlled source.
                                                              (line   6)
* Git <2>:                               Gnuastro configure options.
                                                              (line  99)
* Git <3>:                               Table input output.  (line 226)
* Git <4>:                               Git wrappers.        (line   6)
* Global warming:                        Separate shell variables for multiple outputs.
                                                              (line  30)
* GNOME:                                 NoiseChisel output.  (line  37)
* GNOME 3:                               Command-line interface.
                                                              (line  19)
* Gnomonic (tangential) projection:      Align pixels with WCS considering distortions.
                                                              (line 164)
* Gnomonic projection (TAN in WCS):      Area of non-blank pixels on sky.
                                                              (line  44)
* GNU Astronomy Utilities (Gnuastro):    Introduction.        (line   6)
* GNU Autoconf:                          Bootstrapping dependencies.
                                                              (line  72)
* GNU Autoconf <1>:                      Bootstrapping.       (line  71)
* GNU Autoconf <2>:                      Synchronizing.       (line  29)
* GNU Autoconf <3>:                      Configuring.         (line  21)
* GNU Autoconf <4>:                      Building and debugging.
                                                              (line   6)
* GNU Autoconf Archive:                  Bootstrapping dependencies.
                                                              (line  81)
* GNU Autoconf Archive <1>:              Bootstrapping.       (line   6)
* GNU Automake:                          Bootstrapping dependencies.
                                                              (line  61)
* GNU Automake <1>:                      Bootstrapping.       (line  71)
* GNU Automake <2>:                      Building and debugging.
                                                              (line   6)
* GNU Autoreconf:                        Separate build and source directories.
                                                              (line  85)
* GNU AWK:                               Angular coverage on the sky.
                                                              (line 146)
* GNU AWK <1>:                           Aperture photometry. (line  15)
* GNU AWK <2>:                           Reddest clumps cutouts and parallelization.
                                                              (line   6)
* GNU AWK <3>:                           Extract clumps and objects.
                                                              (line  71)
* GNU AWK <4>:                           Standard input.      (line  41)
* GNU AWK <5>:                           Table.               (line  23)
* GNU AWK <6>:                           Invoking asttable.   (line 148)
* GNU AWK <7>:                           Invoking astarithmetic.
                                                              (line 271)
* GNU AWK <8>:                           Invoking aststatistics.
                                                              (line 114)
* GNU AWK <9>:                           Single value measurements.
                                                              (line 144)
* GNU AWK <10>:                          Installed scripts.   (line  51)
* GNU AWK <11>:                          Sort FITS files by night.
                                                              (line  66)
* GNU AWK <12>:                          Table input output.  (line 181)
* GNU Bash:                              Command-line interface.
                                                              (line  53)
* GNU Bash <1>:                          Writing scripts to automate the steps.
                                                              (line  26)
* GNU Bash <2>:                          Installation directory.
                                                              (line 112)
* GNU Bash <3>:                          Installation directory.
                                                              (line 122)
* GNU Bash <4>:                          Installed scripts.   (line  15)
* GNU Bash <5>:                          Program design philosophy.
                                                              (line  27)
* GNU Bash <6>:                          Mandatory source code files.
                                                              (line 154)
* GNU Binutils:                          Linking.             (line  16)
* GNU build system:                      Mandatory dependencies.
                                                              (line   6)
* GNU build system <1>:                  Bootstrapping.       (line  71)
* GNU build system <2>:                  Installation directory.
                                                              (line 149)
* GNU build system <3>:                  Configure and build in RAM.
                                                              (line  34)
* GNU build system <4>:                  Separate build and source directories.
                                                              (line  13)
* GNU build system <5>:                  Headers.             (line 153)
* GNU build system <6>:                  Headers.             (line 162)
* GNU build system <7>:                  Building and debugging.
                                                              (line   6)
* GNU C library:                         New to GNU/Linux?.   (line  40)
* GNU C library <1>:                     Bootstrapping dependencies.
                                                              (line  28)
* GNU C library <2>:                     Bootstrapping.       (line  71)
* GNU C library <3>:                     Gnuastro configure options.
                                                              (line  72)
* GNU C library <4>:                     Configure and build in RAM.
                                                              (line  34)
* GNU C library <5>:                     Info.                (line  28)
* GNU C Library:                         Keyword inspection and manipulation.
                                                              (line 473)
* GNU C library <6>:                     Adding new columns to MakeCatalog.
                                                              (line  61)
* GNU C library <7>:                     Linking.             (line 112)
* GNU C library <8>:                     Labeled datasets.    (line 266)
* GNU C library <9>:                     Coding conventions.  (line  83)
* GNU C library <10>:                    Mandatory source code files.
                                                              (line  69)
* GNU coding standards:                  Introduction.        (line   6)
* GNU coding standards <1>:              Coding conventions.  (line   6)
* GNU coding standards <2>:              Coding conventions.  (line 132)
* GNU Compiler Collection (GCC):         New to GNU/Linux?.   (line  40)
* GNU Compiler Collection (GCC) <1>:     Summary and example on libraries.
                                                              (line  30)
* GNU Compiler Collection (GCC) <2>:     Invoking astbuildprog.
                                                              (line  72)
* GNU Compiler Collection (GCC) <3>:     Invoking astbuildprog.
                                                              (line 128)
* GNU Compiler Collection (GCC) <4>:     Coding conventions.  (line  34)
* GNU Coreutils:                         Multi-threaded operations.
                                                              (line   6)
* GNU Coreutils <1>:                     Invoking asttable.   (line 561)
* GNU Coreutils <2>:                     Program design philosophy.
                                                              (line  18)
* GNU CPP:                               Invoking astbuildprog.
                                                              (line  89)
* GNU Debugger:                          Gnuastro configure options.
                                                              (line  13)
* GNU Debugger (GDB):                    Separate build and source directories.
                                                              (line  95)
* GNU Emacs:                             Command-line interface.
                                                              (line  76)
* GNU Emacs <1>:                         Sufi simulates a detection.
                                                              (line 562)
* GNU Emacs <2>:                         Info.                (line  28)
* GNU Emacs <3>:                         Coding conventions.  (line 146)
* GNU Emacs <4>:                         Coding conventions.  (line 153)
* GNU Emacs <5>:                         Coding conventions.  (line 192)
* GNU free documentation license:        Science and its tools.
                                                              (line 105)
* GNU Free Documentation License:        Your rights.         (line  40)
* GNU Free Documentation License <1>:    GNU Free Doc License.
                                                              (line   6)
* GNU General Public License (GPL):      Science and its tools.
                                                              (line 105)
* GNU General Public License (GPL) <1>:  Your rights.         (line  40)
* GNU General Public License (GPL) <2>:  GNU General Public License.
                                                              (line   6)
* GNU Grep:                              --help.              (line  47)
* GNU Grep <1>:                          Keyword inspection and manipulation.
                                                              (line 147)
* GNU Grep <2>:                          CosmicCalculator basic cosmology calculations.
                                                              (line  32)
* GNU Grep <3>:                          The TEMPLATE program.
                                                              (line  80)
* GNU Gzip:                              NoiseChisel output.  (line 154)
* GNU Gzip <1>:                          Segment output.      (line 113)
* GNU help2man:                          Bootstrapping dependencies.
                                                              (line 117)
* GNU Info:                              Accessing documentation.
                                                              (line  18)
* GNU Info <1>:                          Info.                (line   6)
* GNU Libtool:                           Optional dependencies.
                                                              (line  29)
* GNU Libtool <1>:                       Bootstrapping dependencies.
                                                              (line 105)
* GNU Libtool <2>:                       Bootstrapping.       (line  71)
* GNU Libtool <3>:                       Known issues.        (line  92)
* GNU Libtool <4>:                       Linking.             (line   6)
* GNU Libtool <5>:                       Linking.             (line  64)
* GNU Libtool <6>:                       Linking.             (line 147)
* GNU Libtool <7>:                       BuildProgram.        (line  15)
* GNU Libtool <8>:                       Invoking astbuildprog.
                                                              (line 107)
* GNU Libtool <9>:                       Building and debugging.
                                                              (line   6)
* GNU Make:                              Reddest clumps cutouts and parallelization.
                                                              (line  78)
* GNU Make <1>:                          Optional dependencies.
                                                              (line  58)
* GNU Make <2>:                          How to run simultaneous operations.
                                                              (line  65)
* GNU Make <3>:                          Makefile extensions. (line  13)
* GNU Make <4>:                          Invoking astbuildprog.
                                                              (line  64)
* GNU Parallel:                          How to run simultaneous operations.
                                                              (line  15)
* GNU Portability Library (Gnulib):      Bootstrapping dependencies.
                                                              (line  28)
* GNU Portability Library (Gnulib) <1>:  Bootstrapping.       (line   6)
* GNU Portability Library (Gnulib) <2>:  Gnuastro configure options.
                                                              (line  72)
* GNU Portability Library (Gnulib) <3>:  Known issues.        (line  37)
* GNU Portability Library (Gnulib) <4>:  Coding conventions.  (line  83)
* GNU Savannah:                          Gnuastro project webpage.
                                                              (line   6)
* GNU Scientific Library:                GNU Scientific Library.
                                                              (line   6)
* GNU Scientific Library <1>:            Generating random numbers.
                                                              (line  26)
* GNU Scientific Library <2>:            Least squares fitting.
                                                              (line  16)
* GNU Scientific Library <3>:            Permutations.        (line  16)
* GNU Scientific Library <4>:            Interpolation.       (line  16)
* GNU Scientific Library <5>:            Interpolation.       (line 138)
* GNU SED:                               Installed scripts.   (line  51)
* GNU Sed:                               Sort FITS files by night.
                                                              (line  66)
* GNU software documentation:            Info.                (line  22)
* GNU style options:                     Options.             (line   6)
* GNU Tar:                               Quick start.         (line   6)
* GNU Texinfo:                           Your rights.         (line   6)
* GNU Texinfo <1>:                       Bootstrapping dependencies.
                                                              (line  93)
* GNU Texinfo <2>:                       Bootstrapping.       (line  71)
* GNU Texinfo <3>:                       A4 print book.       (line  13)
* GNU Texinfo <4>:                       Known issues.        (line  87)
* GNU Wget:                              Downloading and validating input data.
                                                              (line  19)
* GNU/Linux:                             New to GNU/Linux?.   (line  40)
* Gnuastro coding convention:            Coding conventions.  (line   6)
* Gnuastro common options:               Common options.      (line   6)
* Gnuastro major version number:         GNU Astronomy Utilities 1.0.
                                                              (line   6)
* Gnuastro program structure convention: Program source.      (line   6)
* Gnuastro project page:                 Report a bug.        (line  84)
* Gnuastro test scripts:                 Test scripts.        (line   6)
* Gnulib:                                Program design philosophy.
                                                              (line   6)
* Gnulib: GNU Portability Library:       Bootstrapping dependencies.
                                                              (line  28)
* Gnulib: GNU Portability Library <1>:   Bootstrapping.       (line   6)
* Gnulib: GNU Portability Library <2>:   Gnuastro configure options.
                                                              (line  72)
* Gnulib: GNU Portability Library <3>:   Known issues.        (line  37)
* Gnulib: GNU Portability Library <4>:   Coding conventions.  (line  83)
* GPL:                                   GNU General Public License.
                                                              (line   6)
* GPL Ghostscript:                       Optional dependencies.
                                                              (line  13)
* GPL Ghostscript <1>:                   Optional dependencies.
                                                              (line 106)
* GPL Ghostscript <2>:                   Known issues.        (line  78)
* GPL Ghostscript <3>:                   Recognized file formats.
                                                              (line 113)
* Gradient over pixel area:              Sampling from a function.
                                                              (line  16)
* Graphic user interface:                Command-line interface.
                                                              (line   6)
* Graphics (raster):                     Raster and Vector graphics.
                                                              (line   6)
* Graphics (vector):                     Raster and Vector graphics.
                                                              (line  14)
* Gravitational constant ($g$):          Constants.           (line  26)
* Gravitational lensing:                 Warp.                (line  13)
* Gray night:                            Random number generators.
                                                              (line 168)
* Grayscale:                             Colormaps for single-channel pixels.
                                                              (line  23)
* Great circle:                          Box shape operators. (line 118)
* Groups of similar functions:           Coding conventions.  (line 153)
* GSL:                                   Least squares fitting.
                                                              (line  16)
* GUI: graphic user interface:           Command-line interface.
                                                              (line   6)
* GUI: repeating operations:             Command-line interface.
                                                              (line  44)
* Gzip:                                  Quick start.         (line   6)
* Gzip <1>:                              Release tarball.     (line  37)
* Gérard de Vaucouleurs:                 Galaxies.            (line  11)
* H-alpha:                               Viewing spectra and redshifted lines.
                                                              (line  70)
* H-alpha <1>:                           Spectral lines library.
                                                              (line  10)
* H-beta:                                Viewing spectra and redshifted lines.
                                                              (line 151)
* H-beta <1>:                            Spectral lines library.
                                                              (line  10)
* H-delta:                               Spectral lines library.
                                                              (line  10)
* H-epsilon:                             Spectral lines library.
                                                              (line  10)
* H-gamma:                               Spectral lines library.
                                                              (line  10)
* Halted program:                        Report a bug.        (line   6)
* Hammer-Aitoff projection:              Align pixels with WCS considering distortions.
                                                              (line 192)
* Hashbang:                              Writing scripts to automate the steps.
                                                              (line  78)
* HDD:                                   Configure and build in RAM.
                                                              (line  12)
* HDU:                                   Arguments and options.
                                                              (line  53)
* HDU <1>:                               Input output options.
                                                              (line  35)
* HDU <2>:                               Invoking astfits.    (line  43)
* Header data unit:                      Arguments and options.
                                                              (line  53)
* Header data unit <1>:                  Input output options.
                                                              (line  35)
* Header file:                           Coding conventions.  (line  67)
* HEALPix:                               Invoking astfits.    (line  43)
* HEALPix <1>:                           FITS HDUs.           (line  52)
* HEALPix polar projection:              Align pixels with WCS considering distortions.
                                                              (line 214)
* HEALPix projection:                    Align pixels with WCS considering distortions.
                                                              (line 212)
* Help:                                  Getting help.        (line   6)
* help-gnuastro mailing list:            help-gnuastro mailing list.
                                                              (line   6)
* help-gnuastro@gnu.org:                 help-gnuastro mailing list.
                                                              (line  13)
* Hexadecimal encoding:                  ConvertType input and output.
                                                              (line 113)
* Hexadecimal encoding <1>:              EPS files.           (line  98)
* Hipparchus of Nicaea:                  Brightness flux magnitude.
                                                              (line  48)
* Histogram:                             Histogram and Cumulative Frequency Plot.
                                                              (line   6)
* Histogram <1>:                         Sky value misconceptions.
                                                              (line  22)
* Histogram <2>:                         Statistical operations.
                                                              (line 334)
* Histogram, 2D:                         Column statistics color-magnitude diagram.
                                                              (line  32)
* Histogram, 2D <1>:                     2D Histograms.       (line   6)
* Histogram, 2D <2>:                     Statistical operations.
                                                              (line 360)
* history:                               Writing scripts to automate the steps.
                                                              (line  15)
* HOME:                                  Installation directory.
                                                              (line  65)
* HOME/.local/:                          Installation directory.
                                                              (line  65)
* Homebrew:                              Dependencies from package managers.
                                                              (line 116)
* Homogeneous coordinates:               Linear warping basics.
                                                              (line  63)
* Homography:                            Linear warping basics.
                                                              (line  93)
* Hook (programming):                    Larger steps sizes for better calibration.
                                                              (line  86)
* Hook (programming) <1>:                Accounting for non-exposed pixels.
                                                              (line  24)
* HSV: Hue Saturation Value:             Colormaps for single-channel pixels.
                                                              (line   6)
* HSV: Hue Saturation Value <1>:         Pixel visualization. (line  28)
* Hubble Space Telescope (HST):          General program usage tutorial.
                                                              (line   6)
* Hubble Space Telescope (HST) <1>:      Tessellation.        (line  54)
* Hubble Space Telescope (HST) <2>:      Crop.                (line  13)
* Hubble Space Telescope (HST) <3>:      Warp.                (line  53)
* Hubble Space Telescope (HST) <4>:      Linear warping basics.
                                                              (line  51)
* Huber function (robust weight):        Fitting options.     (line 132)
* Hue, saturation, value:                Pixel visualization. (line  28)
* Hyper Suprime-Cam:                     Tessellation.        (line  54)
* Hyperbolic functions:                  Trigonometric and hyperbolic operators.
                                                              (line  57)
* Hyperspectral imaging:                 Detecting lines and extracting spectra in 3D data.
                                                              (line   6)
* IAU, international astronomical union: Fits.                (line  13)
* ICRS:                                  Coordinate conversion operators.
                                                              (line  55)
* Identifying outliers:                  Quantifying signal in a tile.
                                                              (line 134)
* IEEE 754:                              Invoking asttable.   (line 770)
* IEEE 754 <1>:                          Invoking asttable.   (line 811)
* IEEE 754 (floating point):             Printing floating point numbers.
                                                              (line  42)
* IFU:                                   Detecting lines and extracting spectra in 3D data.
                                                              (line   6)
* IFU: Integral Field Unit:              Dimensionality changing operators.
                                                              (line 206)
* IFU: Integral Field Unit <1>:          Morphology measurements nonparametric.
                                                              (line  42)
* IFU: Integral Field Unit <2>:          Measurements per slice spectra.
                                                              (line   6)
* Image:                                 Pixel colors.        (line   6)
* Image annotation:                      Annotations for figure in paper.
                                                              (line   6)
* Image blurring:                        PSF.                 (line  19)
* Image edges:                           Resampling.          (line  38)
* Image format conversion:               ConvertType.         (line   6)
* Image mosaic:                          Crop.                (line  13)
* Image mosaic <1>:                      Warp.                (line  29)
* Image noise:                           Noise basics.        (line   6)
* Image tiles:                           Crop.                (line  13)
* Image transformations:                 MakeProfiles.        (line  41)
* Image’s sky coverage:                  HDU information and manipulation.
                                                              (line 100)
* ImageMagick:                           Bootstrapping dependencies.
                                                              (line 165)
* Imaging surveys:                       Crop.                (line  13)
* Immediate neighbors:                   Binary datasets.     (line  13)
* Inconsistent results:                  Report a bug.        (line   6)
* Individual profiles:                   MakeProfiles output dataset.
                                                              (line 167)
* info-gnuastro@gnu.org:                 Synchronizing.       (line  29)
* INFOPATH:                              Installation directory.
                                                              (line 164)
* Input/Output, file:                    Configure and build in RAM.
                                                              (line   6)
* Inside-out construction:               Defining an ellipse and ellipsoid.
                                                              (line  68)
* Inside-out construction <1>:           Sampling from a function.
                                                              (line  44)
* Install directory:                     Installation directory.
                                                              (line 149)
* Install with no superuser access:      Installation directory.
                                                              (line   6)
* Installation:                          Installation.        (line   6)
* Installation, customizing:             Configuring.         (line  12)
* Installed help methods:                Getting help.        (line  22)
* Instrumental noise:                    Instrumental noise.  (line   6)
* INT:                                   Options.             (line  35)
* Integer overflow:                      Integer benefits and pitfalls.
                                                              (line  57)
* Integer, Signed:                       Numeric data types.  (line  16)
* Integral field unit:                   Detecting lines and extracting spectra in 3D data.
                                                              (line   6)
* Integral Field Unit:                   Morphology measurements nonparametric.
                                                              (line  42)
* Integral field unit (IFU):             Dimensionality changing operators.
                                                              (line 206)
* Integral field unit (IFU) <1>:         Measurements per slice spectra.
                                                              (line   6)
* Integration over pixel:                Sampling from a function.
                                                              (line  16)
* Integration to infinity:               Profile magnitude.   (line  15)
* Internal default value:                Configuration files. (line  15)
* Internally stored option value:        Multi-threaded operations.
                                                              (line  16)
* Interpolation:                         Resampling.          (line  23)
* Interpolation <1>:                     Interpolation.       (line   6)
* Interpolation, bi-linear:              Resampling.          (line  23)
* Interpolation, bicubic:                Resampling.          (line  23)
* Interpolation, bicubic <1>:            Quantifying signal in a tile.
                                                              (line 152)
* Interpolation, nearest-neighbor:       Quantifying signal in a tile.
                                                              (line 152)
* Interpolation: Akima spline:           Interpolation.       (line 118)
* Interpolation: monotonic:              Interpolation.       (line 126)
* Interpolation: Polynomial:             Interpolation.       (line  98)
* Interpolation: Spline:                 Interpolation.       (line 104)
* Interpolation: Steffen:                Interpolation.       (line 126)
* Intervals, histogram:                  Histogram and Cumulative Frequency Plot.
                                                              (line  21)
* IRAF:                                  Recognized file formats.
                                                              (line  15)
* ISO C90:                               Why C.               (line  15)
* Issue:                                 Gnuastro project webpage.
                                                              (line   6)
* iTerm:                                 Drawing with vector graphics.
                                                              (line 268)
* IVOA:                                  Query.               (line   6)
* Jansky (Jy):                           Unit conversion library.
                                                              (line 103)
* Janskys (Jy):                          Brightness flux magnitude.
                                                              (line  77)
* Java programming language:             Why C.               (line   6)
* Java Virtual Machine (JVM):            Why C.               (line  71)
* Jaynes E. T.:                          Science and its tools.
                                                              (line 212)
* Johnson filters:                       Zero point of an image.
                                                              (line  20)
* Johnson vs. SDSS filters:              Zero point of an image.
                                                              (line  20)
* JPEG compression quality:              ConvertType input and output.
                                                              (line 129)
* JPEG compression quality <1>:          JPEG files.          (line  45)
* JPEG format:                           Optional dependencies.
                                                              (line  76)
* JPEG format <1>:                       Gnuastro configure options.
                                                              (line 105)
* JPEG format <2>:                       Recognized file formats.
                                                              (line  29)
* JPEG format <3>:                       JPEG files.          (line   6)
* JVM: Java virtual machine:             Why C.               (line  71)
* K-d tree:                              K-d tree.            (line   6)
* k-d tree matching:                     Matching.            (line 117)
* Ken Thomson:                           Science and its tools.
                                                              (line 172)
* Kernel, convolution:                   Convolve.            (line   6)
* Kernel, convolution <1>:               FITS arrays.         (line  68)
* Kernel, Linux:                         Memory management.   (line 167)
* Kernighan, Brian:                      Why C.               (line  15)
* Kinematics (galaxies):                 Continuum subtraction.
                                                              (line  71)
* Labeling:                              NoiseChisel.         (line   6)
* Language of command-line:              Numeric locale.      (line   6)
* Large astronomical images:             Crop.                (line   6)
* last-in-first-out:                     Linked lists.        (line  47)
* last-in-first-out <1>:                 FITS header keywords.
                                                              (line  23)
* LaTeX:                                 Bootstrapping dependencies.
                                                              (line 126)
* LaTeX <1>:                             Recognized file formats.
                                                              (line  77)
* LaTeX <2>:                             Program design philosophy.
                                                              (line  27)
* Lawrence Livermore National Laboratory: Multithreaded programming.
                                                              (line  20)
* LC_ALL:                                Numeric locale.      (line   6)
* LC_NUMERIC:                            Numeric locale.      (line   6)
* LDFLAGS:                               Known issues.        (line  24)
* LDFLAGS <1>:                           Invoking astbuildprog.
                                                              (line 204)
* LD_LIBRARY_PATH:                       Installation directory.
                                                              (line 164)
* LD_LIBRARY_PATH <1>:                   Known issues.        (line  62)
* LD_LIBRARY_PATH <2>:                   PGPLOT.              (line  62)
* Learning GNU Info:                     Info.                (line  22)
* Least squares fitting:                 Least squares fitting.
                                                              (line   6)
* Least squares fitting <1>:             Fitting functions.   (line   6)
* Lensing simulations:                   MakeProfiles.        (line  41)
* Leonhard Euler:                        Circles and the complex plane.
                                                              (line  16)
* less:                                  --help.              (line  33)
* libgit2:                               Optional dependencies.
                                                              (line  68)
* libgit2 <1>:                           Gnuastro configure options.
                                                              (line  99)
* libgit2 <2>:                           Git wrappers.        (line   6)
* libjpeg:                               Optional dependencies.
                                                              (line  76)
* libjpeg <1>:                           Gnuastro configure options.
                                                              (line 105)
* Library search directory:              Installation directory.
                                                              (line 164)
* Library: shared:                       Linking.             (line  64)
* libtiff:                               Optional dependencies.
                                                              (line  88)
* libtiff <1>:                           Gnuastro configure options.
                                                              (line 111)
* Light year:                            Constants.           (line  38)
* Light-year:                            Unit conversion operators.
                                                              (line 159)
* Light-year <1>:                        Unit conversion library.
                                                              (line 137)
* Limit, object/clump magnitude:         Quantifying measurement limits.
                                                              (line   6)
* Limit, surface brightness:             Image surface brightness limit.
                                                              (line   6)
* Limit, surface brightness <1>:         Surface brightness limit of image.
                                                              (line  38)
* Limit, Surface brightness:             MakeCatalog output.  (line  31)
* Line terminator, CRLF:                 Text files.          (line  11)
* Linear spatial filtering:              Convolution process. (line  16)
* Linked list:                           Linked lists.        (line   6)
* Linked list <1>:                       FITS header keywords.
                                                              (line  23)
* Linking:                               Linking.             (line  31)
* Linking: Dynamic:                      Linking.             (line  38)
* Linking: dynamic:                      Linking.             (line  64)
* Linking: Static:                       Linking.             (line  38)
* Linux:                                 New to GNU/Linux?.   (line  40)
* Linux kernel:                          Configure and build in RAM.
                                                              (line  34)
* Linux kernel <1>:                      Memory management.   (line 167)
* Linux Mint:                            Dependencies from package managers.
                                                              (line  51)
* Locale:                                Numeric locale.      (line   6)
* Long option abbreviation:              Options.             (line  73)
* Long outputs:                          --help.              (line  22)
* Lord Kelvin:                           Science and its tools.
                                                              (line 188)
* Lorentzian function (robust weight):   Fitting options.     (line 125)
* Low level programming:                 Why C.               (line 105)
* Luminosity:                            Brightness flux magnitude.
                                                              (line  14)
* Lyman limit:                           Spectral lines library.
                                                              (line  10)
* Lyman-alpha:                           Spectral lines library.
                                                              (line  10)
* Lzip:                                  Quick start.         (line   6)
* Lzip <1>:                              Release tarball.     (line  37)
* M51:                                   Detecting large extended targets.
                                                              (line  26)
* macOS:                                 Dependencies from package managers.
                                                              (line 116)
* macOS terminal 24-bit color:           Drawing with vector graphics.
                                                              (line 268)
* MacPorts:                              Dependencies from package managers.
                                                              (line 116)
* Macro:                                 Headers.             (line  89)
* Magnitude:                             Unit conversion library.
                                                              (line  60)
* Magnitude <1>:                         Unit conversion library.
                                                              (line  66)
* Magnitude <2>:                         Unit conversion library.
                                                              (line  72)
* Magnitude (nanomaggy):                 Unit conversion library.
                                                              (line 117)
* Magnitude limit:                       Magnitude limit of image.
                                                              (line   6)
* Magnitude zero point:                  Brightness flux magnitude.
                                                              (line  65)
* Magnitude, AB:                         Unit conversion operators.
                                                              (line  92)
* Magnitude, AB <1>:                     Brightness flux magnitude.
                                                              (line  77)
* Magnitude, AB <2>:                     Unit conversion library.
                                                              (line 103)
* Magnitude, object/clump detection limit: Quantifying measurement limits.
                                                              (line   6)
* Magnitude, upper limit:                Upper limit magnitude of each detection.
                                                              (line  31)
* Magnitudes from flux:                  Brightness flux magnitude.
                                                              (line  40)
* Mailing list archives:                 Report a bug.        (line  78)
* Mailing list archives <1>:             help-gnuastro mailing list.
                                                              (line  13)
* Mailing list: bug-gnuastro:            Report a bug.        (line  78)
* Mailing list: bug-gnuastro <1>:        Gnuastro project webpage.
                                                              (line  19)
* Mailing list: gnuastro-commits:        Developing mailing lists.
                                                              (line  37)
* Mailing list: gnuastro-commits <1>:    Commit guidelines.   (line  34)
* Mailing list: gnuastro-commits <2>:    Commit guidelines.   (line  50)
* Mailing list: gnuastro-commits <3>:    Commit guidelines.   (line  72)
* Mailing list: gnuastro-devel:          Gnuastro project webpage.
                                                              (line  58)
* Mailing list: gnuastro-devel <1>:      Developing mailing lists.
                                                              (line  13)
* Mailing list: help-gnuastro:           help-gnuastro mailing list.
                                                              (line   6)
* Mailing list: info-gnuastro:           Version numbering.   (line   6)
* Mailing list: info-gnuastro <1>:       Announcements.       (line   6)
* Mailing list: info-gnuastro <2>:       Synchronizing.       (line  29)
* main function:                         Mandatory source code files.
                                                              (line  19)
* Main parameters C structure:           Mandatory source code files.
                                                              (line  30)
* main.c:                                Mandatory source code files.
                                                              (line  18)
* main.h:                                Mandatory source code files.
                                                              (line  29)
* Major version number:                  Version numbering.   (line   6)
* Make:                                  How to run simultaneous operations.
                                                              (line  38)
* Make <1>:                              Makefile extensions. (line   6)
* make check:                            Tests.               (line   6)
* Makefile:                              Reddest clumps cutouts and parallelization.
                                                              (line  78)
* MakeProfiles (astmkprof):              MakeProfiles.        (line   6)
* Making a distribution package:         Developer's checklist.
                                                              (line  30)
* Making profiles pixel by pixel:        Defining an ellipse and ellipsoid.
                                                              (line  68)
* Man pages:                             Man pages.           (line   6)
* Management hub:                        Gnuastro project webpage.
                                                              (line   6)
* Mandatory arguments:                   Arguments and options.
                                                              (line  33)
* Mandatory arguments <1>:               --usage.             (line   6)
* Manhattan distance:                    Dimensions.          (line  91)
* Manhattan metric:                      Processing options.  (line 133)
* MANPATH:                               Installation directory.
                                                              (line 164)
* Mask (flag) images:                    Bitwise operators.   (line  26)
* Matching:                              Matching.            (line   6)
* Matching by k-d tree:                  Matching.            (line 117)
* Mathematical morphology:               Mathematical morphology operators.
                                                              (line   6)
* Mathematical morphology <1>:           Binary datasets.     (line  77)
* Matplotlib:                            Annotations for figure in paper.
                                                              (line  36)
* matplotlib:                            Pixel visualization. (line  41)
* Matplotlib, Python:                    Program design philosophy.
                                                              (line  27)
* Matplotlib, Python <1>:                PGPLOT.              (line  14)
* Matrix:                                Linear warping basics.
                                                              (line  17)
* Matrix (covariance):                   Fitting functions.   (line  93)
* Matrix multiplication:                 Merging multiple warpings.
                                                              (line   6)
* Matrix, adjacency:                     Binary datasets.     (line 165)
* Maximum:                               Statistical operations.
                                                              (line  45)
* Mean:                                  Quantifying signal in a tile.
                                                              (line  43)
* Mean <1>:                              Statistical operations.
                                                              (line  58)
* Median:                                Quantifying signal in a tile.
                                                              (line  43)
* Median <1>:                            Statistical operations.
                                                              (line  99)
* Memory management:                     Memory management.   (line   6)
* Memory management <1>:                 Gnuastro's thread related functions.
                                                              (line  97)
* Memory, non-volatile:                  Memory management.   (line   6)
* Memory, volatile:                      Memory management.   (line  24)
* Memory-mapped file:                    Memory management.   (line  63)
* Mercator projection:                   Align pixels with WCS considering distortions.
                                                              (line 184)
* Meridian:                              Box shape operators. (line 118)
* Meta image:                            Pixel information images.
                                                              (line  13)
* Meta-data:                             Fits.                (line  26)
* Metacharacters on the command-line In case your arguments or option values contain any of the shell’s meta-characters, you have to quote them.: Arguments and options.
                                                              (line  47)
* Metadata:                              Sufi simulates a detection.
                                                              (line 151)
* Metric: Manhattan, Taxicab, Radial:    Processing options.  (line 133)
* MgII doublet:                          Spectral lines library.
                                                              (line  10)
* Michelson, Albert. A.:                 Science and its tools.
                                                              (line 194)
* Minimum:                               Statistical operations.
                                                              (line  38)
* Minor version number:                  Version numbering.   (line   6)
* Mixing pixel values:                   Convolve.            (line  25)
* Mixing pixel values <1>:               Resampling.          (line   6)
* mock.fits:                             Tests.               (line   6)
* Mode of a distribution:                Sky value misconceptions.
                                                              (line  22)
* Modeling:                              Data modeling.       (line   6)
* Modeling stars:                        Stars.               (line   6)
* Modifying print book:                  A4 print book.       (line   6)
* Modularity:                            Review of library fundamentals.
                                                              (line  18)
* Moffat beta:                           PSF.                 (line  63)
* Moffat function:                       PSF.                 (line  57)
* Moffat FWHM:                           PSF.                 (line  68)
* Moiré pattern or fringes:              Moire pattern in stacking and its correction.
                                                              (line   6)
* Mollweide projection:                  Align pixels with WCS considering distortions.
                                                              (line 190)
* Moments:                               Measuring elliptical parameters.
                                                              (line  15)
* Monte carlo integration:               Sampling from a function.
                                                              (line  26)
* Mosaicing:                             Crop.                (line  13)
* Mosaicing <1>:                         Warp.                (line  29)
* Multi-Extension FITS:                  Viewing FITS file contents with DS9 or TOPCAT.
                                                              (line   6)
* Multi-threaded operation:              Qsort functions.     (line  28)
* Multi-threaded programs:               Multi-threaded operations.
                                                              (line   6)
* Multi-value columns (vector):          Vector columns.      (line   6)
* Multiple file opening, reentrancy:     CFITSIO.             (line  13)
* Multiplication, Matrix:                Linear warping basics.
                                                              (line  17)
* Multiplication, matrix:                Merging multiple warpings.
                                                              (line   6)
* Multithreaded programming:             Multithreaded programming.
                                                              (line   6)
* MUSE:                                  Detecting lines and extracting spectra in 3D data.
                                                              (line   6)
* MUSE <1>:                              Vector columns.      (line  15)
* Möbius, August. F.:                    Linear warping basics.
                                                              (line  63)
* Names of executables:                  Executable names.    (line   6)
* Names, customize:                      Executable names.    (line  28)
* Names, programs:                       Naming convention.   (line   6)
* NaN:                                   Gnuastro text table format.
                                                              (line  77)
* NaN <1>:                               Stacking operators.  (line  18)
* NaN <2>:                               Linear warps to be called explicitly.
                                                              (line 136)
* NaN <3>:                               Generating histograms and cumulative frequency plots.
                                                              (line 188)
* NaN <4>:                               Detection options.   (line  83)
* NaN <5>:                               Library blank values.
                                                              (line  17)
* NaN <6>:                               Library blank values.
                                                              (line  29)
* NaN <7>:                               Library blank values.
                                                              (line  81)
* NaN <8>:                               Library blank values.
                                                              (line  85)
* NaN <9>:                               FITS arrays.         (line  68)
* NaN <10>:                              Qsort functions.     (line  13)
* Nanomaggy:                             Image surface brightness limit.
                                                              (line 108)
* Nanomaggy <1>:                         Unit conversion operators.
                                                              (line 100)
* Nanomaggy <2>:                         Unit conversion operators.
                                                              (line 113)
* Nanomaggy <3>:                         Unit conversion operators.
                                                              (line 121)
* Nanomaggy <4>:                         Unit conversion library.
                                                              (line 117)
* Narrow-band image:                     Dimensionality changing operators.
                                                              (line 206)
* NASA/IPAC Extragalactic Database (NED): Available databases.
                                                              (line 110)
* Naval Observatory Merged Astrometric Dataset: Available databases.
                                                              (line 177)
* Navigating source files:               Program source.      (line   6)
* Nearest-neighbor interpolation:        Quantifying signal in a tile.
                                                              (line 152)
* Necessary parameters:                  Configuration files. (line   6)
* NED (NASA/IPAC Extragalactic Database): Available databases.
                                                              (line 110)
* Neighborhood:                          Convolve.            (line   6)
* Neighbors, immediate:                  Binary datasets.     (line  13)
* NGC5195:                               Detecting large extended targets.
                                                              (line  26)
* Nights (dark or gray):                 Random number generators.
                                                              (line 168)
* NII doublet:                           Viewing spectra and redshifted lines.
                                                              (line  95)
* NII doublet <1>:                       Spectral lines library.
                                                              (line  10)
* No access to superuser install:        Installation directory.
                                                              (line   6)
* Noise:                                 Noise basics.        (line   6)
* Noise <1>:                             Quantifying signal in a tile.
                                                              (line  18)
* Noise (correlated):                    Measuring the dataset limits.
                                                              (line  70)
* Noise (Gaussian):                      Least squares fitting.
                                                              (line  36)
* Noise simulation:                      Photon counting noise.
                                                              (line  65)
* Noise, correlated:                     NoiseChisel optimization for detection.
                                                              (line  39)
* Noise, correlated <1>:                 Surface brightness limit of image.
                                                              (line  98)
* Noise, instrumental:                   Instrumental noise.  (line   6)
* Non-commutative operations:            Merging multiple warpings.
                                                              (line   6)
* Non-linear distortion:                 Align pixels with WCS considering distortions.
                                                              (line   6)
* Non-linear distortion <1>:             Interpolation.       (line 254)
* Non-linearity (CCDs):                  Uniting the different PSF components.
                                                              (line  92)
* Non-volatile memory:                   Memory management.   (line   6)
* Normalizing histogram:                 Histogram and Cumulative Frequency Plot.
                                                              (line  21)
* nproc:                                 Multi-threaded operations.
                                                              (line   6)
* Number:                                Statistical operations.
                                                              (line  32)
* Number count:                          Measuring the dataset limits.
                                                              (line 203)
* Number of CPU threads to use:          Operating mode options.
                                                              (line 292)
* Number of CPU threads to use <1>:      Configuration files. (line  15)
* Number of threads available:           Multi-threaded operations.
                                                              (line  16)
* Number, version:                       Version numbering.   (line   6)
* Numbers, complex:                      Invoking astconvolve.
                                                              (line 114)
* Numbers, psuedo-random:                Generating random numbers.
                                                              (line  14)
* Numbers, random:                       Generating random numbers.
                                                              (line   6)
* Numpy:                                 Optional dependencies.
                                                              (line 112)
* O-H lines (from atmosphere):           Sky lines in optical IFUs.
                                                              (line   6)
* Object magnitude limit:                Quantifying measurement limits.
                                                              (line   6)
* Object oriented programming:           Why C.               (line  27)
* Observing strategy:                    Pointing pattern design.
                                                              (line   6)
* Offset (in observing strategy):        Pointing pattern design.
                                                              (line   6)
* OII doublet:                           Spectral lines library.
                                                              (line  10)
* OIII doublet:                          Spectral lines library.
                                                              (line  10)
* On/Off options:                        Options.             (line  25)
* Online help:                           Getting help.        (line  13)
* Opening:                               Achieved surface brightness level.
                                                              (line  14)
* Opening (Mathematical morphology):     Binary datasets.     (line 107)
* Opening multi-extension FITS:          Viewing FITS file contents with DS9 or TOPCAT.
                                                              (line   6)
* OpenMP:                                Multithreaded programming.
                                                              (line  32)
* openSUSE:                              Dependencies from package managers.
                                                              (line 178)
* Operations on files:                   Data containers.     (line   6)
* Operations, non-commutative:           Merging multiple warpings.
                                                              (line   6)
* Operator, structure de-reference:      Mandatory source code files.
                                                              (line  56)
* Optical distortion:                    Warp.                (line  47)
* Optimization:                          Invoking astbuildprog.
                                                              (line 128)
* Optimization <1>:                      Building and debugging.
                                                              (line  40)
* Optimization flag:                     Coding conventions.  (line  34)
* Option values:                         Options.             (line  56)
* Optional and mandatory tokens:         --usage.             (line   6)
* Options:                               Invoking astarithmetic.
                                                              (line 257)
* Options common to all programs:        Common options.      (line   6)
* Options to programs:                   Arguments and options.
                                                              (line   6)
* Options, abbreviation:                 Options.             (line  73)
* Options, GNU style:                    Options.             (line   6)
* Options, on/off:                       Options.             (line  25)
* Options, repeated:                     Options.             (line  81)
* Options, short (-) and long (--):      Options.             (line   6)
* Order in search directory:             Installation directory.
                                                              (line 209)
* Orthographic/synthesis projection:     Align pixels with WCS considering distortions.
                                                              (line 168)
* Outlier:                               Single value measurements.
                                                              (line 132)
* Outliers:                              Quantifying signal in a tile.
                                                              (line 134)
* Output file names, automatic:          Automatic output.    (line   6)
* Output FITS headers:                   Output FITS files.   (line   6)
* Output, wrong:                         Report a bug.        (line   6)
* Overflow, integer:                     Integer benefits and pitfalls.
                                                              (line  57)
* Oversample:                            Sufi simulates a detection.
                                                              (line 332)
* Oversampling:                          Oversampling.        (line   6)
* p:                                     Mandatory source code files.
                                                              (line  45)
* Package managers:                      Dependencies from package managers.
                                                              (line   6)
* pacman:                                Dependencies from package managers.
                                                              (line 148)
* Pan-STARRS Data Release 1:             Available databases. (line 177)
* Paper size, A4:                        A4 print book.       (line   6)
* Paper size, US letter:                 A4 print book.       (line   6)
* Parabolic projection:                  Align pixels with WCS considering distortions.
                                                              (line 188)
* Parametric PSFs:                       PSF.                 (line  31)
* Parsecs:                               Unit conversion operators.
                                                              (line 138)
* Parsecs <1>:                           Unit conversion library.
                                                              (line 109)
* PATH:                                  Installation directory.
                                                              (line  72)
* PDF:                                   Recognized file formats.
                                                              (line 102)
* PDF <1>:                               Pixel visualization. (line 139)
* PDF <2>:                               EPS files.           (line 105)
* PDF <3>:                               PDF files.           (line  52)
* permutation:                           Permutations.        (line   6)
* Permutation:                           Matching.            (line  37)
* PGFPlots:                              Annotations for figure in paper.
                                                              (line  20)
* PGFPlots (LaTeX package):              Column statistics color-magnitude diagram.
                                                              (line  90)
* PGFPlots (LaTeX package) <1>:          2D histogram as an image.
                                                              (line  78)
* PGFplots in TeX or LaTeX:              Program design philosophy.
                                                              (line  27)
* PGFplots in TeX or LaTeX <1>:          PGPLOT.              (line  14)
* PGPLOT:                                PGPLOT.              (line   6)
* Phase angle:                           Invoking astconvolve.
                                                              (line 114)
* photo-electrons:                       Sky value definition.
                                                              (line  49)
* Photoelectrons:                        Resampling.          (line   6)
* Photon counting noise:                 Photon counting noise.
                                                              (line   6)
* Photon-starved images:                 Random number generators.
                                                              (line 157)
* Pi:                                    Constants.           (line   6)
* Pi <1>:                                Constants.           (line  18)
* Picture element:                       Resampling.          (line   6)
* Pipe:                                  --help.              (line  33)
* Pixel:                                 Detecting lines and extracting spectra in 3D data.
                                                              (line   6)
* Pixel <1>:                             Resampling.          (line   6)
* Pixel by pixel making of profiles:     Defining an ellipse and ellipsoid.
                                                              (line  68)
* Pixel mixing:                          Pixel information images.
                                                              (line  25)
* Pixel mixing <1>:                      Convolve.            (line  25)
* Pixel mixing <2>:                      Resampling.          (line   6)
* Pixel mixing <3>:                      Resampling.          (line  58)
* Pixel scale:                           Moire pattern in stacking and its correction.
                                                              (line  97)
* Pixel scale <1>:                       Align pixels with WCS considering distortions.
                                                              (line 105)
* Pixel scale <2>:                       Surface brightness limit of image.
                                                              (line  64)
* Pixelated graphics:                    Recognized file formats.
                                                              (line  29)
* Pixels:                                Pixel colors.        (line   6)
* Plain text:                            Recognized file formats.
                                                              (line 128)
* Plank’s constant ($h$):                Constants.           (line  30)
* Plate carree projection:               Align pixels with WCS considering distortions.
                                                              (line 182)
* Plot, scatter:                         Column statistics color-magnitude diagram.
                                                              (line  32)
* Plot: contour:                         Contour options.     (line  12)
* Plotting directly in C:                PGPLOT.              (line   6)
* Plugin:                                Linking.             (line  64)
* PNG standard:                          Colormaps for single-channel pixels.
                                                              (line  54)
* Point (Vector graphics; PostScript):   Marking objects for publication.
                                                              (line 232)
* Point (Vector graphics; PostScript) <1>: Drawing with vector graphics.
                                                              (line  14)
* Point pixels:                          Resampling.          (line  23)
* Point source:                          PSF.                 (line   6)
* Point spread function:                 Tutorials.           (line  37)
* Point spread function <1>:             PSF.                 (line   6)
* Pointers:                              Pointers.            (line   6)
* Pointing:                              Moire pattern in stacking and its correction.
                                                              (line 128)
* Pointing <1>:                          Pointing pattern simulation.
                                                              (line  41)
* Pointings:                             Pointing pattern design.
                                                              (line   6)
* Poisson distribution:                  Photon counting noise.
                                                              (line   6)
* Poisson distribution <1>:              Photon counting noise.
                                                              (line  28)
* Poisson noise:                         Larger steps sizes for better calibration.
                                                              (line  42)
* Poisson noise <1>:                     Random number generators.
                                                              (line 110)
* Poisson, Siméon Denis:                 Photon counting noise.
                                                              (line   6)
* Polyconic projection:                  Align pixels with WCS considering distortions.
                                                              (line 204)
* Polygon:                               Box shape operators. (line  66)
* Polygons, Concave:                     Crop options.        (line 231)
* Polygons, Concave <1>:                 Polygons.            (line  11)
* Polygons, Convex:                      Crop options.        (line 231)
* Polygons, Convex <1>:                  Polygons.            (line  11)
* Polynomial fit:                        Fitting functions.   (line 151)
* Polynomial fit (robust):               Fitting options.     (line  79)
* Polynomial interpolation:              Interpolation.       (line  98)
* Pooling:                               Pooling operators.   (line   6)
* Portable Document format:              Recognized file formats.
                                                              (line 102)
* Portable script:                       Separate shell variables for multiple outputs.
                                                              (line  85)
* Portable shell:                        Installed scripts.   (line  15)
* Position angle:                        Measuring elliptical parameters.
                                                              (line 132)
* Position angle <1>:                    Defining an ellipse and ellipsoid.
                                                              (line   6)
* Position angle <2>:                    Dimensions.          (line 105)
* POSIX threads:                         Implementation of pthread_barrier.
                                                              (line   6)
* POSIX Threads:                         Gnuastro's thread related functions.
                                                              (line   6)
* POSIX threads library:                 Multithreaded programming.
                                                              (line  20)
* Post-fix notation:                     Reverse polish notation.
                                                              (line   6)
* Postage stamp images:                  Crop.                (line   6)
* PostScript:                            Recognized file formats.
                                                              (line  66)
* PostScript <1>:                        Pixel visualization. (line 139)
* PostScript <2>:                        EPS files.           (line 105)
* PostScript <3>:                        PDF files.           (line  52)
* PostScript point:                      Drawing with vector graphics.
                                                              (line  14)
* PostScript vs. PDF:                    Recognized file formats.
                                                              (line 102)
* Pre-Processor:                         Headers.             (line   6)
* Pre-processor macros:                  Headers.             (line  89)
* Precedence, configuration files:       Configuration file precedence.
                                                              (line   6)
* Precision of floats:                   Printing floating point numbers.
                                                              (line  53)
* prefix/etc/:                           System wide.         (line   6)
* Primary colors:                        Pixel colors.        (line   6)
* printf:                                Table input output.  (line  31)
* Printing floating point numbers:       Printing floating point numbers.
                                                              (line   6)
* Prior WCS distortion:                  World Coordinate System.
                                                              (line  36)
* Probability density function:          Photon counting noise.
                                                              (line  22)
* Probability density function <1>:      Histogram and Cumulative Frequency Plot.
                                                              (line  21)
* Probability density function <2>:      Sky value misconceptions.
                                                              (line  22)
* Profile, profile:                      Generate radial profile.
                                                              (line   6)
* Profiles, galaxies:                    Galaxies.            (line   6)
* progname-complete.bash:                Mandatory source code files.
                                                              (line 153)
* progname.c, progname.h:                Mandatory source code files.
                                                              (line 122)
* prognameparams:                        Mandatory source code files.
                                                              (line  30)
* Program crashing:                      Report a bug.        (line   6)
* Program names:                         Naming convention.   (line   6)
* Program structure convention:          Program source.      (line   6)
* Programming, low level:                Why C.               (line 105)
* ProgramName:                           Naming convention.   (line  15)
* Projections (world coordinate system): Align pixels with WCS considering distortions.
                                                              (line 148)
* Projective transformation:             Linear warping basics.
                                                              (line  93)
* Proper distance:                       Distance on a 2D curved space.
                                                              (line 140)
* Provenance:                            Invoking asttable.   (line 346)
* Provenance <1>:                        Building new dataset and stack management.
                                                              (line  33)
* Pseudo color:                          Pixel colors.        (line  22)
* PSF:                                   Tutorials.           (line  37)
* PSF <1>:                               Sufi simulates a detection.
                                                              (line  40)
* PSF <2>:                               PSF.                 (line   6)
* PSF image size:                        PSF.                 (line  19)
* PSF over-sample:                       Oversampling.        (line  12)
* PSF width:                             PSF.                 (line  31)
* PSF, Moffat compared Gaussian:         PSF.                 (line  70)
* Psuedo-random numbers:                 Generating random numbers.
                                                              (line  14)
* pthread:                               Multi-threaded operations.
                                                              (line   6)
* pthread_barrier:                       Implementation of pthread_barrier.
                                                              (line   6)
* Ptolemy, Claudius:                     Sufi simulates a detection.
                                                              (line  19)
* Public domain:                         Your rights.         (line  12)
* Purity:                                Extract clumps and objects.
                                                              (line  98)
* Purity <1>:                            Completeness limit of each detection.
                                                              (line  20)
* Puzzle solving scientist:              Science and its tools.
                                                              (line 201)
* PyPI:                                  Optional dependencies.
                                                              (line 122)
* PyPI <1>:                              Gnuastro configure options.
                                                              (line 117)
* Python:                                Gnuastro configure options.
                                                              (line 117)
* Python Matplotlib:                     Program design philosophy.
                                                              (line  27)
* Python Matplotlib <1>:                 PGPLOT.              (line  14)
* Python programming language:           Why C.               (line   6)
* Python3:                               Optional dependencies.
                                                              (line 112)
* qsort:                                 Qsort functions.     (line   6)
* Quadrilateralized spherical cube projection: Align pixels with WCS considering distortions.
                                                              (line 210)
* Quality of compression in JPEG:        ConvertType input and output.
                                                              (line 129)
* Quantile:                              Skewness caused by signal and its measurement.
                                                              (line 191)
* Quantile <1>:                          Quantifying signal in a tile.
                                                              (line  43)
* Quantile <2>:                          Input to Statistics. (line  40)
* Quantile <3>:                          Detection options.   (line  69)
* Quantile <4>:                          Statistical operations.
                                                              (line 114)
* Quantile of the mean:                  Single value measurements.
                                                              (line  58)
* Query:                                 Query.               (line   6)
* Qutb al-Din al-Shirazi:                Fourier series historical background.
                                                              (line  27)
* Radial metric:                         Processing options.  (line 133)
* Radial profile:                        Vector columns.      (line  15)
* Radial profile <1>:                    Least squares fitting.
                                                              (line   6)
* Radial profile <2>:                    Generate radial profile.
                                                              (line   6)
* Radial profile on ellipse:             Defining an ellipse and ellipsoid.
                                                              (line  15)
* Radio astronomy:                       Available databases. (line  82)
* Radius, effective:                     Galaxies.            (line  11)
* RAM:                                   Memory management.   (line  24)
* RAM <1>:                               Gnuastro's thread related functions.
                                                              (line  97)
* RAM <2>:                               Binary datasets.     (line 203)
* Random number generation:              Image surface brightness limit.
                                                              (line 206)
* Random number generator, Seed:         Generating random numbers.
                                                              (line  36)
* Random number generator, Seed <1>:     Generating random numbers.
                                                              (line  89)
* Random number generator, Seed <2>:     Upper-limit settings.
                                                              (line  99)
* Random number generator, Seed <3>:     Sampling from a function.
                                                              (line  67)
* Random number generator, Seed <4>:     MakeProfiles profile settings.
                                                              (line  28)
* Random numbers:                        Generating random numbers.
                                                              (line   6)
* Random row selection:                  Invoking asttable.   (line 588)
* Raster graphics:                       Raster and Vector graphics.
                                                              (line   6)
* Raster graphics <1>:                   Recognized file formats.
                                                              (line  29)
* Readout noise:                         Instrumental noise.  (line   6)
* Red Hat:                               Dependencies from package managers.
                                                              (line  86)
* Redirection:                           Sufi simulates a detection.
                                                              (line 197)
* Redirection in shell:                  Writing scripts to automate the steps.
                                                              (line  57)
* Redirection of output:                 --help.              (line  22)
* Redirection of output <1>:             --help.              (line  42)
* Reentrancy, multiple file opening:     CFITSIO.             (line  13)
* Region file (SAO DS9):                 Crop options.        (line 180)
* Region file (SAO DS9) <1>:             SAO DS9 library.     (line  26)
* Remembering options:                   Getting help.        (line   6)
* Remote operation:                      Command-line interface.
                                                              (line  92)
* Removing ast from executables:         Executable names.    (line  70)
* Repeated options:                      Options.             (line  81)
* Report a bug:                          Gnuastro project webpage.
                                                              (line   6)
* Reproducibility:                       Invoking asttable.   (line 605)
* Reproducibility <1>:                   Upper-limit settings.
                                                              (line  15)
* Reproducibility <2>:                   Makefile functions of Gnuastro.
                                                              (line  32)
* Reproducibility <3>:                   Why C.               (line  80)
* Reproducible bug reports:              Report a bug.        (line  64)
* Reproducible results:                  Command-line interface.
                                                              (line  53)
* Resampling:                            Resampling.          (line   6)
* Resampling <1>:                        Align pixels with WCS considering distortions.
                                                              (line   6)
* Resampling <2>:                        Align pixels with WCS considering distortions.
                                                              (line 121)
* Resampling <3>:                        Interpolation.       (line 255)
* Resampling by area:                    Pixel information images.
                                                              (line  25)
* Resource heavy operations:             Command-line interface.
                                                              (line  84)
* Rest frame wavelength:                 CosmicCalculator spectral line calculations.
                                                              (line   6)
* Rest-frame:                            Spectral lines library.
                                                              (line 293)
* Rest-frame wavelength:                 CosmicCalculator input options.
                                                              (line  47)
* restrict:                              Generic data container.
                                                              (line  61)
* Results, wrong:                        Report a bug.        (line   6)
* Reverse Polish Notation:               Reverse polish notation.
                                                              (line   6)
* RGB:                                   Color.               (line   6)
* RGB <1>:                               Pixel colors.        (line   6)
* RHEL:                                  Dependencies from package managers.
                                                              (line  86)
* Right Ascension:                       Pointings that account for sky curvature.
                                                              (line  55)
* Right Ascension <1>:                   Column arithmetic.   (line 334)
* Right Ascension <2>:                   Arithmetic on datasets.
                                                              (line 191)
* Right Ascension <3>:                   Unit conversion library.
                                                              (line  30)
* Right Ascension <4>:                   Unit conversion library.
                                                              (line  44)
* Ritchie, Dennis:                       Why C.               (line  15)
* river:                                 Segment.             (line  58)
* Robust polynomial fit:                 Fitting options.     (line  79)
* Robust Polynomial fit:                 Fitting functions.   (line 185)
* Roger Cotes:                           Circles and the complex plane.
                                                              (line  16)
* Root access, not possible:             Installation directory.
                                                              (line   6)
* Root parameter structure:              Mandatory source code files.
                                                              (line  30)
* Rotation of coordinates:               Linear warping basics.
                                                              (line  17)
* Round-off error:                       Invoking astconvolve.
                                                              (line 128)
* Round-off error <1>:                   Polygons.            (line  33)
* Row selection, by random:              Invoking asttable.   (line 588)
* Sampling:                              Resampling.          (line   6)
* Sampling <1>:                          Sampling from a function.
                                                              (line   6)
* Sampling theorem:                      Resampling.          (line  23)
* Sanson-Flamsteed projection:           Align pixels with WCS considering distortions.
                                                              (line 186)
* SAO DS9:                               Reddest clumps cutouts and parallelization.
                                                              (line  32)
* SAO DS9 <1>:                           Extract clumps and objects.
                                                              (line  22)
* SAO DS9 <2>:                           Pixel visualization. (line  46)
* SAO DS9 <3>:                           Segment output.      (line  21)
* SAO DS9 <4>:                           SAO DS9 library.     (line   6)
* SAO DS9 <5>:                           SAO DS9.             (line   6)
* SAO DS9 region file:                   Crop options.        (line 180)
* SAO DS9 region file <1>:               SAO DS9 library.     (line  26)
* Saturated pixels:                      Interpolation operators.
                                                              (line  67)
* Saturated stars:                       Interpolation.       (line  40)
* Saturation (CCDs):                     Uniting the different PSF components.
                                                              (line  92)
* Save output to file:                   --help.              (line  42)
* Saving binary image:                   Recognized file formats.
                                                              (line  88)
* Scales, coordinate:                    Angular coverage on the sky.
                                                              (line   6)
* Scaling:                               Linear warping basics.
                                                              (line   6)
* Scatter plot:                          Column statistics color-magnitude diagram.
                                                              (line  32)
* Scientific Linux:                      Dependencies from package managers.
                                                              (line  86)
* Scientist, puzzle solver:              Science and its tools.
                                                              (line 201)
* Script, shell:                         Writing scripts to automate the steps.
                                                              (line  51)
* Scripts, startup:                      Installation directory.
                                                              (line 112)
* Scroll command-line:                   --help.              (line  27)
* SDSS:                                  Image surface brightness limit.
                                                              (line 108)
* SDSS <1>:                              Zero point of an image.
                                                              (line  13)
* SDSS <2>:                              Unit conversion operators.
                                                              (line 100)
* SDSS <3>:                              Brightness flux magnitude.
                                                              (line  97)
* SDSS DR12:                             Available databases. (line  36)
* SDSS Photometric Catalogue, Release 12: Available databases.
                                                              (line 177)
* SDSS vs. Johnson filters:              Zero point of an image.
                                                              (line  20)
* SDSS, Sloan Digital Sky Survey:        Detecting large extended targets.
                                                              (line  26)
* Search directory for executables:      Installation directory.
                                                              (line  72)
* Search directory order:                Installation directory.
                                                              (line 209)
* Searching text:                        --help.              (line  47)
* Second moment:                         Measuring elliptical parameters.
                                                              (line  25)
* Section of an image:                   Crop.                (line   6)
* Secure shell:                          Command-line interface.
                                                              (line  92)
* SED, stream editor:                    Executable names.    (line  60)
* Seed, random number generator:         Image surface brightness limit.
                                                              (line 206)
* Seed, Random number generator:         Generating random numbers.
                                                              (line  36)
* Seed, Random number generator <1>:     Generating random numbers.
                                                              (line  89)
* Seed, Random number generator <2>:     Upper-limit settings.
                                                              (line  99)
* Seed, Random number generator <3>:     Sampling from a function.
                                                              (line  67)
* Seed, Random number generator <4>:     MakeProfiles profile settings.
                                                              (line  28)
* Seeing:                                Pointing pattern simulation.
                                                              (line  21)
* Segmentation:                          NoiseChisel.         (line   6)
* Segmentation <1>:                      NoiseChisel.         (line  67)
* sequent WCS distortion:                World Coordinate System.
                                                              (line  36)
* Setting output file names automatically: Automatic output.  (line   6)
* Setting PATH:                          Installation directory.
                                                              (line  72)
* Sexagesimal:                           Column arithmetic.   (line 334)
* Sexagesimal <1>:                       Crop options.        (line 121)
* Sexagesimal <2>:                       Arithmetic on datasets.
                                                              (line 191)
* SHA-1 checksum:                        Downloading and validating input data.
                                                              (line  41)
* Shapes for marks (vector graphics):    Drawing with vector graphics.
                                                              (line 119)
* Shared library:                        Linking.             (line  64)
* Shared library versioning:             Linking.             (line 129)
* Shear:                                 Linear warping basics.
                                                              (line  38)
* Shebang:                               Writing scripts to automate the steps.
                                                              (line  78)
* Shell:                                 Command-line interface.
                                                              (line   6)
* Shell <1>:                             Arguments and options.
                                                              (line   6)
* Shell alias:                           Invoking astnoisechisel.
                                                              (line 108)
* Shell alias <1>:                       Invoking astmkprof.  (line  85)
* Shell auto-complete:                   Executable names.    (line  14)
* Shell history:                         Writing scripts to automate the steps.
                                                              (line  15)
* Shell redirection:                     Writing scripts to automate the steps.
                                                              (line  57)
* Shell script:                          GNU Astronomy Utilities 1.0.
                                                              (line  12)
* Shell script <1>:                      Writing scripts to automate the steps.
                                                              (line  51)
* Shell startup:                         Invoking astnoisechisel.
                                                              (line 108)
* Shell startup <1>:                     Invoking astmkprof.  (line  85)
* Shell variables:                       Installation directory.
                                                              (line  38)
* Shell, portable:                       Installed scripts.   (line  15)
* <Shift + PageUP> and <Shift + PageDown>: --help.            (line  27)
* SI (International System of Units):    Brightness flux magnitude.
                                                              (line 163)
* Sigma-clipping:                        Sky value misconceptions.
                                                              (line  32)
* Sigma-clipping <1>:                    Statistical operations.
                                                              (line 500)
* Signal:                                Quantifying signal in a tile.
                                                              (line  18)
* Signal to noise ratio:                 Warp.                (line  20)
* Signal to noise ratio <1>:             Resampling.          (line  23)
* Signal-to-noise ratio:                 Quantifying signal in a tile.
                                                              (line  51)
* Signed integer:                        Numeric data types.  (line  16)
* SII doublet:                           Spectral lines library.
                                                              (line  10)
* Simulating noise:                      Photon counting noise.
                                                              (line  65)
* Simultaneous multithreading:           Multi-threaded operations.
                                                              (line   6)
* Single channel CMYK:                   Colormaps for single-channel pixels.
                                                              (line  54)
* SIP distortion:                        Align pixels with WCS considering distortions.
                                                              (line   6)
* SIP WCS distortion:                    Keyword inspection and manipulation.
                                                              (line 545)
* SIP WCS distortion <1>:                World Coordinate System.
                                                              (line  36)
* SIP WCS distortion <2>:                World Coordinate System.
                                                              (line 457)
* size_t:                                Ordered list of size_t.
                                                              (line  16)
* size_t <1>:                            Doubly linked ordered list of size_t.
                                                              (line  14)
* Skewed Poisson distribution:           Photon counting noise.
                                                              (line  30)
* Skewness:                              Skewness caused by signal and its measurement.
                                                              (line  59)
* Skewness <1>:                          Quantifying signal in a tile.
                                                              (line  70)
* Skewness <2>:                          Brightness measurements.
                                                              (line 179)
* Sky:                                   Sky lines in optical IFUs.
                                                              (line  23)
* Sky <1>:                               Sky value.           (line   6)
* Sky emission-lines:                    Sky lines in optical IFUs.
                                                              (line   6)
* Sky line:                              Interpolation.       (line   6)
* Sky value:                             Preparing input and generating exposure map.
                                                              (line 159)
* Sky value <1>:                         Photon counting noise.
                                                              (line  52)
* Sky value <2>:                         Sky value definition.
                                                              (line   6)
* Sky value <3>:                         Sky value definition.
                                                              (line  35)
* Slant zenithal projection:             Align pixels with WCS considering distortions.
                                                              (line 162)
* Sloan Digital Sky Survey, SDSS:        Detecting large extended targets.
                                                              (line  26)
* SLS Color:                             Pixel visualization. (line  46)
* Small circle:                          Box shape operators. (line 126)
* Software bug:                          Report a bug.        (line   6)
* Source code building:                  Dependencies from package managers.
                                                              (line   6)
* Source code compilation:               Dependencies from package managers.
                                                              (line   6)
* Source file navigation:                Program source.      (line   6)
* Source tree:                           Test scripts.        (line  25)
* Source, uncompress:                    Quick start.         (line   6)
* Spectrum:                              Detecting lines and extracting spectra in 3D data.
                                                              (line   6)
* Spectrum <1>:                          Vector columns.      (line  15)
* Spectrum <2>:                          Measurements per slice spectra.
                                                              (line   6)
* Spectrum (of astronomical source):     Measurements per slice spectra.
                                                              (line   6)
* Spectrum, Fourier:                     Invoking astconvolve.
                                                              (line 114)
* Speed of light:                        Constants.           (line  22)
* Spline (Akima) interpolation:          Interpolation.       (line 118)
* Spline (cubic) interpolation:          Interpolation.       (line 104)
* Spread of a point source:              PSF.                 (line   6)
* SSD:                                   Configure and build in RAM.
                                                              (line  12)
* SSH:                                   Command-line interface.
                                                              (line  92)
* Stacking:                              Moire pattern in stacking and its correction.
                                                              (line 128)
* Stacking <1>:                          Stacking operators.  (line   6)
* Stacking <2>:                          Random number generators.
                                                              (line 157)
* Stacking <3>:                          Align pixels with WCS considering distortions.
                                                              (line  31)
* Standard deviation:                    Measuring elliptical parameters.
                                                              (line  35)
* Standard deviation <1>:                Statistical operations.
                                                              (line  64)
* Standard error of mean:                Standard deviation vs error.
                                                              (line 141)
* Standard input:                        Input output options.
                                                              (line   9)
* Standard input <1>:                    Standard input.      (line   6)
* Standard input <2>:                    Separate shell variables for multiple outputs.
                                                              (line  61)
* Standard input <3>:                    Automatic output.    (line   6)
* Standard input <4>:                    ConvertType input and output.
                                                              (line   6)
* Standard input <5>:                    Invoking aststatistics.
                                                              (line  45)
* Standard input <6>:                    Text files.          (line 132)
* Standard output:                       Sufi simulates a detection.
                                                              (line 197)
* Standard output <1>:                   Invoking asttable.   (line 375)
* Standard output stream:                Standard input.      (line  13)
* Standard, FITS:                        Generic data container.
                                                              (line  78)
* Star formation main sequence:          Least squares fitting.
                                                              (line   6)
* Stars, modeling:                       Stars.               (line   6)
* Startup scripts:                       Installation directory.
                                                              (line 112)
* Startup scripts <1>:                   Generating random numbers.
                                                              (line  64)
* Startup, shell:                        Invoking astnoisechisel.
                                                              (line 108)
* Startup, shell <1>:                    Invoking astmkprof.  (line  85)
* Static document description format:    Recognized file formats.
                                                              (line 102)
* Static linking:                        Linking.             (line  38)
* Statistical analysis:                  Science and its tools.
                                                              (line  32)
* Steffen interpolation:                 Interpolation.       (line 126)
* Steradian:                             Brightness flux magnitude.
                                                              (line 163)
* Stereographic projection:              Align pixels with WCS considering distortions.
                                                              (line 166)
* Stitch multiple images:                Crop.                (line  20)
* STR:                                   Options.             (line  43)
* Stream editor, SED:                    Executable names.    (line  60)
* Stream: standard input:                Standard input.      (line   6)
* Stream: standard output:               Standard input.      (line  13)
* Stride:                                Pooling operators.   (line  13)
* Stroustrup, Bjarne:                    Science and its tools.
                                                              (line 172)
* Stroustrup, Bjarne <1>:                Why C.               (line  15)
* Structure de-reference operator:       Mandatory source code files.
                                                              (line  56)
* Structures:                            Headers.             (line  89)
* Subaru Telescope:                      Tessellation.        (line  54)
* Submit new tracker item:               Report a bug.        (line  84)
* Suffix (filename):                     Arguments.           (line  13)
* Suffixes, EPS format:                  Recognized file formats.
                                                              (line  97)
* Suffixes, JPEG images:                 Recognized file formats.
                                                              (line  42)
* Suffixes, PDF format:                  Recognized file formats.
                                                              (line 113)
* Suffixes, plain text:                  Recognized file formats.
                                                              (line 128)
* Sufi, Abd al-rahman:                   Sufi simulates a detection.
                                                              (line   6)
* Sum:                                   Statistical operations.
                                                              (line  52)
* Sum for total flux:                    Profile magnitude.   (line   6)
* Supergalactic coordinate system:       Keyword inspection and manipulation.
                                                              (line 488)
* Supergalactic coordinate system <1>:   World Coordinate System.
                                                              (line  50)
* Superuser, not possible:               Installation directory.
                                                              (line   6)
* Support request manager:               Report a bug.        (line  84)
* Surface Brightness:                    FITS images in a publication.
                                                              (line  80)
* Surface brightness:                    Achieved surface brightness level.
                                                              (line 103)
* Surface brightness <1>:                Brightness flux magnitude.
                                                              (line 163)
* Surface brightness <2>:                Surface brightness limit of image.
                                                              (line   6)
* Surface Brightness <1>:                Arithmetic on datasets.
                                                              (line 209)
* Surface Brightness <2>:                Unit conversion library.
                                                              (line  72)
* Surface brightness error:              Surface brightness error of each detection.
                                                              (line   6)
* Surface brightness limit:              Image surface brightness limit.
                                                              (line   6)
* Surface brightness limit <1>:          Surface brightness limit of image.
                                                              (line  38)
* Surface brightness limit <2>:          MakeCatalog output.  (line  31)
* SUSE Linux Enterprise Server:          Dependencies from package managers.
                                                              (line 178)
* SVO database (filter transmission curve): Zero point of an image.
                                                              (line  20)
* Symbolic link:                         Executable names.    (line  38)
* System Cache:                          A note on threads.   (line  29)
* System wide configuration files:       System wide.         (line   6)
* Sérsic index:                          Galaxies.            (line  11)
* Sérsic profile:                        Morphology measurements nonparametric.
                                                              (line 126)
* Sérsic profile <1>:                    Galaxies.            (line   6)
* Sérsic, J. L.:                         Galaxies.            (line  11)
* Table viewer:                          TOPCAT.              (line   6)
* Tables FITS:                           Recognized table formats.
                                                              (line  19)
* Tabs are evil:                         Coding conventions.  (line 151)
* TAN in WCS (Gnomonic projection):      Area of non-blank pixels on sky.
                                                              (line  44)
* Tangential spherical cube projection:  Align pixels with WCS considering distortions.
                                                              (line 206)
* TAP (Table Access Protocol):           Query.               (line   6)
* Task tracker:                          Report a bug.        (line  99)
* Taxicab metric:                        Processing options.  (line 133)
* Terminal (true color, 24 bit):         Vector graphics colors.
                                                              (line  14)
* Test:                                  Quick start.         (line   6)
* Test scripts:                          Test scripts.        (line   6)
* Tests, error in converting images:     Known issues.        (line 103)
* Tests, only one passes:                Known issues.        (line  62)
* Tests, running:                        Tests.               (line   6)
* tests/during-dev.sh:                   Building and debugging.
                                                              (line  23)
* TeX:                                   Known issues.        (line  87)
* TeX <1>:                               Recognized file formats.
                                                              (line  77)
* TeX Live:                              Bootstrapping dependencies.
                                                              (line 126)
* Thread safety:                         World Coordinate System.
                                                              (line  13)
* Thread safety <1>:                     Qsort functions.     (line  28)
* Thresholding:                          Binary datasets.     (line   6)
* TIFF format:                           Optional dependencies.
                                                              (line  88)
* TIFF format <1>:                       Gnuastro configure options.
                                                              (line 111)
* TIFF format <2>:                       Recognized file formats.
                                                              (line  47)
* TIFF format <3>:                       TIFF files.          (line   6)
* TiKZ:                                  Annotations for figure in paper.
                                                              (line  36)
* Tilde expansion as option values:      Options.             (line 110)
* Time zone:                             Invoking astscript-sort-by-night.
                                                              (line  72)
* Time, Unix epoch:                      Keyword inspection and manipulation.
                                                              (line 464)
* Time, Unix epoch <1>:                  Column arithmetic.   (line 349)
* Time, Unix epoch <2>:                  Sort FITS files by night.
                                                              (line  26)
* Timeout:                               Input output options.
                                                              (line   9)
* tmpfs file system:                     Configure and build in RAM.
                                                              (line  23)
* Tokens:                                Vector columns.      (line 105)
* Top processing source file:            Mandatory source code files.
                                                              (line 123)
* Top root structure:                    Mandatory source code files.
                                                              (line  30)
* TPD WCS distortion:                    World Coordinate System.
                                                              (line  36)
* TPV distortion:                        Align pixels with WCS considering distortions.
                                                              (line   6)
* TPV WCS distortion:                    Keyword inspection and manipulation.
                                                              (line 545)
* TPV WCS distortion <1>:                World Coordinate System.
                                                              (line  36)
* TPV WCS distortion <2>:                World Coordinate System.
                                                              (line 457)
* Tracker:                               Report a bug.        (line  99)
* Tracker <1>:                           Gnuastro project webpage.
                                                              (line   6)
* Trailing space:                        Coding conventions.  (line 146)
* Transform image:                       MakeProfiles.        (line  41)
* Transformation, affine:                Linear warping basics.
                                                              (line  85)
* Transformation, projective:            Linear warping basics.
                                                              (line  93)
* Transmission curve of filters:         Zero point of an image.
                                                              (line  20)
* Trigonometry:                          Trigonometric and hyperbolic operators.
                                                              (line  14)
* True color terminal:                   Vector graphics colors.
                                                              (line  14)
* Truncation radius:                     Profile magnitude.   (line   6)
* Tukey’s biweight (bisquare) function:  Fitting options.     (line 121)
* Turn over point (angular diameter distance): Cosmological coverage and visualizing tables.
                                                              (line  85)
* Tutorial:                              Tutorials.           (line   6)
* Type:                                  Numeric data types.  (line   6)
* U.S. Naval Observatory CCD Astrograph Catalog: Available databases.
                                                              (line 177)
* Ubuntu:                                Dependencies from package managers.
                                                              (line  51)
* ui.c:                                  Mandatory source code files.
                                                              (line 101)
* ui.h:                                  Mandatory source code files.
                                                              (line  85)
* Uncompress source:                     Quick start.         (line   6)
* Undetected objects:                    Photon counting noise.
                                                              (line  52)
* Universal time coordinate (UTC):       Invoking astscript-sort-by-night.
                                                              (line  72)
* Unix epoch time:                       Keyword inspection and manipulation.
                                                              (line 464)
* Unix epoch time <1>:                   Column arithmetic.   (line 349)
* Unix epoch time <2>:                   Sort FITS files by night.
                                                              (line  26)
* Unix epoch time <3>:                   FITS header keywords.
                                                              (line 119)
* Unsigned integer:                      Numeric data types.  (line  16)
* Upper limit magnitude:                 Upper limit magnitude of each detection.
                                                              (line  31)
* Upper-limit:                           Measuring the dataset limits.
                                                              (line  80)
* US letter paper size:                  A4 print book.       (line   6)
* Usage pattern:                         --usage.             (line   6)
* User interface functions:              Mandatory source code files.
                                                              (line 102)
* Using CPU threads:                     Multi-threaded operations.
                                                              (line   6)
* Using multiple CPU cores:              Multi-threaded operations.
                                                              (line   6)
* Using multiple threads:                A note on threads.   (line   6)
* UTC (Universal time coordinate):       Invoking astscript-sort-by-night.
                                                              (line  72)
* Valgrind:                              Gnuastro configure options.
                                                              (line  13)
* Valgrind <1>:                          Gnuastro configure options.
                                                              (line  32)
* Valgrind <2>:                          Separate build and source directories.
                                                              (line  95)
* Valgrind <3>:                          Separate build and source directories.
                                                              (line 110)
* Values to options:                     Options.             (line  56)
* Variance:                              Measuring elliptical parameters.
                                                              (line  25)
* Variance-covariance matrix:            Fitting functions.   (line  93)
* Vatican library:                       Fits.                (line   6)
* Vector columns:                        Vector columns.      (line   6)
* Vector graphics:                       Raster and Vector graphics.
                                                              (line  14)
* Vector graphics <1>:                   Recognized file formats.
                                                              (line  66)
* Vector graphics point:                 Drawing with vector graphics.
                                                              (line  14)
* Verification, checksum:                Downloading and validating input data.
                                                              (line  41)
* Version control:                       Report a bug.        (line  27)
* Version control <1>:                   Version controlled source.
                                                              (line   6)
* Version control systems:               Optional dependencies.
                                                              (line  68)
* Version control systems <1>:           Gnuastro configure options.
                                                              (line  99)
* Version number:                        Version numbering.   (line   6)
* Versioning: Shared library:            Linking.             (line 129)
* Vertices on sphere (sky):              Box shape operators. (line  66)
* Viewing trackers:                      Report a bug.        (line  99)
* Vignetting:                            Accounting for non-exposed pixels.
                                                              (line   6)
* Vignetting <1>:                        Pointing pattern simulation.
                                                              (line  26)
* Viridis: Colormap:                     Pixel visualization. (line  41)
* Virtual console:                       Command-line interface.
                                                              (line  76)
* Visualization:                         Colormaps for single-channel pixels.
                                                              (line   6)
* VizieR:                                Available databases. (line 156)
* void *:                                Generic data container.
                                                              (line  51)
* Volatile memory:                       Memory management.   (line  24)
* VOTable:                               Available databases. (line 120)
* VOTable <1>:                           TOPCAT.              (line   6)
* Voxel:                                 Detecting lines and extracting spectra in 3D data.
                                                              (line   6)
* Wall-clock time:                       A note on threads.   (line  19)
* Warp:                                  Interpolation.       (line 255)
* Wassel, Caspar:                        Circles and the complex plane.
                                                              (line  16)
* WAT WCS distortion:                    World Coordinate System.
                                                              (line  36)
* Watershed algorithm:                   Segment.             (line  58)
* Watershed algorithm <1>:               Labeled datasets.    (line  97)
* Wavelength, rest-frame:                CosmicCalculator input options.
                                                              (line  47)
* WCS:                                   WCSLIB.              (line   6)
* WCS distortion:                        Keyword inspection and manipulation.
                                                              (line 545)
* WCS distortion <1>:                    Align pixels with WCS considering distortions.
                                                              (line   6)
* WCS distortion <2>:                    World Coordinate System.
                                                              (line  36)
* WCS distortion <3>:                    World Coordinate System.
                                                              (line 448)
* WCS distortion <4>:                    Interpolation.       (line 255)
* WCS Projections:                       Align pixels with WCS considering distortions.
                                                              (line 148)
* WCS: World Coordinate System:          Column arithmetic.   (line 148)
* WCSLIB:                                WCSLIB.              (line   6)
* WCSLIB <1>:                            Align pixels with WCS considering distortions.
                                                              (line  52)
* WCSLIB <2>:                            Linear warps to be called explicitly.
                                                              (line 156)
* WCSLIB thread safety:                  World Coordinate System.
                                                              (line  13)
* Web colors:                            Vector graphics colors.
                                                              (line   6)
* Wedge (radial profile):                Invoking astscript-radial-profile.
                                                              (line 256)
* Weight (in fitting):                   Fitting functions.   (line  77)
* Weight (in fitting) <1>:               Fitting functions.   (line 107)
* Weighted average:                      Convolve.            (line   6)
* Welsch function (robust weight):       Fitting options.     (line 139)
* WFC3:                                  Warp.                (line  53)
* White space character:                 Configuration file format.
                                                              (line  11)
* Whole-Sky USNO-B1.0 Catalog:           Available databases. (line 177)
* Wide Field Camera 3:                   Warp.                (line  53)
* Wide Field Camera 3 <1>:               Linear warping basics.
                                                              (line  51)
* William Thomson:                       Science and its tools.
                                                              (line 188)
* Window Subsystem for Linux:            New to GNU/Linux?.   (line  56)
* WISE All-Sky data Release:             Available databases. (line 177)
* World Coordinate System:               WCSLIB.              (line   6)
* World Coordinate System <1>:           Linear warps to be called explicitly.
                                                              (line 156)
* World Coordinate System (WCS):         Column arithmetic.   (line 148)
* World Coordinate System (WCS) <1>:     Dimensionality changing operators.
                                                              (line 200)
* World Coordinate System (WCS) <2>:     Surface brightness limit of image.
                                                              (line  88)
* Writing configuration files:           Configuration file format.
                                                              (line  33)
* Wrong output:                          Report a bug.        (line   6)
* Wrong results:                         Report a bug.        (line   6)
* xargs (extended arguments):            Separate shell variables for multiple outputs.
                                                              (line  61)
* XDF survey:                            General program usage tutorial.
                                                              (line  25)
* XDF survey <1>:                        Surface brightness limit of image.
                                                              (line  52)
* yum:                                   Dependencies from package managers.
                                                              (line  86)
* Zenithal/azimuthal equal area projection: Align pixels with WCS considering distortions.
                                                              (line 174)
* Zenithal/azimuthal equidistant projection: Align pixels with WCS considering distortions.
                                                              (line 170)
* Zenithal/azimuthal polynomial projection: Align pixels with WCS considering distortions.
                                                              (line 172)
* Zenithal/azimuthal projection:         Align pixels with WCS considering distortions.
                                                              (line 160)
* Zero point:                            Sufi simulates a detection.
                                                              (line 300)
* Zero point <1>:                        Zero point estimation.
                                                              (line   6)
* Zero point magnitude:                  Image surface brightness limit.
                                                              (line 108)
* Zero point magnitude <1>:              Brightness flux magnitude.
                                                              (line  65)
* Zsh shell:                             Separate shell variables for multiple outputs.
                                                              (line  85)
* zypper, OpenSUSE package manager:      Dependencies from package managers.
                                                              (line 178)

